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