استریمها در قالبهای کانتینر زیر میتوانند مستقیماً توسط 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
برای پخش یک جریان پیشرونده، یک 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
برای گزینههای سفارشیسازی بیشتر، میتوانید یک 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 راه های متعددی را برای شما فراهم می کند تا تجربه پخش را مطابق با نیازهای برنامه خود تنظیم کنید. برای نمونه به صفحه سفارشی سازی مراجعه کنید.