ExoPlayer از DASH با چندین قالب محتوی پشتیبانی میکند. جاریسازیهای رسانه باید
تفکیک شوند، یعنی ویدیو، صدا، و نوشتار باید در عناصر متمایز
AdaptationSet در مانیفست DASH تعریف شوند (CEA-608 استثنا است، همانطور که در جدول زیر توضیح داده شده است). قالبهای نمونه صوتی و ویدیویی موجود نیز باید پشتیبانی شوند (برای جزئیات، به بخش قالبهای نمونه مراجعه کنید).
| ویژگی | پشتیبانی میشود | نظرات |
|---|---|---|
| محتویها | ||
| FMP4 | بله | فقط جاریسازیهای تفکیکشده |
| WebM | بله | فقط جاریسازیهای تفکیکشده |
| Matroska | بله | فقط جاریسازیهای تفکیکشده |
| MPEG-TS | نه | پشتیبانی برنامهریزی نشده است |
| زیرنویس ناشنوایان / زیرنویس | ||
| TTML | بله | خام یا جاسازیشده در FMP4 طبق ISO/IEC 14496-30 |
| WebVTT | بله | خام یا جاسازیشده در FMP4 طبق ISO/IEC 14496-30 |
| CEA-608 | بله | وقتی بااستفاده از توصیفگرهای دسترسپذیری SCTE علامتگذاری میشود، در FMP4 جاسازی میشود |
| CEA-708 | بله | وقتی بااستفاده از توصیفگرهای دسترسپذیری SCTE علامتگذاری میشود، در FMP4 جاسازی میشود |
| فراداده | ||
| فراداده EMSG | بله | جاسازیشده در FMP4 |
| حفاظت از محتوا | ||
| Widevine | بله | طرح «cenc»: API 19+؛ طرح «cbcs»: API 25+ |
| PlayReady SL2000 | بله | Android TV، فقط طرح «cenc» |
| ClearKey | بله | میانای برنامهسازی کاربردی ۲۱ بهبالا، فقط طرح «cenc» |
| درج آگهی | ||
| بازپخش چند دورهای | بله | |
| جایگذاری آگهی با هدایت سرور (پیوندهای متقابل) | نه | |
| آگهیهای سمت سرور و سمت مشتری IMA | بله | راهنمای درج آگهی |
| بازپخش زنده | ||
| بازپخش زنده معمولی | بله | |
| پخش زنده CMAF با تأخیر بسیار کم | بله | |
| دادههای مشترک مشتری رسانه (CMCD) | بله | راهنمای یکپارچهسازی CMCD |
درحال استفاده از MediaItem
برای پخش یک جاریسازی DASH، باید به واحد DASH وابسته باشید.
کاتلین
implementation("androidx.media3:media3-exoplayer-dash:1.11.1")
شیک
implementation "androidx.media3:media3-exoplayer-dash:1.11.1"
سپس میتوانید یک MediaItem برای یک نشانی وب DASH MPD ایجاد کنید و آن را به پخشکننده منتقل کنید.
کاتلین
// Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(dashUri)) // 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(dashUri)); // Prepare the player. player.prepare();
اگر شناسه منبع یکنواخت شما با .mpd تمام نمیشود، میتوانید MimeTypes.APPLICATION_MPD
را به setMimeType از MediaItem.Builder منتقل کنید تا نوع محتوا را بهطور صریح مشخص کنید.
ExoPlayer بهطور خودکار بین نمایشهای تعریفشده در مانیفست تطبیق میدهد و هم پهنای باند دردسترس و هم قابلیتهای دستگاه را درنظر میگیرد.
استفاده از DashMediaSource
برای گزینههای سفارشیسازی بیشتر، میتوانید DashMediaSource ایجاد کنید و آن را
بهجای MediaItem مستقیماً به پخشکننده ارسال کنید.
کاتلین
val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory() // Create a dash media source pointing to a dash manifest uri. val mediaSource: MediaSource = DashMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(dashUri)) // Create a player instance which gets an adaptive track selector by default. val player = ExoPlayer.Builder(context).build() // Set the media source to be played. player.setMediaSource(mediaSource) // Prepare the player. player.prepare()
جاوا
DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory(); // Create a dash media source pointing to a dash manifest uri. MediaSource mediaSource = new DashMediaSource.Factory(dataSourceFactory) .createMediaSource(MediaItem.fromUri(dashUri)); // Create a player instance which gets an adaptive track selector by default. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media source to be played. player.setMediaSource(mediaSource); // Prepare the player. player.prepare();
دسترسی به مانیفست
میتوانید مانیفست کنونی را با فراخوانی Player.getCurrentManifest بازیابی کنید.
برای DASH باید شیء برگشتی را به DashManifest تبدیل کنید. هرگاه مانیفست بارگیری شود،
onTimelineChanged برگشتی Player.Listener نیز فراخوانی میشود. این کار یکبار برای محتوای درخواستی و
احتمالاً چندین بار برای محتوای زنده انجام میشود. تکهکد زیر نشان میدهد که چگونه یک برنامه میتواند هر زمان که مانیفست بارگیری میشود کاری انجام دهد.
کاتلین
player.addListener( object : Player.Listener { override fun onTimelineChanged( timeline: Timeline, @Player.TimelineChangeReason reason: Int, ) { val manifest = player.currentManifest if (manifest is DashManifest) { // Do something with the manifest. } } } )
جاوا
player.addListener( new Player.Listener() { @Override public void onTimelineChanged( Timeline timeline, @Player.TimelineChangeReason int reason) { Object manifest = player.getCurrentManifest(); if (manifest != null) { DashManifest dashManifest = (DashManifest) manifest; // Do something with the manifest. } } });
سفارشیسازی بازپخش
ExoPlayer روشهای متعددی برای سفارشیسازی تجربه بازپخش براساس نیازهای برنامه شما ارائه میدهد. برای نمونهها، صفحه سفارشیسازی را ببینید.