プログレッシブ

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

コンテナ形式 対応 コメント
MP4 はい
M4A はい
FMP4 はい
WebM はい
マトロスカ はい
MP3 はい 一部のストリームは固定ビットレートのシークでのみシーク可能**
OG はい Vorbis、Opus、FLAC を含む
WAV はい
MPEG-TS はい
MPEG-PS はい
FLV はい シーク不可*
ADTS(AAC) はい 固定ビットレートシーク使用時のみシーク可能**
FLAC はい FLAC ライブラリまたは ExoPlayer ライブラリの FLAC エクストラクタを使用***
AMR はい 固定ビットレートシーク使用時のみシーク可能**
JPEG モーション フォト はい MP4 コンテンツのみが抽出されます

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

** これらのエクストラクタには、固定ビットレートの前提を使用して近似シークを可能にする 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 には、アプリのニーズに合わせて再生エクスペリエンスをカスタマイズするための複数の方法が用意されています。例については、カスタマイズ ページをご覧ください。