支援的格式

定義 ExoPlayer 支援的格式時,請務必注意「媒體格式」是在多個層級定義。以下列出最低到最高的層級:

  • 個別媒體樣本的格式 (例如影片影格或音訊影格)。這些是範例格式。請注意,一般影片檔案至少會包含兩種樣本格式的媒體:一種是影片 (例如 H.264),另一種是音訊 (例如 AAC)。
  • 容器的格式,用於存放媒體樣本和相關聯的中繼資料。這些是容器格式。媒體檔案具有單一容器格式 (例如 MP4),通常以副檔名表示。請注意,對於部分純音訊格式 (例如 MP3),樣本和容器格式可能相同。
  • 自動調整串流技術,例如 DASH、SmoothStreaming 和 HTTP 即時串流。這些並非媒體格式,但仍須定義 ExoPlayer 提供的支援層級。

以下各節會定義 ExoPlayer 在各層級的支援情形,從最高層級到最低層級。最後兩節說明支援的獨立字幕格式和 HDR 影片播放功能。

自動調整串流

DASH

ExoPlayer 支援 DASH,並提供多種容器格式。媒體串流必須經過多工解訊,也就是說,影片、音訊和文字必須在 DASH 資訊清單中以不同的 AdaptationSet 元素定義 (CEA-608 是例外狀況,如下表所述)。內含的音訊和視訊樣本格式也必須支援 (詳情請參閱「樣本格式」一節)。

功能 支援 留言
容器
FMP4 是 僅限解多工串流
WebM 是 僅限解多工串流
Matroska 是 僅限解多工串流
MPEG-TS 否 不支援 - 無支援計畫
隱藏式輔助字幕 / 字幕
TTML YES 原始格式,或根據 ISO/IEC 14496-30 嵌入 FMP4
WebVTT YES 原始格式,或根據 ISO/IEC 14496-30 嵌入 FMP4
CEA-608 YES 以 SCTE 無障礙描述元發出信號時,內嵌在 FMP4 中
CEA-708 YES 以 SCTE 無障礙描述元發出信號時,內嵌在 FMP4 中
Metadata
EMSG 中繼資料 是 內嵌於 FMP4
內容保護
Widevine YES 「cenc」架構:API 19 以上版本; 「cbcs」架構:API 25 以上版本
PlayReady SL2000 是 Android TV,僅限「cenc」架構
ClearKey 是 API 21 以上版本,僅限「cenc」架構
廣告插播
多時段播放 是
伺服器導向廣告插入 (xlinks) NO
IMA 伺服器端和用戶端廣告 YES 廣告插播指南
即時播放
一般直播播放 是
超低延遲 CMAF 直播播放 YES
通用媒體用戶端資料 (CMCD) YES CMCD 整合指南

SmoothStreaming

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 是
Metadata
ID3 是
SCTE-35 否
內容保護
AES-128 是
AES-128 範例 否
Widevine YES API 19 以上 (「cenc」架構) 和 25 以上 (「cbcs」架構)
PlayReady SL2000 是 僅 Android TV
伺服器控制
差異更新 是
封鎖播放清單重新載入 是
封鎖預先載入提示的載入作業 YES 長度未定義的位元組範圍除外
廣告插播
伺服器導向廣告插入 (插頁式廣告) 部分 僅限 VOD,且必須有 X-ASSET-URI。 直播和X-ASSET-LIST將於日後新增。
IMA 伺服器端和用戶端廣告 YES 廣告插播指南
即時播放
一般直播播放 是
低延遲 HTTP 即時串流 (Apple) 是
低延遲 HTTP 即時串流 (社群) 否
通用媒體用戶端資料 CMCD YES 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。支援的樣本格式和網路類型如下。

支援的樣本格式

  • H264 (SDP 媒體說明必須在 fmtp 屬性中包含 SPS/PPS 資料,以供解碼器初始化)。
  • AAC (含 ADTS 位元串流)。
  • AC3。

支援的網路類型

  • 透過 UDP 單點傳播的 RTP (不支援多點傳播)。
  • 交錯式 RTSP,透過 TCP 使用 RTSP 的 RTP。

範例格式

根據預設,ExoPlayer 會使用 Android 平台解碼器。因此,支援的樣本格式取決於基礎平台,而非 ExoPlayer。如需 Android 裝置支援的範例格式說明文件,請參閱「支援的媒體格式」。請注意,個別裝置可能支援其他格式。

除了 Android 平台解碼器,ExoPlayer 也能使用軟體解碼器擴充功能。這些項目必須手動建構,並納入要使用這些項目的專案。我們目前提供 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 Ultra HDR YES 在 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

高動態範圍影片播放

ExoPlayer 會處理各種容器中的高動態範圍 (HDR) 影片,包括 MP4 中的 Dolby Vision 和 Matroska/WebM 中的 HDR10+。解碼及顯示 HDR 內容取決於 Android 平台和裝置是否支援。請參閱「HDR 影片播放」,瞭解如何檢查 HDR 解碼/顯示功能,以及各 Android 版本 HDR 支援的限制。

播放需要特定轉碼器設定檔支援的 HDR 串流時,即使相同 MIME 類型中不支援該設定檔的其他解碼器在轉碼器清單中排序較高,ExoPlayer 的預設 MediaCodec 選擇器仍會選擇支援該設定檔的解碼器 (如有)。如果串流超出相同 MIME 類型硬體解碼器的功能範圍,系統可能會選取軟體解碼器。