منابع رسانه ای

در 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) کارخانه برای ایجاد یک منبع رسانه برای هر آیتم رسانه ای که به لیست پخش اضافه می شود فراخوانی می شود.

API فهرست پخش مبتنی بر منبع رسانه

رابط 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 را نشان می دهد، به این معنی که شبیه یک آیتم واحد است. اگر این اصلاح برای پخش چندین آیتم انجام می شود که قرار نیست یک آیتم واحد به نظر برسند، ترجیحاً از روش های API لیست پخش مانند Player.addMediaItem استفاده کنید.
  • SilenceMediaSource : سکوت را برای مدت زمان مشخصی ایجاد می کند که برای پر کردن شکاف ها مفید است.
  • AdsMediaSource : یک منبع رسانه را با قابلیت درج آگهی در سمت مشتری گسترش می دهد. برای جزئیات بیشتر به راهنمای درج آگهی مراجعه کنید.
  • ServerSideAdInsertionMediaSource : یک منبع رسانه را با قابلیت درج آگهی سمت سرور گسترش می دهد. برای جزئیات بیشتر به راهنمای درج آگهی مراجعه کنید.