定義 ExoPlayer 支援的格式時,請特別注意 「媒體格式」是在多個層級定義從最低層級到 包括:
- 個別媒體樣本的格式 (例如影片影格或影格) 音訊)。這些是範例格式。請注意,一般的影片檔案 包含至少兩種範例格式的媒體一個用於影片 (例如 H.264) 一個用於音訊 (例如 AAC)。
- 用來存放媒體範例和相關關聯的容器格式 中繼資料。這些為容器格式。媒體檔案包含一個容器 格式 (例如 MP4),這通常以副檔名表示。注意事項 對於某些純音訊格式 (例如 MP3) 而言,樣本和容器格式 可能會完全相同
- 適性串流技術,例如 DASH、SmoothStreaming 和 HLS。這些 不是媒體格式,但還是需要定義 ExoPlayer 的各種支援等級
以下各節將定義 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」僅限配置 |
清除鍵 | 是 | API 21 以上版本、「cenc」僅限配置 |
即時播放 | ||
定期即時播放 | 是 | |
超低延遲 CMAF 即時播放功能 | 是 | |
常見媒體用戶端資料 (CMCD) | 是 | 整合指南 |
SmoothStreaming
ExoPlayer 支援採用 FMP4 容器格式的 SmoothStreaming,媒體串流 都必須經過模擬,也就是說影片、音訊和文字都必須具有獨特性 SmoothStreaming 資訊清單中的 StreamIndex 元素。包含音訊和 您也必須支援影片樣本格式 (請參閱 範例格式一節)。
功能 | 支援 | 留言 |
---|---|---|
容器 | ||
FMP4 | 是 | 僅限 Demuxed 串流 |
隱藏式輔助字幕/字幕 | ||
TTML | 是 | 內嵌於 FMP4 |
內容保護 | ||
PlayReady SL2000 | 是 | 僅 Android TV |
即時播放 | ||
定期即時播放 | 是 | |
常見媒體用戶端資料 (CMCD) | 是 | 整合指南 |
HLS
ExoPlayer 支援具備多種容器格式的 HTTP 即時串流。包含音訊和 您也必須支援影片樣本格式 (請參閱 範例格式一節)。三 強烈建議 HTTP 即時串流內容製作者產生高品質的 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 | 是 | 部分直播只能透過固定位元率跳轉播放** |
蛋 | 是 | 包含 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 解碼器,例如 MediaCodec
處理 FLAC 的解碼器 (須自 API 級別 27 起取得),或
FFmpeg 程式庫啟用 FLAC)。DefaultExtractorsFactory
會使用
擷取器 (如果應用程式使用 FLAC 程式庫建立)。
否則會使用 ExoPlayer 程式庫擷取器。
RTSP
ExoPlayer 同時支援直播和隨選 RTSP。支援的範例格式和 網路類型如下所列
支援的範例格式
- H264 (SDP 媒體說明必須在 fmtp 中加入 SPS/PPS 資料 屬性)。
- AAC (含 ADTS 位元流)。
- AC3:
支援的網路類型
- 透過 UDP 單點傳播技術進行 RTP (不支援多點傳播)。
- 交錯的 RTSP、RTP 使用 TCP 的 RTSP。
範例格式
根據預設,ExoPlayer 會使用 Android 的平台解碼器。因此,Google Cloud 支援 樣本格式取決於基礎平台,而非 ExoPlayer。 請參閱支援的媒體格式,瞭解 參閱說明文件,瞭解 Android 裝置支援的格式範例。請注意, 個別裝置可能會支援除了下列以外的其他格式。
除了 Android 的平台解碼器之外,ExoPlayer 也可以利用 軟體解碼器擴充功能這些必須手動建立並加入 以及希望加以使用的專案我們目前提供的軟體解碼器 程式庫 AV1、 VP9, FLAC、 Opus、 和 FFmpeg。
FFmpeg 程式庫
FFmpeg 程式庫支援 會解碼各種不同的音訊樣本格式您可以選擇 建立程式庫時要包含的解碼器,如 程式庫的 README.md。 下表提供音訊範例格式的對應 FFmpeg 解碼器名稱
範例格式 | 解碼器名稱 |
---|---|
Vorbis | Vorbis |
Opus | 奧圖斯 |
FLAC | flac |
ALAC | Alac |
PCM 微米 | pcm_mulaw |
PCM 法律 | pcm_alaw |
MP1、MP2、MP3 | MP3 |
美國醫力軍 | 阿倫布 |
AMR-WB | 阿姆文 |
進階音訊編碼 | 亞太地區 |
空調 - 3 | AC3 |
E-AC-3 | EAC3 |
DTS、DTS-HD | DCa |
TrueHD | mlp truehd |
圖片
ExoPlayer 支援下列圖片格式。詳情請見 圖片載入程式庫 ,瞭解如何整合外部程式庫 (可能為 組合不同格式
圖片格式 | 支援 | 附註 |
---|---|---|
BMP | 是 | |
GIF | 否 | 不支援擷取器 |
JPEG | 是 | |
JPEG 動態相片 | 是 | 支援靜態圖片和影片 |
JPEG Ultra HDR | 是 | 在 Android 14 或以下版本之前改回使用 SDR 非 HDR 螢幕 |
PNG | 是 | |
WebP | 是 | |
HEIF/HEIC | 是 | |
HEIC 動態相片 | 不盡然 | 僅支援靜態圖片* |
AVIF (基準) | 是 | 只能在 Android 14 以上版本中進行解碼 |
* 若是 HEIC 動態相片,可透過 中繼資料擷取者 並以獨立檔案的形式播放
獨立字幕格式
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 串流時,
ExoPlayer 的預設 MediaCodec
選取器將選擇一個支援該機制的解碼器
設定檔 (如果有的話),即使其他相同 MIME 型別的解碼器
不支援該設定檔顯示在轉碼器清單上方的位置這會導致
以便在串流超過
的功能,