
L'Android TV Input Framework (TIF) simplifie la diffusion de contenu en direct sur Android TV. L'Android TIF fournit une API standard permettant aux fabricants de créer des modules d'entrée pour contrôler Android TV, et permet la recherche et les recommandations TV en direct via les métadonnées publiées par l'entrée TV.
Le cadre ne cherche pas à mettre en œuvre des normes de télévision ou des exigences régionales, mais permet aux fabricants d'appareils de se conformer plus facilement aux normes régionales de diffusion de télévision numérique sans réimplémentation. La documentation de cette section peut également être utile aux développeurs d'applications tierces qui souhaitent créer des entrées TV personnalisées.
Composants
L'implémentation d'Android TV Input Framework inclut un gestionnaire d'entrée TV. Le TIF fonctionne avec l'application TV, une application système qui ne peut pas être remplacée par une application tierce, pour accéder aux chaînes intégrées et au tuner IP. L'application TV communique avec les modules d'entrée TV fournis par le fabricant de l'appareil ou d'autres parties via le gestionnaire d'entrée TV.
Le cadre d'entrée TV se compose de :
- Fournisseur de télévision (
com.android.providers.tv.TvProvider
): une base de données des chaînes, des programmes et des autorisations associées - App TV (
com.android.tv.TvActivity
): l'application qui gère l'interaction de l'utilisateur - TV Input Manager (
android.media.tv.TvInputManager
): permet aux entrées TV de communiquer avec l'application TV - Entrée TV : une application représentant les tuners physiques ou virtuels et les ports d'entrée
- Entrée TV HAL (module
tv_input
): une définition matérielle qui permet aux entrées TV du système d'accéder au matériel spécifique à la télévision lorsqu'elles sont implémentées - Contrôle parental : la technologie permettant de bloquer les chaînes et les programmes
- HDMI-CEC : la technologie pour permettre le contrôle à distance de divers appareils via HDMI
- Tuner Framework : un cadre pour l'entrée TV Tuner intégré
- MediaCas : un cadre d'accès conditionnel
- Tuner Resource Manager : un service pour gérer les ressources matérielles pour l'entrée TV, MediaCas et l'entrée Built-in-Tuner
Ces composants sont détaillés ci-dessous. Consultez le schéma suivant pour une vue détaillée de l'architecture Android TV Input Framework.

Couler
Voici comment l'architecture s'exerce :
- L'utilisateur voit et interagit avec l'application TV, une application système qui ne peut pas être remplacée par une application tierce.
- L'application TV affiche le contenu AV de l'entrée TV.
- L'application TV ne peut pas communiquer directement avec les entrées TV. Le gestionnaire d'entrée TV identifie l'état des entrées TV pour l'application TV. Voir TV Input Manager ci-dessous pour plus de détails sur ces limitations.
Autorisations
- Seules les entrées TV
signatureOrSystem
et l'application TV ont un accès complet à la base de données du fournisseur de télévision et peuvent recevoir des KeyEvents. - Seules les entrées TV du système peuvent accéder à l'HAL d'entrée TV via le service TV Input Manager. Les entrées TV sont accessibles individuellement via les sessions TV Input Manager.
- Les entrées TV tierces ont un accès verrouillé par paquet à la base de données du fournisseur de télévision et ne peuvent LIRE/ÉCRIRE que sur les lignes de paquet correspondantes.
- Les entrées TV tierces peuvent afficher leur propre contenu ou le contenu des entrées TV passthrough d'un fabricant d'appareils, comme HDMI1. Ils ne peuvent pas afficher le contenu des entrées TV non passthrough, comme un tuner intégré ou IPTV.
- L'autorisation
TV_INPUT_HARDWARE
pour une application d'entrée TV matérielle signale au service TV Input Manager de notifier le service TV Input au démarrage pour appeler le service TV Input Manager et ajouter ses entrées TV. Cette autorisation permet à une application d'entrée TV matérielle de prendre en charge plusieurs entrées TV par service d'entrée TV, ainsi que d'ajouter et de supprimer dynamiquement ses entrées TV prises en charge.
Fournisseur de télévision
La base de données du fournisseur de télévision stocke les chaînes et les programmes des entrées TV. Le fournisseur de télévision publie et gère également les autorisations associées afin que les entrées TV ne puissent voir que leurs propres enregistrements. Par exemple, une entrée TV spécifique ne peut voir que les chaînes et les programmes qu'elle a fournis et il lui est interdit d'accéder aux chaînes et programmes des autres entrées TV.
Le fournisseur de télévision mappe le "genre de diffusion" sur le "genre canonique" en interne. Les entrées TV sont responsables du remplissage du "genre de diffusion" avec la valeur dans la norme de diffusion sous-jacente, et le champ "genre canonique" sera automatiquement rempli avec le genre associé correct de android.provider.TvContract.Genres
. Par exemple, avec la norme de diffusion ATSC A/65 et un programme avec le genre 0x25 (signifiant « Sports »), l'entrée TV remplira le « genre de diffusion » avec la chaîne « Sports » et le fournisseur de télévision remplira le champ « genre canonique » avec la valeur mappée android.provider.TvContract.Genres.SPORTS
.
Voir le diagramme ci-dessous pour une vue détaillée du fournisseur de télévision.

Seules les applications de la partition système privilégiée peuvent lire l'intégralité de la base de données du fournisseur de télévision.
Les entrées TV passthrough ne stockent pas les chaînes et les programmes.
En plus des champs standard pour les chaînes et les programmes, la base de données TV Provider propose également un champ de type BLOB, COLUMN_INTERNAL_PROVIDER_DATA
, dans chaque table que TV Inputs peut utiliser pour stocker des données arbitraires. Ces données BLOB peuvent inclure des informations personnalisées, telles que la fréquence du syntoniseur associé, et peuvent être fournies dans un tampon de protocole ou sous une autre forme. Un champ Searchable est disponible pour rendre certains canaux indisponibles dans la recherche (par exemple pour répondre aux exigences spécifiques au pays pour la protection du contenu).
Exemples de champs de base de données
Le fournisseur de télévision prend en charge les données structurées dans les tables de chaînes ( android.provider.TvContract.Channels
) et de programmes ( android.provider.TvContract.Programs
). Ces tableaux sont remplis et accessibles par les entrées TV et les applications système telles que l'application TV. Ces tables comportent quatre types de champs :
- Affichage : les champs d'affichage contiennent des informations que les applications peuvent souhaiter rendre visibles à l'utilisateur, telles que le nom (
COLUMN_DISPLAY_NAME
) ou le numéro (COLUMN_DISPLAY_NUMBER
) d'une chaîne, ou le titre du programme en cours de visionnage. - Métadonnées : il existe trois champs pour identifier le contenu, conformément aux normes applicables, comme l'ID de flux de transport d'un canal (
COLUMN_TRANSPORT_STREAM_ID
), l'ID de réseau d'origine (COLUMN_ORIGINAL_NETWORK_ID
) et l'ID de service (COLUMN_SERVICE_ID
). - Données internes : champs destinés à l'utilisation personnalisée des entrées TV.
Certains champs, commeCOLUMN_INTERNAL_PROVIDER_DATA
, sont des champs BLOB personnalisables dans lesquels une entrée TV peut stocker des métadonnées arbitraires sur sa chaîne ou son programme. - Drapeau : les champs de drapeau indiquent si un canal doit être limité à la recherche, à la navigation ou à l'affichage. Ceci ne peut être réglé qu'au niveau du canal. Tous les programmes s'en remettent au réglage de la chaîne.
-
COLUMN_SEARCHABLE
: restreindre la recherche à partir de certaines chaînes peut être une exigence dans certaines régions.COLUMN_SEARCHABLE = 0
signifie que la chaîne ne doit pas être exposée dans les résultats de recherche. -
COLUMN_BROWSABLE
: visible uniquement par les applications système. Restreindre le canal d'être parcouru par les applications.COLUMN_BROWSABLE = 0
signifie que la chaîne ne doit pas être incluse dans la liste des chaînes. -
COLUMN_LOCKED
: Visible uniquement pour les applications système. Empêcher la visualisation de la chaîne par des comptes invalides sans saisir de code PIN.COLUMN_LOCKED = 1
signifie que la chaîne doit être protégée par le contrôle parental.
Pour une liste plus exhaustive des champs, voir android/frameworks/base/media/java/android/media/tv/TvContract.java
Autorisations et contrôle d'accès
Tous les champs sont visibles par toute personne ayant accès à la ligne correspondante. Aucun champ n'est directement accessible aux utilisateurs ; ils ne voient que ce que l'application TV, les applications système ou les entrées TV font apparaître.
- Chaque ligne a
PACKAGE_NAME
, le package (application) qui possède cette ligne, vérifié sur Query, Insert, Update via TvProvider.java. Une entrée TV ne peut accéder qu'aux informations qu'elle a écrites et est isolée des informations fournies par les autres entrées TV. - Autorisations READ, WRITE via AndroidManifest.xml (nécessite le consentement de l'utilisateur) pour déterminer les canaux disponibles.
- Seules les applications
signatureOrSystem
peuvent acquérir l'autorisationACCESS_ALL_EPG_DATA
pour accéder à l'intégralité de la base de données.
Gestionnaire d'entrée TV
Le gestionnaire d'entrée TV fournit une API système centrale à l'ensemble du cadre d'entrée Android TV. Il arbitre l'interaction entre les applications et les entrées TV et fournit une fonctionnalité de contrôle parental. Les sessions TV Input Manager doivent être créées individuellement avec les entrées TV. Le gestionnaire d'entrées TV permet d'accéder aux entrées TV installées afin que les applications puissent :
- Répertorier les entrées TV et vérifier leur état
- Créer des sessions et gérer les auditeurs
Pour les sessions, une entrée TV peut être réglée par l'application TV uniquement sur les URI qu'elle a ajoutés à la base de données du fournisseur de télévision, à l'exception des entrées TV relais qui peuvent être réglées à l'aide de TvContract.buildChannelUriForPassthroughInput()
. Une entrée TV peut également avoir son volume réglé. Les entrées TV fournies et signées par le fabricant de l'appareil (applications de signature) ou d'autres applications installées dans la partition système auront accès à l'intégralité de la base de données du fournisseur de télévision. Cet accès peut être utilisé pour créer des applications permettant de parcourir et de rechercher parmi toutes les chaînes et tous les programmes de télévision disponibles.
Une application peut créer et enregistrer un TvInputCallback
avec android.media.tv.TvInputManager
pour être rappelé lors du changement d'état d'une entrée TV ou lors de l'ajout ou de la suppression d'une entrée TV. Par exemple, une application TV peut réagir lorsqu'une entrée TV est déconnectée en l'affichant comme déconnectée et en empêchant sa sélection.
Le gestionnaire d'entrée TV résume la communication entre l'application TV et les entrées TV. L'interface standard de TV Input Manager et TV Input permet à plusieurs fabricants d'appareils de créer leurs propres applications TV tout en aidant toutes les entrées TV tierces à fonctionner sur toutes les applications TV.
Entrées TV
Les entrées TV sont des applications Android dans le sens où elles ont un fichier AndroidManifest.xml et sont installées (via Play, préinstallées ou chargées de côté). Android TV prend en charge les applications système préinstallées, les applications signées par le fabricant de l'appareil et les entrées TV tierces.
Certaines entrées, comme l'entrée HDMI ou l'entrée du tuner intégré, ne peuvent être fournies que par le fabricant car elles communiquent directement avec le matériel sous-jacent. D'autres, tels que l'IPTV, le déplacement de lieu et le décodeur externe, peuvent être fournis par des tiers sous forme d'APK sur Google Play Store. Une fois téléchargée et installée, la nouvelle entrée peut être sélectionnée dans l'application TV.
Exemple d'entrée directe

Dans cet exemple, l'entrée TV fournie par le fabricant de l'appareil est fiable et dispose d'un accès complet au fournisseur de télévision. En tant qu'entrée TV passthrough, il n'enregistre aucune chaîne ou programme auprès du fournisseur de télévision. Pour obtenir l'URI utilisé pour référencer l'entrée passthrough, utilisez la méthode utilitaire android.media.tv.TvContract
buildChannelUriForPassthroughInput(String inputId)
. L'application TV communique avec le gestionnaire d'entrée TV pour atteindre l'entrée TV HDMI.
Exemple de tuner intégré

Dans cet exemple, l'entrée TV du tuner intégré fournie par le fabricant de l'appareil est fiable et dispose d'un accès complet au fournisseur de télévision.
Exemple d'entrée tierce

Dans cet exemple, l'entrée TV STB externe est fournie par un tiers. Étant donné que cette entrée TV ne peut pas accéder directement au flux vidéo HDMI entrant, elle doit passer par le gestionnaire d'entrée TV et utiliser l'entrée TV HDMI fournie par le fabricant de l'appareil.
Grâce au gestionnaire d'entrée TV, l'entrée TV STB externe peut parler avec l'entrée TV HDMI et lui demander d'afficher la vidéo sur HDMI1. Ainsi, l'entrée TV STB peut contrôler le téléviseur tandis que l'entrée TV HDMI fournie par le fabricant restitue la vidéo.
Exemple d'image dans l'image (PIP)

Le diagramme ci-dessus montre comment les boutons d'une télécommande sont transmis à une entrée TV spécifique pour l'affichage image dans l'image (PIP). Ces pressions sur les boutons sont interprétées par le pilote matériel fourni par le fabricant de l'appareil, convertissant les scancodes matériels en codes clés Android et les transmettant aux fonctions standard du pipeline d'entrée Android InputReader
et InputDispatcher
en tant que KeyEvents . Ceux-ci déclenchent à leur tour des événements sur l'application TV si elle est mise au point.
Seules les entrées TV du système sont éligibles pour recevoir InputEvents
, et uniquement si elles disposent de l'autorisation système RECEIVE_INPUT_EVENT
. L'entrée TV est chargée de déterminer les InputEvents à consommer et doit permettre à l'application TV de gérer les clés qu'elle n'a pas besoin de consommer.
L'application TV est chargée de savoir quelle entrée TV système est active, c'est-à-dire sélectionnée par l'utilisateur, et de lever l'ambiguïté KeyEvents
entrants et de les acheminer vers la bonne session TV Input Manager, en appelant dispatchInputEvent()
pour transmettre l'événement à l'entrée TV associée. .
Exemple d'entrée MHEG-5
Le schéma suivant montre une vue plus détaillée de la façon dont KeyEvents
sont acheminés via le TIF Android.

Il décrit le flux d'une application à bouton rouge, courante en Europe pour permettre aux utilisateurs d'accéder à des applications interactives sur leurs téléviseurs. Une application peut être livrée via ce flux de transport. Lorsque le bouton est cliqué, il permet aux utilisateurs d'interagir avec ces applications de diffusion. Par exemple, vous pouvez utiliser ces applications de diffusion pour accéder à des pages Web connexes ou à des résultats sportifs.
Consultez la section Application de diffusion pour savoir comment les applications de diffusion interagissent avec l'application TV.
Dans cet exemple :
- L'application TV est au point et reçoit toutes les clés.
-
KeyEvents
(par exemple, le bouton rouge) est transmis à l'entrée TV active en tantInputEvents.
- L'entrée TV du système s'intègre à la pile MHEG-5 et dispose de l'autorisation système
RECEIVE_INPUT_EVENT
. - Lors de la réception du code d'activation (par exemple, bouton rouge), l'entrée TV active l'application de diffusion.
- L'entrée TV consomme
KeyEvents
commeInputEvents
et l'application de diffusion est le focus et gèreInputEvents
jusqu'à ce qu'elle soit rejetée.
Remarque : les entrées TV tierces ne reçoivent jamais de clés.
Entrée TV HAL
L'entrée TV HAL facilite le développement d'entrées TV pour accéder au matériel spécifique à la télévision. Comme pour les autres HAL Android, l'entrée TV HAL ( tv_input
) est disponible dans l'arborescence source AOSP et le fournisseur développe son implémentation.
Application TV
L'application TV du système présente le contenu TV en direct à l'utilisateur. Une application TV de référence (Live TV) est fournie avec la plate-forme Android, qui peut être utilisée telle quelle, personnalisée, étendue ou remplacée par les fabricants d'appareils. Le code source est disponible dans le projet Android Open Source, et vous pouvez commencer avec l'article sur l' application Reference TV .
Les fabricants d'appareils peuvent étendre leurs applications TV pour mettre en œuvre des fonctionnalités spécifiques au fabricant de l'appareil ou à un pays, mais cela n'entre pas dans le champ d'application du TIF ou de l'application TV de référence.
Au minimum, l'application TV du système doit gérer les tâches suivantes :
Installation et configuration
- Détection automatique des entrées TV
- Laisser les entrées TV lancer la configuration des chaînes
- Contrôler les paramètres parentaux
- Modifier les chaînes
Affichage
- Accédez et naviguez sur toutes les chaînes de télévision
- Accéder à la barre d'informations sur les programmes TV
- Afficher les données du guide de programmation électronique (EPG)
- Prise en charge de plusieurs pistes audio et de sous-titres
- Fournir un défi PIN de contrôle parental
- Autoriser la superposition de l'interface utilisateur d'entrée TV pour la norme TV (HbbTV, etc.)
- Remplir les résultats de recherche pour les chaînes de télévision et les programmes
- Afficher les fiches d'association d'applications
- Prise en charge des API de décalage temporel
- Gérer la fonctionnalité DVR et prendre en charge les API d'enregistrement TV
Cet ensemble de fonctionnalités augmentera en fonction des nouvelles versions d'Android où les API TIF de la plate-forme sont étendues. CTS Verifier fournit la couverture des tests de compatibilité.
Prise en charge des entrées TV tierces
Android TV fournit des API de développeur pour les entrées TV tierces, permettant aux applications installées de fournir des chaînes logicielles dans l'expérience TV en direct. Pour assurer une implémentation d'appareil Android compatible, l'application TV du système a certaines responsabilités concernant la mise en évidence des entrées et des chaînes TV tierces à l'utilisateur. L'application Live TV de référence fournit une implémentation compatible ; en cas de remplacement de l'application TV système, les fabricants d'appareils doivent s'assurer que leurs propres applications offrent une compatibilité similaire, afin de répondre aux attentes des développeurs sur tous les appareils Android TV.
L'application TV du système doit faire apparaître les entrées de tiers avec le service de télévision en direct par défaut de l'appareil. La promesse des API de développement est que les utilisateurs pourront trouver des chaînes (une fois installées) dans leur expérience TV standard.
La différenciation visuelle entre les chaînes intégrées et les chaînes tierces est autorisée, comme défini dans la section Application TV du CDD Android.
Les sections suivantes montrent comment l'application Live TV répond aux exigences CDD.
Configuration de la nouvelle chaîne
L'ajout de nouvelles entrées/chaînes tierces commence par la recherche et l'installation par l'utilisateur d'une entrée TV à partir d'un magasin d'applications, tel que Google Play.
Certaines entrées TV tierces ajoutent automatiquement des chaînes à la base de données TvProvider. Cependant, la plupart fourniront une activité de configuration pour permettre à l'utilisateur de configurer ses canaux, de fournir des informations de connexion et d'autres actions. L'application TV système doit s'assurer que l'utilisateur peut activer cette activité de configuration, c'est pourquoi le CDD exige que les entrées tierces soient des actions de navigation minimales loin de l'application TV principale.
L'application Live TV de référence fournit le menu Channel Sources pour accéder aux entrées.




De plus, une carte de notification s'affiche en haut du menu de l'application TV après l'installation d'un nouveau TvInput, pour amener l'utilisateur directement à la configuration :

Si l'utilisateur agit via la notification, il peut choisir de configurer ses sources comme illustré à la figure 10.
Voir Définir votre service d'entrée TV pour les attentes des développeurs dans ce domaine.
Personnaliser la liste des chaînes
Les fabricants d'appareils peuvent fournir une interface utilisateur pour masquer certains canaux et permettre aux utilisateurs de gérer leurs propres EPG. Live TV inclut cette installation.


EPG
Les développeurs d'entrées tiers doivent avoir la certitude que les utilisateurs peuvent facilement accéder à leurs chaînes lors d'une utilisation générale, sur tous les appareils Android TV compatibles.
Les chaînes provenant d'entrées tierces doivent être présentées dans le cadre de l'EPG d'expérience TV en direct standard de l'appareil. Une séparation visuelle ou des catégories distinctes pour les chaînes tierces peuvent être utilisées (voir la section Application TV du CDD Android) - l'essentiel est que les utilisateurs puissent trouver les chaînes qu'ils ont installées.
Recherche
Les fabricants doivent mettre en œuvre l'application TV pour inclure les résultats de recherche pour les demandes de recherche globales afin de garantir la meilleure expérience utilisateur. Live TV fournit une implémentation (voir qui fournit des résultats à partir d'entrées tierces (requises pour la compatibilité de la plate-forme) ainsi que des entrées intégrées.
Décalage horaire
Pour les appareils sous Android 6.0 et versions ultérieures, l'application TV doit prendre en charge les API de décalage temporel du cadre Android . De plus, les fabricants doivent implémenter des commandes de lecture dans l'application TV, qui permettent aux utilisateurs de mettre en pause, de reprendre, de rembobiner et d'avancer rapidement la lecture.
Pour les entrées TV prenant en charge le décalage temporel, l'application TV doit afficher les commandes de lecture.

DVR
Pour les appareils sous Android 7.0 et versions ultérieures, l'application TV doit prendre en charge les API d'enregistrement TV du cadre Android pour prendre en charge, répertorier et lire les programmes enregistrés.
Cela permet aux fabricants d'appareils de brancher leurs sous-systèmes DVR dans TIF et de réduire considérablement l'effort d'intégration nécessaire pour activer ou intégrer la fonctionnalité DVR sur un appareil TV. Il permet également à des tiers de fournir des systèmes DVR de rechange pouvant être connectés à un appareil Android TV.
En plus d'enregistrer du contenu en direct, l'application TV gère également les conflits de ressources. Par exemple, si l'appareil dispose de deux tuners, il peut enregistrer deux programmes en même temps. Si l'utilisateur demande d'en enregistrer trois, l'application TV doit gérer le conflit et doit soit afficher une notification, soit demander à l'utilisateur de planifier une priorité pour ces demandes.
Les applications TV peuvent également mettre en œuvre une logique plus sophistiquée, comme demander à un utilisateur s'il souhaite enregistrer tous les futurs épisodes d'une série lorsqu'il demande d'enregistrer un épisode.
Voir le schéma suivant pour une vue d'une éventuelle implémentation DVR dans Android TV.

- Le service d'entrée TV indique à l'application TV combien de tuners sont disponibles afin que l'application TV puisse gérer un éventuel conflit de ressources.
- L'application TV reçoit une demande initiée par l'utilisateur pour enregistrer un programme TV.
- L'application TV stocke le programme d'enregistrement dans sa base de données interne.
- Lorsqu'il est temps d'enregistrer, l'application TV transmet une demande pour syntoniser la chaîne associée à l'enregistrement.
- Le service d'entrée TV reçoit cette demande, répond en indiquant s'il existe ou non des ressources appropriées et syntonise la chaîne.
- Ensuite, l'application TV transmet une demande de démarrage de l'enregistrement au gestionnaire d'entrée TV.
- Le service d'entrée TV reçoit cette demande et commence l'enregistrement.
- Le service d'entrée TV stocke les données vidéo réelles dans son stockage, qui peut être un stockage externe ou un stockage cloud.
- Lorsqu'il est temps de terminer l'enregistrement, l'application TV transmet la demande d'arrêt de l'enregistrement au gestionnaire d'entrée TV.
- Une fois que le service d'entrée TV reçoit la demande, il arrête l'enregistrement et ajoute ses métadonnées associées au fournisseur de télévision afin que l'application TV puisse montrer l'enregistrement aux utilisateurs sur demande.
Pour plus d'informations sur la mise en œuvre des fonctionnalités d'enregistrement dans votre service d'entrée TV, consultez cet article sur l'enregistrement TV .
Ressources utiles
- Le CDD Android et les API de développement documentées sont les références définitives.
- CTS Verifier teste les API dans le cadre du programme de test de compatibilité. L'exécuter sur Live TV peut être un moyen utile de voir l'EPG, la recherche, le contrôle parental et d'autres exigences dans le contexte d'entrées tierces.
- Voir Définir votre service d'entrée TV pour les attentes des développeurs dans ce domaine.
Contrôle parental
Le contrôle parental permet à un utilisateur de bloquer les chaînes et les programmes indésirables, mais de contourner le blocage en saisissant un code PIN.
La responsabilité de la fonctionnalité de contrôle parental est partagée entre l'application TV, le service TV Input Manager, le fournisseur TV et TV Input.
Le contrôle parental est obligatoire et est couvert par CTS Verifier.
Un certain nombre de pays ont défini des systèmes de classification que TV Inputs peut utiliser via l' API TVContentRating . De plus, les entrées TV peuvent enregistrer leurs propres systèmes de classification personnalisés, comme le démontre le test CTS Verifier, qui introduit une « fausse » classification. Pour les pays où un système de classification standard existe, les fabricants d'appareils sont encouragés à combiner le contrôle parental du cadre d'entrée TV avec tout autre mécanisme qu'ils peuvent inclure.
Fournisseur de télévision
Chaque ligne de canal a un champ COLUMN_LOCKED
qui est utilisé pour verrouiller l'affichage de canaux spécifiques sans entrer de code PIN. Le champ de programme COLUMN_CONTENT_RATING
est destiné à être affiché et n'est pas utilisé pour appliquer le contrôle parental.
Gestionnaire d'entrée TV
Le gestionnaire d'entrée TV stocke chaque TvContentRating
bloqué et répond à isRatingBlocked()
pour indiquer si le contenu avec la classification donnée doit être bloqué.
Entrée TV
L'entrée TV vérifie si le contenu actuel doit être bloqué en appelant isRatingBlocked()
sur le gestionnaire d'entrée TV lorsque la classification du contenu affiché a changé (lors d'un changement de programme ou de chaîne), ou que les paramètres de contrôle parental ont changé (sur ACTION_BLOCKED_RATINGS_CHANGED
et ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED
) . Si le contenu doit être bloqué, l'entrée TV désactive l'audio et la vidéo et informe l'application TV que le contenu actuel est bloqué en appelant notifyContentBlocked(TvContentRating)
. Si le contenu ne doit pas être bloqué, l'entrée TV active l'audio et la vidéo et informe l'application TV que le contenu actuel est autorisé en appelant notifyContentAllowed()
.
Application TV
Pour honorer les API de contrôle parental, et donc créer une plate-forme compatible, l'application TV système doit fournir aux utilisateurs un moyen de gérer le contrôle parental, y compris pour toutes les évaluations personnalisées enregistrées par des applications spécifiques.
L'application TV affiche une interface utilisateur de code PIN lorsqu'elle est avertie par une entrée TV que le contenu actuel est bloqué ou lorsque l'utilisateur tente de visualiser une chaîne bloquée.
L'application TV ne stocke pas directement les paramètres de contrôle parental. Lorsque l'utilisateur modifie les paramètres de contrôle parental, chaque TvContentRating
bloqué est stocké par le gestionnaire d'entrée TV et les chaînes bloquées sont stockées par le fournisseur de télévision.
L'application TV doit déclarer l'autorisation android.permission.MODIFY_PARENTAL_CONTROLS
afin de modifier les paramètres de contrôle parental.
Les fabricants d'appareils sont encouragés à :
- Effectuez le test de contrôle parental CTS Verifier par rapport à l'application Live TV de référence pour une démonstration des exigences de compatibilité.
- Utilisez l'application TV en direct comme référence pour leur propre application TV : consultez en particulier la source ContentRatingsManager et RatingSystemsFragment , et comment ils gèrent les classements personnalisés.
HDMI-CEC
HDMI-CEC permet à un appareil de contrôler un autre, permettant ainsi à une seule télécommande de contrôler plusieurs appareils dans un home cinéma. Il est utilisé par Android TV pour accélérer la configuration et permettre un contrôle à distance sur diverses entrées TV via l'application TV centrale. Par exemple, il peut commuter des entrées, allumer ou éteindre des appareils, etc.
L'Android TIF implémente HDMI-CEC en tant que service de contrôle HDMI afin que les fabricants d'appareils n'aient qu'à développer des pilotes de bas niveau qui interagissent avec le léger Android TV HAL, en sautant une logique métier plus complexe. En fournissant une implémentation standard, Android cherche à atténuer les problèmes de compatibilité en réduisant les implémentations fragmentées et la prise en charge sélective des fonctionnalités. Le service de contrôle HDMI utilise les services Android existants, y compris l'entrée et l'alimentation.
Cela signifie que les implémentations HDMI-CEC existantes devront être repensées pour interagir avec le TIF Android. Nous recommandons que la plate-forme matérielle contienne un microprocesseur pour recevoir la mise sous tension CEC et d'autres commandes.

- Le bus CEC reçoit une commande de la source actuellement active pour passer à une source différente.
- Le pilote transmet la commande au HDMI-CEC HAL.
- Le HAL notifie tous
ActiveSourceChangeListeners
. - Le service de contrôle HDMI est informé du changement de source via
ActiveSourceChangeListener
. - Le service TV Input Manager génère une intention pour que l'application TV change de source.
- L'application TV crée ensuite une session TV Input Manager pour l'entrée TV vers laquelle basculer et appelle
setMain
sur cette session. - La session du gestionnaire d'entrée TV transmet ces informations à l'entrée TV HDMI.
- L'entrée TV HDMI demande de régler la surface de la bande latérale.
- Le service TV Input Manager génère une commande de contrôle de routage correspondante vers le service de contrôle HDMI lorsque la surface est définie.
Consignes d'intégration TV
Application de diffusion
Étant donné que chaque pays a des exigences spécifiques à la diffusion (MHEG, télétexte, HbbTV, etc.), les fabricants doivent fournir leurs propres solutions pour l'application de diffusion, par exemple :
- MHEG : pile native
- Télétexte : pile native
- HbbTV : la solution HbbTV de Vewd Software
Dans la version Android L, Android TV s'attend à ce que les fabricants d'appareils utilisent des intégrateurs de systèmes ou les solutions Android pour les piles TV régionales, transmettent la surface aux piles logicielles TV ou transmettent le code de clé nécessaire pour interagir avec les piles héritées.
Voici comment l'application de diffusion et l'application TV interagissent :
- L'application TV est au point et reçoit toutes les clés.
- L'application TV transmet les clés (par exemple, le bouton rouge) au périphérique d'entrée TV.
- Le périphérique d'entrée TV s'intègre en interne à la pile TV héritée.
- Lors de la réception d'un code d'activation (par exemple, bouton rouge), le périphérique d'entrée TV active les applications de diffusion.
- Une application de diffusion prend le focus dans l'application TV et gère les actions de l'utilisateur.
Pour la recherche/recommandation vocale, l'application de diffusion peut prendre en charge la recherche dans l'application pour la recherche vocale.
,
L'Android TV Input Framework (TIF) simplifie la diffusion de contenu en direct sur Android TV. L'Android TIF fournit une API standard permettant aux fabricants de créer des modules d'entrée pour contrôler Android TV, et permet la recherche et les recommandations TV en direct via les métadonnées publiées par l'entrée TV.
Le cadre ne cherche pas à mettre en œuvre des normes de télévision ou des exigences régionales, mais permet aux fabricants d'appareils de se conformer plus facilement aux normes régionales de diffusion de télévision numérique sans réimplémentation. La documentation de cette section peut également être utile aux développeurs d'applications tierces qui souhaitent créer des entrées TV personnalisées.
Composants
L'implémentation d'Android TV Input Framework inclut un gestionnaire d'entrée TV. Le TIF fonctionne avec l'application TV, une application système qui ne peut pas être remplacée par une application tierce, pour accéder aux chaînes intégrées et au tuner IP. L'application TV communique avec les modules d'entrée TV fournis par le fabricant de l'appareil ou d'autres parties via le gestionnaire d'entrée TV.
Le cadre d'entrée TV se compose de :
- Fournisseur de télévision (
com.android.providers.tv.TvProvider
): une base de données des chaînes, des programmes et des autorisations associées - App TV (
com.android.tv.TvActivity
): l'application qui gère l'interaction de l'utilisateur - TV Input Manager (
android.media.tv.TvInputManager
): permet aux entrées TV de communiquer avec l'application TV - Entrée TV : une application représentant les tuners physiques ou virtuels et les ports d'entrée
- Entrée TV HAL (module
tv_input
): une définition matérielle qui permet aux entrées TV du système d'accéder au matériel spécifique à la télévision lorsqu'elles sont implémentées - Contrôle parental : la technologie permettant de bloquer les chaînes et les programmes
- HDMI-CEC : la technologie pour permettre le contrôle à distance de divers appareils via HDMI
- Tuner Framework : un cadre pour l'entrée TV Tuner intégré
- MediaCas : un cadre d'accès conditionnel
- Tuner Resource Manager : un service pour gérer les ressources matérielles pour l'entrée TV, MediaCas et l'entrée Built-in-Tuner
Ces composants sont détaillés ci-dessous. Consultez le schéma suivant pour une vue détaillée de l'architecture Android TV Input Framework.

Couler
Voici comment l'architecture s'exerce :
- L'utilisateur voit et interagit avec l'application TV, une application système qui ne peut pas être remplacée par une application tierce.
- L'application TV affiche le contenu AV de l'entrée TV.
- L'application TV ne peut pas communiquer directement avec les entrées TV. Le gestionnaire d'entrée TV identifie l'état des entrées TV pour l'application TV. Voir TV Input Manager ci-dessous pour plus de détails sur ces limitations.
Autorisations
- Seules les entrées TV
signatureOrSystem
et l'application TV ont un accès complet à la base de données du fournisseur de télévision et peuvent recevoir des KeyEvents. - Seules les entrées TV du système peuvent accéder à l'HAL d'entrée TV via le service TV Input Manager. Les entrées TV sont accessibles individuellement via les sessions TV Input Manager.
- Les entrées TV tierces ont un accès verrouillé par paquet à la base de données du fournisseur de télévision et ne peuvent LIRE/ÉCRIRE que sur les lignes de paquet correspondantes.
- Les entrées TV tierces peuvent afficher leur propre contenu ou le contenu des entrées TV passthrough d'un fabricant d'appareils, comme HDMI1. Ils ne peuvent pas afficher le contenu des entrées TV non passthrough, comme un tuner intégré ou IPTV.
- L'autorisation
TV_INPUT_HARDWARE
pour une application d'entrée TV matérielle signale au service TV Input Manager de notifier le service TV Input au démarrage pour appeler le service TV Input Manager et ajouter ses entrées TV. Cette autorisation permet à une application d'entrée TV matérielle de prendre en charge plusieurs entrées TV par service d'entrée TV, ainsi que d'ajouter et de supprimer dynamiquement ses entrées TV prises en charge.
Fournisseur de télévision
The TV Provider database stores the channels and programs from TV Inputs. The TV Provider also publishes and manages the associated permissions so that TV Inputs can see only their own records. For instance, a specific TV Input can see only the channels and programs it has supplied and is prohibited from accessing any other TV Inputs' channels and programs.
The TV Provider maps "broadcast genre" to "canonical genre" internally. TV Inputs are responsible for populating "broadcast genre" with the value in the underlying broadcast standard, and the "canonical genre" field will automatically be populated with the correct associated genre from android.provider.TvContract.Genres
. For example, with broadcast standard ATSC A/65 and program with genre 0x25 (meaning “Sports”), the TV Input will populate the “broadcast genre” with the String “Sports” and TV Provider will populate the “canonical genre” field with the mapped value android.provider.TvContract.Genres.SPORTS
.
See the diagram below for a detailed view of the TV Provider.

Only apps in the privileged system partition can read the entire TV Provider database.
Passthrough TV inputs do not store channels and programs.
In addition to the standard fields for channels and programs, the TV Provider database also offers a BLOB type field, COLUMN_INTERNAL_PROVIDER_DATA
, in each table that TV Inputs may use to store arbitrary data. That BLOB data can include custom information, such as frequency of the associated tuner, and may be provided in a protocol buffer or another form. A Searchable field is available to make certain channels unavailable in search (such as to meet country-specific requirements for content protection).
Database field examples
The TV Provider supports structured data in channel ( android.provider.TvContract.Channels
) and program ( android.provider.TvContract.Programs
) tables. These tables are populated and accessed by TV Inputs and system apps like the TV App. These tables have four types of fields:
- Display: Display fields contain information that apps may want to make visible to the user, like a channel's name (
COLUMN_DISPLAY_NAME
) or number (COLUMN_DISPLAY_NUMBER
), or the title of the program being viewed. - Metadata: There are three fields for identifying content, according to relevant standards, like a channel's transport stream ID (
COLUMN_TRANSPORT_STREAM_ID
), original network ID (COLUMN_ORIGINAL_NETWORK_ID
) and service id (COLUMN_SERVICE_ID
). - Internal data : Fields that are for the custom use of TV Inputs.
Some fields, likeCOLUMN_INTERNAL_PROVIDER_DATA
, are customizable BLOB fields where a TV Input can store arbitrary metadata about their channel or program. - Flag: Flag fields represent whether a channel should be restricted from search, browse, or viewing. This can be set only at the channel level. All programs defer to the setting on the channel.
-
COLUMN_SEARCHABLE
: Restricting search from some channels may be a requirement in certain regions.COLUMN_SEARCHABLE = 0
means the channel should not be exposed in search results. -
COLUMN_BROWSABLE
: Visible to system applications only. Restricting channel from being browsed by applications.COLUMN_BROWSABLE = 0
means the channel should not be included in the channel list. -
COLUMN_LOCKED
: Visible to system applications only. Restricting channel from being viewed by invalid accounts without entering PIN code.COLUMN_LOCKED = 1
means the channel should be protected by parental control.
For a more exhaustive list of the fields, see android/frameworks/base/media/java/android/media/tv/TvContract.java
Permissions and access control
All fields are visible to anyone with access to the corresponding row. No fields are directly accessible to users; they see only what the TV App, System apps, or TV Inputs surface.
- Each row has
PACKAGE_NAME
, the package (app) that owns that row, checked on Query, Insert, Update via TvProvider.java. A TV Input may access only the information it wrote and is cordoned off from the information provided by other TV Inputs. - READ, WRITE permissions via AndroidManifest.xml (requires user consent) to determine available channels.
- Only
signatureOrSystem
apps can acquireACCESS_ALL_EPG_DATA
permission to access the entire database.
TV Input Manager
The TV Input Manager provides a central system API to the overall Android TV Input Framework. It arbitrates interaction between apps and TV Inputs and provides parental control functionality. TV Input Manager sessions must be created one-to-one with TV Inputs. The TV Input Manager allows access to installed TV Inputs so apps may:
- List TV inputs and check their status
- Create sessions and manage listeners
For sessions, a TV Input may be tuned by the TV App only to URIs it has added to the TV Provider database, except for passthrough TV Inputs which can be tuned to using TvContract.buildChannelUriForPassthroughInput()
. A TV Input may also have its volume set. TV Inputs provided and signed by the device manufacturer (signature apps) or other apps installed in the system partition will have access to the entire TV Provider database. This access can be used to construct apps to browse and search across all available TV channels and programs.
An app may create and register a TvInputCallback
with the android.media.tv.TvInputManager
to be called back on a TV Input's state change or on the addition or removal of a TV Input. For example, a TV App can react when a TV Input is disconnected by displaying it as disconnected and preventing its selection.
The TV Input Manager abstracts communication between the TV App and TV Inputs. The standard interface of TV Input Manager and TV Input allows multiple device manufacturers to create their own TV Apps while helping all third-party TV Inputs work on all TV Apps.
TV Inputs
TV Inputs are Android apps in the sense they have an AndroidManifest.xml and are installed (via Play, pre-installed, or sideloaded). Android TV supports pre-installed system apps, apps signed by the device manufacturer and third-party TV Inputs.
Some inputs, like the HDMI input or built-in tuner input, can be provided only by the manufacturer as they speak directly with the underlying hardware. Others, such as IPTV, place-shifting, and external STB, can be supplied by third parties as APKs on Google Play Store. Once downloaded and installed, the new input can be selected within the TV App.
Passthrough input example

In this example, the TV Input provided by the device manufacturer is trusted and has full access to the TV Provider. As a passthrough TV Input, it does not register any channels or programs with the TV Provider. To obtain the URI used to reference the passthrough input, use the android.media.tv.TvContract
utility method buildChannelUriForPassthroughInput(String inputId)
. The TV App communicates with the TV Input Manager to reach the HDMI TV Input.
Built-in tuner example

In this example, the Built-in Tuner TV Input provided by the device manufacturer is trusted and has full access to the TV Provider.
Third-party input example

In this example, the external STB TV Input is provided by a third party. Since that TV Input can't directly access the HDMI video feed coming in, it must go through the TV Input Manager and use the HDMI TV Input provided by the device manufacture.
Through the TV Input Manager, the external STB TV Input can speak with the HDMI TV Input and ask it to show the video on HDMI1. So the STB TV Input can control the TV while the manufacturer-provided HDMI TV Input renders the video.
Picture in picture (PIP) example

The diagram above shows how buttons on a remote control are passed to a specific TV Input for picture in picture (PIP) display. Those button presses are interpreted by the hardware driver supplied by the device manufacturer, converting hardware scancodes to Android keycodes and passing them to the standard Android input pipeline InputReader
and InputDispatcher
functions as KeyEvents . These in turn trigger events on the TV App if it is in focus.
Only system TV Inputs are eligible to receive InputEvents
, and only if they have the RECEIVE_INPUT_EVENT
system permission. The TV Input is responsible to determine which InputEvents to consume and should allow the TV App to handle the keys it does not need to consume.
The TV App is responsible for knowing which system TV Input is active, meaning selected by the user, and to disambiguate incoming KeyEvents
and route them to the correct TV Input Manager session, calling dispatchInputEvent()
to pass on the event to the associated TV Input.
MHEG-5 input example
The following diagram shows a more detailed view of how KeyEvents
are routed through the Android TIF.

It depicts the flow of a Red button app, common in Europe for letting users access interactive apps on their televisions. An app can be delivered over this transport stream. When the button is clicked, it lets users interact with these broadcast apps. For example, you might use these broadcast apps to access related web pages or sports scores.
See the Broadcast app section to learn how broadcast apps interact with the TV App.
In this example:
- The TV App is in focus and receives all keys.
-
KeyEvents
(eg the Red button) is passed to the active TV Input asInputEvents.
- The system TV Input integrates with MHEG-5 stack and has the
RECEIVE_INPUT_EVENT
system permission. - On receiving activation keycode (eg Red button), the TV Input activates broadcast app.
- TV input consumes
KeyEvents
asInputEvents
and the broadcast app is the focus and handlesInputEvents
until dismissed.
Note : Third-party TV inputs never receive keys.
TV Input HAL
The TV Input HAL aids development of TV Inputs to access TV-specific hardware. As with other Android HALs, the TV Input HAL ( tv_input
) is available in the AOSP source tree and the vendor develops its implementation.
TV App
The system TV App presents live TV content to the user. A reference TV App (Live TV) is provided alongside the Android platform, which can be used as-is, customized, extended, or replaced by device manufacturers. The source code is available in the Android Open Source Project, and you can get started with it in the Reference TV app article.
Device manufacturers may extend their TV Apps to implement device manufacturer or country-specific features, however this is not in the scope of TIF or the reference TV App.
At a minimum, the system TV App needs to handle the following tasks:
Setup and configuration
- Auto-detect TV Inputs
- Let TV Inputs initiate channel setup
- Control parental settings
- Edit channels
Viewing
- Access and navigate all TV channels
- Access TV program information bar
- Display Electronic Programming Guide (EPG) data
- Support multiple audio and subtitle tracks
- Supply parental control PIN challenge
- Allow TV Input UI overlay for TV standard (HbbTV, etc.)
- Populate search results for TV channels and programs
- Display app linking cards
- Support timeshifting APIs
- Handle DVR functionality and support TV recording APIs
This feature set will increase in line with new Android versions where the platform TIF APIs are extended. CTS Verifier provides the compatibility test coverage.
Support for third-party TV Inputs
Android TV provides developer APIs for third-party TV inputs, enabling installed apps to deliver software channels into the live TV experience. To ensure a compatible Android device implementation, the system TV App has some responsibilities regarding surfacing third-party TV inputs and channels to the user. The reference Live TV app provides a compatible implementation; if replacing the system TV App, device manufacturers must ensure their own apps provide similar compatibility, to meet developer expectations across all Android TV devices.
The system TV App must surface third-party inputs alongside the device's default live TV service. The promise of the developer APIs is that users will be able to find channels (once installed) within their standard TV experience.
Visual differentiation between built-in channels and third-party channels is allowed, as defined in the TV App section of the Android CDD.
The following sections show how the Live TV application fulfills the CDD requirements.
New channel setup
The addition of new third-party inputs/channels begins with the user finding and installing a TV Input from an application store, such as Google Play.
Some third-party TV inputs automatically add channels to the TvProvider database. However most will provide a Setup activity to enable the user to set up their channels, provide login details, and other actions. The system TV App needs to ensure the user can activate this Setup activity, which is why the CDD requires third-party inputs be minimal navigation actions away from the main TV App.
The reference Live TV app provides the Channel Sources menu for accessing inputs.




In addition a notification card is shown at the top of the TV App menu after a new TvInput is installed, to take the user directly to the Setup:

If the user takes action through the notification, they can select to set up their sources as seen in Figure 10.
See Define Your TV Input Service for developer expectations in this area.
Customize the channel list
Device manufacturers may provide a UI to hide certain channels and enable users to manage their own EPGs. Live TV includes this facility.


EPG
Third-party input developers need to have confidence that users can easily navigate to their channels during general usage, across all compatible Android TV devices.
Channels from third-party inputs must be presented as part of the device's standard live TV experience EPG. Visual separation or separate categories for third-party channels can be used (see the TV App section of the Android CDD) —what's key is that users are able to find the channels they have installed.
Search
Manufacturers must implement the TV App to include search results for global search requests in order to ensure the best user experience. Live TV provides an implementation (see which provides results from third-party inputs (required for platform compatibility) as well as built-in inputs.
Time shifting
For devices on Android 6.0 and above, the TV App must support the Android framework time shifting APIs . Additionally, manufacturers must implement playback controls in the TV App, which allow users to pause, resume, rewind, and fast forward the playback.
For TV Inputs that support time shifting, the TV App needs to display playback controls.

DVR
For devices on Android 7.0 and above, the TV App must support the Android framework TV recording APIs , to support, list, and play recorded programs.
This allows device manufacturers to plug their DVR subsystems into TIF and dramatically reduce the integration effort it takes to enable or integrate DVR functionality on a TV device. It also enables third parties to provide aftermarket DVR systems that can be plugged into an Android TV device.
In addition to recording live content, the TV App also handles resource conflict. For example, if the device has two tuners, it can record two programs at the same time. If the user asks to record three, the TV App must handle the conflict and should either surface a notification or request that the user schedules a priority for these requests.
TV Apps can also implement more sophisticated logic like asking a user if they'd like to record all future episodes in a series when they request to record one episode.
See the following diagram for a view into a possible DVR implementation in Android TV.

- The TV Input Service tells the TV App how many tuners are available so that the TV App can handle possible resource conflict.
- The TV App receives a user-initiated request to record a TV program.
- The TV App stores the recording schedule in its internal database.
- When it's time to record, the TV App passes a request to tune to the channel associated with the recording.
- The TV Input Service receives this request, responds with whether or not there are appropriate resources, and tunes to the channel.
- Then the TV App passes a request to start recording to the TV Input Manager.
- The TV Input Service receives this request and starts recording.
- The TV Input Service stores the actual video data in its storage, which can be external storage or cloud storage.
- When it's time to finish the recording, the TV App passes the stop recording request to the TV Input Manager.
- Once the TV Input Service receives the request, it stops the recording and adds its associated metadata to the TV Provider so that the TV App can show the recording to users when requested.
For more information about implementing Recording features in your TV Input service, see this TV Recording article.
Useful resources
- The Android CDD and documented developer APIs are the definitive references.
- CTS Verifier exercises the APIs as part of the compatibility testing program. Running this against Live TV may be a useful way to see the EPG, Search, Parental Control, and other requirements in the context of third-party inputs.
- See Define Your TV Input Service for developer expectations in this area.
Parental control
Parental control lets a user block undesired channels and programs, but bypass the block by entering a PIN code.
Responsibility for parental control functionality is shared amongst the TV App, TV Input Manager service, TV Provider, and TV Input.
Parental control is mandatory, and is covered by CTS Verifier.
A number of countries have defined rating systems that TV Inputs can use via the TVContentRating API . Additionally, TV Inputs can register their own custom rating systems as demonstrated by the CTS Verifier test, which introduces a 'fake' rating. For countries where a standard rating system exists, device manufacturers are encouraged to combine the TV Input Framework Parental Control with any other mechanisms they may include.
TV provider
Each channel row has a COLUMN_LOCKED
field that is used to lock specific channels from viewing without entering a PIN code. The program field COLUMN_CONTENT_RATING
is intended for display and is not used to enforce parental control.
TV Input Manager
The TV Input Manager stores every blocked TvContentRating
and responds to isRatingBlocked()
to advise if content with the given rating should be blocked.
TV Input
The TV Input checks if the current content should be blocked by calling isRatingBlocked()
on the TV Input Manager when the rating of the displayed content has changed (on program or channel change), or parental control settings have changed (on ACTION_BLOCKED_RATINGS_CHANGED
and ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED
). If the content should be blocked, the TV Input disables the audio and video and notifies the TV app that the current content is blocked by calling notifyContentBlocked(TvContentRating)
. If the content should not be blocked, the TV Input enables audio and video and notifies the TV App the current content is allowed by calling notifyContentAllowed()
.
TV App
To honor the parental control APIs, and therefore create a compatible platform, the system TV App needs to provide a way for users to manage parental control, including for any custom ratings registered by specific apps.
The TV App shows a PIN code UI when it is notified by a TV Input that the current content is blocked or when the user attempts to view a blocked channel.
The TV App does not directly store the parental control settings. When the user changes the parental control settings, every blocked TvContentRating
is stored by the TV Input Manager, and blocked channels are stored by the TV Provider.
The TV App needs to declare the permission android.permission.MODIFY_PARENTAL_CONTROLS
in order to change the parental control settings.
Device manufacturers are encouraged to:
- Exercise the CTS Verifier parental controls test against the reference Live TV application for a demonstration of the compatibility requirements.
- Use the Live TV app as reference for their own TV App: in particular see ContentRatingsManager and RatingSystemsFragment source, and how they handle custom ratings.
HDMI-CEC
HDMI-CEC allows one device to control another, thereby enabling a single remote to control multiple appliances in a home theater. It is used by Android TV to speed setup and allow distant control over various TV Inputs via the central TV App. For instance, it may switch inputs, power up or down devices, and more.
The Android TIF implements HDMI-CEC as the HDMI Control Service so that device manufacturers merely need to develop low-level drivers that interact with the lightweight Android TV HAL, skipping more complex business logic. In providing a standard implementation, Android seeks to mitigate compatibility issues by reducing fragmented implementations and selective feature support. The HDMI Control Service uses the existing Android services, including input and power.
This means existing HDMI-CEC implementations will need to be redesigned to interoperate with the Android TIF. We recommend the hardware platform contain a microprocessor to receive CEC power on and other commands.

- The CEC bus receives a command from the currently active source to switch to a different source.
- The driver passes the command to the HDMI-CEC HAL.
- The HAL notifies all
ActiveSourceChangeListeners
. - THe HDMI Control Service is notified of source change via
ActiveSourceChangeListener
. - The TV Input Manager service generates an intent for the TV App to switch the source.
- The TV App then creates a TV Input Manager Session for the TV Input being switched to and calls
setMain
on that session. - The TV Input Manager Session passes this information on to the HDMI TV Input.
- The HDMI TV input requests to set sideband surface.
- The TV Input Manager Service generates a corresponding routing control command back to HDMI Control Service when the surface is set.
TV integration guidelines
Broadcast app
Because each country has broadcast-specific requirements (MHEG, Teletext, HbbTV, and more), manufacturers are expected to supply their own solutions for the broadcast app, for example:
- MHEG: native stack
- Teletext: native stack
- HbbTV: HbbTV solution from Vewd Software
In the Android L release, Android TV expects device manufacturers to use systems integrators or the Android solutions for regional TV stacks, pass the surface to TV software stacks, or pass the necessary key code to interact with legacy stacks.
Here's how the broadcast app and TV App interact:
- The TV App is in focus, receiving all keys.
- The TV App passes keys (eg Red button) to the TV Input device.
- The TV Input device internally integrates with legacy TV stack.
- On receiving an activation keycode (eg Red button), the TV Input device activates broadcast apps.
- A broadcast app takes focus in the TV App and handles user actions.
For voice search/recommendation, the broadcast app may support In-app search for voice search.