ExoPlayer は、複数のコンテナ形式の DASH をサポートしています。メディア ストリームは
つまり、動画、音声、テキストはそれぞれ別の
DASH マニフェストの AdaptationSet
要素(CEA-608 は例外です)
下表の説明をご覧ください)。含まれている音声と動画のサンプル形式は、
も使用できます(詳しくは、
サンプル形式のセクションをご覧ください)。
機能 | サポート対象 | コメント |
---|---|---|
コンテナ | ||
FMP4 | はい | 分離ストリームのみ |
WebM | はい | 分離ストリームのみ |
マトロスカ | はい | 分離ストリームのみ |
MPEG-TS | いいえ | サポートの予定なし |
字幕 | ||
TTML | はい | 未加工、または ISO/IEC 14496-30 に従って FMP4 に埋め込み |
WebVTT | はい | 未加工、または ISO/IEC 14496-30 に従って FMP4 に埋め込み |
CEA-608 | はい | SCTE Accessibility 記述子を使用して通知された場合は FMP4 に埋め込みます |
CEA-708 | はい | SCTE Accessibility 記述子を使用して通知された場合は FMP4 に埋め込みます |
メタデータ | ||
EMSG メタデータ | はい | FMP4 に埋め込み |
コンテンツの保護 | ||
Widevine | はい | 「cenc」スキーム: API 19 以降「cbcs」スキーム: API 25 以降 |
PlayReady SL2000 | はい | Android TV、「cenc」スキームのみ |
ClearKey | はい | API 21 以降、「cenc」スキームのみ |
ライブ再生 | ||
通常のライブ再生 | はい | |
超低レイテンシの CMAF ライブ再生 | はい | |
Common Media Client Data(CMCD) | はい | 統合ガイド |
MediaItem の使用
DASH ストリームを再生するには、DASH モジュールに依存する必要があります。
Kotlin
implementation("androidx.media3:media3-exoplayer-dash:1.4.1")
Groovy
implementation "androidx.media3:media3-exoplayer-dash:1.4.1"
次に、DASH MPD URI の MediaItem
を作成してプレーヤーに渡すことができます。
Kotlin
// 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()
Java
// 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();
URI が .mpd
で終わっていない場合は、MimeTypes.APPLICATION_MPD
を渡すことができます。
変数の型を明示的に示す、MediaItem.Builder
の setMimeType
に
説明します。
ExoPlayer は、 帯域幅とデバイス機能の両方を考慮に入れます。
DashMediaSource を使用する
その他のカスタマイズ オプションが必要な場合は、DashMediaSource
を作成してこれを
MediaItem
ではなくプレーヤーに直接渡すだけです。
Kotlin
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()
Java
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
にキャストする必要があります。「
Player.Listener
の onTimelineChanged
コールバックは、
マニフェストが読み込まれます。これはオンデマンド コンテンツで 1 回行われます。また、
ライブコンテンツの場合は
何度も繰り返すことになるでしょう次のコード スニペットは、
マニフェストが読み込まれたときになんらかの処理を行うことができます。
Kotlin
player.addListener( object : Player.Listener { override fun onTimelineChanged(timeline: Timeline, @TimelineChangeReason reason: Int) { val manifest = player.currentManifest if (manifest is DashManifest) { // Do something with the manifest. } } } )
Java
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 は、ユーザーの視聴環境に合わせて再生エクスペリエンスを調整するための複数の方法を提供しています。 提供します。例については、カスタマイズのページをご覧ください。