高解析多媒體介面消費性電子產品控制 (HDMI-CEC) 標準可讓多媒體消費性產品彼此溝通及交換資訊。HDMI-CEC 支援許多功能,例如遙控器傳輸和系統音訊控制,但最受歡迎的功能之一是 One Touch Play。一鍵播放功能可讓媒體來源裝置開啟電視並自動切換輸入端,因此你不必尋找電視遙控器,就能從 Chromecast 切換到 Blu-ray 播放器。
在 Android 12 中,HDMI 連接螢幕的電源控制會與內部螢幕的電源控制保持一致。HDMI 播放裝置喚醒時,會嘗試喚醒已連接的電視,並透過 HDMI CEC 一鍵播放功能成為目前的有效來源。如果裝置在當前處於活動來源時進入休眠狀態,則會嘗試關閉已連結的電視。
支援 HDMI-CEC 通常是選用功能。不過,大多數製造商都採用 HDMI-CEC,因此自家裝置可與其他廠商的裝置搭配使用。每家製造商會以不同方式實作 HDMI-CEC 標準,因此裝置未必能彼此理解,支援的功能也因裝置而異。基於這種差異,消費者會無法放心假設,兩項宣稱 CEC 支援的產品完全相容。
如果傳送裝置和接收裝置都支援 HDMI-CEC 2.0 標準,則支援 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) 實作。
實作
請參閱下方圖表,瞭解 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 來源裝置而定,裝置製造商需要在 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)
類型,Playback
device(4)
可發出 One Touch Play 指令,成為有效來源,而 Audio System (5)
則可處理系統音訊模式和 ARC。目前不支援其他裝置類型 (調諧器和錄影機)。
HDMI-CEC HAL
HDMI-CEC HAL API 可讓 HdmiControlService
利用硬體資源傳送/接收 HDMI-CEC 指令、設定必要的設定,以及 (選用) 與底層平台中的微處理器通訊,在 Android 系統處於待機模式時接管 CEC 控制。
版本 | 功能 | HAL 檔案 |
---|---|---|
1.0 | 設定 HAL 資料 (位址、功能)。傳送 HDMI-CEC 指令。註冊回呼,以便接收 HDMI-CEC 指令和 hotplug 事件。 | 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 設定
您可以在建構期間 (由使用 RRO 的原始設備製造商) 和執行階段 (由 HdmiControlManager
@SystemApi) 設定 HDMI-CEC 行為。
HDMI-CEC 設定範例:
設定 | 選項 |
---|---|
是否已啟用 HDMI-CEC。 | 已啟用 已停用 |
播放裝置傳送的 HDMI-CEC 電源控制訊息範圍。 | 僅限電視 電視和音響系統 廣播 無 |
在執行階段,應用程式可查詢每項目前可用設定和允許的選項。