ترقی خواه
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
استریمها در قالبهای کانتینر زیر میتوانند مستقیماً توسط 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 صدای خام را خروجی میدهد که میتواند توسط چارچوب در تمام سطوح API کنترل شود. استخراج کننده FLAC کتابخانه ExoPlayer فریم های صوتی FLAC را خروجی می دهد و بنابراین به داشتن یک رمزگشا FLAC متکی است (به عنوان مثال، رمزگشای MediaCodec
که FLAC را کنترل می کند (مورد نیاز سطح API 27) یا کتابخانه FFmpeg با FLAC فعال است. اگر برنامه با کتابخانه FLAC ساخته شده باشد، DefaultExtractorsFactory
از استخراج کننده افزونه استفاده می کند. در غیر این صورت، از استخراج کننده کتابخانه ExoPlayer استفاده می کند.
برای پخش یک جریان پیشرونده، یک MediaItem
با URI رسانه ایجاد کنید و آن را به پخش کننده ارسال کنید.
کاتلین
// 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()
جاوا
// 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
مستقیماً به پخشکننده ارسال کنید.
کاتلین
// 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()
جاوا
// 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 راه های متعددی را برای شما فراهم می کند تا تجربه پخش را مطابق با نیازهای برنامه خود تنظیم کنید. برای نمونه به صفحه سفارشی سازی مراجعه کنید.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],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."]]