DASH

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.0")

Groovy

implementation "androidx.media3:media3-exoplayer-dash:1.4.0"

次に、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.BuildersetMimeType に 説明します。

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.ListeneronTimelineChanged コールバックは、 マニフェストが読み込まれます。これはオンデマンド コンテンツで 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 は、ユーザーの視聴環境に合わせて再生エクスペリエンスを調整するための複数の方法を提供しています。 提供します。例については、カスタマイズのページをご覧ください。