في ExoPlayer، يتم تمثيل كل قطعة وسائط برمز MediaItem
. ومع ذلك، يحتاج المشغّل إلى MediaSource
مثيل داخليًا لتشغيل المحتوى. ينشئ
المشغّل هذه العناصر من عناصر الوسائط باستخدام MediaSource.Factory
.
بشكل تلقائي، يستخدم المشغّل السمة DefaultMediaSourceFactory
التي يمكنها إنشاء مثيلات لعمليات تنفيذ MediaSource
للمحتوى التالي:
DashMediaSource
لـ DASH.-
SsMediaSource
لميزة SmoothStreaming -
HlsMediaSource
لبروتوكول HLS -
ProgressiveMediaSource
لـ ملفات الوسائط العادية -
RtspMediaSource
لبروتوكول RTSP
بإمكان 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
: توسيع نطاق مصدر الوسائط من خلال إمكانات إدراج الإعلانات من جانب الخادم يُرجى الرجوع إلى دليل إدراج الإعلانات للاطّلاع على التفاصيل.