支援的格式

定義 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 也可以利用 軟體解碼器擴充功能這些必須手動建立並加入 以及希望加以使用的專案我們目前提供的軟體解碼器 程式庫 AV1VP9FLACOpus、 和 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 動態相片 支援靜態圖片和影片
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 型別的解碼器 不支援該設定檔顯示在轉碼器清單上方的位置這會導致 以便在串流超過 的功能,