Das Android TV Input Framework (TIF) vereinfacht die Bereitstellung von Live-Inhalten auf Android TV. Das Android TIF bietet Herstellern eine Standard-API zum Erstellen von Eingabemodulen zur Steuerung von Android TV und ermöglicht die Live-TV-Suche und Empfehlungen über vom TV Input veröffentlichte Metadaten.
Ziel des Rahmenwerks ist es nicht, TV-Standards oder regionale Anforderungen umzusetzen, es erleichtert Geräteherstellern jedoch die Einhaltung regionaler Standards für die digitale TV-Ausstrahlung ohne erneute Implementierung. Die Dokumentation in diesem Abschnitt kann auch für App-Entwickler von Drittanbietern nützlich sein, die benutzerdefinierte TV-Eingänge erstellen möchten.
Komponenten
Die Android TV Input Framework-Implementierung umfasst einen TV Input Manager. Das TIF arbeitet mit der TV-App zusammen, einer System-App, die nicht durch eine Drittanbieter-App ersetzt werden kann, um auf integrierte und IP-Tuner-Kanäle zuzugreifen. Die TV-App kommuniziert über den TV Input Manager mit TV-Eingangsmodulen, die vom Gerätehersteller oder anderen Parteien bereitgestellt werden.
Das TV Input Framework besteht aus:
- TV-Anbieter (
com.android.providers.tv.TvProvider
): eine Datenbank mit Kanälen, Programmen und zugehörigen Berechtigungen - TV-App (
com.android.tv.TvActivity
): die App, die die Benutzerinteraktion verwaltet - TV Input Manager (
android.media.tv.TvInputManager
): Ermöglicht den TV-Eingängen die Kommunikation mit der TV-App - TV-Eingang: eine App, die physische oder virtuelle Tuner und Eingangsanschlüsse darstellt
- TV-Eingangs-HAL (
tv_input
Modul): eine Hardwaredefinition, die es System-TV-Eingängen ermöglicht, bei Implementierung auf TV-spezifische Hardware zuzugreifen - Kindersicherung: die Technologie, die das Blockieren von Kanälen und Programmen ermöglicht
- HDMI-CEC: die Technologie, die die Fernsteuerung verschiedener Geräte über HDMI ermöglicht
- Tuner-Framework: ein Framework für den TV-Eingang mit integriertem Tuner
- MediaCas: ein Framework für bedingten Zugriff
- Tuner Resource Manager: ein Dienst zur Verwaltung der Hardwareressourcen für TV-Eingänge, MediaCas und integrierte Tuner-Eingänge
Diese Komponenten werden im Folgenden ausführlich behandelt. Im folgenden Diagramm finden Sie eine detaillierte Ansicht der Android TV Input Framework-Architektur.
Fließen
So wird die Architektur ausgeübt:
- Der Benutzer sieht und interagiert mit der TV-App, einer System-App, die nicht durch eine Drittanbieter-App ersetzt werden kann.
- Die TV-App zeigt den AV-Inhalt vom TV-Eingang an.
- Die TV-App kann nicht direkt mit den TV-Eingängen kommunizieren. Der TV Input Manager identifiziert den Status von TV-Eingängen für die TV-App. Weitere Einzelheiten zu diesen Einschränkungen finden Sie weiter unten im TV Input Manager .
Berechtigungen
- Nur
signatureOrSystem
TV-Eingänge und die TV-App haben vollen Zugriff auf die Datenbank des TV-Anbieters und können KeyEvents empfangen. - Nur System-TV-Eingänge können über den TV Input Manager-Dienst auf den TV-Eingangs-HAL zugreifen. Der Zugriff auf TV-Eingänge erfolgt eins zu eins über TV Input Manager-Sitzungen.
- TV-Eingänge von Drittanbietern haben paketgesperrten Zugriff auf die Datenbank des TV-Anbieters und können nur auf übereinstimmende Paketzeilen lesen/schreiben.
- TV-Eingänge von Drittanbietern können entweder ihre eigenen Inhalte oder Inhalte von den Passthrough-TV-Eingängen eines Geräteherstellers wie HDMI1 anzeigen. Sie können keine Inhalte von Nicht-Passthrough-TV-Eingängen wie einem integrierten oder einem IPTV-Tuner anzeigen.
-
TV_INPUT_HARDWARE
-Berechtigung für eine Hardware-TV-Input-App signalisiert dem TV Input Manager-Dienst, den TV Input-Dienst beim Booten zu benachrichtigen, den TV Input Manager-Dienst aufzurufen und seine TV-Eingänge hinzuzufügen. Mit dieser Berechtigung kann eine Hardware-TV-Eingabe-App mehrere TV-Eingänge pro TV-Eingabedienst unterstützen und die unterstützten TV-Eingänge dynamisch hinzufügen und entfernen.
TV-Anbieter
Die Datenbank des TV-Anbieters speichert die Kanäle und Programme von TV-Eingängen. Der TV-Anbieter veröffentlicht und verwaltet auch die zugehörigen Berechtigungen, sodass TV-Eingaben nur ihre eigenen Aufzeichnungen sehen können. Beispielsweise kann ein bestimmter TV-Eingang nur die von ihm bereitgestellten Kanäle und Programme sehen und es ist ihm untersagt, auf die Kanäle und Programme anderer TV-Eingänge zuzugreifen.
Der TV-Anbieter ordnet intern „Sendegenre“ dem „kanonischen Genre“ zu. TV-Eingaben sind dafür verantwortlich, „Broadcast-Genre“ mit dem Wert im zugrunde liegenden Broadcast-Standard zu füllen, und das Feld „Kanonisches Genre“ wird automatisch mit dem korrekten zugeordneten Genre aus android.provider.TvContract.Genres
gefüllt. Bei einem Rundfunkstandard ATSC A/65 und einem Programm mit dem Genre 0x25 (bedeutet „Sport“) füllt der TV-Eingang beispielsweise das „Broadcast-Genre“ mit der Zeichenfolge „Sport“ und der TV-Anbieter das Feld „Kanonisches Genre“. der zugeordnete Wert android.provider.TvContract.Genres.SPORTS
.
Eine detaillierte Ansicht des TV-Anbieters finden Sie im Diagramm unten.
Nur Apps in der privilegierten Systempartition können die gesamte TV-Anbieter-Datenbank lesen.
Passthrough-TV-Eingänge speichern keine Kanäle und Programme.
Zusätzlich zu den Standardfeldern für Kanäle und Programme bietet die TV-Provider-Datenbank in jeder Tabelle auch ein Feld vom Typ BLOB, COLUMN_INTERNAL_PROVIDER_DATA
, das TV Inputs zum Speichern beliebiger Daten verwenden kann. Diese BLOB-Daten können benutzerdefinierte Informationen wie die Frequenz des zugehörigen Tuners enthalten und können in einem Protokollpuffer oder in anderer Form bereitgestellt werden. Ein durchsuchbares Feld ist verfügbar, um bestimmte Kanäle bei der Suche nicht verfügbar zu machen (z. B. um länderspezifische Anforderungen an den Inhaltsschutz zu erfüllen).
Beispiele für Datenbankfelder
Der TV-Anbieter unterstützt strukturierte Daten in Kanal- ( android.provider.TvContract.Channels
) und Programmtabellen ( android.provider.TvContract.Programs
). Diese Tabellen werden von TV-Eingängen und System-Apps wie der TV-App ausgefüllt und auf sie zugegriffen. Diese Tabellen verfügen über vier Arten von Feldern:
- Anzeige: Anzeigefelder enthalten Informationen, die Apps möglicherweise für den Benutzer sichtbar machen möchten, z. B. den Namen (
COLUMN_DISPLAY_NAME
) oder die Nummer (COLUMN_DISPLAY_NUMBER
) eines Kanals oder den Titel des angezeigten Programms. - Metadaten: Es gibt drei Felder zur Identifizierung von Inhalten gemäß relevanten Standards, z. B. die Transportstrom-ID eines Kanals (
COLUMN_TRANSPORT_STREAM_ID
), die ursprüngliche Netzwerk-ID (COLUMN_ORIGINAL_NETWORK_ID
) und die Dienst-ID (COLUMN_SERVICE_ID
). - Interne Daten : Felder, die für die benutzerdefinierte Verwendung von TV-Eingängen vorgesehen sind.
Einige Felder, wieCOLUMN_INTERNAL_PROVIDER_DATA
, sind anpassbare BLOB-Felder, in denen ein TV-Eingang beliebige Metadaten zu seinem Kanal oder Programm speichern kann. - Flag: Flag-Felder geben an, ob die Suche, das Durchsuchen oder die Anzeige eines Kanals eingeschränkt werden soll. Dies kann nur auf Kanalebene eingestellt werden. Alle Programme richten sich nach der Einstellung auf dem Kanal.
-
COLUMN_SEARCHABLE
: In bestimmten Regionen kann es erforderlich sein, die Suche auf einige Kanäle einzuschränken.COLUMN_SEARCHABLE = 0
bedeutet, dass der Kanal nicht in den Suchergebnissen angezeigt werden soll. -
COLUMN_BROWSABLE
: Nur für Systemanwendungen sichtbar. Einschränken des Durchsuchens des Kanals durch Anwendungen.COLUMN_BROWSABLE = 0
bedeutet, dass der Kanal nicht in die Kanalliste aufgenommen werden soll. -
COLUMN_LOCKED
: Nur für Systemanwendungen sichtbar. Beschränken Sie die Anzeige des Kanals durch ungültige Konten ohne Eingabe eines PIN-Codes.COLUMN_LOCKED = 1
bedeutet, dass der Kanal durch Kindersicherung geschützt sein sollte.
Eine ausführlichere Liste der Felder finden Sie android/frameworks/base/media/java/android/media/tv/TvContract.java
Berechtigungen und Zugriffskontrolle
Alle Felder sind für jeden sichtbar, der Zugriff auf die entsprechende Zeile hat. Für Benutzer sind keine Felder direkt zugänglich. Sie sehen nur, was die TV-App, System-Apps oder TV-Eingänge anzeigen.
- Jede Zeile verfügt über
PACKAGE_NAME
, das Paket (App), dem diese Zeile gehört und das bei Abfrage, Einfügen und Aktualisieren über TvProvider.java überprüft wird. Ein TV-Eingang kann nur auf die von ihm geschriebenen Informationen zugreifen und ist von den von anderen TV-Eingängen bereitgestellten Informationen abgesperrt. - READ- und WRITE-Berechtigungen über AndroidManifest.xml (erfordert Zustimmung des Benutzers), um verfügbare Kanäle zu ermitteln.
- Nur
signatureOrSystem
Apps können die BerechtigungACCESS_ALL_EPG_DATA
erwerben, um auf die gesamte Datenbank zuzugreifen.
TV-Eingabemanager
Der TV Input Manager stellt eine zentrale System-API für das gesamte Android TV Input Framework bereit. Es vermittelt die Interaktion zwischen Apps und TV-Eingängen und bietet Kindersicherungsfunktionen. TV Input Manager-Sitzungen müssen eins zu eins mit TV-Eingängen erstellt werden. Der TV Input Manager ermöglicht den Zugriff auf installierte TV-Eingänge, sodass Apps Folgendes tun können:
- Listen Sie die TV-Eingänge auf und überprüfen Sie deren Status
- Erstellen Sie Sitzungen und verwalten Sie Zuhörer
Bei Sitzungen kann ein TV-Eingang von der TV-App nur auf URIs abgestimmt werden, die sie zur TV-Anbieterdatenbank hinzugefügt hat, mit Ausnahme von Passthrough-TV-Eingängen, die mithilfe von TvContract.buildChannelUriForPassthroughInput()
optimiert werden können. Die Lautstärke eines TV-Eingangs kann ebenfalls eingestellt sein. Vom Gerätehersteller bereitgestellte und signierte TV-Eingaben (Signatur-Apps) oder andere in der Systempartition installierte Apps haben Zugriff auf die gesamte TV-Anbieter-Datenbank. Dieser Zugriff kann zum Erstellen von Apps zum Durchsuchen und Durchsuchen aller verfügbaren TV-Kanäle und -Programme verwendet werden.
Eine App kann einen TvInputCallback
erstellen und beim android.media.tv.TvInputManager
registrieren, um bei einer Statusänderung eines TV-Eingangs oder beim Hinzufügen oder Entfernen eines TV-Eingangs zurückgerufen zu werden. Beispielsweise kann eine TV-App reagieren, wenn ein TV-Eingang getrennt wird, indem sie ihn als getrennt anzeigt und seine Auswahl verhindert.
Der TV Input Manager abstrahiert die Kommunikation zwischen der TV-App und TV-Eingängen. Die Standardschnittstelle von TV Input Manager und TV Input ermöglicht es mehreren Geräteherstellern, ihre eigenen TV-Apps zu erstellen, während alle TV-Eingänge von Drittanbietern auf allen TV-Apps funktionieren.
TV-Eingänge
TV-Eingaben sind Android-Apps in dem Sinne, dass sie über eine AndroidManifest.xml verfügen und installiert sind (über Play, vorinstalliert oder seitlich geladen). Android TV unterstützt vorinstallierte System-Apps, vom Gerätehersteller signierte Apps und TV-Eingänge von Drittanbietern.
Einige Eingänge, wie der HDMI-Eingang oder der integrierte Tuner-Eingang, können nur vom Hersteller bereitgestellt werden, da sie direkt mit der zugrunde liegenden Hardware kommunizieren. Andere, wie IPTV, Place-Shifting und externe STB, können von Drittanbietern als APKs im Google Play Store bereitgestellt werden. Nach dem Herunterladen und Installieren kann der neue Eingang in der TV-App ausgewählt werden.
Beispiel für eine Passthrough-Eingabe
In diesem Beispiel ist der vom Gerätehersteller bereitgestellte TV-Eingang vertrauenswürdig und hat vollen Zugriff auf den TV-Anbieter. Als Passthrough-TV-Eingang registriert er keine Kanäle oder Programme beim TV-Anbieter. Um den URI zu erhalten, der zum Referenzieren der Passthrough-Eingabe verwendet wird, verwenden Sie die android.media.tv.TvContract
Dienstprogrammmethode buildChannelUriForPassthroughInput(String inputId)
. Die TV-App kommuniziert mit dem TV Input Manager, um den HDMI-TV-Eingang zu erreichen.
Beispiel für einen eingebauten Tuner
In diesem Beispiel ist der vom Gerätehersteller bereitgestellte integrierte Tuner-TV-Eingang vertrauenswürdig und hat vollen Zugriff auf den TV-Anbieter.
Beispiel für die Eingabe eines Drittanbieters
In diesem Beispiel wird der externe STB-TV-Eingang von einem Drittanbieter bereitgestellt. Da dieser TV-Eingang nicht direkt auf den eingehenden HDMI-Video-Feed zugreifen kann, muss er den TV-Eingangsmanager durchlaufen und den vom Gerätehersteller bereitgestellten HDMI-TV-Eingang verwenden.
Über den TV Input Manager kann der externe STB-TV-Eingang mit dem HDMI-TV-Eingang kommunizieren und ihn bitten, das Video auf HDMI1 anzuzeigen. So kann der STB-TV-Eingang das Fernsehgerät steuern, während der vom Hersteller bereitgestellte HDMI-TV-Eingang das Video rendert.
Beispiel für ein Bild im Bild (PIP).
Das obige Diagramm zeigt, wie Tasten auf einer Fernbedienung für die Bild-in-Bild-Anzeige (PIP) an einen bestimmten TV-Eingang weitergeleitet werden. Diese Tastendrücke werden vom vom Gerätehersteller bereitgestellten Hardwaretreiber interpretiert, der Hardware-Scancodes in Android-Tastencodes umwandelt und sie als KeyEvents an die Standard-Android- Eingabepipeline InputReader
und InputDispatcher
weiterleitet. Diese lösen wiederum Ereignisse in der TV-App aus, wenn diese im Fokus ist.
Nur System-TV-Eingänge sind zum Empfang InputEvents
berechtigt, und zwar nur, wenn sie über die Systemberechtigung RECEIVE_INPUT_EVENT
verfügen. Der TV-Eingang ist dafür verantwortlich, zu bestimmen, welche InputEvents konsumiert werden sollen, und sollte es der TV-App ermöglichen, die Schlüssel zu verarbeiten, die sie nicht konsumieren muss.
Die TV-App ist dafür verantwortlich, zu wissen, welcher System-TV-Eingang aktiv ist, d. h. vom Benutzer ausgewählt wurde, und eingehende KeyEvents
eindeutig zu machen und sie an die richtige TV Input Manager-Sitzung weiterzuleiten, indem sie dispatchInputEvent()
aufruft, um das Ereignis an den zugehörigen TV-Eingang weiterzuleiten .
Beispiel für die MHEG-5-Eingabe
Das folgende Diagramm zeigt eine detailliertere Ansicht, wie KeyEvents
über das Android TIF weitergeleitet werden.
Es zeigt den Ablauf einer Red-Button-App, die in Europa üblich ist und Benutzern den Zugriff auf interaktive Apps auf ihren Fernsehern ermöglicht. Über diesen Transportstrom kann eine App bereitgestellt werden. Wenn auf die Schaltfläche geklickt wird, können Benutzer mit diesen Broadcast-Apps interagieren. Beispielsweise könnten Sie diese Broadcast-Apps verwenden, um auf verwandte Webseiten oder Sportergebnisse zuzugreifen.
Im Abschnitt „Broadcast-App“ erfahren Sie, wie Broadcast-Apps mit der TV-App interagieren.
In diesem Beispiel:
- Die TV-App ist im Fokus und empfängt alle Tasten.
-
KeyEvents
(z. B. die rote Taste) werden alsInputEvents.
- Der System-TV-Eingang ist in den MHEG-5-Stack integriert und verfügt über die Systemberechtigung
RECEIVE_INPUT_EVENT
. - Beim Empfang des Aktivierungsschlüsselcodes (z. B. rote Taste) aktiviert der TV-Eingang die Broadcast-App.
- TV-Eingaben verbrauchen
KeyEvents
alsInputEvents
und die Broadcast-App steht im Fokus und verarbeitetInputEvents
, bis sie verworfen wird.
Hinweis : TV-Eingänge von Drittanbietern erhalten niemals Tasten.
TV-Eingang HAL
Der TV-Eingangs-HAL unterstützt die Entwicklung von TV-Eingängen für den Zugriff auf TV-spezifische Hardware. Wie bei anderen Android-HALs ist die TV-Eingabe-HAL ( tv_input
) im AOSP-Quellbaum verfügbar und der Anbieter entwickelt seine Implementierung.
Hinweis : Ab Android 14 wird die TV-Eingangs-HAL-Schnittstelle mit AIDL definiert.
TV-App
Die System-TV-App präsentiert dem Nutzer Live-TV-Inhalte. Neben der Android-Plattform wird eine Referenz-TV-App (Live-TV) bereitgestellt, die vom Gerätehersteller unverändert verwendet, angepasst, erweitert oder ersetzt werden kann. Der Quellcode ist im Android Open Source Project verfügbar und Sie können im Artikel „Reference TV App“ damit beginnen.
Gerätehersteller können ihre TV-Apps erweitern, um gerätehersteller- oder länderspezifische Funktionen zu implementieren, dies liegt jedoch nicht im Geltungsbereich von TIF oder der Referenz-TV-App.
Die System-TV-App muss mindestens die folgenden Aufgaben erledigen:
Einrichtung und Konfiguration
- TV-Eingänge automatisch erkennen
- Lassen Sie die TV-Eingänge die Kanaleinrichtung starten
- Kontrollieren Sie die Kindersicherungseinstellungen
- Kanäle bearbeiten
Anzeigen
- Greifen Sie auf alle TV-Kanäle zu und navigieren Sie darin
- Rufen Sie die Informationsleiste des Fernsehprogramms auf
- Zeigt EPG-Daten (Electronic Programming Guide) an
- Unterstützt mehrere Audio- und Untertitelspuren
- Stellen Sie eine PIN-Herausforderung für die Kindersicherung bereit
- TV-Eingabe-UI-Overlay für TV-Standard zulassen (HbbTV usw.)
- Füllen Sie Suchergebnisse nach TV-Kanälen und -Programmen aus
- App-Verknüpfungskarten anzeigen
- Unterstützt Timeshifting-APIs
- Behandeln Sie die DVR-Funktionalität und unterstützen Sie TV-Aufzeichnungs-APIs
Dieser Funktionsumfang wird mit den neuen Android-Versionen erweitert, in denen die Plattform-TIF-APIs erweitert werden. CTS Verifier bietet die Kompatibilitätstestabdeckung.
Unterstützung für TV-Eingänge von Drittanbietern
Android TV bietet Entwickler-APIs für TV-Eingaben von Drittanbietern und ermöglicht es installierten Apps, Softwarekanäle in das Live-TV-Erlebnis einzubinden. Um eine kompatible Android-Geräteimplementierung sicherzustellen, hat die System-TV-App einige Aufgaben hinsichtlich der Anzeige von TV-Eingängen und Kanälen Dritter für den Benutzer. Die Referenz-Live-TV-App bietet eine kompatible Implementierung; Beim Ersetzen der System-TV-App müssen Gerätehersteller sicherstellen, dass ihre eigenen Apps eine ähnliche Kompatibilität bieten, um die Erwartungen der Entwickler auf allen Android-TV-Geräten zu erfüllen.
Die System-TV-App muss neben dem Standard-Live-TV-Dienst des Geräts auch Eingaben von Drittanbietern anzeigen. Das Versprechen der Entwickler-APIs besteht darin, dass Benutzer Kanäle (nach der Installation) innerhalb ihres Standard-TV-Erlebnisses finden können.
Eine visuelle Unterscheidung zwischen integrierten Kanälen und Drittanbieterkanälen ist zulässig, wie im Abschnitt „TV-App“ des Android CDD definiert.
Die folgenden Abschnitte zeigen, wie die Live-TV-Anwendung die CDD-Anforderungen erfüllt.
Neue Kanaleinrichtung
Das Hinzufügen neuer Eingänge/Kanäle von Drittanbietern beginnt damit, dass der Benutzer einen TV-Eingang in einem App-Store wie Google Play findet und installiert.
Einige TV-Eingänge von Drittanbietern fügen der TvProvider-Datenbank automatisch Kanäle hinzu. Die meisten bieten jedoch eine Setup-Aktivität an, damit der Benutzer seine Kanäle einrichten, Anmeldedaten angeben und andere Aktionen ausführen kann. Die System-TV-App muss sicherstellen, dass der Benutzer diese Setup-Aktivität aktivieren kann, weshalb das CDD erfordert, dass Eingaben von Drittanbietern nur minimale Navigationsaktionen abseits der Haupt-TV-App erfordern.
Die Referenz-Live-TV-App bietet das Menü „Kanalquellen“ für den Zugriff auf Eingänge.
Darüber hinaus wird nach der Installation eines neuen TvInput oben im TV-App-Menü eine Benachrichtigungskarte angezeigt, die den Benutzer direkt zum Setup führt:
Wenn der Benutzer über die Benachrichtigung Maßnahmen ergreift, kann er auswählen, ob er seine Quellen einrichten möchte, wie in Abbildung 10 dargestellt.
Die Entwicklererwartungen in diesem Bereich finden Sie unter Definieren Ihres TV-Eingabedienstes .
Passen Sie die Kanalliste an
Gerätehersteller stellen möglicherweise eine Benutzeroberfläche bereit, um bestimmte Kanäle auszublenden und Benutzern die Verwaltung ihrer eigenen EPGs zu ermöglichen. Live-TV beinhaltet diese Möglichkeit.
EPG
Eingabeentwickler von Drittanbietern müssen darauf vertrauen können, dass Benutzer während der allgemeinen Nutzung auf allen kompatiblen Android TV-Geräten problemlos zu ihren Kanälen navigieren können.
Kanäle von Drittanbieter-Eingängen müssen als Teil des standardmäßigen Live-TV-Erlebnis-EPG des Geräts präsentiert werden. Es können eine visuelle Trennung oder separate Kategorien für Drittanbieterkanäle verwendet werden (siehe Abschnitt „TV-App“ im Android CDD). Entscheidend ist, dass Benutzer die von ihnen installierten Kanäle finden können.
Suchen
Hersteller müssen die TV-App so implementieren, dass sie Suchergebnisse für globale Suchanfragen einschließt, um das beste Benutzererlebnis zu gewährleisten. Live TV bietet eine Implementierung (siehe , die Ergebnisse von Eingaben von Drittanbietern liefert (erforderlich für Plattformkompatibilität) sowie integrierte Eingaben.
Zeitverschiebung
Für Geräte mit Android 6.0 und höher muss die TV-App die zeitversetzten APIs des Android-Frameworks unterstützen. Darüber hinaus müssen Hersteller Wiedergabesteuerungen in der TV-App implementieren, die es Benutzern ermöglichen, die Wiedergabe anzuhalten, fortzusetzen, zurückzuspulen und vorzuspulen.
Für TV-Eingänge, die Timeshifting unterstützen, muss die TV-App Wiedergabesteuerungen anzeigen.
DVR
Für Geräte mit Android 7.0 und höher muss die TV-App die TV-Aufzeichnungs-APIs des Android-Frameworks unterstützen, um aufgezeichnete Programme zu unterstützen, aufzulisten und abzuspielen.
Dadurch können Gerätehersteller ihre DVR-Subsysteme an TIF anschließen und den Integrationsaufwand für die Aktivierung oder Integration der DVR-Funktionalität auf einem TV-Gerät erheblich reduzieren. Es ermöglicht auch Drittanbietern, Aftermarket-DVR-Systeme bereitzustellen, die an ein Android-TV-Gerät angeschlossen werden können.
Neben der Aufzeichnung von Live-Inhalten kümmert sich die TV-App auch um Ressourcenkonflikte. Verfügt das Gerät beispielsweise über zwei Tuner, kann es zwei Programme gleichzeitig aufnehmen. Wenn der Benutzer die Aufnahme von drei Anfragen anfordert, muss die TV-App den Konflikt lösen und sollte entweder eine Benachrichtigung anzeigen oder den Benutzer auffordern, eine Priorität für diese Anfragen festzulegen.
TV-Apps können auch eine ausgefeiltere Logik implementieren, beispielsweise einen Benutzer fragen, ob er alle zukünftigen Episoden einer Serie aufnehmen möchte, wenn er die Aufnahme einer Episode anfordert.
Das folgende Diagramm bietet einen Einblick in eine mögliche DVR-Implementierung in Android TV.
- Der TV Input Service teilt der TV-App mit, wie viele Tuner verfügbar sind, damit die TV-App mögliche Ressourcenkonflikte bewältigen kann.
- Die TV-App erhält eine vom Benutzer initiierte Anfrage zur Aufzeichnung einer TV-Sendung.
- Die TV-App speichert den Aufnahmeplan in ihrer internen Datenbank.
- Wenn es Zeit für die Aufnahme ist, sendet die TV-App eine Anfrage zum Einstellen des mit der Aufnahme verknüpften Kanals.
- Der TV-Eingabedienst empfängt diese Anfrage, antwortet mit der Frage, ob geeignete Ressourcen vorhanden sind oder nicht, und stellt den Kanal ein.
- Anschließend übergibt die TV-App eine Anfrage zum Starten der Aufnahme an den TV Input Manager.
- Der TV Input Service empfängt diese Anfrage und beginnt mit der Aufzeichnung.
- Der TV Input Service speichert die eigentlichen Videodaten in seinem Speicher, der ein externer Speicher oder ein Cloud-Speicher sein kann.
- Wenn es Zeit ist, die Aufnahme zu beenden, leitet die TV-App die Anforderung zum Beenden der Aufnahme an den TV Input Manager weiter.
- Sobald der TV Input Service die Anfrage erhält, stoppt er die Aufzeichnung und fügt die zugehörigen Metadaten zum TV-Anbieter hinzu, damit die TV-App den Benutzern die Aufzeichnung auf Anfrage zeigen kann.
Weitere Informationen zum Implementieren von Aufnahmefunktionen in Ihrem TV-Eingangsdienst finden Sie in diesem Artikel zur TV-Aufnahme .
Nützliche Ressourcen
- Das Android CDD und die dokumentierten Entwickler-APIs sind die maßgeblichen Referenzen.
- CTS Verifier prüft die APIs im Rahmen des Kompatibilitätstestprogramms. Dies mit Live-TV zu vergleichen kann eine nützliche Möglichkeit sein, den EPG, die Suche, die Kindersicherung und andere Anforderungen im Zusammenhang mit Eingaben von Drittanbietern anzuzeigen.
- Die Entwicklererwartungen in diesem Bereich finden Sie unter Definieren Ihres TV-Eingabedienstes .
Elterliche Kontrolle
Mit der Kindersicherung kann ein Benutzer unerwünschte Kanäle und Programme sperren, die Sperre jedoch durch Eingabe eines PIN-Codes umgehen.
Die Verantwortung für die Kindersicherungsfunktion teilen sich die TV-App, der TV Input Manager-Dienst, der TV-Anbieter und der TV-Eingang.
Die Kindersicherung ist obligatorisch und wird von CTS Verifier abgedeckt.
Eine Reihe von Ländern haben Bewertungssysteme definiert, die TV Inputs über die TVContentRating API verwenden können. Darüber hinaus können TV-Eingänge ihre eigenen benutzerdefinierten Bewertungssysteme registrieren, wie der CTS Verifier-Test zeigt, der eine „falsche“ Bewertung einführt. In Ländern, in denen es ein Standardbewertungssystem gibt, werden Gerätehersteller aufgefordert, die Kindersicherung des TV Input Framework mit allen anderen darin enthaltenen Mechanismen zu kombinieren.
TV-Anbieter
Jede Kanalzeile verfügt über ein COLUMN_LOCKED
Feld, das verwendet wird, um die Anzeige bestimmter Kanäle ohne Eingabe eines PIN-Codes zu sperren. Das Programmfeld COLUMN_CONTENT_RATING
dient der Anzeige und dient nicht der Durchsetzung der Kindersicherung.
TV-Eingabemanager
Der TV Input Manager speichert jedes blockierte TvContentRating
und antwortet auf isRatingBlocked()
, um mitzuteilen, ob Inhalte mit der angegebenen Bewertung blockiert werden sollten.
TV-Eingang
Der TV-Eingang prüft, ob der aktuelle Inhalt blockiert werden soll, indem er isRatingBlocked()
im TV-Eingangsmanager aufruft, wenn sich die Bewertung des angezeigten Inhalts geändert hat (bei einem Programm- oder Kanalwechsel) oder wenn sich die Kindersicherungseinstellungen geändert haben (bei ACTION_BLOCKED_RATINGS_CHANGED
und ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED
). . Wenn der Inhalt blockiert werden soll, deaktiviert der TV-Eingang Audio und Video und benachrichtigt die TV-App, dass der aktuelle Inhalt blockiert ist, indem er notifyContentBlocked(TvContentRating)
aufruft. Wenn der Inhalt nicht blockiert werden soll, aktiviert der TV-Eingang Audio und Video und benachrichtigt die TV-App durch Aufruf von notifyContentAllowed()
darüber, dass der aktuelle Inhalt zulässig ist.
TV-App
Um die Kindersicherungs-APIs zu berücksichtigen und somit eine kompatible Plattform zu schaffen, muss die System-TV-App den Benutzern eine Möglichkeit bieten, die Kindersicherung zu verwalten, einschließlich aller benutzerdefinierten Bewertungen, die von bestimmten Apps registriert werden.
Die TV-App zeigt eine PIN-Code-Benutzeroberfläche an, wenn sie von einem TV-Eingang benachrichtigt wird, dass der aktuelle Inhalt blockiert ist, oder wenn der Benutzer versucht, einen blockierten Kanal anzusehen.
Die TV-App speichert die Kindersicherungseinstellungen nicht direkt. Wenn der Benutzer die Kindersicherungseinstellungen ändert, wird jede blockierte TvContentRating
vom TV Input Manager gespeichert und blockierte Kanäle werden vom TV-Anbieter gespeichert.
Die TV-App muss die Berechtigung android.permission.MODIFY_PARENTAL_CONTROLS
deklarieren, um die Kindersicherungseinstellungen zu ändern.
Gerätehersteller werden dazu ermutigt:
- Führen Sie den CTS Verifier-Kindersicherungstest mit der Referenz-Live-TV-Anwendung durch, um die Kompatibilitätsanforderungen zu demonstrieren.
- Verwenden Sie die Live-TV-App als Referenz für ihre eigene TV-App: Sehen Sie sich insbesondere die Quellen ContentRatingsManager und RatingSystemsFragment an und erfahren Sie, wie sie mit benutzerdefinierten Bewertungen umgehen.
HDMI-CEC
HDMI-CEC ermöglicht es einem Gerät, ein anderes zu steuern, sodass eine einzige Fernbedienung mehrere Geräte in einem Heimkino steuern kann. Es wird von Android TV verwendet, um die Einrichtung zu beschleunigen und die Fernsteuerung verschiedener TV-Eingänge über die zentrale TV-App zu ermöglichen. Es kann beispielsweise Eingänge umschalten, Geräte ein- oder ausschalten und vieles mehr.
Das Android TIF implementiert HDMI-CEC als HDMI-Steuerungsdienst, sodass Gerätehersteller lediglich Low-Level-Treiber entwickeln müssen, die mit dem leichten Android TV HAL interagieren, und komplexere Geschäftslogik überspringen. Durch die Bereitstellung einer Standardimplementierung versucht Android, Kompatibilitätsprobleme durch die Reduzierung fragmentierter Implementierungen und die Unterstützung selektiver Funktionen zu mildern. Der HDMI Control Service nutzt die vorhandenen Android-Dienste, einschließlich Eingang und Stromversorgung.
Dies bedeutet, dass bestehende HDMI-CEC-Implementierungen neu gestaltet werden müssen, um mit dem Android TIF zusammenzuarbeiten. Wir empfehlen, dass die Hardwareplattform einen Mikroprozessor enthält, um CEC-Einschalt- und andere Befehle zu empfangen.
- Der CEC-Bus erhält von der aktuell aktiven Quelle den Befehl, auf eine andere Quelle umzuschalten.
- Der Treiber übergibt den Befehl an den HDMI-CEC HAL.
- Der HAL benachrichtigt alle
ActiveSourceChangeListeners
. - Der HDMI-Steuerungsdienst wird über
ActiveSourceChangeListener
über eine Quellenänderung benachrichtigt. - Der TV Input Manager-Dienst generiert eine Absicht für die TV-App, die Quelle zu wechseln.
- Die TV-App erstellt dann eine TV Input Manager-Sitzung für den TV-Eingang, auf den umgeschaltet wird, und ruft
setMain
für diese Sitzung auf. - Die TV Input Manager-Sitzung gibt diese Informationen an den HDMI-TV-Eingang weiter.
- Der HDMI-TV-Eingang fordert zur Einstellung der Seitenbandoberfläche auf.
- Der TV Input Manager Service generiert einen entsprechenden Routing-Steuerbefehl zurück an den HDMI Control Service, wenn die Oberfläche eingestellt ist.
Richtlinien zur TV-Integration
Broadcast-App
Da jedes Land sendespezifische Anforderungen hat (MHEG, Teletext, HbbTV und mehr), wird von den Herstellern erwartet, dass sie ihre eigenen Lösungen für die Broadcast-App bereitstellen, zum Beispiel:
- MHEG: nativer Stack
- Teletext: nativer Stack
- HbbTV: HbbTV-Lösung von Vewd Software
In der Android L-Version erwartet Android TV von den Geräteherstellern, dass sie Systemintegratoren oder die Android-Lösungen für regionale TV-Stacks nutzen, die Oberfläche an TV-Software-Stacks weitergeben oder den notwendigen Schlüsselcode für die Interaktion mit Legacy-Stacks weitergeben.
So interagieren die Broadcast-App und die TV-App:
- Die TV-App ist im Fokus und empfängt alle Tasten.
- Die TV-App übergibt Tasten (z. B. rote Taste) an das TV-Eingabegerät.
- Das TV-Eingabegerät lässt sich intern in den alten TV-Stack integrieren.
- Beim Empfang eines Aktivierungsschlüsselcodes (z. B. rote Taste) aktiviert das TV-Eingabegerät Broadcast-Apps.
- Eine Broadcast-App übernimmt den Fokus in der TV-App und verarbeitet Benutzeraktionen.
Für die Sprachsuche/-empfehlung unterstützt die Broadcast-App möglicherweise die In-App-Suche für die Sprachsuche.