پخش جریانها در قالبهای کانتینر زیر میتوانند مستقیماً توسط ExoPlayer پخش شوند. قالبهای نمونه صوتی و تصویری موجود نیز باید پشتیبانی شوند (برای جزئیات بیشتر به بخش قالبهای نمونه مراجعه کنید). برای پشتیبانی از قالب و فرمت تصویر، به بخش تصاویر مراجعه کنید.
| قالب کانتینر | پشتیبانی شده | نظرات |
|---|---|---|
| ام پی ۴ | بله | |
| M4A | بله | |
| افامپی۴ | بله | |
| وب ام | بله | |
| ماتروسکا | بله | |
| ام پی۳ | بله | برخی از جریانها فقط با استفاده از جستجوی بیتریت ثابت قابل جستجو هستند** |
| اوجی | بله | شامل Vorbis، Opus و FLAC |
| پنل های ال سی | بله | |
| MPEG-TS | بله | |
| MPEG-PS | بله | |
| اف ال وی | بله | قابل جستجو نیست* |
| ADTS (AAC) | بله | فقط با استفاده از جستجوی بیت ریت ثابت قابل جستجو است** |
| FLAC | بله | استفاده از کتابخانه FLAC یا استخراجکننده FLAC در کتابخانه ExoPlayer *** |
| عمرو | بله | فقط با استفاده از جستجوی بیت ریت ثابت قابل جستجو است** |
* جستجو پشتیبانی نمیشود زیرا کانتینر، فراداده (مثلاً یک اندیس نمونه) را ارائه نمیدهد تا به پخشکننده رسانه اجازه دهد جستجو را به روشی کارآمد انجام دهد. در صورت نیاز به جستجو، پیشنهاد میکنیم از قالب کانتینر مناسبتری استفاده کنید.
** این استخراجکنندهها دارای پرچمهای FLAG_ENABLE_CONSTANT_BITRATE_SEEKING برای فعال کردن جستجوی تقریبی با استفاده از فرض نرخ بیت ثابت هستند. این قابلیت به طور پیشفرض فعال نیست. سادهترین راه برای فعال کردن این قابلیت برای همه استخراجکنندههایی که از آن پشتیبانی میکنند، استفاده از DefaultExtractorsFactory.setConstantBitrateSeekingEnabled است، همانطور که در اینجا توضیح داده شده است.
*** استخراجکنندهی کتابخانهی FLAC ، صدای خام را خروجی میدهد که میتواند توسط فریمورک در تمام سطوح API مدیریت شود. استخراجکنندهی FLAC کتابخانهی ExoPlayer، فریمهای صوتی FLAC را خروجی میدهد و بنابراین به داشتن یک رمزگشای FLAC (مثلاً یک رمزگشای MediaCodec که FLAC را مدیریت میکند (از سطح API 27 مورد نیاز است) یا کتابخانهی FFmpeg با FLAC فعال) متکی است. اگر برنامه با کتابخانهی FLAC ساخته شده باشد، DefaultExtractorsFactory از استخراجکنندهی افزونه استفاده میکند. در غیر این صورت، از استخراجکنندهی کتابخانهی ExoPlayer استفاده میکند.
استفاده از MediaItem
برای پخش یک استریم پیشرونده، یک MediaItem با آدرس رسانه ایجاد کنید و آن را به پخشکننده منتقل کنید.
کاتلین
// 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 روشهای مختلفی را برای شما فراهم میکند تا تجربه پخش را با نیازهای برنامه خود تطبیق دهید. برای مثالها به صفحه شخصیسازی مراجعه کنید.