サポートされている形式

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 のプラットフォーム デコーダに加えて、ソフトウェア デコーダ拡張機能も利用できます。これらは手動でビルドし、使用するプロジェクトに含める必要があります。現在、AV1VP9FLACOpusFFmpegMIDIIAMFMPEG-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 タイプのハードウェア デコーダの能力を超える場合に、ソフトウェア デコーダが選択されることがあります。