サポートされている形式

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 のプラットフォーム デコーダに加えて、ソフトウェア デコーダ拡張機能も利用できます。これらは手動でビルドし、使用するプロジェクトに含める必要があります。現在、AV1VP9FLACOpusFFmpeg 用のソフトウェア デコーダ ライブラリを提供しています。

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 タイプのハードウェア デコーダの機能を超える場合に、ソフトウェア デコーダが選択されます。