El marco de trabajo de entrada de Android TV (TIF) simplifica la entrega de contenido en vivo a Android TV. El TIF de Android proporciona una API estándar para que los fabricantes creen módulos de entrada para controlar Android TV y habiliten la búsqueda y las recomendaciones de TV en vivo a través de metadatos publicados por la entrada de TV.
El marco de trabajo no busca implementar estándares de TV ni requisitos regionales, pero facilita que los fabricantes de dispositivos cumplan con los estándares de transmisión de TV digital regionales sin necesidad de reimplementarlos. La documentación de esta sección también puede ser útil para los desarrolladores de apps de terceros que quieran crear entradas de TV personalizadas.
Componentes
La implementación del framework de entrada de Android TV incluye un administrador de entradas de TV. El TIF funciona con la app de TV, una app del sistema que no se puede reemplazar por una app de terceros, para acceder a canales integrados y de sintonizador de IP. La app de TV se comunica con los módulos de entrada de TV que proporciona el fabricante del dispositivo o terceros a través del Administrador de entradas de TV.
El framework de entrada de TV consta de lo siguiente:
- Proveedor de TV (
com.android.providers.tv.TvProvider
): Es una base de datos de canales, programas y permisos asociados. - App para TV (
com.android.tv.TvActivity
): Es la app que controla la interacción del usuario. - Administrador de entradas de TV (
android.media.tv.TvInputManager
): Permite que las entradas de TV se comuniquen con la app de TV. - Entrada de TV: Una app que representa puertos de entrada y sintonizadores físicos o virtuales
- HAL de entrada de TV (módulo
tv_input
): Una definición de hardware que permite que las entradas de TV del sistema accedan a hardware específico de TV cuando se implementa - Control parental: Es la tecnología que permite bloquear canales y programas.
- HDMI-CEC: Es la tecnología que permite el control remoto de varios dispositivos a través de HDMI.
- Framework de sintonizador: Es un framework para la entrada de TV con sintonizador integrado.
- MediaCas: un framework para el acceso condicional
- Administrador de recursos de sintonizador: Es un servicio para administrar el recurso de hardware de la entrada de TV, MediaCas y la entrada de sintonizador integrado.
Estos componentes se describen en detalle a continuación. Consulta el siguiente diagrama para obtener una vista detallada de la arquitectura del marco de trabajo de entrada de Android TV.
Flujo
Esta es la forma en que se ejerce la arquitectura:
- El usuario ve e interactúa con la app de TV, una app del sistema que no se puede reemplazar por una app de terceros.
- La app para TV muestra el contenido AV de la entrada de TV.
- La app de TV no puede comunicarse directamente con las entradas de TV. El Administrador de entradas de TV identifica el estado de las entradas de TV para la app para TV. Consulta Administrador de entradas de TV a continuación para obtener más detalles sobre estas limitaciones.
Permisos
- Solo las entradas de TV y la app de TV de
signatureOrSystem
tienen acceso completo a la base de datos del proveedor de TV y pueden recibir eventos de tecla. - Solo las entradas de TV del sistema pueden acceder al HAL de entrada de TV a través del servicio de administrador de entradas de TV. Se puede acceder a las entradas de TV de forma individual a través de las sesiones de TV Input Manager.
- Las entradas de TV de terceros tienen acceso bloqueado por paquete a la base de datos del proveedor de TV y solo pueden LEER/ESCRIBIR en las filas de paquetes coincidentes.
- Las entradas de TV de terceros pueden mostrar su propio contenido o el contenido de las entradas de TV de transferencia del fabricante del dispositivo, como HDMI1. No pueden mostrar contenido de entradas de TV que no sean de transferencia, como un sintonizador IPTV o un sintonizador integrado.
- El permiso
TV_INPUT_HARDWARE
para una app de entrada de TV de hardware indica al servicio de administrador de entradas de TV que notifique al servicio de entrada de TV durante el inicio para llamar al servicio de administrador de entradas de TV y agregar sus entradas de TV. Este permiso permite que una app de entrada de TV de hardware admita varias entradas de TV por servicio de entrada de TV, además de poder agregar y quitar de forma dinámica sus entradas de TV compatibles.
TVProvider
La base de datos del proveedor de TV almacena los canales y programas de las entradas de TV. El proveedor de TV también publica y administra los permisos asociados para que las entradas de TV solo puedan ver sus propios registros. Por ejemplo, una entrada de TV específica solo puede ver los canales y programas que proporcionó y no tiene permitido acceder a los canales y programas de otras entradas de TV.
El proveedor de TV asigna internamente el "género de transmisión" al "género canónico". Las entradas de TV son responsables de propagar el "género de transmisión" con el valor del estándar de transmisión subyacente, y el campo "género canónico" se propagará automáticamente con el género asociado correcto de android.provider.TvContract.Genres
. Por ejemplo, con la transmisión estándar ATSC A/65 y el programa con el género 0x25 (que significa “Deportes”), la entrada de TV propagará el “género de transmisión” con la cadena “Deportes” y el proveedor de TV propagará el campo “género canónico” con el valor asignado android.provider.TvContract.Genres.SPORTS
.
Consulta el siguiente diagrama para obtener una vista detallada del proveedor de TV.
Solo las apps de la partición del sistema con privilegios pueden leer toda la base de datos del proveedor de TV.
Las entradas de TV de transferencia no almacenan canales ni programas.
Además de los campos estándar para canales y programas, la base de datos del proveedor de TV también ofrece un campo de tipo BLOB, COLUMN_INTERNAL_PROVIDER_DATA
, en cada tabla que las entradas de TV pueden usar para almacenar datos arbitrarios. Esos datos BLOB pueden incluir información personalizada, como la frecuencia del sintonizador asociado, y se pueden proporcionar en un búfer de protocolo o en otra forma. Hay un campo de búsqueda disponible para que ciertos canales no estén disponibles en la búsqueda (por ejemplo, para cumplir con los requisitos específicos de cada país para la protección del contenido).
Ejemplos de campos de base de datos
El proveedor de TV admite datos estructurados en las tablas de canales (android.provider.TvContract.Channels
) y programas (android.provider.TvContract.Programs
). Las entradas de TV y las apps del sistema, como la app de TV, completan estas tablas y acceden a ellas. Estas tablas tienen cuatro tipos de campos:
- Visualización: Los campos de visualización contienen información que las apps pueden mostrar al usuario, como el nombre (
COLUMN_DISPLAY_NAME
) o el número (COLUMN_DISPLAY_NUMBER
) de un canal, o el título del programa que se está viendo. - Metadatos: Hay tres campos para identificar el contenido según los estándares relevantes, como el ID de flujo de transporte de un canal (
COLUMN_TRANSPORT_STREAM_ID
), el ID de red original (COLUMN_ORIGINAL_NETWORK_ID
) y el ID de servicio (COLUMN_SERVICE_ID
). - Datos internos: Son campos para el uso personalizado de las entradas de TV.
Algunos campos, comoCOLUMN_INTERNAL_PROVIDER_DATA
, son campos BLOB personalizables en los que una entrada de TV puede almacenar metadatos arbitrarios sobre su canal o programa. - Marca: Los campos de marca representan si un canal debe restringirse de la búsqueda, la navegación o la visualización. Esto solo se puede configurar a nivel del canal. Todos los programas se retrasan según la configuración del canal.
COLUMN_SEARCHABLE
: Es posible que en determinadas regiones sea obligatorio restringir la búsqueda de algunos canales.COLUMN_SEARCHABLE = 0
significa que el canal no debe exponerse en los resultados de la búsqueda.COLUMN_BROWSABLE
: Solo es visible para las aplicaciones del sistema. Restringir el canal para que las aplicaciones no lo explorenCOLUMN_BROWSABLE = 0
significa que el canal no se debe incluir en la lista de canales.COLUMN_LOCKED
: Solo es visible para las aplicaciones del sistema. Restringir el canal para que no lo puedan ver cuentas no válidas sin ingresar el código PINCOLUMN_LOCKED = 1
significa que el canal debe estar protegido por el control parental.
Para obtener una lista más exhaustiva de los campos, consulta android/frameworks/base/media/java/android/media/tv/TvContract.java
.
Permisos y control de acceso
Cualquier persona que tenga acceso a la fila correspondiente puede ver todos los campos. Los usuarios no pueden acceder directamente a ningún campo. Solo ven lo que muestran la app de TV, las apps del sistema o las entradas de TV.
- Cada fila tiene
PACKAGE_NAME
, el paquete (app) al que pertenece esa fila, que se verifica en Query, Insert, Update a través de TvProvider.java. Una entrada de TV puede acceder solo a la información que escribió y se acordona de la información proporcionada por otras entradas de TV. - Permisos de LECTURA y ESCRITURA a través de AndroidManifest.xml (requiere el consentimiento del usuario) para determinar los canales disponibles.
- Solo las apps de
signatureOrSystem
pueden adquirir el permisoACCESS_ALL_EPG_DATA
para acceder a toda la base de datos.
Administrador de entradas de TV
El Administrador de entradas de TV proporciona una API de sistema central al framework de entrada general de Android TV. arbitra la interacción entre apps y entradas de TV, y proporciona funcionalidad de control parental. Las sesiones del Administrador de entradas de TV se deben crear de forma individual con las entradas de TV. El Administrador de entradas de TV permite el acceso a las entradas de TV instaladas para que las apps puedan hacer lo siguiente:
- Cómo ver las entradas de la TV y verificar su estado
- Crea sesiones y administra objetos de escucha
En el caso de las sesiones, la app para TV puede sintonizar una entrada de TV solo en los URIs que agregó a la base de datos del proveedor de TV, excepto las entradas de TV de transferencia que se pueden sintonizar con TvContract.buildChannelUriForPassthroughInput()
.
Es posible que una entrada de TV también tenga el volumen establecido. Las entradas de TV que proporcione y firme el fabricante del dispositivo (apps de firma) o cualquier otra app instalada en la partición del sistema tendrán acceso a toda la base de datos del proveedor de TV. Este acceso se puede usar para crear apps que permitan explorar y buscar en todos los canales y programas de TV disponibles.
Una app puede crear y registrar un TvInputCallback
con el android.media.tv.TvInputManager
para que se le vuelva a llamar cuando cambie el estado de una entrada de TV o cuando se agregue o quite una entrada de TV. Por ejemplo, una app para TV puede reaccionar cuando se desconecta una entrada de TV mostrándola como desconectada y evitando su selección.
El Administrador de entradas de TV abstrae la comunicación entre la app de TV y las entradas de TV. La interfaz estándar del Administrador de entrada de TV y la entrada de TV permite que varios fabricantes de dispositivos creen sus propias apps para TV y, al mismo tiempo, ayuda a que todas las entradas de TV de terceros funcionen en todas las apps para TV.
Entradas de TV
Las entradas de TV son apps para Android en el sentido de que tienen un AndroidManifest.xml y están instaladas (a través de Play, preinstaladas o transferidas). Android TV admite apps del sistema preinstaladas, apps firmadas por el fabricante del dispositivo y entradas de TV de terceros.
Algunas entradas, como la entrada HDMI o la entrada del sintonizador integrado, solo las puede proporcionar el fabricante, ya que se comunican directamente con el hardware subyacente. Otros, como IPTV, cambio de ubicación y STB externo, pueden ser proporcionados por terceros como APK en Google Play Store. Una vez que se descargue y se instale, se puede seleccionar la entrada nueva en la app de TV.
Ejemplo de entrada de transferencia
En este ejemplo, la entrada de TV que proporciona el fabricante del dispositivo es de confianza y tiene acceso completo al proveedor de TV. Como entrada de TV de transferencia, no registra ningún canal ni programa con el proveedor de TV. Si deseas obtener el URI que se usa para hacer referencia a la entrada de transferencia, usa el método de utilidad buildChannelUriForPassthroughInput(String inputId)
de android.media.tv.TvContract
.
La app de TV se comunica con el administrador de entrada de TV para acceder a la entrada de TV HDMI.
Ejemplo de sintonizador integrado
En este ejemplo, la entrada de TV del sintonizador integrado que proporciona el fabricante del dispositivo es de confianza y tiene acceso completo al proveedor de TV.
Ejemplo de entrada de terceros
En este ejemplo, un tercero proporciona la entrada de TV de la STB externa. Dado que esa entrada de TV no puede acceder directamente al feed de video HDMI entrante, debe pasar por el Administrador de entradas de TV y usar la entrada de TV HDMI que proporciona el fabricante del dispositivo.
A través del Administrador de entradas de TV, la entrada de TV externa del STB puede comunicarse con la entrada de TV HDMI y pedirle que muestre el video en HDMI1. Por lo tanto, la entrada de TV STB puede controlar la TV, mientras que la entrada de TV HDMI proporcionada por el fabricante procesa el video.
Ejemplo de pantalla en pantalla (PIP)
En el diagrama anterior, se muestra cómo se pasan los botones de un control remoto a una entrada de TV específica para la pantalla en pantalla (PIP). El controlador de hardware que proporciona el fabricante del dispositivo interpreta esos toques de botones, convierte los códigos de barras de hardware en códigos de teclas de Android y los pasa a las funciones InputReader
y InputDispatcher
de la canalización de entrada estándar de Android como KeyEvents.
A su vez, estos activan eventos en la app de TV si está en foco.
Solo las entradas de TV del sistema son aptas para recibir InputEvents
y solo si tienen el permiso de sistema RECEIVE_INPUT_EVENT
.
La entrada de TV es responsable de determinar qué InputEvents consumir y debe permitir que la app para TV controle las teclas que no necesita consumir.
La app para TV es responsable de saber qué entrada de TV del sistema está activa, es decir, la que seleccionó el usuario, y de desambiguar los KeyEvents
entrantes y enrutarlos a la sesión correcta del Administrador de entradas de TV, llamando a dispatchInputEvent()
para pasar el evento a la entrada de TV asociada.
Ejemplo de entrada de MHEG-5
En el siguiente diagrama, se muestra una vista más detallada de cómo se enrutan los KeyEvents
a través del TIF de Android.
Representa el flujo de una app de botón rojo, que es común en Europa para permitir que los usuarios accedan a apps interactivas en sus televisores. Se puede entregar una app a través de esta transmisión de transporte. Cuando se hace clic en el botón, permite que los usuarios interactúen con estas apps de transmisión. Por ejemplo, puedes usar estas apps de transmisión para acceder a páginas web relacionadas o a resultados deportivos.
Consulta la sección App de transmisión para obtener información sobre cómo interactúan las apps de transmisión con la app para TV.
En este ejemplo:
- La app para TV está en foco y recibe todas las teclas.
KeyEvents
(p. ej., el botón rojo) se pasa a la entrada de TV activa comoInputEvents.
.- La entrada de TV del sistema se integra en la pila MHEG-5 y tiene el permiso del sistema
RECEIVE_INPUT_EVENT
. - Cuando se recibe el código de activación (p.ej., el botón rojo), la entrada de TV activa la app de transmisión.
- La entrada de TV consume
KeyEvents
comoInputEvents
, y la app de transmisión es el enfoque y controlaInputEvents
hasta que se descarta.
Nota: Las entradas de TV de terceros nunca reciben claves.
HAL de entrada de TV
El HAL de entrada de TV ayuda al desarrollo de entradas de TV para acceder al hardware específico de la TV.
Al igual que con otros HAL de Android, el HAL de entrada de TV (tv_input
) está disponible en el árbol de fuentes de AOSP, y el proveedor desarrolla su implementación.
Nota: A partir de Android 14, la interfaz de la HAL de entrada de TV se define usando el AIDL.
App para TV
La app de TV del sistema presenta contenido de TV en vivo al usuario. Se proporciona una app de TV (TV en vivo) de referencia junto con la plataforma de Android, que los fabricantes de dispositivos pueden usar tal como está, personalizarla, ampliar o reemplazar. El código fuente está disponible en el Proyecto de código abierto de Android, y puedes comenzar a usarlo en el artículo App de referencia para TV.
Los fabricantes de dispositivos pueden extender sus apps para TV para implementar funciones específicas del fabricante o del país. Sin embargo, esto no está dentro del alcance del TIF ni de la app para TV de referencia.
Como mínimo, la app de TV del sistema debe controlar las siguientes tareas:
Configuración
- Cómo detectar automáticamente las entradas de TV
- Permite que las entradas de TV inicien la configuración de canales
- Controla la configuración parental
- Editar canales
Visualización
- Acceder a todos los canales de TV y navegar por ellos
- Cómo acceder a la barra de información del programa de TV
- Muestra los datos de la Guía de programación electrónica (EPG)
- Admitir varias pistas de audio y subtítulos
- Proporcionar el desafío de PIN del control parental
- Permite la superposición de la IU de entrada de TV para el estándar de TV (HbbTV, etc.)
- Cómo propagar los resultados de la búsqueda de canales y programas de TV
- Cómo mostrar tarjetas de vinculación de apps
- Compatibilidad con APIs de timeshifting
- Controla la funcionalidad de DVR y admite las APIs de grabación de TV
Este conjunto de funciones aumentará de acuerdo con las nuevas versiones de Android en las que se extiendan las APIs de TIF de la plataforma. El verificador de CTS proporciona la cobertura de las pruebas de compatibilidad.
Compatibilidad con entradas de TV de terceros
Android TV proporciona APIs para desarrolladores de entradas de TV de terceros, lo que permite que las apps instaladas entreguen canales de software en la experiencia de TV en vivo. Para garantizar una implementación compatible del dispositivo Android, la app de TV del sistema tiene algunas responsabilidades en cuanto a mostrar entradas y canales de TV de terceros al usuario. La app de TV en vivo de referencia proporciona una implementación compatible. Si reemplazas la app de TV del sistema, los fabricantes de dispositivos deben asegurarse de que sus propias apps ofrezcan una compatibilidad similar para cumplir con las expectativas de los desarrolladores en todos los dispositivos Android TV.
La app de TV del sistema debe mostrar entradas de terceros junto con el servicio de TV en vivo predeterminado del dispositivo. La promesa de las APIs para desarrolladores es que los usuarios podrán encontrar canales (una vez instalados) dentro de su experiencia de TV estándar.
Se permite la diferenciación visual entre canales integrados y canales de terceros, como se define en la sección de apps para TV del CDD de Android.
En las siguientes secciones, se muestra cómo la aplicación de TV en vivo cumple con los requisitos de la CDD.
Configuración de un canal nuevo
La adición de entradas o canales de terceros nuevos comienza cuando el usuario busca e instala una entrada de TV desde una tienda de aplicaciones, como Google Play.
Algunas entradas de TV de terceros agregan canales automáticamente a la base de datos de TvProvider. Sin embargo, la mayoría proporciona una actividad de configuración para permitir que el usuario configure sus canales, proporcione los detalles de acceso y otras acciones. La app de TV del sistema debe asegurarse de que el usuario pueda activar esta actividad de configuración, por lo que el CDD requiere que las entradas de terceros sean acciones de navegación mínimas fuera de la app para TV principal.
La app de referencia de TV en vivo proporciona el menú Fuentes de canales para acceder a las entradas.
Además, se muestra una tarjeta de notificación en la parte superior del menú de la app para TV después de instalar un nuevo TvInput para llevar al usuario directamente a la configuración:
Si el usuario realiza una acción a través de la notificación, puede configurar sus fuentes como se ve en la Figura 10.
Consulta Define tu servicio de entrada de TV para conocer las expectativas de los desarrolladores en esta área.
Cómo personalizar la lista de canales
Los fabricantes de dispositivos pueden proporcionar una IU para ocultar ciertos canales y permitir que los usuarios administren sus propios EPG. La TV en vivo incluye esta función.
EPG
Los desarrolladores de entradas de terceros deben estar seguros de que los usuarios pueden navegar fácilmente a sus canales durante el uso general, en todos los dispositivos Android TV compatibles.
Los canales de entradas de terceros deben presentarse como parte de la EPG de la experiencia de TV en vivo estándar del dispositivo. Se puede usar la separación visual o categorías separadas para canales de terceros (consulta la sección de apps para TV del CDD de Android). Lo importante es que los usuarios puedan encontrar los canales que instalaron.
Buscar
Los fabricantes deben implementar la app para TV para incluir los resultados de la búsqueda de solicitudes de búsqueda globales y garantizar la mejor experiencia del usuario. La TV en vivo tiene una implementación (consulta , que proporciona resultados de entradas de terceros (necesarias para la compatibilidad de la plataforma) y entradas integradas.
Cambio de tiempo
En el caso de los dispositivos con Android 6.0 y versiones posteriores, la app para TV debe ser compatible con las APIs de pausa en directo del framework de Android. Además, los fabricantes deben implementar controles de reproducción en la app para TV, que permitan a los usuarios pausar, reanudar, retroceder y adelantar la reproducción.
En el caso de las entradas de TV que admiten la pausa en directo, la app para TV debe mostrar los controles de reproducción.
DVR
En el caso de los dispositivos con Android 7.0 y versiones posteriores, la app para TV debe admitir las APIs de grabación de TV del framework de Android para admitir, mostrar y reproducir programas grabados.
Esto permite que los fabricantes de dispositivos conecten sus subsistemas de DVR a TIF y reduzcan de forma significativa el esfuerzo de integración que se necesita para habilitar o integrar la funcionalidad de DVR en un dispositivo de TV. También permite que terceros proporcionen sistemas de DVR de posventa que se pueden conectar a un dispositivo Android TV.
Además de grabar contenido en vivo, la app de TV también controla los conflictos de recursos. Por ejemplo, si el dispositivo tiene dos sintonizadores, puede grabar dos programas al mismo tiempo. Si el usuario solicita grabar tres, la app para TV debe controlar el conflicto y mostrar una notificación o solicitar que el usuario programe una prioridad para estas solicitudes.
Las apps para TV también pueden implementar una lógica más sofisticada, como preguntarle al usuario si le gustaría grabar todos los episodios futuros de una serie cuando solicite grabar uno.
Consulta el siguiente diagrama para ver una posible implementación de DVR en Android TV.
- El servicio de entrada de TV le indica a la app de TV cuántos sintonizadores están disponibles para que pueda controlar un posible conflicto de recursos.
- La app de TV recibe una solicitud que inicia el usuario para grabar un programa de TV.
- La app de TV almacena el programa de grabación en su base de datos interna.
- Cuando llega el momento de grabar, la app de TV pasa una solicitud para sintonizar el canal asociado con la grabación.
- El servicio de entrada de TV recibe esta solicitud, responde si hay o no recursos adecuados y sintoniza el canal.
- Luego, la app de TV pasa una solicitud para comenzar a grabar al administrador de entrada de TV.
- El servicio de entrada de TV recibe esta solicitud y comienza a grabar.
- El servicio de entrada de TV almacena los datos de video reales en su almacenamiento, que puede ser almacenamiento externo o en la nube.
- Cuando llega el momento de finalizar la grabación, la app de TV pasa la solicitud de detención de grabación al Administrador de entradas de TV.
- Una vez que el servicio de entrada de TV recibe la solicitud, detiene la grabación y agrega sus metadatos asociados al proveedor de TV para que la app de TV pueda mostrar la grabación a los usuarios cuando se solicite.
Para obtener más información sobre la implementación de funciones de grabación en tu servicio de entrada de TV, consulta este artículo sobre grabación de TV.
Recursos útiles
- El CDD de Android y las APIs documentadas para desarrolladores son las referencias definitivas.
- El verificador del CTS ejercita las APIs como parte del programa de pruebas de compatibilidad. Ejecutar esto en Live TV puede ser una forma útil de ver el EPG, la búsqueda, el control parental y otros requisitos en el contexto de entradas de terceros.
- Consulta Cómo definir tu servicio de entrada de TV para conocer las expectativas de los desarrolladores en esta área.
Control parental
El control parental permite que un usuario bloquee canales y programas no deseados, pero puede ingresar un código PIN para anular el bloqueo.
La responsabilidad de la funcionalidad de control parental se comparte entre la app de TV, el servicio de administrador de entrada de TV, el proveedor de TV y la entrada de TV.
El control parental es obligatorio y está cubierto por el verificador de CTS.
Varios países definieron sistemas de clasificación que las entradas de TV pueden usar a través de la API de TVContentRating. Además, las entradas de TV pueden registrar sus propios sistemas de clasificación personalizados, como lo demuestra la prueba del verificador de CTS, que presenta una clasificación “falsa”. En los países donde existe un sistema de clasificación estándar, se recomienda a los fabricantes de dispositivos que combinen el control parental del framework de entrada de TV con cualquier otro mecanismo que puedan incluir.
Proveedor de TV
Cada fila de canal tiene un campo COLUMN_LOCKED
que se usa para bloquear la visualización de canales específicos sin ingresar un código PIN. El campo del programa COLUMN_CONTENT_RATING
está diseñado para la visualización y no se utiliza para aplicar el control parental.
Administrador de entradas de TV
El Administrador de entradas de TV almacena cada TvContentRating
bloqueado y responde a isRatingBlocked()
para indicar si se debe bloquear el contenido con la clasificación determinada.
Entrada de TV
La entrada de TV verifica si se debe bloquear el contenido actual llamando a isRatingBlocked()
en el administrador de entradas de TV cuando cambió la calificación del contenido que se muestra (durante un cambio de programa o canal) o cambió la configuración de los controles parentales (en ACTION_BLOCKED_RATINGS_CHANGED
y ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED
). Si el contenido debe bloquearse, la entrada de TV inhabilita el audio y el video, y notifica a la app de TV que el contenido actual está bloqueado llamando a notifyContentBlocked(TvContentRating)
. Si el contenido no se debe bloquear, la entrada de TV habilita el audio y el video, y notifica a la app de TV que se permite el contenido actual llamando a notifyContentAllowed()
.
App para TV
Para cumplir con las APIs de control parental y, por lo tanto, crear una plataforma compatible, la app de TV del sistema debe proporcionar una forma para que los usuarios administren el control parental, incluidas las clasificaciones personalizadas que registren apps específicas.
La app de TV muestra una IU de código PIN cuando una entrada de TV le notifica que el contenido actual está bloqueado o cuando el usuario intenta ver un canal bloqueado.
La app para TV no almacena directamente la configuración de los controles parentales. Cuando el usuario cambia la configuración de control parental, el Administrador de entradas de TV almacena cada TvContentRating
bloqueado, y el proveedor de TV almacena los canales bloqueados.
La app para TV debe declarar el permiso android.permission.MODIFY_PARENTAL_CONTROLS
para cambiar la configuración de los controles parentales.
Se recomienda a los fabricantes de dispositivos que hagan lo siguiente:
- Ejecuta la prueba de los controles parentales del verificador del CTS con la aplicación de referencia de Live TV para obtener una demostración de los requisitos de compatibilidad.
- Usa la app de Live TV como referencia para su propia app para TV. En particular, consulta las fuentes ContentRatingsManager y RatingSystemsFragment, y cómo manejan las calificaciones personalizadas.
HDMI-CEC
HDMI-CEC permite que un dispositivo controle a otro, lo que permite que un solo control remoto controle varios electrodomésticos en un sistema de cine en casa. Android TV lo usa para acelerar la configuración y permitir el control remoto de varias entradas de TV a través de la app de TV central. Por ejemplo, puede cambiar las entradas, encender o apagar dispositivos y mucho más.
El TIF de Android implementa HDMI-CEC como servicio de control de HDMI para que los fabricantes de dispositivos solo necesiten desarrollar controladores de bajo nivel que interactúen con la HAL ligera de Android TV, omitiendo lógicas empresariales más complejas. Cuando proporciona una implementación estándar, Android busca mitigar los problemas de compatibilidad reduciendo las implementaciones fragmentadas y la compatibilidad con funciones selectivas. El servicio de control HDMI usa los servicios de Android existentes, incluidas la entrada y la alimentación.
Esto significa que las implementaciones existentes de HDMI-CEC deberán rediseñarse para interoperar con el TIF de Android. Recomendamos que la plataforma de hardware contenga un microprocesador para recibir la activación de CEC y otros comandos.
- El bus de CEC recibe un comando de la fuente activa en ese momento para cambiar a una fuente diferente.
- El controlador pasa el comando a la HAL de HDMI-CEC.
- El sistema HAL notifica a todos los
ActiveSourceChangeListeners
. - El servicio de control HDMI recibe una notificación sobre el cambio de fuente a través de
ActiveSourceChangeListener
. - El servicio de administrador de entradas de TV genera un intent para que la app de TV cambie la fuente.
- Luego, la app para TV crea una sesión del Administrador de entradas de TV para la entrada de TV a la que se cambia y llama a
setMain
en esa sesión. - La sesión del Administrador de entradas de TV pasa esta información a la entrada de TV HDMI.
- La entrada de TV HDMI solicita establecer la superficie de banda lateral.
- El servicio de administrador de entradas de TV genera un comando de control de enrutamiento correspondiente al servicio de control de HDMI cuando se configura la superficie.
Lineamientos de integración de TV
App de transmisión
Debido a que cada país tiene requisitos específicos de emisión (MHEG, teletexto, HBOTV y muchos más), se espera que los fabricantes proporcionen sus propias soluciones para la app de transmisión, por ejemplo:
- MHEG: Pila nativa
- Teletexto: pila nativa
- HbbTV: Solución de HbbTV de Vewd Software
En la versión de Android L, Android TV espera que los fabricantes de dispositivos usen integradores de sistemas o las soluciones de Android para pilas de TV regionales, pasen la plataforma a pilas de software de TV o pasen el código de clave necesario para interactuar con pilas heredadas.
A continuación, se explica cómo interactúan la app de transmisión y la app para TV:
- La app para TV está en foco y recibe todas las teclas.
- La app para TV pasa teclas (p.ej., el botón rojo) al dispositivo de entrada de TV.
- El dispositivo de entrada de TV se integra de forma interna con la pila de TV heredada.
- Cuando recibe un código de activación (p.ej., el botón rojo), el dispositivo de entrada de TV activa las apps de transmisión.
- Una app de transmisión se enfoca en la app para TV y controla las acciones del usuario.
En el caso de la búsqueda por voz o las recomendaciones, es posible que la app de transmisión admita la búsqueda en la app para la búsqueda por voz.