Framework de entrada de TV

Ícono del HAL de Android TV

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 habilita la búsqueda y las recomendaciones de TV en vivo a través de los metadatos publicados por la entrada de TV.

El framework no busca implementar estándares de TV ni requisitos regionales, pero facilita que los fabricantes de dispositivos cumplan con los estándares regionales de transmisión de TV digital sin necesidad de volver a implementar nada. La documentación de esta sección también puede ser útil para los desarrolladores de apps de terceros que deseen crear entradas de TV personalizadas.

Componentes

La implementación del marco de trabajo de entrada de TV de Android incluye un administrador de entrada de TV. El TIF funciona con la app de TV, una app del sistema que no se puede reemplazar con una app de terceros, para acceder a los canales integrados y del sintonizador de IP. La app de TV se comunica con los módulos de entrada de TV que proporcionan el fabricante del dispositivo o terceros a través de TV Input Manager.

El marco de trabajo de entrada de TV consta de los siguientes elementos:

  • Proveedor de TV (com.android.providers.tv.TvProvider): Es una base de datos de canales, programas y permisos asociados.
  • App para TVs (com.android.tv.TvActivity): Es la app que controla la interacción del usuario.
  • Administrador de entrada de TV (android.media.tv.TvInputManager): Permite que las entradas de TV se comuniquen con la app de TV.
  • Entrada de TV: Es una app que representa sintonizadores y puertos de entrada físicos o virtuales.
  • HAL de entrada de TV (módulo tv_input): Es una definición de hardware que permite que las entradas de TV del sistema accedan al hardware específico de la TV cuando se implementa.
  • Control parental: Es la tecnología que permite bloquear canales y programas.
  • HDMI-CEC: Es la tecnología que permite controlar de forma remota varios dispositivos a través de HDMI.
  • Tuner Framework: Es un framework para la entrada de TV con sintonizador integrado.
  • MediaCas: Un framework para el acceso condicional
  • Tuner Resource Manager: Es un servicio para administrar el recurso de hardware para la entrada de TV, MediaCas y la entrada de sintonizador integrado.

Estos componentes se explican en detalle a continuación. En el siguiente diagrama, se muestra una vista detallada de la arquitectura del marco de trabajo de entrada de Android TV.

Descripción general de la arquitectura de TIF de Android
Figura 1: Arquitectura del marco de trabajo de entrada de Android TV (TIF)

Flujo

Así es como se ejercita la arquitectura:

  1. El usuario ve la app de TV y puede interactuar con ella. Se trata de una app del sistema que no se puede reemplazar por una app de terceros.
  2. La app de TV muestra el contenido AV de la entrada de TV.
  3. La app de TV no puede comunicarse directamente con las entradas de la TV. El TV Input Manager identifica el estado de las entradas de TV para la app de TV. Consulta TV Input Manager a continuación para obtener más detalles sobre estas limitaciones.

Permisos

  • Solo signatureOrSystem TV Inputs y TV App tienen acceso completo a la base de datos del proveedor de TV y pueden recibir KeyEvents.
  • Solo las entradas de TV del sistema pueden acceder al HAL de entrada de TV a través del servicio de TV Input Manager. Se accede a las entradas de TV de forma individual a través de 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 de un fabricante de dispositivos, como HDMI1. No pueden mostrar contenido de entradas de TV que no sean de transferencia, como un sintonizador integrado o de IPTV.
  • El permiso TV_INPUT_HARDWARE para una app de entrada de TV de hardware indica al servicio de TV Input Manager que notifique al servicio de entrada de TV durante el inicio para que llame al servicio de TV Input Manager y agregue 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 puede acceder a los canales y programas de ninguna otra entrada de TV.

Internamente, el proveedor de TV asigna el "género de transmisión" al "género canónico". Las entradas de TV se encargan 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 el estándar de transmisión ATSC A/65 y el programa con el género 0x25 (que significa “Deportes”), la entrada de TV completará el “género de transmisión” con la cadena “Deportes”, y el proveedor de TV completará 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.

Proveedor de Android TV
Figura 2: Android TV Provider

Solo las apps de la partición del sistema con privilegios pueden leer toda la base de datos de TV Provider.

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 de proveedores 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 de 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 en relación con la protección del contenido).

Ejemplos de campos de bases 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:

  • Pantalla: Los campos de pantalla contienen información que las apps pueden querer que el usuario vea, 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á mirando.
  • Metadatos: Hay tres campos para identificar el contenido, según los estándares pertinentes, como el ID de la transmisión de un canal (COLUMN_TRANSPORT_STREAM_ID), el ID de la cadena original (COLUMN_ORIGINAL_NETWORK_ID) y el ID del servicio (COLUMN_SERVICE_ID).
  • Datos internos: Son campos para el uso personalizado de las entradas de TV.
    Algunos campos, como COLUMN_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 exploración o la visualización. Solo se puede configurar a nivel del canal. Todos los programas se ajustan a la configuración del canal.
    • COLUMN_SEARCHABLE: Restringir la búsqueda en algunos canales puede ser un requisito en ciertas regiones. COLUMN_SEARCHABLE = 0 significa que el canal no debe exponerse en los resultados de la búsqueda.
    • COLUMN_BROWSABLE: Solo visible para las aplicaciones del sistema. Restringe el canal para que las aplicaciones no puedan navegar por él. COLUMN_BROWSABLE = 0 significa que el canal no se debe incluir en la lista de canales.
    • COLUMN_LOCKED: Solo visible para las aplicaciones del sistema. Restringe la visualización del canal a cuentas no válidas sin ingresar el código PIN. COLUMN_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

Todos los campos son visibles para cualquier persona que tenga acceso a la fila correspondiente. Los usuarios no pueden acceder directamente a ningún campo; solo ven lo que muestran las apps para TV, las apps del sistema o las entradas de TV.

  • Cada fila tiene PACKAGE_NAME, el paquete (app) propietario de esa fila, verificado en Query, Insert y Update a través de TvProvider.java. Una entrada de TV solo puede acceder a la información que escribió y está aislada 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 permiso de ACCESS_ALL_EPG_DATA para acceder a toda la base de datos.

Administrador de entrada de TV

El Administrador de entrada de TV proporciona una API central del sistema al framework de entrada general de Android TV. Arbitra la interacción entre las apps y las entradas de TV, y proporciona la funcionalidad de controles parentales. Las sesiones de TV Input Manager deben crearse de forma individual con las entradas de TV. El Administrador de entrada de TV permite el acceso a las entradas de TV instaladas para que las apps puedan hacer lo siguiente:

  • Enumera las entradas de la TV y verifica su estado
  • Cómo crear sesiones y administrar a los participantes

En el caso de las sesiones, la app de TV solo puede sintonizar una entrada de TV con 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(). También se puede configurar el volumen de una entrada de TV. Las entradas de TV proporcionadas y firmadas por el fabricante del dispositivo (apps de firma) o por otras apps instaladas en la partición del sistema tendrán acceso a toda la base de datos de proveedores 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 lo llame cuando cambie el estado de una entrada de TV o cuando se agregue o quite una entrada de TV. Por ejemplo, una app para TVs 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 para TV y las entradas de TV. La interfaz estándar de TV Input Manager y TV Input permite que varios fabricantes de dispositivos creen sus propias apps para TVs y, al mismo tiempo, ayuda a que todas las entradas de TV de terceros funcionen en todas las apps para TVs.

Entradas de TV

Las entradas de TV son apps para Android en el sentido de que tienen un archivo AndroidManifest.xml y se instalan (a través de Play, preinstaladas o transferidas de forma local). 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 lugar y STB externa, pueden ser proporcionados por terceros como APKs en Google Play Store. Una vez que se descargue e instale, se podrá seleccionar la nueva entrada en la app de TV.

Ejemplo de entrada de transferencia

Entrada del sistema de Android TV
Figura 3: Entrada del sistema de Android TV

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. Para obtener el URI que se usa para hacer referencia a la entrada de transferencia, usa el método de utilidad android.media.tv.TvContract buildChannelUriForPassthroughInput(String inputId). La app de TV se comunica con el TV Input Manager para acceder a la entrada de TV HDMI.

Ejemplo de sintonizador integrado

Entrada del sintonizador integrado de Android TV
Figura 4: Entrada del sintonizador integrado de Android TV

En este ejemplo, la entrada de TV con sintonizador integrado que proporciona el fabricante del dispositivo es de confianza y tiene acceso completo al proveedor de TV.

Ejemplo de entrada de terceros

Entrada de terceros en Android TV
Figura 5: Entrada de terceros de Android TV

En este ejemplo, la entrada de TV de STB externa la proporciona un tercero. Dado que esa entrada de TV no puede acceder directamente a la transmisión de video HDMI entrante, debe pasar por el TV Input Manager y usar la entrada de TV HDMI proporcionada por el fabricante del dispositivo.

A través del Administrador de entrada de TV, la entrada de TV del STB externo puede comunicarse con la entrada de TV HDMI y pedirle que muestre el video en HDMI1. De esta manera, la entrada de TV del STB puede controlar la TV mientras que la entrada de TV HDMI proporcionada por el fabricante renderiza el video.

Ejemplo de pantalla en pantalla (PIP)

Android TV KeyEvents
Figura 6: Android TV KeyEvents

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 visualización de imagen en imagen (PIP). El controlador de hardware que proporciona el fabricante del dispositivo interpreta esas pulsaciones de botones, convierte los códigos de exploración 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 para TVs si está enfocada.

Solo las entradas de TV del sistema son aptas para recibir InputEvents, y solo si tienen el permiso del 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, seleccionada por el usuario) y de desambiguar los objetos KeyEvents entrantes y enrutarlos a la sesión correcta del Administrador de entrada 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 objetos KeyEvents a través de la TIF de Android.

Ejemplo de botón rojo de Android TV
Figura 7: Ejemplo del botón rojo de Android TV

Muestra el flujo de una app de botón rojo, 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, se 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 TVs.

En este ejemplo:

  1. La app para TV está enfocada y recibe todas las teclas.
  2. KeyEvents (p. ej., el botón rojo) se pasa a la entrada de TV activa como InputEvents..
  3. La entrada de TV del sistema se integra con la pila de MHEG-5 y tiene el permiso del sistema RECEIVE_INPUT_EVENT.
  4. 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.
  5. La entrada de TV consume KeyEvents como InputEvents, y la app de transmisión es el enfoque y controla InputEvents 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 a desarrollar 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 del 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 TVs

La app de TV del sistema le presenta al usuario contenido de TV en vivo. Junto con la plataforma de Android, se proporciona una app de TV de referencia (TV en vivo) que los fabricantes de dispositivos pueden usar tal como está, personalizar, extender 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 TV de referencia.

Los fabricantes de dispositivos pueden extender sus apps para TVs para implementar funciones específicas del fabricante del dispositivo o del país, pero esto no está dentro del alcance de la TIF ni de la app para TVs de referencia.

Como mínimo, la app de TV del sistema debe controlar las siguientes tareas:

Instalación y configuración

  • Detección automática de entradas de TV
  • Permite que las entradas de TV inicien la configuración del canal
  • Cómo controlar la configuración parental
  • Editar canales

Visualización

  • Acceder a todos los canales de TV y explorarlos
  • Acceder a la barra de información del programa de TV
  • Mostrar datos de la Guía electrónica de programas (EPG)
  • Admite varias pistas de audio y subtítulos
  • Desafío de PIN de control parental
  • Permite la superposición de la IU de entrada de TV para el estándar de TV (HbbTV, etc.)
  • Completar los resultados de la búsqueda de canales y programas de TV
  • Mostrar tarjetas de vinculación de la app
  • Compatibilidad con las APIs de time-shifting
  • Controlar la funcionalidad del DVR y admitir las APIs de grabación de TV

Este conjunto de funciones aumentará en línea con las nuevas versiones de Android en las que se extiendan las APIs de TIF de la plataforma. El verificador del 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 con respecto a la presentación de canales y entradas de TV de terceros al usuario. La app de referencia de TV en vivo proporciona una implementación compatible. Si se reemplaza la app de TV del sistema, los fabricantes de dispositivos deben asegurarse de que sus propias apps proporcionen una compatibilidad similar para satisfacer las expectativas de los desarrolladores en todos los dispositivos Android TV.

La app de TV del sistema debe mostrar las 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 los canales integrados y los de terceros, tal como se define en la sección de la app para TVs del CDD de Android.

En las siguientes secciones, se muestra cómo la aplicación de TV en vivo cumple con los requisitos de los CDD.

Configuración de un canal nuevo

La incorporación de nuevos canales o entradas de terceros comienza cuando el usuario encuentra e instala una entrada de TV desde una tienda de aplicaciones, como Google Play.

Algunas entradas de TV de terceros agregan automáticamente canales a la base de datos de TvProvider. Sin embargo, la mayoría proporcionará una actividad de configuración para permitir que el usuario configure sus canales, proporcione detalles de acceso y realice otras acciones. La app de TV del sistema debe garantizar que el usuario pueda activar esta actividad de configuración, por lo que el CDD requiere que las entradas de terceros estén a una cantidad mínima de acciones de navegación de la app de TV principal.

La app de TV en vivo de referencia proporciona el menú Channel Sources para acceder a las entradas.

Ir a Configuración
Figura 8: Ve a Configuración.

Ve a Fuente del canal en Configuración.
Figura 9. Ve a Fuentes de canales en Configuración.

Selecciona tu fuente de la lista.
Figura 10: Selecciona tu fuente de la lista.

Agrega canales de tu fuente
Figura 11. Agrega canales de tu fuente.

Además, se muestra una tarjeta de notificación en la parte superior del menú de la app de TV después de que se instala un nuevo TvInput para llevar al usuario directamente a la Configuración:

Notificación que muestra que hay nuevas fuentes de canales disponibles.
Figura 12: Notificación que muestra que hay nuevas fuentes de canales disponibles.

Si el usuario realiza una acción a través de la notificación, puede seleccionar la opción para configurar sus fuentes, como se muestra 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

Es posible que los fabricantes de dispositivos proporcionen una IU para ocultar ciertos canales y permitir que los usuarios administren sus propias EPG. La TV en vivo incluye esta función.

Abre la lista de canales en Configuración.
Figura 13. Abre la lista de canales en Configuración.

Personaliza tu lista de canales.
Figura 14: Personaliza tu lista de canales.

EPG

Los desarrolladores de entradas de terceros deben tener la certeza 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 estándar de la experiencia de TV en vivo del dispositivo. Se pueden usar categorías separadas o separación visual para los canales de terceros (consulta la sección de la CDD de Android sobre apps para TV). Lo importante es que los usuarios puedan encontrar los canales que instalaron.

Los fabricantes deben implementar la app de TV para incluir los resultados de las solicitudes de búsqueda global y garantizar la mejor experiencia del usuario. La TV en vivo proporciona una implementación (consulta que proporciona resultados de entradas de terceros (necesario para la compatibilidad con la plataforma) y entradas integradas.

Cambio de horario

En el caso de los dispositivos con Android 6.0 y versiones posteriores, la app para TVs debe admitir las APIs de cambio de hora del framework de Android . Además, los fabricantes deben implementar controles de reproducción en la app para TVs 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 de TV debe mostrar los controles de reproducción.

Controles de reproducción
Figura 15: Controles de reproducción

DVR

En el caso de los dispositivos con Android 7.0 y versiones posteriores, la app para TVs debe admitir las APIs de grabación de TV del framework de Android para admitir, enumerar y reproducir programas grabados.

Esto permite que los fabricantes de dispositivos conecten sus subsistemas de DVR a la TIF y reduzcan drásticamente el esfuerzo de integración necesario para habilitar o integrar la funcionalidad de DVR en un dispositivo de TV. También permite que terceros proporcionen sistemas de DVR complementarios 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 TVs debe controlar el conflicto y mostrar una notificación o solicitar que el usuario programe una prioridad para estas solicitudes.

Las apps para TVs también pueden implementar una lógica más sofisticada, como preguntarle a un usuario si desea grabar todos los episodios futuros de una serie cuando solicite grabar un episodio.

En el siguiente diagrama, se muestra una posible implementación del DVR en Android TV.

Grabación de video digital en Android TV
Figura 16: Grabación de video digital en Android TV

  1. El servicio de entrada de TV le indica a la app de TV cuántos sintonizadores están disponibles para que la app de TV pueda controlar posibles conflictos de recursos.
  2. La app de TV recibe una solicitud iniciada por el usuario para grabar un programa de TV.
  3. La app de TV almacena el programa de grabación en su base de datos interna.
  4. Cuando llega el momento de grabar, la app de TV pasa una solicitud para sintonizar el canal asociado con la grabación.
  5. El servicio de entrada de TV recibe esta solicitud, responde si hay recursos adecuados y sintoniza el canal.
  6. Luego, la app de TV pasa una solicitud para iniciar la grabación al administrador de entrada de TV.
  7. El servicio de entrada de TV recibe esta solicitud y comienza a grabar.
  8. El servicio de entrada de TV almacena los datos de video reales en su almacenamiento, que puede ser almacenamiento externo o almacenamiento en la nube.
  9. Cuando llega el momento de finalizar la grabación, la app de TV pasa la solicitud de detener la grabación al TV Input Manager.
  10. 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 la grabación de TV.

Recursos útiles

  • La CDD de Android y las APIs para desarrolladores documentadas son las referencias definitivas.
  • El verificador del CTS ejercita las APIs como parte del programa de pruebas de compatibilidad. Ejecutar esta prueba en Live TV puede ser una forma útil de ver la EPG, la búsqueda, el control parental y otros requisitos en el contexto de las 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 los canales y programas no deseados, pero puede omitir el bloqueo ingresando un código PIN.

La responsabilidad de la funcionalidad de control parental se comparte entre la app para TVs, el servicio TV Input Manager, 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 se demuestra en la prueba de CTS Verifier, que introduce una clasificación "falsa". En los países en los que existe un sistema de clasificación estándar, se recomienda a los fabricantes de dispositivos que combinen el Control parental del marco de entrada de TV con cualquier otro mecanismo que puedan incluir.

Proveedor de TV

Cada fila de canales tiene un campo COLUMN_LOCKED que se usa para bloquear canales específicos y evitar que se vean sin ingresar un código PIN. El campo programa COLUMN_CONTENT_RATING está diseñado para mostrarse y no se usa para aplicar el control parental.

Administrador de entrada de TV

El TV Input Manager 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 el contenido actual se debe bloquear llamando a isRatingBlocked() en el administrador de entrada de TV cuando cambia la clasificación del contenido que se muestra (al cambiar de programa o canal) o cuando cambia la configuración de controles parentales (en ACTION_BLOCKED_RATINGS_CHANGED y ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED). Si el contenido se debe bloquear, 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 el contenido actual está permitido llamando a notifyContentAllowed().

App para TVs

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 registradas por 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 TVs no almacena directamente la configuración de los controles parentales. Cuando el usuario cambia la configuración de los controles parentales, el Administrador de entrada 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 controles parentales del verificador del CTS en la aplicación de TV en vivo de referencia para obtener una demostración de los requisitos de compatibilidad.
  • Usar la app de TV en vivo como referencia para su propia app de TV: En particular, consulta las fuentes de ContentRatingsManager y RatingSystemsFragment, y cómo controlan las clasificaciones personalizadas.

HDMI-CEC

HDMI-CEC permite que un dispositivo controle otro, lo que permite que un solo control remoto controle varios electrodomésticos en un 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 central de TV. Por ejemplo, puede cambiar las entradas, encender o apagar dispositivos, y mucho más.

El TIF de Android implementa HDMI-CEC como el servicio de control de HDMI, de modo que los fabricantes de dispositivos solo necesitan desarrollar controladores de bajo nivel que interactúen con el HAL de Android TV liviano, lo que omite la lógica de negocios más compleja. Al proporcionar una implementación estándar, Android busca mitigar los problemas de compatibilidad reduciendo las implementaciones fragmentadas y la compatibilidad selectiva con funciones. El servicio de Control HDMI usa los servicios existentes de Android, incluidos los de entrada y energía.

Esto significa que las implementaciones existentes de HDMI-CEC deberán rediseñarse para interoperar con la TIF de Android. Recomendamos que la plataforma de hardware contenga un microprocesador para recibir comandos de encendido CEC y otros comandos.

Integración de CEC en Android TV
Figura 17: Integración de CEC en Android TV

  1. El bus CEC recibe un comando de la fuente activa en ese momento para cambiar a otra fuente.
  2. El controlador pasa el comando al HAL de HDMI-CEC.
  3. El HAL notifica a todos los ActiveSourceChangeListeners.
  4. El servicio de control de HDMI recibe una notificación del cambio de fuente a través de ActiveSourceChangeListener.
  5. El servicio de TV Input Manager genera un intent para que la app para TV cambie la fuente.
  6. Luego, la app para TV crea una sesión de TV Input Manager para la entrada de TV a la que se cambia y llama a setMain en esa sesión.
  7. La sesión del Administrador de entrada de TV pasa esta información a la entrada de TV HDMI.
  8. La entrada de TV HDMI solicita que se configure la superficie de banda lateral.
  9. Cuando se configura la superficie, el servicio TV Input Manager genera un comando de control de enrutamiento correspondiente al servicio HDMI Control.

Lineamientos de integración de TV

App de transmisión

Dado que cada país tiene requisitos específicos de transmisión (MHEG, Teletexto, HbbTV y 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 las pilas de TV regionales, pasen la superficie a las pilas de software de TV o pasen el código de tecla necesario para interactuar con las pilas heredadas.

Así interactúan la app de transmisión y la app de TV:

  1. La app para TVs está enfocada y recibe todas las teclas.
  2. La app de TV pasa las teclas (p.ej., el botón rojo) al dispositivo de entrada de TV.
  3. Internamente, el dispositivo de entrada de TV se integra con la pila de TV heredada.
  4. Cuando recibe un código de activación (p.ej., el botón rojo), el dispositivo de entrada de la TV activa las apps de transmisión.
  5. Una app de transmisión toma el enfoque en la app de TV y controla las acciones del usuario.

En el caso de la búsqueda o recomendación por voz, es posible que la app de transmisión admita la búsqueda integrada en la app para la búsqueda por voz.