ExoPlayer がサポートする形式を定義する際は、「メディア形式」が複数のレベルで定義されていることに注意することが重要です。最小レベルから最大レベルまで、次のテストがあります。
- 個々のメディア サンプルの形式(動画のフレームや音声のフレームなど)。これらはサンプル形式です。一般的な動画ファイルには、少なくとも 2 つのサンプル形式のメディアが含まれます。1 つは動画用(H.264 など)、もう 1 つは音声用(AAC など)です。
- メディア サンプルと関連するメタデータを格納するコンテナの形式。これらはコンテナ形式です。メディア ファイルには、単一のコンテナ形式(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 に従って、Raw または FMP4 に埋め込まれたもの |
| WebVTT | ○ | ISO/IEC 14496-30 に従って、Raw または FMP4 に埋め込まれたもの |
| CEA-608 | YES | SCTE アクセシビリティ記述子を使用してシグナリングされた場合、FMP4 に埋め込まれます |
| CEA-708 | YES | SCTE アクセシビリティ記述子を使用してシグナリングされた場合、FMP4 に埋め込まれます |
| メタデータ | ||
| EMSG メタデータ | ○ | FMP4 に埋め込まれた |
| コンテンツの保護 | ||
| Widevine | ○ | 「cenc」スキーム: API 19 以降、「cbcs」スキーム: API 25 以降 |
| PlayReady SL2000 | ○ | Android TV、cenc スキームのみ |
| ClearKey | ○ | API 21 以降、「cenc」スキームのみ |
| 広告挿入 | ||
| 複数期間の再生 | ○ | |
| サーバーガイド付き広告挿入 (xlinks) | NO | |
| IMA サーバーサイド広告とクライアントサイド広告 | ○ | 広告挿入ガイド |
| ライブ再生 | ||
| 通常のライブ再生 | ○ | |
| 超低遅延 CMAF ライブ再生 | ○ | |
| 共通メディア クライアント データ (CMCD) | ○ | 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 のみ |
| サーバー制御 | ||
| 差分更新 | ○ | |
| 再生リストの再読み込みをブロック | ○ | |
| プリロード ヒントの読み込みをブロック | ○ | 長さが未定義のバイト範囲を除く |
| 広告挿入 | ||
| サーバーガイド付き広告挿入 (インタースティシャル) | 部分的 | X-ASSET-URI の VOD のみ。ライブ配信と X-ASSET-LIST は後日追加されます。 |
| IMA サーバーサイド広告とクライアントサイド広告 | ○ | 広告挿入ガイド |
| ライブ再生 | ||
| 通常のライブ再生 | ○ | |
| 低遅延 HLS(Apple) | ○ | |
| 低レイテンシ HLS(コミュニティ) | 不可 | |
| 共通メディア クライアント データ CMCD | ○ | 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 ライブラリなど)が必要です。DefaultExtractorsFactory は、アプリケーションが FLAC ライブラリでビルドされた場合、拡張子抽出ツールを使用します。それ以外の場合は、ExoPlayer ライブラリの抽出ツールを使用します。
RTSP
ExoPlayer は、ライブとオンデマンドの両方の 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、MPEG-H のソフトウェア デコーダ ライブラリを提供しています。
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 以降でのみデコード |
スタンドアロンの字幕形式
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 タイプのハードウェア デコーダの能力を超える場合に、ソフトウェア デコーダが選択されることがあります。