HDMI-CEC 控制服務

高清晰度多媒體接口消費電子控制 (HDMI-CEC) 標准允許多媒體消費產品相互通信和交換信息。 HDMI-CEC 支持許多功能,例如遠程控制直通和系統音頻控制,但最受歡迎的功能之一是一鍵播放。一鍵播放允許媒體源設備打開電視並自動切換其輸入端口,因此您無需搜索電視遙控器即可從 Chromecast 切換到藍光播放器。

在 Android 12 中,HDMI 連接顯示器的電源控制與內部顯示器的電源控制一致。當 HDMI 播放設備喚醒時,它會嘗試喚醒連接的電視並通過 HDMI CEC 一鍵播放成為當前活動源。如果設備在當前處於活動狀態時進入睡眠狀態,則會嘗試關閉連接的電視。

支持 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 服務和Audio 服務等系統服務可以直接使用該服務。
  • 該服務旨在允許託管不止一種類型的邏輯設備。
  • HDMI-CEC 通過硬件抽象層(HAL)與硬件相連,以簡化處理設備之間協議和信令機制的差異。 HAL 定義可供設備製造商用來實現 HAL 層。

:設備製造商應該添加以下行PRODUCT_COPY_FILESdevice.mk

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_typedevice.mkHdmiControlService正常工作。

對於 HDMI 源設備,例如 Over the Top (OTT) 或機頂盒 (STB) 設備,請設置:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

對於 HDMI 接收器設備,例如平板電視,請設置:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • A-提供製造商設備專有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控制通信系統處於待機模式。

版本特徵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 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配置

HDMI-CEC行為可以在兩個構建時被配置(通過使用複製權組織OEM)的運行時(由和HdmiControlManager @SystemApi)。

HDMI-CEC 設置示例:

環境選項
HDMI-CEC 是啟用還是禁用。啟用
已禁用
播放設備發送的 HDMI-CEC 電源控制消息的範圍。只看電視
到電視和音響系統
播送
沒有任何

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