ExoPlayerでサポートされるフォーマット

※ 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の利点は[こちら](https://medium.com/google-exoplayer/test-8b62d50362ef#.dlz6npay4)(英語)で読むことができます。

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拡張機能](https://github.com/google/ExoPlayer/tree/release-v2/extensions/flac)のみ

*コンテナーが効率的なシークを行うためのメタデータ(サンプルインデックス等)を含まないため、シークはサポートされません。シークが必要なら、より適切なコンテナ形式を使用することをお勧めします。

## サンプルフォーマット

デフォルトでExoPlayerはAndroidのプラットフォームデコーダーを使用します。したがって、サポートされているサンプル形式は、ExoPlayerではなくプラットフォームに依存します。Android端末によってサポートされるサンプルフォーマットは[ここ](https://developer.android.com/guide/appendix/media-formats.html#core)に記載されています。個別の端末はここに載っていない追加のフォーマットをサポートする可能性があることに注意してください。

Androidのプラットフォームデコーダーを使用するのに加えて、ExoPlayerはソフトウェアデコーダー拡張機能を利用することもできます。これらは手動で作成し、使用したいプロジェクトに含める必要があります。ソフトウェアデコーダー拡張機能は現在[VP9](https://github.com/google/ExoPlayer/tree/release-v2/extensions/vp9)、[Flac](https://github.com/google/ExoPlayer/tree/release-v2/extensions/flac)、[Opus](https://github.com/google/ExoPlayer/tree/release-v2/extensions/opus)、[FFmpeg](https://github.com/google/ExoPlayer/tree/release-v2/extensions/ffmpeg)用に提供しています。

### FFmpeg拡張機能

[FFmpeg拡張機能](https://github.com/google/ExoPlayer/tree/release-v2/extensions/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](https://github.com/google/ExoPlayer/tree/release-v2/extensions/ffmpeg/README.md)を見てください。