プログレッシブ

次のコンテナ形式のストリームは、ExoPlayer で直接再生できます。含まれる音声と動画のサンプル形式もサポートされている必要があります(詳細については、サンプル形式のセクションをご覧ください)。画像コンテナと形式のサポートについては、以下をご覧ください。 画像:

コンテナ形式 サポート対象 コメント
MP4 はい
M4A はい
FMP4 はい
WebM はい
マトロスカ はい
MP3 はい 一部のストリームは、一定のビットレートのシークを使用してのみシーク可能**
Ogg はい Vorbis、Opus、FLAC を含む
WAV はい
MPEG-TS はい
MPEG-PS はい
FLV はい シーク不可*
ADTS(AAC) はい 固定ビットレートのシーク使用時のみシーク可能**
FLAC はい FLAC ライブラリまたは ExoPlayer ライブラリの FLAC エクストラクタを使用***
AMR はい 固定ビットレートのシーク使用時のみシーク可能**

* シークはサポートされていません。コンテナには、メディア プレーヤーがシークを効率的に実行できるようにするメタデータ(サンプル インデックスなど)がないためです。シークが必要である場合は、より適切なコンテナ形式を使用することをおすすめします。

** これらのエクストラクタには、一定のビットレートを前提とした近似シークを有効にする FLAG_ENABLE_CONSTANT_BITRATE_SEEKING フラグがあります。この デフォルトでは有効になっていません。これを実現する最も簡単な方法は サポートするすべての extractor の機能で、 DefaultExtractorsFactory.setConstantBitrateSeekingEnabled(説明どおり) こちらをご覧ください。

*** FLAC ライブラリの抽出機能は、すべての API レベルでフレームワークによって処理できる未加工のオーディオを出力します。ExoPlayer ライブラリの FLAC エクストラクタは FLAC オーディオ フレームを出力するため、FLAC デコーダ(FLAC を処理する MediaCodec デコーダ(API レベル 27 以降に必須)、または FLAC が有効になっている FFmpeg ライブラリなど)が必要です。アプリケーションが FLAC ライブラリでビルドされている場合、DefaultExtractorsFactory は拡張機能エクストラクタを使用します。それ以外の場合は、ExoPlayer ライブラリ エクストラクタを使用します。

MediaItem の使用

プログレッシブ ストリームを再生するには、メディア URI を指定して MediaItem を作成し、 プレーヤーに渡します。

Kotlin

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

ProgressiveMediaSource を使用する

その他のカスタマイズ オプションについては、ProgressiveMediaSource を作成し、 MediaItem ではなくプレーヤーに直接渡す。

Kotlin

// Create a data source factory.
val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()
// Create a progressive media source pointing to a stream uri.
val mediaSource: MediaSource =
ProgressiveMediaSource.Factory(dataSourceFactory)
    .createMediaSource(MediaItem.fromUri(progressiveUri))
// 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 progressive media source pointing to a stream uri.
MediaSource mediaSource =
    new ProgressiveMediaSource.Factory(dataSourceFactory)
        .createMediaSource(MediaItem.fromUri(progressiveUri));
// 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();

再生のカスタマイズ

ExoPlayer には、アプリのニーズに合わせて再生エクスペリエンスを調整するための複数の方法が用意されています。例については、カスタマイズのページをご覧ください。