منابع رسانه

در ExoPlayer، هر قطعه رسانه با یک MediaItem نشان داده می‌شود. اما به‌طور داخلی، پخش‌کننده برای پخش محتوا به MediaSource نمونه نیاز دارد. پخش‌کننده این موارد را از فایل‌های رسانه‌ای بااستفاده از MediaSource.Factory ایجاد می‌کند.

به‌طور پیش‌فرض، پخش‌کننده از DefaultMediaSourceFactory استفاده می‌کند که می‌تواند نمونه‌هایی از پیاده‌سازی‌های محتوای MediaSource زیر را ایجاد کند:

DefaultMediaSourceFactory همچنین می‌تواند منابع رسانه‌ای پیچیده‌تری ایجاد کند که به ویژگی‌های فایل‌های رسانه‌ای مربوطه بستگی دارد. این موضوع با جزئیات بیشتر در صفحه موارد رسانه‌ای شرح داده شده است.

برای برنامه‌هایی که به راه‌اندازی منبع رسانه نیاز دارند و پیکربندی پیش‌فرض پخش‌کننده از آن‌ها پشتیبانی نمی‌کند، چندین گزینه برای سفارشی‌سازی وجود دارد.

درحال سفارشی‌سازی ایجاد منبع رسانه

هنگام ساختن پخش‌کننده، می‌توان MediaSource.Factory را تزریق کرد. برای مثال، اگر برنامه‌ای بخواهد آگهی درج کند و از CacheDataSource.Factory برای پشتیبانی از ذخیره‌سازی موقت استفاده کند، می‌توان نمونه‌ای از DefaultMediaSourceFactory را برای مطابقت با این الزامات پیکربندی کرد و درطول ساخت پخش‌کننده تزریق کرد:

کاتلین

val mediaSourceFactory: MediaSource.Factory =
  DefaultMediaSourceFactory(context)
    .setDataSourceFactory(cacheDataSourceFactory)
    .setLocalAdInsertionComponents(adsLoaderProvider, playerView)
val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()

جاوا

MediaSource.Factory mediaSourceFactory =
    new DefaultMediaSourceFactory(context)
        .setDataSourceFactory(cacheDataSourceFactory)
        .setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView);
ExoPlayer player =
    new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();

DefaultMediaSourceFactory JavaDoc گزینه‌های دردسترس را با جزئیات بیشتری شرح می‌دهد.

همچنین می‌توان یک پیاده‌سازی سفارشی MediaSource.Factory را تزریق کرد، برای مثال برای پشتیبانی از ایجاد یک نوع منبع رسانه سفارشی. ‫createMediaSource(MediaItem) کارخانه برای ایجاد منبع رسانه برای هر فایل رسانه‌ای که به فهرست پخش اضافه می‌شود فراخوانده خواهد شد.

میانای برنامه‌سازی کاربردی فهرست پخش مبتنی بر منبع رسانه

رابط ExoPlayer روش‌های فهرست پخش اضافی را تعریف می‌کند که منابع رسانه را به‌جای موارد رسانه می‌پذیرند. این کار باعث می‌شود بتوانید MediaSource.Factory داخلی پخش‌کننده را دور بزنید و نمونه‌های منبع رسانه را مستقیماً به پخش‌کننده ارسال کنید:

کاتلین

// Set a list of media sources as initial playlist.
exoPlayer.setMediaSources(listOfMediaSources)
// Add a single media source.
exoPlayer.addMediaSource(anotherMediaSource)

// Can be combined with the media item API.
exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri))

exoPlayer.prepare()
exoPlayer.play()

جاوا

// Set a list of media sources as initial playlist.
exoPlayer.setMediaSources(listOfMediaSources);
// Add a single media source.
exoPlayer.addMediaSource(anotherMediaSource);

// Can be combined with the media item API.
exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri));

exoPlayer.prepare();
exoPlayer.play();

ترکیب‌بندی پیشرفته منبع رسانه

ExoPlayer چندین پیاده‌سازی MediaSource را برای اصلاح و ترکیب سایر نمونه‌های MediaSource ارائه می‌دهد. این‌ها در مواردی که چندین سفارشی‌سازی باید ترکیب شوند و هیچ‌کدام از مسیرهای راه‌اندازی ساده‌تر کافی نیستند، بسیار مفید هستند.

  • ‫ClippingMediaSource: امکان برش دادن رسانه به محدوده مُهر زمان مشخص‌شده را فراهم می‌کند. اگر این تنها اصلاحیه است، بهتر است درعوض از MediaItem.ClippingConfiguration استفاده کنید.
  • FilteringMediaSource: قطعه‌های دردسترس را براساس انواع مشخص‌شده فیلتر می‌کند، برای مثال، فقط قطعه ویدیویی را از فایلی که هم صدا و هم ویدیو دارد نمایش می‌دهد. اگر این تنها اصلاح است، بهتر است درعوض از پارامترهای انتخاب قطعه استفاده کنید.
  • ‫MergingMediaSource: چندین منبع رسانه را برای پخش موازی ادغام می‌کند. در تقریباً همه موارد، توصیه می‌شود سازنده را با adjustPeriodTimeOffsets و clipDurations تنظیم‌شده روی true فراخوانی کنید تا مطمئن شوید همه منابع هم‌زمان شروع و پایان می‌یابند. اگر این اصلاح برای افزودن زیرنویس‌های جانبی انجام شده است، بهتر است به‌جای آن از MediaItem.SubtitleConfiguration استفاده کنید.
  • ConcatenatingMediaSource2: چندین منبع رسانه را برای پخش متوالی ادغام می‌کند. ساختار رسانه قابل‌مشاهده برای کاربر یک Timeline.Window را نشان می‌دهد، یعنی شبیه یک مورد واحد به‌نظر می‌رسد. اگر این اصلاح برای پخش چند مورد انجام شده است که قرار نیست شبیه یک مورد به‌نظر برسند، بهتر است به‌جای آن از روش‌های میانای برنامه‌سازی کاربردی فهرست پخش مانند Player.addMediaItem استفاده شود.
  • SilenceMediaSource: برای مدت مشخصی سکوت ایجاد می‌کند که برای پر کردن فاصله‌ها مفید است.
  • ‫AdsMediaSource: منبع رسانه را با قابلیت‌های درج آگهی سمت کارخواه گسترش می‌دهد. برای جزئیات، به راهنمای درج آگهی مراجعه کنید.
  • ServerSideAdInsertionMediaSource: منبع رسانه را با قابلیت‌های درج آگهی سمت سرور گسترش می‌دهد. برای جزئیات، به راهنمای درج آگهی مراجعه کنید.