HDMI-CEC控制服務

高清多媒體介面消費性電子控制 (HDMI-CEC) 標準允許多媒體消費產品相互通訊和交換資訊。 HDMI-CEC 支援許多功能,例如遠端控制直通和系統音訊控制,但最受歡迎的功能之一是一鍵播放。一鍵播放可讓媒體來源裝置自動開啟電視並切換其輸入端口,因此您無需搜尋電視遙控器即可從 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的系統服務來緩解這些痛點。

透過提供HdmiControlService作為 Android 生態系統的一部分,Android 希望提供:

  • 為所有製造商提供 HDMI-CEC 標準實施,這將減少設備不相容性。以前,製造商必須開發自己的 HDMI-CEC 實施方案或使用第三方解決方案。
  • 該服務已經針對市場上已有的眾多 HDMI-CEC 設備進行了充分測試。 Android 一直在對產品中發現的兼容性問題進行嚴格的研究,並向具有該技術經驗的設備實施者收集有用的建議。 CEC 服務旨在標準和標準修改之間保持健康的平衡,以便它能夠與人們已經使用的產品一起使用。

整體設計

HdmiControlService與電視輸入框架 (TIF)、音訊服務和電源服務等系統的其餘部分連接,以實現標準指定的各種功能。

請參閱下圖,以了解從自訂 CEC 控制器到更簡單的 HDMI-CEC 硬體抽象層 (HAL) 實現的切換的描述。

顯示 Android 5.0 前後 HDMI-CEC 實現方式的圖表

圖 1. HDMI 控制服務替換

執行

有關 HDMI 控制服務的詳細視圖,請參閱下圖。

顯示 HDMI 控制服務詳細資訊的影像

圖 2. HDMI 控制服務詳細信息

以下是正確實施 Android HDMI-CEC 的關鍵要素:

  • 管理器類別HdmiControlManager為特權應用程式提供 API。 TV Input Manager 服務和音訊服務等系統服務可以直接使用該服務。
  • 該服務旨在允許託管多種類型的邏輯設備。
  • 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 來源設備,設備製造商需要在device.mk中設定ro.hdmi.device_type以使HdmiControlService正常運作。

對於 HDMI 來源設備,例如機上盒 (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) (可以發出一鍵播放指令以成為活動來源)和Audio System (5) (處理系統音訊模式和 ARC)。目前不支援其他設備類型(調諧器和錄音機)。

HDMI-CEC HAL

HDMI-CEC HAL API 允許HdmiControlService利用硬體資源發送/接收HDMI-CEC 命令、配置必要的設置,以及(可選)與底層平台中的微處理器進行通信,該微處理器將在Android 運行時接管CEC控制。系統處於待機模式。

版本特徵哈爾文件
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 實現根據HDMI-CEC CTS 文件透過 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 實作也必須在呼叫IHdmiCec#getCecVersion時報告對 HDMI-CEC 2.0 的支援。

CEC配置

HDMI-CEC 行為可以在建置時(由 OEM 使用 RRO)和執行時間(由HdmiControlManager @SystemApi)進行設定。

HDMI-CEC 設定範例:

環境選項
HDMI-CEC 是否啟用或停用。啟用
殘障人士
播放設備發送的 HDMI-CEC 電源控制訊息的範圍。僅限電視
至電視和音訊系統
pod送
沒有任何

對於目前可用的每個設定和允許的選項,應用程式可以在運行時查詢。