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