Der Standard „High-Definition Multimedia Interface Consumer Electronics Control“ (HDMI-CEC) ermöglicht die Kommunikation und den Austausch von Informationen zwischen Multimedia-Produkten. HDMI-CEC unterstützt viele Funktionen, z. B. die Fernbedienungsweiterleitung und die Systemaudiosteuerung. Eine der beliebtesten Funktionen ist jedoch die One-Touch-Wiedergabe. Mit One Touch Play kann ein Gerät mit Medienquelle den Fernseher einschalten und den Eingangsport automatisch wechseln. Sie müssen also nicht nach der Fernbedienung des Fernsehers suchen, um von Chromecast zum Blu-ray-Player zu wechseln.
Unter Android 12 wird die Stromversorgung des über HDMI angeschlossenen Displays mit der des internen Displays synchronisiert. Wenn ein HDMI-Wiedergabegerät aktiviert wird, versucht es, den verbundenen 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 jedoch HDMI-CEC eingeführt, damit ihre Geräte mit 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 Abweichungen können Verbraucher nicht davon ausgehen, dass zwei Produkte, die die CEC-Unterstützung angeben, vollständig kompatibel sind.
Die Unterstützung von 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 über HDMI-CEC alle verbundenen Geräte zusammengeführt und Kompatibilitätsprobleme minimiert.
Android hat einen Systemdienst namens HdmiControlService
entwickelt, um diese Probleme zu beheben.
Durch die Einbindung von HdmiControlService
in das Android-Ökosystem möchte Android Folgendes bieten:
- Eine standardmäßige Implementierung von HDMI-CEC für alle Hersteller, die die Geräteinkompatibilität verringert. Bisher mussten Hersteller ihre eigenen HDMI-CEC-Implementierungen entwickeln oder Lösungen von Drittanbietern verwenden.
- Ein Dienst, der bereits mit zahlreichen HDMI-CEC-Geräten auf dem Markt getestet wurde. Android führt intensive Recherchen zu Kompatibilitätsproblemen bei den Produkten durch und holt sich nützliche Ratschläge von Geräteimplementierern ein, die mit der Technologie vertraut sind. Der CEC-Dienst ist so konzipiert, dass ein gesundes Gleichgewicht zwischen dem Standard und den Änderungen an diesem Standard besteht, damit er mit den Produkten funktioniert, die Nutzer bereits verwenden.
Design allgemein
HdmiControlService
ist mit dem Rest des Systems wie dem TV Input Framework (TIF), dem Audiodienst und dem Energieversorgungsdienst verbunden, 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 HDMI-Steuerung
Implementierung
Das folgende Diagramm zeigt eine detaillierte Ansicht des HDMI-Steuerungsdienstes.

Abbildung 2: Details zum HDMI-Steuerungsdienst
Hier sind die wichtigsten Zutaten für eine ordnungsgemäße HDMI-CEC-Implementierung in Android:
- Eine Managerklasse
HdmiControlManager
stellt privilegierten Apps die API zur Verfügung. Systemdienste wie der TV-Eingabedienst und der Audiodienst können den Dienst direkt verwenden. - Der Dienst ist so konzipiert, dass mehr als ein logischer Gerätetyp gehostet werden kann.
- HDMI-CEC ist über eine Hardwareabstraktionsschicht (HAL) mit der Hardware verbunden, um den Umgang mit Unterschieden zwischen den Protokoll- und Signalmechanismen der Geräte zu vereinfachen. Die HAL-Definition kann von Geräteherstellern zur Implementierung der HAL-Ebene verwendet werden.
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 es sich bei Ihrem Gerät um ein HDMI-Sink- oder ein HDMI-Quellgerät handelt, müssen die Gerätehersteller ro.hdmi.device_type
in device.mk
festlegen, damit HdmiControlService
ordnungsgemäß funktioniert.
Für HDMI-Quellgeräte wie Over-the-Top-Geräte (OTT) oder Set-Top-Boxen (STB) müssen folgende Einstellungen vorgenommen werden:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4
Für HDMI-Sink-Geräte wie Panel-Fernseher:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
- Ein vom Gerätehersteller bereitgestellter proprietärer CEC-Controller kann nicht mit
HdmiControlService
zusammen verwendet werden. Sie muss deaktiviert oder entfernt werden. Häufige Anforderungen hierfür ergeben sich aus der Notwendigkeit, herstellerspezifische Befehle zu verarbeiten. Der herstellerspezifische Befehlshandler sollte in den Dienst eingefügt werden, indem er erweitert oder geändert wird. Diese Aufgabe obliegt dem Gerätehersteller und wird nicht von Android spezifiziert. Beachten Sie, dass Änderungen am Dienst für herstellerspezifische Befehle 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 wird mit dem Schutzniveau
SignatureOrSystem
geschützt. Nur Systemkomponenten oder die in/system/priv-app
abgelegten Apps können auf den Dienst zugreifen. So soll der Dienst vor Missbrauch durch Apps mit böswilliger Absicht 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)
, der den Systemaudiomodus und ARC verarbeitet.
Andere Gerätetypen (Tuner und Rekorder) werden derzeit nicht unterstützt.
HDMI-CEC HAL
Mit der HDMI-CEC HAL API kann HdmiControlService
die Hardwareressource nutzen, um HDMI-CEC-Befehle zu senden/empfangen, die erforderlichen Einstellungen zu konfigurieren und (optional) mit dem Mikroprozessor in der zugrunde liegenden Plattform zu kommunizieren, der die CEC-Steuerung übernimmt, während sich das Android-System im Standbymodus 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 | HDMI-CEC 2.0-Typen einführen | @1.1::IHdmiCec.hal @1.1::IHdmiCecCallback.hal |
Testen
HDMI-CEC-Implementierungen von Geräten werden gemäß der HDMI-CEC-CTS-Dokumentation über CTS-Tests getestet und verifiziert.
HDMI-CEC 2.0
Die Android-Geräte für die Quelle (Wiedergabe) und das Ziel (Fernsehbildschirm) unterstützen HDMI-CEC 2.0. HDMI-CEC 2.0 bietet eine bessere Interoperabilität zwischen HDMI-Geräten, Verbesserungen bei der Fernbedienungsweiterleitung und umfangreichere Zertifizierungstests. Im Allgemeinen sind HDMI-CEC 2.0-Interaktionen mit anderen Geräten effizienter. Das führt zu weniger HDMI-CEC-Traffic und schnelleren Interaktionen.
Damit ein Gerät HDMI-CEC 2.0 unterstützt, müssen die Geräte- und Nutzerkonfiguration auf HDMI-CEC 2.0 eingestellt sein. Die HAL-Implementierung muss auch die Unterstützung von HDMI-CEC 2.0 in Aufrufen an IHdmiCec#getCecVersion
melden.
CEC-Konfiguration
Das HDMI-CEC-Verhalten kann sowohl zur Buildzeit (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 von einem Wiedergabegerät gesendeten HDMI-CEC-Nachrichten zur Energieverwaltung. | Nur an den Fernseher An den Fernseher und das Audiosystem Übertragen Keine |
Für jede Einstellung können derzeit verfügbare und zulässige Optionen von Apps zur Laufzeit abgefragt werden.