Der HDMI-CEC-Standard (High-Definition Multimedia Interface Consumer Electronics Control) ermöglicht Multimedia-Verbraucherprodukten die Kommunikation und den Austausch von Informationen untereinander. HDMI-CEC unterstützt viele Funktionen, wie z. B. Remote Control Passthrough und System Audio Control, aber eine der beliebtesten ist One Touch Play. Mit One Touch Play kann ein Medienquellgerät den Fernseher einschalten und seinen Eingangsanschluss automatisch umschalten, sodass Sie nicht nach der TV-Fernbedienung suchen müssen, um von Ihrem Chromecast zum Blu-ray-Player zu wechseln.
Mit Android 12 stimmt die Leistungssteuerung des über HDMI angeschlossenen Displays mit der Leistungssteuerung des internen Displays überein. Wenn ein HDMI-Wiedergabegerät aktiviert wird, versucht es, den angeschlossenen Fernseher zu aktivieren und über HDMI CEC One Touch Play zur aktuell aktiven Quelle zu werden. Wenn das Gerät in den Ruhezustand wechselt, während es die aktuell aktive Quelle ist, versucht es dann, den angeschlossenen Fernseher auszuschalten.
Die Unterstützung von HDMI-CEC ist grundsätzlich optional. Allerdings haben die meisten Hersteller HDMI-CEC eingeführt, sodass ihre Geräte mit den Geräten anderer Unternehmen funktionieren. Jeder Hersteller implementiert den HDMI-CEC-Standard auf unterschiedliche Weise, sodass sich die Geräte nicht immer gegenseitig verstehen und die unterstützten Funktionen von Gerät zu Gerät unterschiedlich sind. Aufgrund dieser Unterschiede können Verbraucher nicht mit Sicherheit davon ausgehen, dass zwei Produkte, die CEC-Unterstützung versprechen, vollständig kompatibel sind.
Die Unterstützung von HDMI-CEC 2.0 trägt zur Verbesserung der Kompatibilität zwischen HDMI-Geräten bei, 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) vereint HDMI-CEC alle angeschlossenen Geräte und minimiert Kompatibilitätsprobleme. Android hat einen Systemdienst namens HdmiControlService
erstellt, um diese Probleme zu lindern.
Durch das Angebot HdmiControlService
als Teil des Android-Ökosystems möchte Android Folgendes bieten:
- Eine Standardimplementierung von HDMI-CEC für alle Hersteller, die die Geräteinkompatibilität verringert. Bisher mussten Hersteller eigene Implementierungen von HDMI-CEC entwickeln oder auf Lösungen von Drittanbietern zurückgreifen.
- Ein Dienst, der mit zahlreichen bereits auf dem Markt erhältlichen HDMI-CEC-Geräten gut getestet wurde. Android hat gründliche Untersuchungen zu Kompatibilitätsproblemen bei den Produkten durchgeführt und nützliche Ratschläge von Geräteimplementierern eingeholt, die Erfahrung mit der Technologie haben. Der CEC-Service ist darauf ausgelegt, ein gesundes Gleichgewicht zwischen dem Standard und Änderungen an diesem Standard zu wahren, sodass er mit den Produkten funktioniert, die bereits verwendet werden.
Gesamtkonzept
HdmiControlService
ist mit dem Rest des Systems wie TV Input Framework (TIF), Audiodienst und Power-Dienst verbunden, um die verschiedenen Funktionen zu implementieren, die der Standard spezifiziert.
Im folgenden Diagramm finden Sie eine Darstellung des Wechsels von einem benutzerdefinierten CEC-Controller zu einer Implementierung der einfacheren HDMI-CEC-Hardwareabstraktionsschicht (HAL).
Implementierung
Eine detaillierte Ansicht des HDMI-Steuerungsdienstes finden Sie im folgenden Diagramm.
Hier sind die wichtigsten Zutaten für eine ordnungsgemäße Android-HDMI-CEC-Implementierung:
- Eine Managerklasse
HdmiControlManager
stellt privilegierten Apps die API zur Verfügung. Systemdienste wie der TV Input Manager-Dienst und der Audiodienst können den Dienst direkt nutzen. - Der Dienst ist so konzipiert, dass er das Hosten mehrerer logischer Gerätetypen ermöglicht.
- HDMI-CEC ist über eine Hardware-Abstraktionsschicht (HAL) mit der Hardware verbunden, um den Umgang mit Unterschieden des Protokolls und der Signalmechanismen zwischen den Geräten zu vereinfachen. Die HAL-Definition steht Geräteherstellern zur Implementierung der HAL-Schicht zur Verfügung.
Hinweis : Gerätehersteller sollten die folgende Zeile in PRODUCT_COPY_FILES
in device.mk
hinzufügen.
PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.hdmi.cec.xml:system/etc/permissions/android.hardware.hdmi.cec.xml
Abhängig davon, ob es sich bei Ihrem Gerät um ein HDMI-Senkengerät oder ein HDMI-Quellgerät handelt, müssen Gerätehersteller ro.hdmi.device_type
in device.mk
festlegen, damit HdmiControlService
ordnungsgemäß funktioniert.
Stellen Sie für HDMI-Quellgeräte wie Over-the-Top-Geräte (OTT) oder Set-Top-Box-Geräte (STB) Folgendes ein:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4
Stellen Sie für HDMI-Senkengeräte wie Panel-TVs Folgendes ein:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
- Ein vom Gerätehersteller bereitgestellter proprietärer CEC-Controller kann nicht mit
HdmiControlService
koexistieren. Es muss deaktiviert oder entfernt werden. Häufige Anforderungen hierfür ergeben sich aus der Notwendigkeit, herstellerspezifische Befehle zu verarbeiten. Der herstellerspezifische Befehlshandler sollte durch Erweiterung/Änderung in den Dienst eingebunden werden. Diese Arbeit bleibt dem Gerätehersteller überlassen und wird nicht von Android vorgegeben. Beachten Sie, dass Änderungen am Dienst für herstellerspezifische Befehle die Art und Weise, wie Standardbefehle verarbeitet werden, nicht beeinträchtigen dürfen, da das Gerät sonst nicht mit Android kompatibel ist. - Der Zugriff auf den HDMI-CEC-Dienst wird mit der Schutzstufe
SignatureOrSystem
geschützt. Nur Systemkomponenten oder die in/system/priv-app
abgelegten Apps können auf den Dienst zugreifen. Dies dient dazu, den Dienst vor Missbrauch durch Apps mit böswilliger Absicht zu schützen.
Android unterstützt den Typ TV/Display(0)
, Playback device(4)
, das den One Touch Play-Befehl ausgeben kann, um zur aktiven Quelle zu werden, und Audio System (5)
, das den System-Audiomodus und ARC verwaltet. Andere Gerätetypen (Tuner und Recorder) werden derzeit nicht unterstützt.
HDMI-CEC HAL
Mit der HDMI-CEC-HAL-API kann der HdmiControlService
die Hardware-Ressource nutzen, um HDMI-CEC-Befehle zu senden/empfangen, notwendige Einstellungen zu konfigurieren und (optional) mit dem Mikroprozessor in der zugrunde liegenden Plattform zu kommunizieren, der die CEC-Steuerung übernimmt, während das Android Das System befindet sich im Standby-Modus.
Ausführung | Merkmale | HAL-Dateien |
---|---|---|
1,0 | Konfigurieren Sie HAL-Daten (Adressen, Funktionen). Senden Sie HDMI-CEC-Befehle. Registrieren Sie einen Rückruf, 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 verifiziert.
HDMI-CEC 2.0
Android-Quell- (Wiedergabe) und -Senkengeräte (TV-Panel) unterstützen HDMI-CEC 2.0. HDMI-CEC 2.0 bietet eine bessere Interoperabilität zwischen HDMI-Geräten, Verbesserungen beim Remote Control Passthrough und umfangreichere Zertifizierungstests. Im Allgemeinen sind HDMI-CEC 2.0-Interaktionen mit anderen Geräten effizienter, was zu weniger HDMI-CEC-Verkehr und schnelleren Interaktionen führt.
Damit ein Gerät HDMI-CEC 2.0 unterstützt, müssen die Geräte- und Benutzerkonfiguration auf die Verwendung von HDMI-CEC 2.0 eingestellt sein. Die HAL-Implementierung muss auch Unterstützung für HDMI-CEC 2.0 in Aufrufen an IHdmiCec#getCecVersion
melden.
CEC-Konfiguration
Das HDMI-CEC-Verhalten kann sowohl zur Build-Zeit (durch OEMs, die RROs verwenden) als auch zur Laufzeit (durch HdmiControlManager
@SystemApi) konfiguriert werden.
Beispiele für HDMI-CEC-Einstellungen:
Einstellung | Möglichkeit |
---|---|
Ob HDMI-CEC aktiviert oder deaktiviert ist. | Ermöglicht Deaktiviert |
Umfang der von einem Wiedergabegerät gesendeten HDMI-CEC-Leistungssteuerungsmeldungen. | Nur zum Fernsehen Zu TV und Audiosystem Übertragen Keiner |
Für jede Einstellung können aktuell verfügbare und erlaubte Optionen von Apps zur Laufzeit abgefragt werden.