HDMI-CEC 控制服務

高畫質的多媒體介面消費性電子產品控制 (HDMI-CEC) 標準能讓媒體消費性產品進行通訊 彼此交換資訊HDMI-CEC 支援許多功能,例如 「遙控直通式」和「系統音訊控制」,但其中最受歡迎的之一 那就是 One Touch PlayOne Touch Play 可讓媒體來源裝置開啟電視,並 因此你不必搜尋電視。 從 Chromecast 切換至藍光播放器。

在 Android 12 中,連接 HDMI 的螢幕電源控制設定會與 以及內螢幕的電源控制。HDMI 播放裝置喚醒時,系統會嘗試 喚醒連網電視,並透過 HDMI CEC One Touch Play 成為目前使用中的來源。 如果裝置為目前使用中的來源才進入休眠狀態,則裝置會嘗試關閉 連網電視。

一般來說,你無法選擇支援 HDMI-CEC。不過,大多數製造商都已採用 HDMI-CEC ,確保旗下裝置能與其他公司的裝置搭配運作每家製造商都會導入 HDMI-CEC 因此裝置並非總是能相互理解, 功能會因裝置而異有鑑於此,消費者無法以安全的方式 假設有兩項宣稱 CEC 支援的產品完全相容。

支援 HDMI-CEC 2.0 可提升 HDMI 裝置之間的相容性 傳送及接收裝置皆支援此標準版本。

解決方案

導入 Android TV 輸入架構 (TIF)、HDMI-CEC 整合所有連網裝置,盡可能減少相容性問題。 Android 建立了名為 HdmiControlService 的系統服務, 緩解這些痛點。

在 Android 中提供 HdmiControlService 希望能夠提供:

  • 為所有製造商導入 HDMI-CEC 的標準實作程序, 減少裝置相容性以前,製造商需自行開發 導入 HDMI-CEC 機製或採用第三方解決方案
  • 服務已通過多款 HDMI-CEC 裝置的測試 市場上。Android 針對相容性進行了嚴謹的研究 產品所發現的問題,並從裝置收集實用的建議。 投入大量技術的演練經驗CEC 服務的設計旨在 在標準與修改標準之間取得良好平衡 能與人們目前使用的產品搭配運作

整體設計

HdmiControlService」已與系統的其他部分連線,例如 電視輸入架構 (TIF)、音訊服務和電源服務 標準指定的多項功能

請參閱下圖,說明從自訂 CEC 改用 Pixel 導入更簡單的 HDMI-CEC 硬體抽象化機制 層次 (HAL)

這張圖表顯示如何在 Android 5.0 之前和之後導入 HDMI-CEC

圖 1. HDMI 控管服務 更換裝置

實作

請參閱下方圖表,瞭解 HDMI 控制服務的詳細檢視畫面。

顯示 HDMI 控管服務詳細資訊的圖片

圖 2. HDMI 控管服務詳情

以下是正確導入 Android HDMI-CEC 的關鍵要素:

  • 管理員類別 HdmiControlManager 可提供具有特殊權限的應用程式 與 API 互動系統服務,例如電視輸入管理員服務和音訊服務 可直接使用該服務
  • 本服務主要用來代管多種類型的邏輯 裝置。
  • HDMI-CEC 會透過硬體抽象層與硬體連線 (HAL) 以簡化通訊協定和訊號機制的差異處理 在不同的裝置之間進行切換HAL 定義適用於裝置製造商 實作 HAL 層

注意:裝置製造商應將 插入 device.mk 中的 PRODUCT_COPY_FILES

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.hdmi.cec.xml:system/etc/permissions/android.hardware.hdmi.cec.xml

根據裝置是 HDMI 接收器或 HDMI 來源裝置而定。 裝置製造商必須將「ro.hdmi.device_type」在 device.mkHdmiControlService 才能正常運作。

如果是 HDMI 來源裝置 (例如 over-top (OTT) 或機上盒 (STB) 裝置),請設定:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

針對 HDMI 接收器裝置 (例如面板電視),請設定:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • 裝置製造商提供的 CEC 控制器無法同時存在 只在 HdmiControlService。必須停用或移除。一般 首先,我們需要處理製造商的特定要求 指令。製造商專用的指令處理常式應納入 來擴充/修改服務這項工作會交給裝置處理 ,且非由 Android 指定。請注意,您在 服務中,製造商專屬指令 標準指令,或裝置與 Android 不相容。
  • HDMI-CEC 服務存取權受到防護等級保護 SignatureOrSystem。僅限系統元件或 「/system/priv-app」可以存取服務。這是為了保障 避免服務遭到惡意應用程式濫用

Android 支援 TV/Display(0)Playback device(4) 類型,可發出 One Touch Play 指令來啟用 和 Audio System (5) (處理系統音訊模式和 ARC)。 目前不支援其他裝置類型 (Tuner 和錄音工具)。

HDMI-CEC HAL

HDMI-CEC HAL API 可讓 HdmiControlService 使用 硬體資源,用於傳送/接收 HDMI-CEC 指令、調整必要設定, 並可視需要與基礎平台的 微處理器通訊 在 Android 系統處於待機模式時接手 CEC 控制項。

版本 功能 HAL 檔案
1.0 設定 HAL 資料 (地址、功能)。傳送 HDMI-CEC 指令。註冊回呼即可接收 HDMI-CEC 指令和熱插電事件。 IHdmiCec.hal
IHdmiCecCallback.hal
1.1 導入 HDMI-CEC 2.0 類型 @1.1::IHdmiCec.hal
@1.1::IHdmiCecCallback.hal

測試

根據 HDMI-CEC CTS 說明文件

HDMI-CEC 2.0

Android 來源 (播放) 和接收器 (電視面板) 裝置支援 HDMI-CEC 2.0。 HDMI-CEC 2.0 可在 HDMI 裝置間提供更良好的互通性。 改善「遠端控制直通式」,以及進行更廣泛的認證測試。 一般來說,HDMI-CEC 2.0 與其他裝置的互動會更有效率 不但減少了 HDMI-CEC 流量,互動速度也更快

如要讓裝置支援 HDMI-CEC 2.0,裝置和使用者設定必須 設定使用 HDMI-CEC 2.0。HAL 導入作業也必須回報對 HDMI-CEC 2.0 的支援 在對 IHdmiCec#getCecVersion 的呼叫中。

CEC 設定

在建構期間 (由使用 RRO 的原始設備製造商 (OEM)) 和執行階段,皆可設定 HDMI-CEC 行為 (由 HdmiControlManager @SystemApi 提供)。

HDMI-CEC 設定範例:

設定 選項
HDMI-CEC 為啟用或停用狀態。 已啟用
已停用
播放裝置傳送的 HDMI-CEC 電源控制訊息範圍。 僅限電視廣告活動
轉移至電視和音訊系統
廣播

在執行階段,應用程式可查詢每項目前可用設定和允許的選項。