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

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