Der Standard „High-Definition Multimedia Interface Consumer Electronics Control“ (HDMI-CEC) ermöglicht es Multimedia-Produkten, miteinander zu kommunizieren und Informationen auszutauschen. HDMI‑CEC unterstützt viele Funktionen, z. B. die Fernbedienungsdurchleitung und die Systemaudiosteuerung. Eine der beliebtesten Funktionen ist die One Touch Play-Funktion. Mit One Touch Play kann ein Media-Quellgerät den Fernseher einschalten und den Eingabeport automatisch wechseln. So müssen Sie nicht nach der TV-Fernbedienung suchen, um von Ihrem Chromecast zum Blu-ray-Player zu wechseln.
In Android 12 entspricht die Stromsteuerung des über HDMI angeschlossenen Displays der Stromsteuerung des internen Displays. Wenn ein HDMI-Wiedergabegerät aktiviert wird, versucht es, den angeschlossenen Fernseher zu aktivieren und über HDMI CEC One Touch Play zur aktuellen aktiven Quelle zu werden. Wenn das Gerät in den Ruhemodus wechselt, während es die aktuelle aktive Quelle ist, wird versucht, den verbundenen Fernseher auszuschalten.
Die Unterstützung von HDMI-CEC ist in der Regel optional. Die meisten Hersteller haben HDMI-CEC jedoch übernommen, damit ihre Geräte mit den Geräten anderer Unternehmen funktionieren. Jeder Hersteller implementiert den HDMI-CEC-Standard auf unterschiedliche Weise. Daher verstehen sich Geräte nicht immer und die unterstützten Funktionen variieren je nach Gerät. Aufgrund dieser Unterschiede können Verbraucher nicht davon ausgehen, dass zwei Produkte, die CEC unterstützen, vollständig kompatibel sind.
Die Unterstützung für HDMI-CEC 2.0 verbessert die Kompatibilität zwischen HDMI-Geräten, wenn sowohl das sendende als auch das empfangende Gerät diese Version des Standards unterstützen.
Lösung
Mit der Einführung des Android TV Input Framework (TIF) werden durch HDMI-CEC alle verbundenen Geräte zusammengeführt und Kompatibilitätsprobleme minimiert.
Android hat einen Systemdienst namens HdmiControlService
entwickelt, um diese Probleme zu beheben.
Mit HdmiControlService
als Teil des Android-Ökosystems möchte Android Folgendes bieten:
- Eine Standardimplementierung von HDMI-CEC für alle Hersteller, die die Inkompatibilität von Geräten verringert. Bisher mussten Hersteller eigene Implementierungen von HDMI-CEC entwickeln oder Lösungen von Drittanbietern verwenden.
- Ein Dienst, der bereits mit zahlreichen HDMI‑CEC-Geräten auf dem Markt getestet wurde. Android hat gründliche Untersuchungen zu Kompatibilitätsproblemen bei den Produkten durchgeführt und nützliche Ratschläge von Geräteherstellern eingeholt, die Erfahrung mit der Technologie haben. Der CEC-Dienst soll ein gesundes Gleichgewicht zwischen dem Standard und Änderungen an diesem Standard aufrechterhalten, damit er mit den Produkten funktioniert, die Nutzer bereits verwenden.
Design allgemein
HdmiControlService
ist mit dem Rest des Systems verbunden, z. B. mit dem TV Input Framework (TIF), dem Audiodienst und dem Power-Dienst, um die verschiedenen Funktionen zu implementieren, die im Standard festgelegt sind.
Das folgende Diagramm zeigt den Wechsel von einem benutzerdefinierten CEC-Controller zu einer Implementierung der einfacheren HDMI-CEC-Hardwareabstraktionsschicht (HAL).

Abbildung 1: Ersatz für den HDMI Control Service
Implementierung
Das folgende Diagramm zeigt eine detaillierte Ansicht des HDMI-Steuerungsdienstes.

Abbildung 2: Details zum HDMI-Steuerungsdienst
Hier sind die wichtigsten Voraussetzungen für eine korrekte HDMI-CEC-Implementierung unter Android:
- Eine Manager-Klasse
HdmiControlManager
stellt privilegierten Apps die API zur Verfügung. Systemdienste wie der TV Input Manager-Dienst und der Audio-Dienst können den Dienst direkt verwenden. - Der Dienst ist so konzipiert, dass mehr als ein Typ von logischem Gerät gehostet werden kann.
- HDMI-CEC ist über eine Hardware-Abstraktionsschicht (Hardware Abstraction Layer, HAL) mit der Hardware verbunden, um die Unterschiede zwischen den Protokoll- und Signalmechanismen der Geräte zu vereinfachen. Die HAL-Definition ist für Gerätehersteller verfügbar, damit sie die HAL-Ebene implementieren können.
Hinweis: Gerätehersteller sollten die folgende Zeile in PRODUCT_COPY_FILES
in device.mk
einfügen.
PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.hdmi.cec.xml:system/etc/permissions/android.hardware.hdmi.cec.xml
Je nachdem, ob Ihr Gerät ein HDMI-Senkengerät oder ein HDMI-Quellgerät ist, müssen Gerätehersteller ro.hdmi.device_type
in device.mk
für HdmiControlService
richtig einstellen.
Für HDMI-Quellgeräte wie Over-the-Top-Geräte (OTT) oder Set-Top-Boxen (STB) legen Sie Folgendes fest:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4
Für HDMI-Senkengeräte wie Flachbildfernseher gilt:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
- Ein proprietärer CEC-Controller, der vom Gerätehersteller bereitgestellt wird, kann nicht gleichzeitig mit
HdmiControlService
verwendet werden. Es muss deaktiviert oder entfernt werden. Häufige Anforderungen ergeben sich aus der Notwendigkeit, herstellerspezifische Befehle zu verarbeiten. Der herstellerspezifische Befehlshandler sollte in den Dienst integriert werden, indem er erweitert oder geändert wird. Diese Aufgabe wird dem Gerätehersteller überlassen und nicht von Android festgelegt. Beachten Sie, dass Änderungen, die im Dienst für herstellerspezifische Befehle vorgenommen werden, die Verarbeitung von Standardbefehlen nicht beeinträchtigen dürfen. Andernfalls ist das Gerät nicht mit Android kompatibel. - Der Zugriff auf den HDMI‑CEC-Dienst ist durch das Schutzniveau
SignatureOrSystem
geschützt. Nur Systemkomponenten oder die Apps, die sich in/system/priv-app
befinden, können auf den Dienst zugreifen. Dadurch soll der Dienst vor Missbrauch durch Apps mit böswilligen Absichten geschützt werden.
Android unterstützt die Typen TV/Display(0)
und Playback
device(4)
, die den Befehl „One Touch Play“ ausgeben können, um die aktive Quelle zu werden, sowie Audio System (5)
, die den Systemaudiomodus und ARC verarbeitet.
Andere Gerätetypen (Tuner und Recorder) werden derzeit nicht unterstützt.
HDMI-CEC HAL
Mit der HDMI-CEC HAL API kann HdmiControlService
die Hardwareressource verwenden, um HDMI-CEC-Befehle zu senden/empfangen, die erforderlichen Einstellungen zu konfigurieren und (optional) mit dem Mikroprozessor auf der zugrunde liegenden Plattform zu kommunizieren, der die CEC-Steuerung übernimmt, während sich das Android-System im Stand-by-Modus befindet.
Version | Funktionen | HAL-Dateien |
---|---|---|
1.0 | HAL-Daten (Adressen, Funktionen) konfigurieren HDMI-CEC-Befehle senden Callback registrieren, um HDMI-CEC-Befehle und Hotplug-Ereignisse zu empfangen. | IHdmiCec.hal IHdmiCecCallback.hal |
1.1 | Einführung von HDMI-CEC 2.0-Typen | @1.1::IHdmiCec.hal @1.1::IHdmiCecCallback.hal |
Testen
HDMI-CEC-Implementierungen von Geräten werden über CTS-Tests gemäß der HDMI-CEC-CTS-Dokumentation getestet und überprüft.
HDMI-CEC 2.0
Android-Quellgeräte (Wiedergabe) und ‑Senkengeräte (TV-Display) unterstützen HDMI-CEC 2.0. HDMI‑CEC 2.0 bietet eine bessere Interoperabilität zwischen HDMI‑Geräten, Verbesserungen bei der Fernbedienungsdurchleitung und umfangreichere Zertifizierungstests. Im Allgemeinen sind HDMI-CEC 2.0-Interaktionen mit anderen Geräten effizienter, was zu weniger HDMI-CEC-Traffic und schnelleren Interaktionen führt.
Damit ein Gerät HDMI-CEC 2.0 unterstützt, muss das Gerät und die Nutzerkonfiguration auf HDMI-CEC 2.0 eingestellt sein. Die HAL-Implementierung muss auch die Unterstützung für HDMI-CEC 2.0 in Aufrufen von IHdmiCec#getCecVersion
melden.
CEC-Konfiguration
Das HDMI-CEC-Verhalten kann sowohl zur Build-Zeit (von OEMs mit RROs) als auch zur Laufzeit (von HdmiControlManager
@SystemApi) konfiguriert werden.
Beispiele für HDMI-CEC-Einstellungen:
Einstellung | Option |
---|---|
Gibt an, ob HDMI-CEC aktiviert oder deaktiviert ist. | Aktiviert Deaktiviert |
Umfang der HDMI-CEC-Nachrichten zur Stromversorgung, die von einem Wiedergabegerät gesendet werden. | Nur auf Fernseher Auf Fernseher und Audiosystem Übertragen Keine |
Für jede Einstellung können Apps zur Laufzeit die aktuell verfügbaren und zulässigen Optionen abfragen.