ExoPlayer がサポートする形式を定義する場合は、「メディア形式」が複数のレベルで定義されていることに注意してください。最小レベルから最大レベルまで、次のテストがあります。
- 個々のメディア サンプルの形式(動画のフレームや音声のフレームなど)。以下はサンプル形式です。一般的な動画ファイルには、動画用(H.264 など)と音声用(AAC など)の少なくとも 2 つのサンプル形式のメディアが含まれています。
- メディア サンプルと関連メタデータを格納するコンテナの形式。これらはコンテナ形式です。メディア ファイルには単一のコンテナ形式(MP4 など)があり、通常はファイル拡張子で示されます。一部の音声のみの形式(MP3 など)では、サンプル形式とコンテナ形式が同じになる場合があります。
- DASH、SmoothStreaming、HLS などのアダプティブ ストリーミング技術。これらはメディア形式ではありませんが、ExoPlayer が提供するサポートレベルを定義する必要があります。
以降のセクションでは、ExoPlayer の各レベルでのサポートについて、上位から下位に説明します。最後の 2 つのセクションでは、スタンドアロンの字幕形式と HDR 動画の再生のサポートについて説明します。
アダプティブ ストリーミング
DASH
ExoPlayer は、複数のコンテナ形式で DASH をサポートしています。メディア ストリームはデマルチプレックスする必要があります。つまり、動画、音声、テキストは DASH マニフェスト内の個別の AdaptationSet
要素で定義する必要があります(CEA-608 は、以下の表に示すように例外です)。含まれる音声と動画のサンプル形式もサポートされている必要があります(詳細については、サンプル形式のセクションをご覧ください)。
機能 | サポート対象 | コメント |
---|---|---|
コンテナ | ||
FMP4 | はい | デマルチプレックスされたストリームのみ |
WebM | はい | デマルチプレックスされたストリームのみ |
Matroska | はい | デマルチプレックスされたストリームのみ |
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」スキームのみ |
ClearKey | はい | 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 スキーム)および 25 以降(cbcs スキーム) |
PlayReady SL2000 | はい | Android TV のみ |
サーバー管理 | ||
デルタの更新 | はい | |
再生リストの再読み込みをブロックする | はい | |
プリロード ヒントの読み込みをブロックする | はい | 長さが未定義のバイト範囲を除く |
ライブ再生 | ||
通常のライブ再生 | はい | |
低レイテンシ HLS(Apple) | はい | |
低レイテンシ HLS(コミュニティ) | いいえ | |
共通メディア クライアント データ(CMCD) | はい | 統合ガイド |
プログレッシブ コンテナ形式
次のコンテナ形式のストリームは、ExoPlayer で直接再生できます。含まれる音声と動画のサンプル形式もサポートされている必要があります(詳しくは、サンプル形式のセクションをご覧ください)。画像コンテナと形式のサポートについては、画像をご覧ください。
コンテナ形式 | サポート対象 | コメント |
---|---|---|
MP4 | はい | |
M4A | はい | |
FMP4 | はい | |
WebM | はい | |
Matroska | はい | |
MP3 | はい | 一部のストリームは、一定のビットレートでシークできる場合にのみシーク可能** |
Ogg | はい | Vorbis、Opus、FLAC を含む |
WAV | はい | |
MPEG-TS | はい | |
MPEG-PS | はい | |
FLV | はい | シーク不可* |
ADTS(AAC) | はい | 定数ビットレートのシーキングでのみシーク可能** |
FLAC | はい | FLAC ライブラリまたは ExoPlayer ライブラリの FLAC エクストラクタを使用している場合*** |
AMR | はい | 定数ビットレートのシーキングでのみシーク可能** |
* シークはサポートされていません。コンテナには、メディア プレーヤーがシークを効率的に実行できるようにするメタデータ(サンプル インデックスなど)がないためです。シークが必要である場合は、より適切なコンテナ形式を使用することをおすすめします。
** これらのエクストラクタには、一定のビットレートを前提とした近似シークを有効にする FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
フラグがあります。この機能はデフォルトでは有効になっていません。この機能をサポートするすべての抽出ツールでこの機能を有効にする最も簡単な方法は、こちらで説明されているように DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
を使用することです。
*** FLAC ライブラリの抽出機能は、すべての API レベルでフレームワークによって処理できる未加工のオーディオを出力します。ExoPlayer ライブラリの FLAC エクストラクタは FLAC オーディオ フレームを出力するため、FLAC デコーダ(FLAC を処理する MediaCodec
デコーダ(API レベル 27 以降に必須)、または FLAC が有効になっている FFmpeg ライブラリなど)が必要です。アプリケーションが FLAC ライブラリでビルドされている場合、DefaultExtractorsFactory
は拡張機能エクストラクタを使用します。それ以外の場合は、ExoPlayer ライブラリの抽出機能が使用されます。
RTSP
ExoPlayer は、ライブ RTSP とオンデマンド RTSP の両方をサポートしています。サポートされているサンプル形式とネットワーク タイプは次のとおりです。
サポートされているサンプル形式
- H264(SDP メディア記述には、デコーダの初期化用に fmtp 属性に SPS/PPS データが含まれている必要があります)。
- AAC(ADTS ビットストリームあり)。
- AC3。
サポートされているネットワーク タイプ
- UDP ユニキャスト経由の RTP(マルチキャストはサポートされていません)。
- インターリーブ RTSP、TCP を使用した RTSP 上の RTP。
サンプル形式
デフォルトでは、ExoPlayer は Android のプラットフォーム デコーダを使用します。したがって、サポートされているサンプル形式は、ExoPlayer ではなく基盤となるプラットフォームによって異なります。Android デバイスでサポートされているサンプル形式のドキュメントについては、サポートされているメディア形式をご覧ください。個々のデバイスでは、ここに記載されている以外の形式がサポートされている場合があります。
ExoPlayer は、Android のプラットフォーム デコーダに加えて、ソフトウェア デコーダ拡張機能も使用できます。これらは手動でビルドし、それらを使用するプロジェクトに含める必要があります。現在、AV1、VP9、FLAC、Opus、FFmpeg、MIDI、IAMF のソフトウェア デコーダ ライブラリを提供しています。
FFmpeg ライブラリ
FFmpeg ライブラリは、さまざまな音声サンプル形式のデコードをサポートしています。ライブラリの README.md に記載されているように、ライブラリのビルド時に含めるデコーダを選択できます。次の表に、音声サンプル形式と対応する FFmpeg デコーダ名のマッピングを示します。
サンプル形式 | デコーダ名 |
---|---|
Vorbis | vorbis |
Opus | opus |
FLAC | flac |
ALAC | alac |
PCM μ-law | pcm_mulaw |
PCM A-law | 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 は、次の画像形式をサポートしています。異なる形式をサポートする外部ライブラリを統合する方法については、画像読み込みライブラリをご覧ください。
イメージの形式 | サポート対象 | 備考 |
---|---|---|
BMP | はい | |
GIF | いいえ | エクストラクタのサポートなし |
JPEG | はい | |
JPEG モーション写真 | はい | 静止画像と動画がサポートされている |
JPEG ウルトラ HDR | はい | Android 14 より前または HDR 以外のディスプレイでは SDR にフォールバック |
PNG | はい | |
WebP | はい | |
HEIF/HEIC | はい | |
HEIC モーション フォト | 一部のみ | 静止画像のみサポート* |
AVIF(ベースライン) | はい | Android 14 以降でのみデコード |
* HEIC モーション フォトの動画部分は MetadataRetriever で取得し、スタンドアロン ファイルとして再生できます。
スタンドアロンの字幕形式
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 プラットフォームとデバイスのサポートによって異なります。HDR デコード/ディスプレイ機能のチェックと、Android バージョン間での HDR サポートの制限については、HDR 動画の再生をご覧ください。
特定のコーデック プロファイルのサポートが必要な HDR ストリームを再生する場合、ExoPlayer のデフォルトの MediaCodec
セレクタは、そのプロファイルをサポートするデコーダ(利用可能な場合)を選択します。たとえ、そのプロファイルをサポートしない同じ MIME タイプの別のデコーダがコーデック リストの上位に表示されている場合でも同様です。これにより、ストリームが同じ MIME タイプのハードウェア デコーダの機能を超過している場合に、ソフトウェア デコーダが選択される可能性があります。