منابع رسانه

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