※ 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を見てください。