高清多媒體接口消費電子控制 (HDMI-CEC) 標准允許多媒體消費產品相互通信和交換信息。 HDMI-CEC 支持許多功能,例如遠程控制直通和系統音頻控制,但最受歡迎的功能之一是 One Touch Play。 One 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
的系統服務來緩解這些痛點。
通過HdmiControlService
作為 Android 生態系統的一部分提供,Android 希望提供:
- 適用於所有製造商的 HDMI-CEC 標準實施,這將減少設備不兼容性。以前,製造商必須開發自己的 HDMI-CEC 實施或使用第三方解決方案。
- 一項針對市場上已有的眾多 HDMI-CEC 設備進行了良好測試的服務。 Android 一直在對產品之間發現的兼容性問題進行嚴格的研究,並從具有該技術經驗的設備實施者那裡收集有用的建議。 CEC 服務旨在保持標準和對該標準的修改之間的健康平衡,以便它與人們已經使用的產品一起使用。
整體設計
HdmiControlService
與電視輸入框架 (TIF)、音頻服務和電源服務等系統的其餘部分相連,以實現標準規定的各種功能。
有關從自定義 CEC 控制器切換到更簡單的 HDMI-CEC 硬件抽象層 (HAL) 實現的描述,請參見下圖。
![顯示在 Android 5.0 之前和之後如何實現 HDMI-CEC 的圖表](https://source.android.com/static/devices/tv/images/HDMI_Control_Service.png?authuser=0000&hl=zh-tw)
圖 1. HDMI 控制服務替換
執行
有關 HDMI 控制服務的詳細視圖,請參見下圖。
![顯示 HDMI 控制服務詳細信息的圖像](https://source.android.com/static/devices/tv/images/HDMI_Control_Service_Flow.png?authuser=0000&hl=zh-tw)
圖 2. HDMI 控制服務詳細信息
以下是正確實現 Android HDMI-CEC 的關鍵要素:
- 管理器類
HdmiControlManager
為特權應用程序提供 API。 TV Input Manager 服務和 Audio 服務等系統服務可以直接使用該服務。 - 該服務旨在允許託管一種以上類型的邏輯設備。
- 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 源設備,例如 Over the 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)
類型、可以發出 One Touch Play 命令成為活動源的Playback device(4)
和處理系統音頻模式和 ARC 的Audio System (5)
。目前不支持其他設備類型(調諧器和錄音機)。
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 文檔,通過 CTS 測試對設備的 HDMI-CEC 實施進行測試和驗證。
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 行為可以在構建時(由使用 RRO 的 OEM)和運行時(由HdmiControlManager
@SystemApi)配置。
HDMI-CEC 設置示例:
環境 | 選項 |
---|---|
HDMI-CEC 是啟用還是禁用。 | 啟用 已禁用 |
播放設備發送的 HDMI-CEC 功率控制消息的範圍。 | 僅限電視 至電視和音響系統 播送 沒有任何 |
對於當前可用和允許的每個設置,應用程序可以在運行時查詢。