次のコンテナ形式のストリームは、ExoPlayer で直接再生できます。含まれる音声と動画のサンプル形式もサポートされている必要があります(詳しくは、サンプル形式のセクションをご覧ください)。画像コンテナと形式のサポートについては、画像をご覧ください。
| コンテナ形式 | サポート対象 | コメント |
|---|---|---|
| MP4 | ○ | |
| M4A | ○ | |
| FMP4 | ○ | |
| WebM | ○ | |
| Matroska | ○ | |
| MP3 | ○ | 一部のストリームは一定ビットレートのシークでのみシーク可能** |
| Ogg | ○ | Vorbis、Opus、FLAC を含む |
| WAV | ○ | |
| MPEG-TS | ○ | |
| MPEG-PS | ○ | |
| FLV | ○ | シーク不可* |
| ADTS(AAC) | ○ | 定数ビットレート シーキングでのみシーク可能** |
| FLAC | ○ | FLAC ライブラリまたは ExoPlayer ライブラリの FLAC エクストラクタを使用している場合*** |
| AMR | ○ | 定数ビットレート シーキングでのみシーク可能** |
* コンテナがメディア プレーヤーが効率的にシークを実行できるようにするメタデータ(サンプル インデックスなど)を提供しないため、シークはサポートされていません。シークが必要な場合は、より適切なコンテナ形式を使用することをおすすめします。
** これらのエクストラクタには、一定のビットレートを仮定して概算シークを有効にするための FLAG_ENABLE_CONSTANT_BITRATE_SEEKING フラグがあります。この機能はデフォルトでは有効になっていません。この機能をサポートするすべての抽出器で有効にする最も簡単な方法は、こちらで説明されているように DefaultExtractorsFactory.setConstantBitrateSeekingEnabled を使用することです。
*** FLAC ライブラリ エクストラクタは、すべての API レベルでフレームワークが処理できる未加工のオーディオを出力します。ExoPlayer ライブラリの FLAC エクストラクタは FLAC オーディオ フレームを出力するため、FLAC デコーダ(FLAC を処理する MediaCodec デコーダ(API レベル 27 以降で必須)や、FLAC が有効になっている FFmpeg ライブラリなど)が必要です。DefaultExtractorsFactory は、アプリケーションが FLAC ライブラリでビルドされた場合、拡張子抽出ツールを使用します。それ以外の場合は、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 の使用
カスタマイズ オプションを増やすには、MediaItem の代わりに ProgressiveMediaSource を作成してプレーヤーに直接渡します。
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 には、アプリのニーズに合わせて再生エクスペリエンスを調整するための複数の方法が用意されています。例については、カスタマイズ ページをご覧ください。