次のコンテナ形式のストリームは、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 には、アプリのニーズに合わせて再生エクスペリエンスを調整するための複数の方法が用意されています。例については、カスタマイズのページをご覧ください。