スムーズなストリーミング

ExoPlayer は、FMP4 コンテナ形式で SmoothStreaming をサポートしています。メディア ストリーム 分離する必要があります。つまり、動画、音声、テキストはそれぞれ異なる SmoothStreaming マニフェストの StreamIndex 要素含まれる音声と 動画のサンプル形式もサポートしている必要があります( サンプル形式のセクションをご覧ください)。

機能 サポート対象 コメント
コンテナ
FMP4 はい 分離ストリームのみ
字幕
TTML はい FMP4 に埋め込み
コンテンツの保護
PlayReady SL2000 はい Android TV のみ
ライブ再生
通常のライブ再生 はい
Common Media Client Data(CMCD) はい 統合ガイド

MediaItem の使用

SmoothStreaming ストリームを再生するには、SmoothStreaming 説明します。

Kotlin

implementation("androidx.media3:media3-exoplayer-smoothstreaming:1.4.0")

Groovy

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

次に、SmoothStreaming マニフェスト URI の MediaItem を作成して、 渡します。

Kotlin

// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(ssUri))
// 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(ssUri));
// Prepare the player.
player.prepare();

URI が .ism/Manifest で終わらない場合は、次を渡します。 MimeTypes.APPLICATION_SS から setMimeTypeMediaItem.Builder を変換し、 コンテンツのタイプを指定します。

ExoPlayer は、 帯域幅とデバイス機能の両方を考慮に入れます。

SsMediaSource を使用する

その他のカスタマイズ オプションが必要な場合は、SsMediaSource を作成してこれを MediaItem ではなくプレーヤーに直接渡すだけです。

Kotlin

// Create a data source factory.
val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()
// Create a SmoothStreaming media source pointing to a manifest uri.
val mediaSource: MediaSource =
  SsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(ssUri))
// 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()

Java

// Create a data source factory.
DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory();
// Create a SmoothStreaming media source pointing to a manifest uri.
MediaSource mediaSource =
    new SsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(ssUri));
// 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();

マニフェストへのアクセス

現在のマニフェストを取得するには、Player.getCurrentManifest を呼び出します。 SmoothStreaming では、返されたオブジェクトを SsManifest にキャストする必要があります。「 Player.ListeneronTimelineChanged コールバックは、 マニフェストが読み込まれます。これはオンデマンド コンテンツと ライブコンテンツの場合は 何度も繰り返すことになるでしょう次のコード スニペットは、 マニフェストが読み込まれたときになんらかの処理を行うことができます。

Kotlin

player.addListener(
  object : Player.Listener {
    override fun onTimelineChanged(timeline: Timeline, @TimelineChangeReason reason: Int) {
      val manifest = player.currentManifest
      if (manifest is SsManifest) {
        // 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) {
          SsManifest ssManifest = (SsManifest) manifest;
          // Do something with the manifest.
        }
      }
    });

再生のカスタマイズ

ExoPlayer は、ユーザーの視聴環境に合わせて再生エクスペリエンスを調整するための複数の方法を提供しています。 提供します。例については、カスタマイズのページをご覧ください。