HDMI-CEC 控制服務

高解析多媒體介面消費性電子產品控制 (HDMI-CEC) 標準可讓多媒體消費性產品彼此溝通及交換資訊。HDMI-CEC 支援許多功能,例如 「遙控直通式」和「系統音訊控制」,但其中最受歡迎的之一 那就是 One Touch PlayOne Touch Play 可讓媒體來源裝置開啟電視,並 因此你不必搜尋電視。 從 Chromecast 切換至藍光播放器。

在 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 會連結至 TV Input Framework (TIF)、音訊服務和電源服務等其他系統,以實作標準指定的各種功能。

請參閱下圖,說明從自訂 CEC 改用 Pixel 導入更簡單的 HDMI-CEC 硬體抽象化機制 層次 (HAL)

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

圖 1. HDMI 控制服務替代方案

實作

請參閱下圖,瞭解 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 來源裝置 (例如 OTT 或機上盒),請設定下列項目:

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 和錄音工具)。

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 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 設定

在建構期間 (由使用 RRO 的原始設備製造商 (OEM)) 和執行階段,皆可設定 HDMI-CEC 行為 (由 HdmiControlManager @SystemApi 提供)。

HDMI-CEC 設定範例:

設定 選項
HDMI-CEC 為啟用或停用狀態。 已啟用
已停用
播放裝置傳送的 HDMI-CEC 電源控制訊息範圍。 僅限電視廣告活動
轉移至電視和音訊系統
廣播

在執行階段,應用程式可查詢每項目前可用設定和允許的選項。