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