مصادر الوسائط

في ExoPlayer، يتم تمثيل كل جزء من الوسائط من خلال MediaItem. ومع ذلك، يحتاج المشغّل داخليًا إلى مثيلات MediaSource لتشغيل المحتوى. ينشئ المشغّل هذه العناصر من ملفات الوسائط باستخدام MediaSource.Factory.

By default the player uses a DefaultMediaSourceFactory, which can create instances of the following content MediaSource implementations:

يمكن أن ينشئ DefaultMediaSourceFactory أيضًا مصادر وسائط أكثر تعقيدًا استنادًا إلى خصائص ملفات الوسائط المقابلة. يمكنك الاطّلاع على مزيد من التفاصيل في صفحة ملفات الوسائط.

بالنسبة إلى التطبيقات التي تحتاج إلى إعدادات لمصادر الوسائط لا يتيحها الإعداد التلقائي للمشغّل، تتوفّر عدة خيارات للتخصيص.

تخصيص عملية إنشاء مصدر الوسائط

عند إنشاء المشغّل، يمكن إدخال MediaSource.Factory. على سبيل المثال، إذا أراد تطبيق إدراج إعلانات واستخدام CacheDataSource.Factory لإتاحة التخزين المؤقت، يمكن ضبط مثيل DefaultMediaSourceFactory ليتوافق مع هذه المتطلبات ويتم حقنه أثناء إنشاء المشغّل:

Kotlin

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

Java

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 الداخلي للمشغّل وتمرير نُسخ مصدر الوسائط إلى المشغّل مباشرةً:

Kotlin

// 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()

Java

// 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 واحدًا، ما يعني أنّها تبدو كعنصر واحد. إذا تم إجراء هذا التعديل لتشغيل عناصر متعددة لا يُفترض أن تبدو كعنصر واحد، من الأفضل استخدام طرق playlist API مثل Player.addMediaItem بدلاً من ذلك.
  • ‫SilenceMediaSource: تتيح هذه الأداة إنشاء مقطع صامت لمدة محدّدة، وهو أمر مفيد لملء الفراغات.
  • ‫AdsMediaSource: تتيح هذه الواجهة توسيع مصدر وسائط باستخدام إمكانات إدراج الإعلانات من جهة العميل. يُرجى الرجوع إلى دليل إدراج الإعلانات للاطّلاع على التفاصيل.
  • ‫ServerSideAdInsertionMediaSource: يوسّع مصدر وسائط باستخدام إمكانات إدراج الإعلانات من جهة الخادم. يُرجى الرجوع إلى دليل إدراج الإعلانات للاطّلاع على التفاصيل.