サポートされている形式

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

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