متدرّج
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
يمكن تشغيل مجموعات البث بتنسيقات الحاويات التالية مباشرةً من خلال ExoPlayer.
يجب أيضًا دعم تنسيقات نماذج الصوت والفيديو التي تحتوي عليها (راجع
نماذج التنسيقات للاطّلاع على التفاصيل).
للحصول على دعم حاوية الصور وتنسيقاتها، يُرجى الاطّلاع على:
الصور:
تنسيق الحاوية |
معلومات معتمَدة |
التعليقات |
MP4 |
نعم |
|
التصميم M4A |
نعم |
|
FMP4 |
نعم |
|
WebM |
نعم |
|
ماتروسكا |
نعم |
|
MP3 |
نعم |
في بعض أحداث البث التي يمكن البحث عنها فقط باستخدام وضع التقديم/الترجيع بمعدل نقل بيانات ثابت** |
بيضة |
نعم |
تحتوي القائمة على 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
باستخدام معرّف الموارد المنتظم (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
تمريره مباشرةً إلى المشغّل بدلاً من تمرير 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 العديد من الطرق لتخصيص تجربة التشغيل بما يتناسب مع
واحتياجاته. راجِع صفحة التخصيص للحصول على أمثلة.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[null,null,["تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Progressive\n\nStreams in the following container formats can be played directly by ExoPlayer.\nThe contained audio and video sample formats must also be supported (see the\n[Sample formats](/media/media3/exoplayer/supported-formats#sample-formats) section for details).\nFor image container and format support, see\n[Images](/media/media3/exoplayer/images).\n\n| Container format | Supported | Comments |\n|------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| MP4 | YES | |\n| M4A | YES | |\n| FMP4 | YES | |\n| WebM | YES | |\n| Matroska | YES | |\n| MP3 | YES | Some streams only seekable using constant bitrate seeking\\*\\* |\n| Ogg | YES | Containing Vorbis, Opus and FLAC |\n| WAV | YES | |\n| MPEG-TS | YES | |\n| MPEG-PS | YES | |\n| FLV | YES | Not seekable\\* |\n| ADTS (AAC) | YES | Only seekable using constant bitrate seeking\\*\\* |\n| FLAC | YES | Using the [FLAC library](https://github.com/androidx/media/tree/release/libraries/decoder_flac) or the FLAC extractor in the [ExoPlayer library](https://github.com/androidx/media/tree/release/libraries/exoplayer)\\*\\*\\* |\n| AMR | YES | Only seekable using constant bitrate seeking\\*\\* |\n\n\\* Seeking is unsupported because the container does not provide metadata (for example,\na sample index) to allow a media player to perform a seek in an efficient way.\nIf seeking is required, we suggest using a more appropriate container format.\n\n\\*\\* These extractors have `FLAG_ENABLE_CONSTANT_BITRATE_SEEKING` flags for\nenabling approximate seeking using a constant bitrate assumption. This\nfunctionality is not enabled by default. The simplest way to enable this\nfunctionality for all extractors that support it is to use\n`DefaultExtractorsFactory.setConstantBitrateSeekingEnabled`, as described\n[here](/media/media3/exoplayer/customization#enabling-constant-bitrate-seeking).\n\n\\*\\*\\* The [FLAC library](https://github.com/androidx/media/tree/release/libraries/decoder_flac) extractor outputs raw audio, which can be handled\nby the framework on all API levels. The [ExoPlayer library](https://github.com/androidx/media/tree/release/libraries/exoplayer) FLAC extractor outputs\nFLAC audio frames and so relies on having a FLAC decoder (for example, a `MediaCodec`\ndecoder that handles FLAC (required from API level 27), or the\n[FFmpeg library](https://github.com/androidx/media/tree/release/libraries/decoder_ffmpeg) with FLAC enabled). The `DefaultExtractorsFactory` uses the\nextension extractor if the application was built with the [FLAC library](https://github.com/androidx/media/tree/release/libraries/decoder_flac).\nOtherwise, it uses the [ExoPlayer library](https://github.com/androidx/media/tree/release/libraries/exoplayer) extractor.\n\nUsing MediaItem\n---------------\n\nTo play a progressive stream, create a `MediaItem` with the media URI and pass\nit to the player. \n\n### Kotlin\n\n```kotlin\n// Create a player instance.\nval player = ExoPlayer.Builder(context).build()\n// Set the media item to be played.\nplayer.setMediaItem(MediaItem.fromUri(progressiveUri))\n// Prepare the player.\nplayer.prepare()\n```\n\n### Java\n\n```java\n// Create a player instance.\nExoPlayer player = new ExoPlayer.Builder(context).build();\n// Set the media item to be played.\nplayer.setMediaItem(MediaItem.fromUri(progressiveUri));\n// Prepare the player.\nplayer.prepare();\n```\n\n\u003cbr /\u003e\n\nUsing ProgressiveMediaSource\n----------------------------\n\nFor more customization options, you can create a `ProgressiveMediaSource` and\npass it directly to the player instead of a `MediaItem`. \n\n### Kotlin\n\n```kotlin\n// Create a data source factory.\nval dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()\n// Create a progressive media source pointing to a stream uri.\nval mediaSource: MediaSource =\nProgressiveMediaSource.Factory(dataSourceFactory)\n .createMediaSource(MediaItem.fromUri(progressiveUri))\n// Create a player instance.\nval player = ExoPlayer.Builder(context).build()\n// Set the media source to be played.\nplayer.setMediaSource(mediaSource)\n// Prepare the player.\nplayer.prepare()\n```\n\n### Java\n\n```java\n// Create a data source factory.\nDataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory();\n// Create a progressive media source pointing to a stream uri.\nMediaSource mediaSource =\n new ProgressiveMediaSource.Factory(dataSourceFactory)\n .createMediaSource(MediaItem.fromUri(progressiveUri));\n// Create a player instance.\nExoPlayer player = new ExoPlayer.Builder(context).build();\n// Set the media source to be played.\nplayer.setMediaSource(mediaSource);\n// Prepare the player.\nplayer.prepare();\n```\n\n\u003cbr /\u003e\n\nCustomizing playback\n--------------------\n\nExoPlayer provides multiple ways for you to tailor playback experience to your\napp's needs. See the [Customization page](/guide/topics/media/exoplayer/customization) for examples."]]