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

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

يستخدم المشغّل تلقائيًا علامة DefaultMediaSourceFactory التي يمكنها إنشاء مثيلات لعمليات تنفيذ MediaSource التالية للمحتوى:

يمكن لـ 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: توسيع مصدر الوسائط من خلال إمكانات إدراج الإعلانات من جهة الخادم يُرجى الرجوع إلى دليل إدراج الإعلانات لمزيد من التفاصيل.