支援的格式

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

  • 個別媒體樣本的格式 (例如影片影格或音訊影格)。這些是範例格式。請注意,一般影片檔案至少會包含兩種樣本格式的媒體:一種是影片 (例如 H.264),另一種是音訊 (例如 AAC)。
  • 容器的格式,用於存放媒體樣本和相關聯的中繼資料。這些是容器格式。媒體檔案具有單一容器格式 (例如 MP4),通常以副檔名表示。請注意,對於部分純音訊格式 (例如 MP3),樣本和容器格式可能相同。
  • 自動調整串流技術,例如 DASH、SmoothStreaming 和 HLS。這些並非媒體格式,但仍須定義 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)
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 也能使用軟體解碼器擴充功能。這些項目必須手動建構,並納入要使用這些項目的專案。我們目前提供 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 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 類型硬體解碼器的功能範圍,系統可能會選取軟體解碼器。