متدرّج

يمكن تشغيل الفيديوهات المتوفرة بتنسيقات الحاويات التالية مباشرةً باستخدام ExoPlayer. يجب أن تكون تنسيقات عيّنات الصوت والفيديو المضمّنة متوافقة أيضًا (راجِع قسم تنسيقات العيّنات للحصول على التفاصيل). للاطّلاع على المعلومات حول توافق حاويات الصور وتنسيقاتها، يُرجى مراجعة مقالة الصور.

تنسيق الحاوية متاح التعليقات
MP4 نعم
M4A نعم
FMP4 نعم
WebM نعم
Matroska نعم
MP3 نعم لا يمكن البحث في بعض مصادر البيانات إلا باستخدام البحث بمعدل نقل بيانات ثابت**
Ogg نعم يحتوي على Vorbis وOpus وFLAC
WAV نعم
MPEG-TS نعم
MPEG-PS نعم
FLV نعم غير قابل للتقديم أو الترجيع*
ADTS (AAC) نعم يمكن البحث فيها فقط باستخدام معدّل نقل بيانات ثابت**
FLAC نعم استخدام مكتبة FLAC أو أداة استخراج FLAC في مكتبة ExoPlayer***
AMR نعم يمكن البحث فيها فقط باستخدام معدّل نقل بيانات ثابت**

* لا تتوفّر إمكانية البحث لأنّ الحاوية لا توفّر بيانات وصفية (مثل فهرس العيّنات) تتيح لمشغّل الوسائط إجراء عملية بحث بكفاءة. إذا كان البحث مطلوبًا، ننصحك باستخدام تنسيق حاوية أكثر ملاءمة.

** تحتوي أدوات الاستخراج هذه على علامات FLAG_ENABLE_CONSTANT_BITRATE_SEEKING لإتاحة البحث التقريبي باستخدام افتراض معدّل نقل بيانات ثابت. لا تكون هذه الوظيفة مفعّلة تلقائيًا. أبسط طريقة لتفعيل هذه الوظيفة لجميع أدوات الاستخراج التي تتوافق معها هي استخدام DefaultExtractorsFactory.setConstantBitrateSeekingEnabled، كما هو موضّح هنا.

*** يُخرج مستخرِج مكتبة FLAC الصوت الخام الذي يمكن إدارته من خلال إطار العمل على جميع مستويات واجهة برمجة التطبيقات. يُخرج برنامج استخراج FLAC في مكتبة ExoPlayer إطارات صوت FLAC، وبالتالي يعتمد على توفّر برنامج ترميز FLAC (على سبيل المثال، MediaCodec برنامج ترميز يتعامل مع FLAC (مطلوب بدءًا من المستوى 27 من واجهة برمجة التطبيقات)، أو مكتبة FFmpeg مع تفعيل FLAC). تستخدم DefaultExtractorsFactory أداة استخراج الإضافات إذا تم إنشاء التطبيق باستخدام مكتبة FLAC. بخلاف ذلك، تستخدم أداة الاستخراج لمكتبة ExoPlayer.

استخدام MediaItem

لتشغيل بث متقدّم، أنشئ MediaItem باستخدام معرّف الموارد الموحّد الخاص بالوسائط ومرِّره إلى المشغّل.

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 طرقًا متعدّدة لتخصيص تجربة التشغيل بما يتناسب مع احتياجات تطبيقك. يمكنك الاطّلاع على صفحة التخصيص للحصول على أمثلة.