يمكن لـ ExoPlayer تشغيل أحداث البث بتنسيقات الحاويات التالية مباشرةً. يجب أيضًا أن تكون تنسيقات الصوت والفيديو المضمّنة فيه متوافقة (راجِع قسم نماذج التنسيقات للاطّلاع على التفاصيل).
تنسيق الحاوية | معلومات معتمَدة | التعليقات |
---|---|---|
MP4 | نعم | |
M4A | نعم | |
FMP4 | نعم | |
WebM | نعم | |
ماتروسكا | نعم | |
MP3 | نعم | في بعض أحداث البث، يمكن فقط البحث عنها باستخدام وضع التقديم/الترجيع بمعدل نقل بيانات ثابت** |
شكل بيضاوي | نعم | تحتوي على فيديوهات Vorbis وOpus وFLAC. |
تنسيق WAV | نعم | |
تنسيق MPEG-TS | نعم | |
تنسيق MPEG-PS | نعم | |
FLV | نعم | لا يمكن تقديم الطلب* |
ADTS (AAC) | نعم | يمكن التقديم فقط باستخدام تقديم معدل نقل بيانات ثابت** |
FLAC | نعم | استخدام مكتبة FLAC أو أداة استخراج ملفات FLAC في مكتبة ExoPlayer*** |
AMR | نعم | يمكن التقديم فقط باستخدام تقديم معدل نقل بيانات ثابت** |
صورة حيّة بتنسيق JPEG | نعم | يتم استخراج محتوى MP4 فقط. |
* ميزة التقديم/الترجيع غير متاحة لأنّ الحاوية لا توفّر بيانات وصفية (مثل نموذج فهرس) للسماح لمشغِّل الوسائط بتنفيذ عملية البحث بطريقة فعّالة. إذا كان التقديم/الترجيع مطلوبًا، نقترح استخدام تنسيق حاوية أكثر ملاءمة.
** تتضمّن أدوات الاستخراج هذه FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
علامة لتفعيل وضع التقديم/الترجيع بشكل تقريبي باستخدام افتراض معدّل نقل بيانات ثابت. ولا تكون هذه الوظيفة مفعّلة تلقائيًا. إنّ أبسط طريقة لتفعيل هذه
الوظيفة لجميع أدوات استخراج البيانات التي تتوافق معها هي استخدام
DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
، على النحو الموضَّح
هنا.
*** تُخرج أداة استخراج مكتبة FLAC صوتًا غير معدَّل يمكن التعامل معه من خلال إطار العمل على جميع مستويات واجهة برمجة التطبيقات. باستخدام أداة استخراج ملفات FLAC في مكتبة ExoPlayer، يتم إخراج إطارات ملفات FLAC الصوتية، وبالتالي يعتمد توفُّر برنامج فك ترميز FLAC (على سبيل المثال، برنامج فك الترميز MediaCodec
الذي يتعامل مع FLAC (مطلوب من المستوى 27 من واجهة برمجة التطبيقات)، أو مكتبة FFmpeg مع تفعيل FLAC). تستخدِم DefaultExtractorsFactory
أداة استخراج الإضافة إذا تم إنشاء التطبيق باستخدام مكتبة FLAC.
وبخلاف ذلك، فإنه يستخدم أداة استخراج ExoPlayer.
استخدام MediaItem
لتشغيل بث متتابع، أنشِئ MediaItem
باستخدام معرّف الموارد المنتظم (URI) للوسائط، واضبطه إلى المشغّل.
Kotlin
// Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(progressiveUri)) // Prepare the player. player.prepare()
Java
// Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(progressiveUri)); // Prepare the player. player.prepare();
استخدام ProgressiveMediaSource
لمزيد من خيارات التخصيص، يمكنك إنشاء ProgressiveMediaSource
وتوجيهها مباشرةً إلى المشغّل بدلاً من MediaItem
.
Kotlin
// Create a data source factory. val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory() // Create a progressive media source pointing to a stream uri. val mediaSource: MediaSource = ProgressiveMediaSource.Factory(dataSourceFactory) .createMediaSource(MediaItem.fromUri(progressiveUri)) // Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media source to be played. player.setMediaSource(mediaSource) // Prepare the player. player.prepare()
Java
// Create a data source factory. DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory(); // Create a progressive media source pointing to a stream uri. MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory) .createMediaSource(MediaItem.fromUri(progressiveUri)); // Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media source to be played. player.setMediaSource(mediaSource); // Prepare the player. player.prepare();
تخصيص التشغيل
يوفّر لك ExoPlayer طرقًا متعددة لتخصيص تجربة التشغيل وفقًا لاحتياجات تطبيقك. يمكنك الاطّلاع على صفحة التخصيص للحصول على أمثلة.