※ https://google.github.io/ExoPlayer/supported-formats.html の日本語訳です
ExoPlayerでサポートされるフォーマットといっても、実際には様々なレベルでの「メディアフォーマット」が定義されることに注意してください。高レベルなものから低レベルなものまで、次のようなものがあります。
- 個別のメディアサンプルのフォーマット(ビデオフレームやオーディオフレーム等)。これらのフォーマットはサンプルフォーマットと呼びます。通常の映像ファイルは最低2種類のサンプルフォーマットを内包することに注意してください。一つは動画(H.264等)で、もう一つは音声(AAC等)です。
- メディアサンプルと関連するメタデータを格納するフォーマット。これらのフォーマットはコンテナーフォーマットと呼びます。メディアファイルは一つのコンテナーフォーマット(MP4等)を持ち、これは通常ファイルの拡張子で表されます。いくつかの音声のみのフォーマット(MP3等)では、サンプルフォーマットとコンテナーフォーマットは同じになります。
- DASH、SmoothStreaming、HLS等のアダプティブストリーミング技術。これらはメディアフォーマットではありませんが、どのレベルのサポートをExoPlayerが提供するかを定義するのに必要です。
次のセクションはExoPlayerサポートをそれぞれのレベルで定義します。高レベルから低レベルまで。
アダプティブストリーミング
DASH
ExoPlayerはFMP4、WebM、MatroskaコンテナーフォーマットでのDASHをサポートします。メディアストリームはdemuxedされている必要があります。これは映像、音声、テキスト(字幕)はDASHマニフェストのAdaptationSet要素に定義される必要があるということです。内包されるサンプルフォーマットもサポートされているものである必要があります(詳しくはサンプルフォーマットセクションを見てください)。
| Feature | Supported | Comment |
|---|---|---|
| コンテナー | ||
| FMP4 | YES | Demuxed ストリームのみ |
| WebM | YES | Demuxed ストリームのみ |
| Matroska | YES | Demuxed ストリームのみ |
| MPEG-TS | NO | サポートされる予定はありません |
| 字幕 | ||
| TTML | YES | Raw, or embedded in FMP4 according to ISO/IEC 14496-30 |
| WebVTT | YES | Raw, or embedded in FMP4 according to ISO/IEC 14496-30 |
| Tx3g | YES | FMP4に埋め込み |
| SubRip | YES | WebMに埋め込み |
| コンテンツ保護 | ||
| Widevine CENC | YES | API 19以上、"cenc" スキームのみ |
| PlayReady SL2000 | YES | Android TVのみ |
SmoothStreaming
ExoPlayerはFMP4コンテナーフォーマットでのSmoothStreamingをサポートします。メディアストリームはdemuxedされている必要があります。これは映像、音声、テキスト(字幕)はSmoothStreamingマニフェストのStreamIndex要素に定義される必要があるということです。内包されるサンプルフォーマットもサポートされているものである必要があります(詳しくはサンプルフォーマットセクションを見てください)。
| Feature | Supported | Comment |
|---|---|---|
| コンテナー | ||
| FMP4 | YES | Demuxed ストリームのみ |
| 字幕 | ||
| TTML | YES | FMP4に埋め込み |
| コンテンツ保護 | ||
| PlayReady SL2000 | YES | Android TV のみ |
HLS
ExoPlayerはMPEG-TS、ADTS、MP3コンテナーフォーマットでのHLSをサポートします。内包されるサンプルフォーマットもサポートされているものである必要があります(詳しくはサンプルフォーマットセクションを見てください)。可能であればHLSよりもDASH(かSmoothStreaming)を使うことをお勧めします。DASHの利点はこちら(英語)で読むことができます。
| Feature | Supported | Comment |
|---|---|---|
| コンテナー | ||
| MPEG-TS | YES | |
| ADTS (AAC) | YES | |
| MP3 | YES | |
| 字幕 | ||
| EIA-608 | YES | |
| WebVTT | YES | |
| Metdata | ||
| ID3 metadata | YES | |
| コンテンツ保護 | ||
| AES-128 | YES | |
| Sample AES-128 | NO |
スタンドアローンコンテナーフォーマット
次のコンテナーフォーマットのメディアファイルはExoPlayerで直接再生することができます。内包されるサンプルフォーマットもサポートされているものである必要があります(詳しくはサンプルフォーマットセクションを見てください)。
| コンテナーフォーマット | サポートされている | コメント |
|---|---|---|
| MP4 | はい | |
| M4A | はい | |
| FMP4 | はい | |
| WebM | はい | |
| Matroska | はい | |
| MP3 | はい | |
| Ogg | はい | Vorbis、Opus、Flacを含む |
| WAV | はい | |
| MPEG-TS | はい | シーク不可* |
| MPEG-PS | はい | シーク不可* |
| FLV | はい | シーク不可* |
| ADTS (AAC) | はい | シーク不可* |
| Flac | はい | Flac拡張機能のみ |
*コンテナーが効率的なシークを行うためのメタデータ(サンプルインデックス等)を含まないため、シークはサポートされません。シークが必要なら、より適切なコンテナ形式を使用することをお勧めします。
サンプルフォーマット
デフォルトでExoPlayerはAndroidのプラットフォームデコーダーを使用します。したがって、サポートされているサンプル形式は、ExoPlayerではなくプラットフォームに依存します。Android端末によってサポートされるサンプルフォーマットはここに記載されています。個別の端末はここに載っていない追加のフォーマットをサポートする可能性があることに注意してください。
Androidのプラットフォームデコーダーを使用するのに加えて、ExoPlayerはソフトウェアデコーダー拡張機能を利用することもできます。これらは手動で作成し、使用したいプロジェクトに含める必要があります。ソフトウェアデコーダー拡張機能は現在VP9、Flac、Opus、FFmpeg用に提供しています。
FFmpeg拡張機能
FFmpeg拡張機能は様々な種類の音声サンプルフォーマットのデコードをサポートします。どのデコーダーを含めるかはFFmpegのconfigureスクリプトへのコマンドライン引数で選ぶことができます。
| サンプルフォーマット | configureへの引数 |
|---|---|
| Vorbis | –enable-decoder=vorbis |
| Opus | –enable-decoder=opus |
| FLAC | –enable-decoder=flac |
| MP3 | –enable-decoder=mp3 |
| AMR-NB | –enable-decoder=armnb |
| ARM-WB | –enable-decoder=armwb |
| AAC | –enable-decoder=aac |
| AC-3 | –enable-decoder=ac3 |
| E-AC-3 | –enable-decoder=eac3 |
| DTS, DTS-HD | –enable-decoder=dca |
| TrueHD | –enable-decoder=mlp –enable-decoder=truehd |
configureのコマンドラインの例は拡張機能のREADME.mdを見てください。