高解析多媒體介面消費性電子產品控制 (HDMI-CEC) 標準可讓多媒體消費性產品彼此通訊及交換資訊。HDMI-CEC 支援許多功能,例如遙控器傳輸和系統音訊控制,但最受歡迎的功能之一是「一鍵播放」。有了「一鍵播放」功能,媒體來源裝置就能開啟電視並自動切換輸入埠,因此你不需要尋找電視遙控器,就能從 Chromecast 切換到 Blu-ray 播放器。
在 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 希望透過在 Android 生態系統中提供 HdmiControlService
,達到以下目標:
- 為所有製造商提供 HDMI-CEC 標準實作方式,減少裝置不相容的問題。先前,製造商必須自行開發 HDMI-CEC 實作項目,或使用第三方解決方案。
- 這項服務已針對市面上眾多 HDMI-CEC 裝置進行充分測試。Android 針對產品間的相容性問題進行嚴格研究,並向經驗豐富的裝置實作人員收集實用建議。CEC 服務的設計宗旨,是在標準與標準修改之間維持適當平衡,確保能與使用者現有的產品搭配運作。
整體設計
HdmiControlService
會與系統的其餘部分 (例如 TV Input Framework (TIF)、音訊服務和電源服務) 連線,以實作標準指定的各種功能。
下圖顯示從自訂 CEC 控制器切換至較簡單的 HDMI-CEC 硬體抽象層 (HAL) 實作方式。

圖 1. 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 來源裝置而定,裝置製造商必須在 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。目前不支援其他裝置類型 (Tuner 和 Recorder)。
HDMI-CEC HAL
HdmiControlService
可透過 HDMI-CEC HAL API 使用硬體資源傳送/接收 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 實作項目會根據 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 設定
OEM 可以使用 RRO 在建構時設定 HDMI-CEC 行為,也可以使用 HdmiControlManager
@SystemApi 在執行階段設定。
HDMI-CEC 設定範例:
設定 | 選項 |
---|---|
HDMI-CEC 是否已啟用。 | 已啟用 已停用 |
播放裝置傳送的 HDMI-CEC 電源控制訊息範圍。 | 僅限電視 電視和音訊系統 廣播 無 |
應用程式可在執行階段查詢目前可用的每項設定和允許的選項。