定義 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 也可以使用軟體解碼器擴充功能。這些架構必須手動建構,並包含在要使用它們的專案中。我們目前提供 AV1、VP9、FLAC、Opus 和 FFmpeg 的軟體解碼器程式庫。
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 類型硬體解碼器的功能時,選取軟體解碼器。