支援的格式

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

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

以下各節將定義 ExoPlayer 對各等級的支援,由高至低定義。最後兩部分說明獨立字幕格式和 HDR 影片播放支援。

自動調整串流

DASH

ExoPlayer 支援採用多種容器格式的 DASH。媒體串流必須採去式處理,也就是說,影片、音訊和文字必須在 DASH 資訊清單中的不同 AdaptationSet 元素中定義 (CEA-608 例外,如下表所述)。您也必須支援包含的音訊和影片樣本格式 (詳情請參閱範例格式一節)。

功能 有權限 留言
容器
FMP4 僅限 Demuxed 串流
WebM 僅限 Demuxed 串流
馬特洛 僅限 Demuxed 串流
MPEG-TS 無支援
隱藏式輔助字幕/字幕
TTML 根據 ISO/IEC 14496-30 的規定,用於原始嵌入式或嵌入 FMP4
WebVTT 根據 ISO/IEC 14496-30 的規定,用於原始嵌入式或嵌入 FMP4
CEA-608 使用 SCTE 無障礙功能描述元發出訊號時,內嵌於 FMP4 中
CEA-708 使用 SCTE 無障礙功能描述元發出訊號時,內嵌於 FMP4 中
Metadata
EMSG 中繼資料 已嵌入 FMP4
內容保護
Widevine 「cenc」配置:API 19 以上版本;「cbcs」配置:API 25 以上版本
PlayReady SL2000 僅限 Android TV 的「cenc」配置
ClearKey 僅限 API 21 以上版本、「cenc」配置
即時播放
定期直播
超低延遲 CMAF 即時播放
通用媒體客戶資料 (CMCD) 整合指南

SmoothStreaming

ExoPlayer 支援採用 FMP4 容器格式的 SmoothStreaming。媒體串流必須經過去處理,也就是說,影片、音訊和文字必須在 SmoothStreaming 資訊清單中的不同 StreamIndex 元素中定義。您也必須支援包含的音訊和影片範例格式 (詳情請參閱範例格式一節)。

功能 有權限 留言
容器
FMP4 僅限 Demuxed 串流
隱藏式輔助字幕/字幕
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 API 19 以上版本 (「cenc」配置) 和 25+ (「cbcs」配置)
PlayReady SL2000 僅 Android TV
伺服器控制
Delta 最新消息
禁止重新載入播放清單
封鎖預先載入提示的載入作業 不含未定義長度的位元組範圍
即時播放
定期直播
低延遲 HTTP 即時串流 (Apple)
低延遲 HTTP 即時串流 (社群)
通用媒體客戶資料 (CMCD) 整合指南

漸進式容器格式

採用下列容器格式的串流可直接由 ExoPlayer 播放。您也必須支援包含的音訊和影片範例格式 (詳情請參閱範例格式一節)。

容器格式 有權限 留言
MP4
M4A
FMP4
WebM
馬特洛
MP3 部分直播只能透過固定位元率跳轉尋找**
蛋蛋 內含 Vorbi、Opus 和 FLAC
無障礙檔案
MPEG-TS
MPEG-PS
FLV 無法搜尋*
ADTS (AAC) 只能透過固定位元率跳轉方式尋找**
FLAC 使用 FLAC 程式庫ExoPlayer 程式庫中的 FLAC 擷取器***
AMR 只能透過固定位元率跳轉方式尋找**
JPEG 動態相片 系統只會擷取 MP4 內容

* 不支援跳轉功能,因為容器未提供中繼資料 (例如範例索引),可讓媒體播放器有效率地執行搜尋。如果需要跳轉,建議您使用更適當的容器格式。

** 這些擷取工具具有 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、透過 RTSP 使用 TCP 的 RTP。

範例格式

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

除了 Android 的平台解碼器外,ExoPlayer 也可以使用軟體解碼器擴充功能。這些架構必須手動建構,並包含在要使用它們的專案中。我們目前提供 AV1VP9FLACOpusFFmpeg 的軟體解碼器程式庫。

FFmpeg 程式庫

FFmpeg 程式庫支援解碼各種不同的音訊樣本格式。建構程式庫時,您可以選擇要納入哪些解碼器,如程式庫的 README.md 所述。下表提供從音訊樣本格式與對應 FFmpeg 解碼器名稱的對應關係。

範例格式 解碼器名稱
Vorbis Vorbis
Opus 空瓶座
FLAC flac
ALAC 阿拉克
PCM μ-l pcm_mulaw
PCM A-law pcm_alaw
MP1、MP2、MP3 MP3
AMR-NB AMB
AMR-WB AMR
進階音訊編碼 亞太地區
空調 AC3
E-AC-3 eac3
DTS、DTS-HD DAA
TrueHD 毫升

獨立字幕格式

ExoPlayer 支援各種格式的獨立字幕檔。按照媒體項目頁面所述,字幕檔案可以側載。

容器格式 有權限 MIME 類型
WebVTT MIME 類型。TEXT_VTT
TTML / SMPTE-TT MimeTypes.APPLICATION_TTML
SubRip MimeTypes.APPLICATION_SUBRIP
SubStationAlpha (SSA/ASS) MIME 類型.TEXT_SSA

高動態範圍影片播放

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

播放需要支援特定轉碼器設定檔的 HDR 串流時,ExoPlayer 的預設 MediaCodec 選取器會選擇支援該設定檔的解碼器 (如果有的話),即使其他不支援該設定檔的相同 MIME 類型解碼器顯示在轉碼器清單上方。這可能會導致在串流超出相同 MIME 類型硬體解碼器的功能時,選取軟體解碼器。