高動態範圍影片播放

高動態範圍 (HDR) 影片是新一代的高畫質影片 影片解碼,帶來無與倫比的場景重現品質。會 因此大幅增加了亮度元件的動態範圍 (從目前的 100 cd/m2 到 1000 的 cd/m2) 並使用更寬鬆的 色彩空間 (BT 2020)。這是 4K UHD 的進化發展的核心元素 電視廣告空間

Android 10 支援下列 HDR 影片。

  • HDR10
  • VP9
  • HDR10+

從 Android 9 以上版本開始,無論通道模式為何,MediaCodec 都會回報 HDR 中繼資料。 您可以在非通道模式下,取得已解碼的資料與靜態/動態中繼資料。HDR10 專用 使用靜態中繼資料的 VP9Profile2 都會以具有鍵的輸出格式回報 KEY_HDR_STATIC_INFO。如果是使用動態中繼資料的 HDR10+,則回報為 索引鍵 KEY_HDR10_PLUS_INFO,在每個輸出影格上都可能會變更。 詳情請參閱「多媒體通道」。

從 Android 7.0 開始,初始 HDR 支援包含 建立適當的常數來探索及設定 HDR 影片 這些容器包括定義轉碼器類型和顯示模式 HDR 資料必須如何傳遞至 MediaCodec 並提供給 HDR 解碼器。

本文件旨在協助應用程式開發人員支援 HDR 串流 播放,並協助原始設備製造商 (OEM) 和 SOC 啟用 HDR 功能。

支援的 HDR 技術

不過,Android 7.0 以上版本支援下列 HDR 技術。

科技 Dolby-Vision HDR10 VP9-HLG VP9-PQ
轉碼器 AVC/HEVC HEVC VP9 VP9
轉移功能 ST-2084 (ST-2084) ST-2084 (ST-2084) HTTP 即時串流 ST-2084 (ST-2084)
HDR 中繼資料類型 動態 靜態 靜態

在 Android 7.0 中,系統只會定義透過通道模式播放 HDR 內容。 但裝置可能會支援在 SurfaceViews 上使用不透明播放功能 影片緩衝區。也就是說:

  • 沒有標準 Android API 可檢查是否支援 HDR 播放 使用未通道解碼器
  • 宣傳 HDR 播放功能的隧道影片解碼器必須 在連接具備 HDR 功能的顯示器時,支援 HDR 播放功能。
  • Android 開放原始碼計畫 Android 不支援 HDR 內容的 GL 組成 7.0 版本。

探索

使用 HDR 播放功能需使用支援 HDR 的解碼器,並連線至 支援 HDR 的螢幕。有些技術需要特定的 擷取。

螢幕

應用程式應使用新的Display.getHdrCapabilities 提供相關 API,用於查詢指定螢幕支援的 HDR 技術。這是 基本上是 EDID 靜態中繼資料資料區塊中 in CTA-861.3:

  • public Display.HdrCapabilities getHdrCapabilities()
    傳回螢幕的 HDR 功能。
  • Display.HdrCapabilities
    封裝特定螢幕的 HDR 功能。舉例來說 以及所需亮度資料的詳細資料

常數:

  • int HDR_TYPE_DOLBY_VISION
    支援 Dolby Vision。
  • int HDR_TYPE_HDR10
    HDR10 / PQ 支援。
  • int HDR_TYPE_HDR10_PLUS
    HDR10+ 支援。
  • int HDR_TYPE_HLG
    支援混合式 Log-Gamma。
  • float INVALID_LUMINANCE
    亮度值無效。

公開方法:

  • float getDesiredMaxAverageLuminance()
    以 cd/cd/m2 格式傳回所需內容的最大影格平均亮度資料, 這個畫面。
  • float getDesiredMaxLuminance()
    傳回這個螢幕的所需內容最高亮度資料 (以 cd/cd/m2 為單位)。
  • float getDesiredMinLuminance()
    傳回這個螢幕的 cd/cd/m2 內容最低亮度資料。
  • int[] getSupportedHdrTypes()
    取得此螢幕支援的 HDR 類型 (請參閱常數)。傳回空白 陣列。

解碼器

應用程式應該使用 CodecCapabilities.profileLevels API,驗證對 全新 HDR 功能設定檔:

Dolby-Vision

MediaFormat MIME 常數:

String MIMETYPE_VIDEO_DOLBY_VISION

MediaCodecInfo.CodecProfileLevel 設定檔常數:

int DolbyVisionProfileDvavPen
int DolbyVisionProfileDvavPer
int DolbyVisionProfileDvheDen
int DolbyVisionProfileDvheDer
int DolbyVisionProfileDvheDtb
int DolbyVisionProfileDvheDth
int DolbyVisionProfileDvheDtr
int DolbyVisionProfileDvheStn

Dolby Vision 影片圖層和中繼資料必須串連為單一 每個影格的緩衝區。系統會自動執行 支援 Dolby-Vision 的 MediaExtractor。

HEVC HDR 10

MediaCodecInfo.CodecProfileLevel 設定檔常數:

int HEVCProfileMain10HDR10
int HEVCProfileMain10HDR10Plus

VP9 HLG 和PQ

MediaCodecInfo.CodecProfileLevel 個設定檔 常數:

int VP9Profile2HDR
int VP9Profile2HDR10Plus
int VP9Profile3HDR
int VP9Profile3HDR10Plus

如果平台支援具有 HDR 的解碼器,就應該支援 支援 HDR 的擷取器。

只有通道解碼器才能夠播放 HDR 內容。可單人練球 因此未經過通道處理的解碼器可能會導致 HDR 資訊遺失 內容會壓平合併成 SDR 的色彩音量

擷取器

各種 HDR 技術支援下列容器 Android 7.0 版本:

科技 Dolby-Vision HDR10 VP9-HLG VP9-PQ
收納盒 MP4 MP4 WebM WebM

偵測音軌 (檔案) 是否需要 HDR 支援 Ad Manager 使用者介面應用程式可能會剖析轉碼器專屬資料 用於判斷曲目是否需要特定的 HDR 設定檔。

摘要

下表列出各種 HDR 技術的元件需求:

科技 Dolby-Vision HDR10 VP9-HLG VP9-PQ
支援的 HDR 類型 (螢幕) HDR_TYPE_DOLBY_VISION HDR_TYPE_HDR10 HDR_TYPE_HLG HDR_TYPE_HDR10
容器 (擷取器) MP4 MP4 WebM WebM
解碼器 MIMETYPE_VIDEO_DOLBY_VISION MIMETYPE_VIDEO_HEVC MIMETYPE_VIDEO_VP9 MIMETYPE_VIDEO_VP9
設定檔 (解碼器) Dolby 其中一個設定檔 HEVCProfileMain10HDR10 VP9Profile2HDR 或 VP9Profile3HDR VP9Profile2HDR 或 VP9Profile3HDR

注意:

  • Dolby-Vision 位元串流會按照定義方式封裝在 MP4 容器中 由 Dolby 製作。應用程式可以自行實作支援 Dolby 的擷取工具, 只要將存取單元從對應層封裝到 也就是 Dolby 定義的單一存取單位。
  • 平台可能支援具備 HDR 功能的擷取器,但沒有相應的 支援 HDR 的解碼器。

播放

應用程式確認支援 HDR 播放功能後,就能播放 還原 HDR 內容的方式和播放非 HDR 內容的方式差不多 ,請注意以下事項:

  • 針對 Dolby-Vision,是否有特定媒體檔案/音軌需要 無法立即使用支援 HDR 的解碼器應用程式必須 或取得這項資訊 剖析 MediaFormat 的轉碼器專屬資料部分。
  • CodecCapabilities.isFormatSupported」未考量 如要支援這類設定檔,則須使用通道解碼器功能。

啟用 HDR 平台支援

SoC 供應商和原始設備製造商 (OEM) 必須進行額外工作才能啟用 HDR 平台 應用程式支援。

Android 7.0 中的 HDR 平台異動

以下是平台的一些重要異動 (應用程式/原生層) 所有原始設備製造商 (OEM) 和 SOC 需注意的地方。

螢幕

硬體組合

支援 HDR 的平台必須能混合使用非 HDR 內容與非 HDR 內容 內容。未定義確切的混合特徵和運算 自 Android 7.0 版起,這項程序通常會遵循下列步驟操作:

  1. 決定包含所有圖層的線性色彩空間/體積 形成差異化色彩、後期和潛在 中繼資料。
    如果是直接合成螢幕,這可能是線性空間 符合螢幕的色彩音量。
  2. 將所有圖層轉換為通用色域。
  3. 執行混合。
  4. 如果是透過 HDMI 顯示:
    1. 確定色彩、後期和潛在動態中繼資料 混合場景。
    2. 將產生的混合場景轉換為衍生色彩 的空間/磁碟區
  5. 如果直接在螢幕上顯示,請轉換產生的混合 到必要的顯示訊號來產生這個場景。

多媒體探索

系統僅支援透過 HWC2 探索 HDR 螢幕。裝置實作者必須 選擇性啟用針對 Android 7.0 所發布的 HWC2 轉接器。 運作。因此,平台必須新增對 HWC2 的支援或擴充 您可透過 Android 開放原始碼計畫架構提供這項資訊。HWC2 公開了 ,將 HDR 靜態資料傳播至架構與應用程式。

HDMI

  • 連接的 HDMI 螢幕投放廣告 其 HDR 功能可透過 HDMI EDID 進行 CTA-861.3 第 4.2 節。
  • 應使用以下 EOTF 對應:
    • ET_0 傳統伽瑪 - SDR 亮度範圍:未對應到任何 HDR 類型
    • ET_1 傳統伽瑪 - HDR 亮度範圍:未對應到任何 HDR 類型
    • ET_2 SMPTE ST 2084 - 對應至 HDR 類型 HDR10
  • 透過 HDMI 連接 Dolby Vision 或 HLG 支援的訊號已依照定義完成 由相關機構提出
  • 請注意,HWC2 API 使用所需的浮點亮度值,因此 8 位元 EDID 值必須以適當方式轉譯。

解碼器

平台必須新增支援 HDR 的通道解碼器,並通告其 HDR 聯絡。一般來說,支援 HDR 的解碼器必須:

  • 支援通道解碼 (FEATURE_TunneledPlayback)。
  • 支援 HDR 靜態中繼資料 (OMX.google.android.index.describeHDRColorInfo) 及其所屬 傳播至螢幕/硬體組合。如為 HLG,請使用適當的中繼資料 需提交至顯示器。
  • 支援顏色說明 (OMX.google.android.index.describeColorAspects) 及其所屬 傳播至螢幕/硬體組合。
  • 支援相關標準定義的 HDR 內嵌中繼資料。

支援 Dolby Vision 解碼器

如要支援 Dolby Vision,平台必須新增支援 Dolby-Vision 功能 HDR OMX 解碼器有鑑於 Dolby Vision 的具體細節,這通常是由 以及一或多個 AVC 和/或 HEVC 解碼器的包裝函式解碼器,以及 來生成圖像這類解碼器必須:

  • 支援 MIME 類型「video/dolby-vision」。
  • 宣傳支援的 Dolby Vision 設定檔/層級。
  • 接受含有所有圖層子存取權單元的存取單元, 這個模型是由 Dolby 定義的
  • 接受 Dolby 定義的轉碼器專屬資料。舉例來說,含有 Dolby Vision 設定檔/層級,也可能包括 使用內部解碼器
  • 支援在 Dolby Vision 設定檔/層級之間自動調整切換, 應用程式。

設定解碼器時,系統不會將實際的 Dolby 設定檔通訊 轉換為轉碼器。這項操作只會在解碼器後透過轉碼器專屬資料執行 已開始。平台可以選擇支援多個 Dolby Vision 分別用於 AVC 設定檔和 HEVC 設定檔 並初始化基礎轉碼器。如為單一 Dolby Vision 內容 解碼器都支援這兩種設定檔,因此必須同時支援切換 自動調度管理多個資源

如果平台同時提供 Dolby-Vision 支援的解碼器 一般 HDR 解碼器支援,必須符合以下條件:

  • 提供 Dolby-Vision 感知擷取器 (即使不支援) 高動態範圍播放。
  • 提供解碼器,支援 Dolby 定義的視覺設定檔。

HDR10 解碼器支援

如要支援 HDR10,平台必須新增支援 HDR10 的 OMX 解碼器。這個 通常是經過通道的 HEVC 解碼器,而且還支援剖析和處理 HDMI 相關中繼資料。這類解碼器 (除了一般 HDR 解碼器) 支援服務) 相關規定:

  • 支援 MIME 類型「video/hevc」。
  • 廣告支援 HEVCMain10HDR10。HEVCMain10HRD10 設定檔支援 還須支援 HEVCMain10 設定檔,而該設定檔需要 相同層級的 HEVCMain 設定檔。
  • 支援剖析後製中繼資料 SEI 區塊,以及其他 HDR 服務供應商 (SPS) 中包含的相關資訊

VP9 解碼器支援

如要支援 VP9 HDR,平台必須新增支援 VP9 Profile2 的 HDR OMX 編碼器和解碼器通常是經過通道的 VP9 解碼器,且該解碼器也支援處理 HDMI 相關中繼資料。這類解碼器 (除了一般 HDR 解碼器) 支援服務) 相關規定:

  • 支援 MIME 類型「video/x-vnd.on2.vp9」。
  • 廣告支援的 VP9Profile2HDR。也支援 VP9Profile2HDR 設定檔 必須支援相同層級的 VP9Profile2 設定檔。

擷取器

支援 Dolby Vision 擷取器

支援 Dolby Vision 解碼器的平台必須新增 Dolby 擷取器 (稱為 Dolby Extractor) 支援 Dolby 影片內容。

  • 一般 MP4 擷取器只能從檔案擷取基本圖層 但不會套用強化項目或中繼資料層Dolby 的特殊擷取器 以便從檔案擷取資料
  • Dolby 擷取器必須為每個 Dolby 視訊音軌公開 1 到 2 個音軌 (群組):
    • 類型為「video/dolby-vision」的 Dolby Vision HDR 音軌的 結合了 2 個 3 層的 Dolby 串流HDR 音軌的存取單位格式, 定義如何封裝基本/強化/中繼資料的存取單位 轉換為單一緩衝區,然後解碼為單一 HDR 畫面 這個模型是由 Dolby 定義的
    • 如果 Dolby Vision 視訊軌包含獨立音軌 (回溯相容) 基礎層 (BL),擷取器也必須以獨立「video/avc」公開 或「video/hevc」軌道。擷取器必須提供一般的 AVC/HEVC 存取 每首曲目的單元數
    • BL 音軌的軌跡 ID (「track-ID」) 必須與 HDR 音軌,讓應用程式知道這兩種編碼是 影片。
    • 應用程式可以根據平台的 技術。
  • Dolby Vision 設定檔/層級必須以 HDR 音軌
  • 若平台提供支援 Dolby-Vision 的解碼器,也必須提供 Dolby-Vision 感知擷取器,即使不支援 HDR 播放也沒關係。

HDR10 和 VP9 HDR 擷取器支援

沒有其他支援 HDR10 或 VP9 的擷取器需求 HLG。平台必須擴充 MP4 擷取器,才能在 MP4 中支援 VP9 PQ。高動態範圍 靜態中繼資料必須在 VP9 PQ 位元流中傳播, 中繼資料會透過一般程序 MediaExtractor =>MediaCodec 管道。

支援 Dolby Vision 的 Stagefright 擴充功能

平台必須在 Stagefright 中加入 Dolby Vision 格式支援:

  • 支援對已壓縮通訊埠的通訊埠定義查詢。
  • 支援 DV 解碼器的設定檔/層級列舉。
  • 支援公開 DV HDR 音軌的 DV 設定檔/層級。

特定技術的導入詳細資料

HDR10 解碼器管道

圖 1. HDR10 管道

HDR10 位元串流會封裝在 MP4 容器中。應用程式會使用 使用 MP4 擷取工具擷取影格資料,並傳送給解碼器。

  • MPEG4 擷取器
    HDR10 位元由 MPEG4Extractor 和 HDR 音軌,類型為「video/HEVC」將 擷取。架構會選用支援 Main10HDR10 設定檔,用於解碼該音軌。
  • HEVC 解碼器
    HDR 資訊是 SEI 或 SPS。系統會先接收 HEVC 解碼器 包含 HDR 資訊的影格速率接著解碼器會擷取 HDR 圖像 資訊,並通知應用程式正在解碼 HDR 影片。高動態範圍 相關資訊隨附在解碼器輸出格式中

供應商採取的行動

  1. 宣傳支援的 HDR 解碼器設定檔和等級 OMX 類型。範例:
    OMX_VIDEO_HEVCProfileMain10HDR10 (和Main10)
  2. 實作索引支援功能: 「OMX.google.android.index.describeHDRColorInfo
  3. 實作索引支援功能: 「OMX.google.android.index.describeColorAspects
  4. 實作對主化中繼資料的 SEI 剖析功能支援。

Dolby Vision 解碼器管道

圖 2. Dolby Vision 管道

Dolby-bit-stream 會包裝在 MP4 容器中,如 Dolby,理論上,應用程式可以使用一般 MP4 擷取器 基本層、強化層和中繼資料層不過 這不符合目前的 Android MediaExtractor/MediaCodec 模型。

  • DolbyExtractor:
    • Dolby-bitstream 會由 DolbyExtractor 辨識, 多個圖層,為每個 Dolby 視訊軌 (群組) 提供 1 到 2 首曲目:
      • 類型為「video/dolby-vision」的 HDR 音軌結合 2/3 層的 Dolby 串流。HDR 音軌的存取單位格式,而該格式定義 如何封裝基本/強化/中繼資料層的存取單位 在單一緩衝區中解碼為單一 HDR 影格,前提是 由 Dolby 製作。
      • (選用,僅適用於 BL 回溯相容時選用) A BL 音軌包含 只能由一般 MediaCodec 解碼器解碼 例如 AVC/HEVC 解碼器擷取器應提供一般的 AVC/HEVC 這個測試群組的存取單元。這個 BL 音軌的軌跡-專屬 ID 必須相同 (「track-ID」) 做為 Dolby Track,讓應用程式知道這些 是同一部影片的兩種編碼方式
    • 應用程式可以根據平台的 技術。
    • HDR 音軌有特定的 HDR 類型,因此架構會挑選 Dolby 影片解碼器,可將曲目解碼BL 測試群組會解碼以下程式碼: 一般的 AVC/HEVC 視訊解碼器。
  • DolbyDecoder:
    • DolbyDecoder 會收到含有必要存取權的存取單元 所有圖層的單位 (EL+BL+MD 或 BL+MD)
    • CSD (轉碼器特定資料,如 SPS+PPS+VPS) 資訊 您可以將個別圖層封裝成 1 個 CSD 影格,由 Dolby,必須提供單一 CSD 影格。

Dolby 動作

  1. 定義各種 Dolby 容器的存取單位包裝 抽象化 Dolby 解碼器 (即緩衝區) 的配置 (例如 BL+EL+MD) HDR 解碼器預期的格式)。
  2. 為抽象 Dolby 解碼器定義 CSD 的封裝。

供應商採取的行動

  1. 實作 Dolby 擷取器。你也可以使用 Dolby 執行這項操作。
  2. 將 DolbyExtractor 整合至架構中。進入點 frameworks/av/media/libstagefright/MediaExtractor.cpp
  3. 宣告 HDR 解碼器設定檔和等級 OMX 類型。範例:OMX_VIDEO_DOLBYPROFILETYPEOMX_VIDEO_DOLBYLEVELTYP
  4. 實作索引支援功能: 'OMX.google.android.index.describeColorAspects 分鐘
  5. 將動態 HDR 中繼資料傳播至應用程式, 相框。一般來說,這些資訊必須封裝至已解碼的頁框中 是根據 Dolby 的定義,因為 HDMI 標準不提供 傳遞到顯示器上

VP9 解碼器管道

圖 3. VP9-PQ 管道

VP9 位元流會以 WebM 定義的方式封裝在 WebM 容器中 。應用程式必須使用 WebM 擷取器,從中擷取 HDR 中繼資料 然後再將影格傳送給解碼器

  • WebM 擷取器:
  • VP9 解碼器:
    • 解碼器會接收 Profile2 位元流,將其解碼為一般 VP9 檔案 串流。
    • 解碼器會從架構接收任何 HDR 靜態中繼資料。
    • 解碼器會透過 VP9 的位元存取單位接收靜態中繼資料 PQ 串流。
    • VP9 解碼器必須能夠傳播 HDR 靜態/動態中繼資料 在螢幕上播放。

供應商採取的行動

  1. 實作索引支援功能: OMX.google.android.index.describeHDRColorInfo
  2. 實作索引支援功能: OMX.google.android.index.describeColorAspects
  3. 傳播 HDR 靜態中繼資料