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

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

機能 サポート対象 コメント
コンテナ
FMP4 はい デマルチプレックスされたストリームのみ
字幕
TTML はい FMP4 に埋め込まれている
コンテンツの保護
PlayReady SL2000 はい Android TV のみ
ライブ再生
通常のライブ再生 はい
共通メディア クライアント データ(CMCD) はい 統合ガイド

MediaItem の使用

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

Kotlin

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

Groovy

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

次に、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 で終わっていない場合は、MediaItem.BuildersetMimeTypeMimeTypes.APPLICATION_SS を渡して、コンテンツのタイプを明示的に指定できます。

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

SsMediaSource を使用する

より多くのカスタマイズ オプションを使用するには、MediaItem ではなく SsMediaSource を作成してプレーヤーに直接渡します。

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 コールバックは、 マニフェストが読み込まれます。これは、オンデマンド コンテンツの場合は 1 回、ライブ コンテンツの場合は複数回行われます。次のコード スニペットは、 マニフェストが読み込まれたときになんらかの処理を行うことができます。

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