ExoPlayer がサポートする形式を定義する場合、「メディア形式」は複数のレベルで定義されることに注意してください。以下に、以下のレベルから上位の順に、説明を示します。
- 個々のメディア サンプルの形式(動画のフレームや音声のフレームなど)。こちらはサンプル形式です。一般的な動画ファイルには、少なくとも 2 つのサンプル形式のメディアが含まれます。1 つは動画用(H.264 など)で、もう 1 つは音声用(AAC など)です。
- メディア サンプルと関連するメタデータを格納するコンテナの形式。これらはコンテナ形式です。メディア ファイルは 1 つのコンテナ形式(MP4 など)を持ち、これは一般的にファイル拡張子で示されます。音声のみの形式(MP3 など)では、サンプルとコンテナの形式が同じになる場合があります。
- DASH、SmoothStreaming、HLS などのアダプティブ ストリーミング テクノロジー。これらはメディア形式ではありませんが、ExoPlayer が提供するサポートレベルを定義する必要があります。
以下のセクションでは、各レベルにおける ExoPlayer のサポートを、最も高いものから最も低いものの順に説明します。最後の 2 つのセクションでは、スタンドアロンの字幕形式と HDR 動画再生のサポートについて説明します。
アダプティブ ストリーミング
DASH
ExoPlayer は、複数のコンテナ形式の DASH をサポートしています。メディア ストリームは分離する必要があります。つまり、動画、音声、テキストは、DASH マニフェストの個別の AdaptationSet
要素で定義する必要があります(CEA-608 は、以下の表に示す例外です)。含まれている音声と動画のサンプル形式もサポートされている必要があります(詳細については、サンプル形式のセクションをご覧ください)。
機能 | 対応 | コメント |
---|---|---|
コンテナ | ||
FMP4 | はい | 分離ストリームのみ |
WebM | はい | 分離ストリームのみ |
マトロスカ | はい | 分離ストリームのみ |
MPEG-TS | いいえ | サポートの予定なし |
字幕 | ||
TTML | はい | 未加工、または ISO/IEC 14496-30 に従った FMP4 への埋め込み |
WebVTT | はい | 未加工、または ISO/IEC 14496-30 に従った FMP4 への埋め込み |
CEA-608 | はい | SCTE ユーザー補助記述子を使用して通知された場合、FMP4 に埋め込まれる |
CEA-708 | はい | SCTE ユーザー補助記述子を使用して通知された場合、FMP4 に埋め込まれる |
メタデータ | ||
EMSG メタデータ | はい | FMP4 に埋め込み |
コンテンツの保護 | ||
Widevine | はい | 「cenc」スキーム: API 19 以降、「cbcs」スキーム: API 25 以降 |
PlayReady SL2000 | はい | Android TV、「cenc」スキームのみ |
キーをクリア | はい | API 21 以降、「cenc」スキームのみ |
ライブ再生 | ||
通常のライブ再生 | はい | |
超低レイテンシの CMAF ライブ再生 | はい | |
共通メディア クライアント データ(CMCD) | はい | 統合ガイド |
スムーズなストリーミング
ExoPlayer は、FMP4 コンテナ形式の SmoothStreaming をサポートしています。メディア ストリームは分離する必要があります。つまり、動画、音声、テキストは、SmoothStreaming マニフェスト内の個別の StreamIndex 要素で定義する必要があります。含まれている音声と動画のサンプル形式もサポートされている必要があります(詳細については、サンプル形式のセクションをご覧ください)。
機能 | 対応 | コメント |
---|---|---|
コンテナ | ||
FMP4 | はい | 分離ストリームのみ |
字幕 | ||
TTML | はい | FMP4 に埋め込み |
コンテンツの保護 | ||
PlayReady SL2000 | はい | Android TV のみ |
ライブ再生 | ||
通常のライブ再生 | はい | |
共通メディア クライアント データ(CMCD) | はい | 統合ガイド |
HLS
ExoPlayer は、複数のコンテナ形式を持つ HLS をサポートしています。含まれている音声と動画のサンプル形式もサポートされている必要があります(詳細については、サンプル形式のセクションをご覧ください)。こちらで説明されているように、HLS コンテンツ プロデューサーには高品質の HLS ストリームを生成することを強くおすすめします。
機能 | 対応 | コメント |
---|---|---|
コンテナ | ||
MPEG-TS | はい | |
FMP4/CMAF | はい | |
ADTS(AAC) | はい | |
MP3 | はい | |
字幕 | ||
CEA-608 | はい | |
CEA-708 | はい | |
WebVTT | はい | |
メタデータ | ||
ID3 | はい | |
SCTE 35 | いいえ | |
コンテンツの保護 | ||
AES-128 | はい | |
サンプル AES-128 | いいえ | |
Widevine | はい | API 19 以降(「cenc」スキーム)および API 25 以降(「cbcs」スキーム) |
PlayReady SL2000 | はい | Android TV のみ |
サーバー制御 | ||
差分更新 | はい | |
ブロック中の再生リストを再読み込みしました | はい | |
プリロード ヒントのブロック読み込み | はい | 長さが未定義のバイト範囲を除く |
ライブ再生 | ||
通常のライブ再生 | はい | |
低レイテンシ HLS(Apple) | はい | |
低レイテンシ HLS(コミュニティ) | いいえ | |
共通メディア クライアント データ(CMCD) | はい | 統合ガイド |
プログレッシブ コンテナ形式
次のコンテナ形式のストリームは、ExoPlayer で直接再生できます。含まれている音声と動画のサンプル形式もサポートされている必要があります(詳細については、サンプル形式のセクションをご覧ください)。
コンテナの形式 | 対応 | コメント |
---|---|---|
MP4 | はい | |
M4A | はい | |
FMP4 | はい | |
WebM | はい | |
マトロスカ | はい | |
MP3 | はい | 一部のストリームは固定ビットレート シークを使用した場合にのみシーク可能** |
Ogg | はい | Vorbis、Opus、FLAC を含む |
WAV | はい | |
MPEG-TS | はい | |
MPEG-PS | はい | |
FLV | はい | シーク不可* |
ADTS(AAC) | はい | 固定ビットレートシークを使用した場合にのみシーク可能** |
FLAC | はい | FLAC ライブラリまたは ExoPlayer ライブラリの FLAC エクストラクタを使用*** |
AMR | はい | 固定ビットレートシークを使用した場合にのみシーク可能** |
JPEG モーション フォト | はい | MP4 コンテンツのみが抽出されます |
* コンテナでは、メディア プレーヤーが効率的にシークを実行できるようにするためのメタデータ(サンプル インデックスなど)が提供されないため、シークはサポートされていません。シークする必要がある場合は、より適切なコンテナ形式を使用することをおすすめします。
** これらのエクストラクタには FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
フラグがあり、固定ビットレートの前提条件を使用して近似シークを有効にします。この機能はデフォルトでは有効になっていません。この機能をサポートするすべての extractor でこの機能を有効にするには、こちらで説明されているように DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
を使用するのが最も簡単です。
*** FLAC ライブラリ エクストラクタは未加工オーディオを出力しますが、これはすべての API レベルのフレームワークで処理できます。ExoPlayer ライブラリの FLAC エクストラクタは FLAC 音声フレームを出力するため、FLAC デコーダ(API レベル 27 以降で必須)や FLAC を有効にした FFmpeg ライブラリなど、FLAC デコーダ(たとえば、FLAC を処理する MediaCodec
デコーダ)に依存します。アプリが FLAC ライブラリでビルドされている場合、DefaultExtractorsFactory
は拡張機能エクストラクタを使用します。それ以外の場合は、ExoPlayer ライブラリのエクストラクタを使用します。
RTSP
ExoPlayer は、ライブ RTSP とオンデマンド RTSP の両方をサポートしています。サポートされているサンプル形式とネットワークの種類を以下に示します。
サポートされているサンプル形式
- H264(SDP メディアの記述では、デコーダを初期化するために、fmtp 属性に SPS/PPS データを含める必要があります)。
- AAC(ADTS ビットストリームを含む)
- AC3。
サポートされているネットワークの種類
- RTP over UDP ユニキャスト(マルチキャストはサポートされていません)。
- TCP を使用したインターリーブ RTSP、RTP over RTSP。
サンプル形式
デフォルトでは、ExoPlayer は Android のプラットフォーム デコーダを使用します。そのため、サポートされるサンプル形式は、ExoPlayer ではなく、基盤となるプラットフォームによって異なります。Android デバイスでサポートされているサンプル形式については、サポートされているメディア形式をご覧ください。デバイスによっては、ここに記載されていない形式がサポートされている場合もあります。
ExoPlayer は、Android のプラットフォーム デコーダに加えて、ソフトウェア デコーダ拡張機能も利用できます。これらは手動でビルドし、使用するプロジェクトに含める必要があります。現在、AV1、VP9、FLAC、Opus、FFmpeg 用のソフトウェア デコーダ ライブラリを提供しています。
FFmpeg ライブラリ
FFmpeg ライブラリは、さまざまな音声サンプル形式のデコードをサポートしています。ライブラリの README.md に記載されているように、ライブラリのビルド時に含めるデコーダを選択できます。次の表に、オーディオ サンプル形式から対応する FFmpeg デコーダ名へのマッピングを示します。
サンプル形式 | デコーダ名 |
---|---|
Vorbis | Vorbis |
Opus | Opus |
FLAC | FLAC |
ALAC | Alac |
PCM μ-law | pcm_mulaw |
PCM A 法則 | pcm_alaw |
MP1、MP2、MP3 | mp3 |
AMR-NB | Amrnb |
AMR-WB | AMRWB |
AAC | AAC |
AC 3 | AC3 |
E-AC-3 | eac3 |
DTS、DTS-HD | DCA |
TrueHD | MLP TrueHD |
スタンドアロンの字幕形式
ExoPlayer は、さまざまな形式のスタンドアロンの字幕ファイルをサポートしています。字幕ファイルは、メディア アイテムのページに記載されているとおり、サイドローディングできます。
コンテナの形式 | 対応 | MIMEタイプ |
---|---|---|
WebVTT | はい | MimeTypes.TEXT_VTT |
TTML / SMPTE-TT | はい | MimeTypes.APPLICATION_TTML |
SubRip | はい | MimeTypes.APPLICATION_SUBRIP |
SubStationAlpha(SSA/ASS) | はい | MimeTypes.TEXT_SSA |
HDR 動画再生
ExoPlayer は、MP4 のドルビー ビジョンや Matroska/WebM の HDR10+ など、さまざまなコンテナでハイ ダイナミック レンジ(HDR)動画の抽出を処理します。HDR コンテンツのデコードと表示は、Android プラットフォームとデバイスからのサポートによって異なります。各 Android バージョンにおける HDR のデコードと表示の機能と HDR サポートの制限事項の確認については、HDR 動画の再生をご覧ください。
特定のコーデック プロファイルのサポートを必要とする HDR ストリームを再生する場合、ExoPlayer のデフォルトの MediaCodec
セレクタは、そのプロファイルをサポートしていない同じ MIME タイプの別のデコーダがコーデック リストの上位に表示される場合でも、そのプロファイルをサポートするデコーダを選択します(利用可能な場合)。これにより、ストリームが同じ MIME タイプのハードウェア デコーダの機能を超える場合に、ソフトウェア デコーダが選択されます。