Marco de entrada de TV

Ícono HAL de Android TV

El marco de entrada de Android TV (TIF) simplifica la entrega de contenido en vivo a Android TV. Android TIF proporciona una API estándar para que los fabricantes creen módulos de entrada para controlar Android TV y permite la búsqueda de TV en vivo y recomendaciones a través de metadatos publicados por TV Input.

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

Componentes

La implementación de Android TV Input Framework incluye un TV Input Manager. El TIF funciona con la aplicación de TV, una aplicación del sistema que no puede ser reemplazada por una aplicación de terceros, para acceder a los canales integrados y del sintonizador IP. La aplicación de TV se comunica con los módulos de entrada de TV suministrados por el fabricante del dispositivo u otras partes a través del administrador de entrada de TV.

El marco de entrada de TV consta de:

  • Proveedor de TV ( com.android.providers.tv.TvProvider ): una base de datos de canales, programas y permisos asociados
  • Aplicación de TV ( com.android.tv.TvActivity ): la aplicación que maneja la interacción del usuario
  • TV Input Manager ( android.media.tv.TvInputManager ): permite que las entradas de TV se comuniquen con la aplicación de TV
  • Entrada de TV: una aplicación que representa sintonizadores físicos o virtuales y puertos de entrada
  • TV Input HAL (módulo tv_input ): una definición de hardware que permite que las entradas de TV del sistema accedan al hardware específico de TV cuando se implementa
  • Parental Control: la tecnología para permitir el bloqueo de canales y programas
  • HDMI-CEC: la tecnología que permite el control remoto de varios dispositivos a través de HDMI
  • Tuner Framework: un marco para la entrada de TV con sintonizador incorporado
  • MediaCas: un marco para el acceso condicional
  • Tuner Resource Manager: un servicio para administrar el recurso de hardware para entrada de TV, MediaCas y entrada de sintonizador incorporado

Estos componentes se tratan en detalle a continuación. Consulte el siguiente diagrama para obtener una vista detallada de la arquitectura del marco de entrada de Android TV.

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

Caudal

Así es como se ejerce la arquitectura:

  1. El usuario ve e interactúa con la aplicación de TV, una aplicación del sistema que no puede ser reemplazada por una aplicación de terceros.
  2. La aplicación de TV muestra el contenido AV de la entrada de TV.
  3. La aplicación de TV no puede comunicarse directamente con las entradas de TV. El administrador de entrada de TV identifica el estado de las entradas de TV para la aplicación de TV. Consulte TV Input Manager a continuación para obtener más detalles sobre estas limitaciones.

permisos

  • Solo las signatureOrSystem de TV y la aplicación de TV de SignatureOrSystem 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 a la HAL de entrada de TV a través del servicio TV Input Manager. Se accede a las entradas de TV de forma individual a través de las sesiones del administrador de entradas de TV.
  • 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 filas de paquetes coincidentes.
  • Las entradas de TV de terceros pueden mostrar su propio contenido o el contenido de las entradas de TV de paso del fabricante del dispositivo, como HDMI1. No pueden mostrar contenido de entradas de TV sin transferencia, como un sintonizador integrado o de IPTV.
  • El permiso TV_INPUT_HARDWARE para una aplicación de entrada de TV de hardware indica al servicio de administrador de entrada de TV que notifique al servicio de entrada de TV en el arranque para llamar al servicio de administrador de entrada de TV y agregar sus entradas de TV. Este permiso permite que una aplicación de entrada de TV de hardware admita múltiples entradas de TV por servicio de entrada de TV, además de poder agregar y eliminar dinámicamente sus entradas de TV admitidas.

Proveedor de televisión

La base de datos del proveedor de TV almacena los canales y programas de TV Inputs. 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 puede ver solo los canales y programas que ha suministrado y tiene prohibido acceder a los canales y programas de otras entradas de TV.

El proveedor de TV asigna "género de transmisión" a "género canónico" internamente. Las entradas de TV son responsables de completar "género de transmisión" con el valor en el estándar de transmisión subyacente, y el campo "género canónico" se completará 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 .

Consulte el siguiente diagrama para obtener una vista detallada del proveedor de TV.

Proveedor de Android TV
Figura 2. Proveedor de Android TV

Solo las aplicaciones en la partición del sistema privilegiada pueden leer toda la base de datos del proveedor de TV.

Las entradas de TV de paso 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 TV Inputs puede usar para almacenar datos arbitrarios. Esos datos BLOB pueden incluir información personalizada, como la frecuencia del sintonizador asociado, y pueden proporcionarse en un búfer de protocolo o de otra forma. Un campo de búsqueda está 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 de contenido).

Ejemplos de campos de bases de datos

El proveedor de TV admite datos estructurados en tablas de canales ( android.provider.TvContract.Channels ) y programas ( android.provider.TvContract.Programs ). Las entradas de TV y las aplicaciones del sistema, como la aplicación de TV, completan y acceden a estas tablas. Estas tablas tienen cuatro tipos de campos:

  • Pantalla: los campos de visualización contienen información que las aplicaciones pueden querer hacer visible para el usuario, como el nombre de un canal ( COLUMN_DISPLAY_NAME ) o el número ( COLUMN_DISPLAY_NUMBER ), o el título del programa que se está viendo.
  • Metadatos: hay tres campos para identificar el contenido, de acuerdo con los estándares pertinentes, como la ID de flujo de transporte de un canal ( COLUMN_TRANSPORT_STREAM_ID ), la ID de red original ( COLUMN_ORIGINAL_NETWORK_ID ) y la ID de servicio ( COLUMN_SERVICE_ID ).
  • Datos internos : Campos que son para el uso personalizado de Entradas de TV.
    Algunos campos, como COLUMN_INTERNAL_PROVIDER_DATA , son campos BLOB personalizables donde una entrada de TV puede almacenar metadatos arbitrarios sobre su canal o programa.
  • Indicador: los campos de indicador representan si se debe restringir la búsqueda, exploración o visualización de un canal. Esto se puede establecer sólo a nivel de canal. Todos los programas difieren de la configuración del canal.
    • COLUMN_SEARCHABLE : restringir la búsqueda de algunos canales puede ser un requisito en ciertas regiones. COLUMN_SEARCHABLE = 0 significa que el canal no debe estar expuesto en los resultados de búsqueda.
    • COLUMN_BROWSABLE : visible solo para las aplicaciones del sistema. Restringir el canal para que no sea explorado por las aplicaciones. COLUMN_BROWSABLE = 0 significa que el canal no debe incluirse en la lista de canales.
    • COLUMN_LOCKED : visible solo para las aplicaciones del sistema. Restringir el canal para que no sea visto por cuentas no válidas sin ingresar el código PIN. COLUMN_LOCKED = 1 significa que el canal debe estar protegido por control parental.

Para obtener una lista más exhaustiva de los campos, consulte android/frameworks/base/media/java/android/media/tv/TvContract.java

Permisos y control de acceso

Todos los campos son visibles para cualquier persona con acceso a la fila correspondiente. Ningún campo es directamente accesible para los usuarios; solo ven lo que aparece en la aplicación de TV, las aplicaciones del sistema o las entradas de TV.

  • Cada fila tiene PACKAGE_NAME , el paquete (aplicación) que posee esa fila, verificado en Consulta, Insertar, Actualizar a través de TvProvider.java. Una Entrada de TV puede acceder solo a la información que escribió y está separada de la información proporcionada por otras Entradas de TV.
  • LEER, ESCRIBIR permisos a través de AndroidManifest.xml (requiere el consentimiento del usuario) para determinar los canales disponibles.
  • Solo las aplicaciones signatureOrSystem pueden adquirir el permiso ACCESS_ALL_EPG_DATA para acceder a toda la base de datos.

Administrador de entrada de TV

TV Input Manager proporciona una API de sistema central para el marco general de entrada de Android TV. Arbitra la interacción entre las aplicaciones y las entradas de TV y proporciona la funcionalidad de control parental. Las sesiones de TV Input Manager deben crearse una a una con TV Inputs. El administrador de entrada de TV permite el acceso a las entradas de TV instaladas para que las aplicaciones puedan:

  • Enumere las entradas de TV y verifique su estado
  • Crear sesiones y gestionar oyentes

Para las sesiones, la aplicación de TV puede sintonizar una entrada de TV solo a los URI que ha agregado a la base de datos del proveedor de TV, excepto las entradas de TV de transferencia que se pueden sintonizar mediante TvContract.buildChannelUriForPassthroughInput() . Una entrada de TV también puede tener su volumen configurado. Las entradas de TV proporcionadas y firmadas por el fabricante del dispositivo (aplicaciones de firma) u otras aplicaciones 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 construir aplicaciones para navegar y buscar en todos los canales y programas de TV disponibles.

Una aplicación puede crear y registrar un TvInputCallback con android.media.tv.TvInputManager para que se le devuelva la llamada cuando cambie el estado de una entrada de TV o cuando se agregue o elimine una entrada de TV. Por ejemplo, una aplicación de TV puede reaccionar cuando se desconecta una entrada de TV mostrándola como desconectada e impidiendo su selección.

TV Input Manager abstrae la comunicación entre la aplicación de 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 aplicaciones de TV mientras ayuda a que todas las entradas de TV de terceros funcionen en todas las aplicaciones de TV.

Entradas de televisión

TV Inputs son aplicaciones de 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 aplicaciones de sistema preinstaladas, aplicaciones firmadas por el fabricante del dispositivo y entradas de TV de terceros.

Algunas entradas, como la entrada HDMI o la entrada del sintonizador incorporado, solo las puede proporcionar el fabricante, ya que se comunican directamente con el hardware subyacente. Otros, como IPTV, cambio de lugar y STB externo, pueden ser proporcionados por terceros como APK en Google Play Store. Una vez descargada e instalada, la nueva entrada se puede seleccionar dentro de la aplicación de TV.

Ejemplo de entrada de transferencia

Entrada del sistema Android TV
Figura 3. Entrada del sistema Android TV

En este ejemplo, la entrada de TV proporcionada por el fabricante del dispositivo es de confianza y tiene acceso total al proveedor de TV. Como entrada de TV de paso, no registra ningún canal o programa con el proveedor de TV. Para obtener el URI utilizado para hacer referencia a la entrada de acceso directo, use el método de utilidad android.media.tv.TvContract buildChannelUriForPassthroughInput(String inputId) . La aplicación de TV se comunica con el administrador de entrada de TV para llegar a la entrada de TV HDMI.

Ejemplo de sintonizador incorporado

Entrada de sintonizador incorporado de Android TV
Figura 4. Entrada de sintonizador incorporado de Android TV

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

Ejemplo de entrada de terceros

Entrada de Android TV de terceros
Figura 5. Entrada de terceros de Android TV

En este ejemplo, la entrada de TV STB externa la proporciona un tercero. Dado que la entrada de TV no puede acceder directamente a la entrada de video HDMI, debe pasar por el administrador de entrada de TV 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 STB externa puede hablar con la entrada de TV HDMI y pedirle que muestre el video en HDMI1. Por lo tanto, la entrada de TV STB puede controlar el televisor mientras la entrada de TV HDMI proporcionada por el fabricante reproduce el video.

Ejemplo de imagen en imagen (PIP)

Eventos clave de Android TV
Figura 6. Eventos clave de Android TV

El diagrama anterior 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). Esas pulsaciones de botón son interpretadas por el controlador de hardware proporcionado por el fabricante del dispositivo, convirtiendo los códigos de escaneo de hardware en códigos clave de Android y pasándolos a la canalización de entrada estándar de Android InputReader y funciones de InputDispatcher como KeyEvents . Estos, a su vez, desencadenan eventos en la aplicación de TV si está enfocada.

Solo las entradas de TV del sistema son elegibles 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 aplicación de TV maneje las claves que no necesita consumir.

La aplicación de TV es responsable de saber qué entrada de TV del sistema está activa, es decir, seleccionada por el usuario, y de eliminar la ambigüedad de KeyEvents entrantes y KeyEvents a la sesión correcta de TV Input Manager, llamando dispatchInputEvent() para pasar el evento a la entrada de TV asociada. .

Ejemplo de entrada MHEG-5

El siguiente diagrama muestra una vista más detallada de cómo se enrutan KeyEvents a través del TIF de Android.

Ejemplo de botón rojo de Android TV
Figura 7. Ejemplo de botón rojo de Android TV

Representa el flujo de una aplicación de botón rojo, común en Europa para permitir a los usuarios acceder a aplicaciones interactivas en sus televisores. Se puede entregar una aplicación a través de este flujo de transporte. Cuando se hace clic en el botón, permite a los usuarios interactuar con estas aplicaciones de transmisión. Por ejemplo, puede usar estas aplicaciones de transmisión para acceder a páginas web relacionadas o resultados deportivos.

Consulte la sección de la aplicación de transmisión para saber cómo interactúan las aplicaciones de transmisión con la aplicación de TV.

En este ejemplo:

  1. La aplicación de TV está enfocada y recibe todas las claves.
  2. KeyEvents (por ejemplo, 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 MHEG-5 y tiene el permiso del sistema RECEIVE_INPUT_EVENT .
  4. Al recibir el código clave de activación (por ejemplo, el botón rojo), la entrada de TV activa la aplicación de transmisión.
  5. La entrada de TV consume KeyEvents como InputEvents y la aplicación de transmisión es el foco y maneja InputEvents hasta que se descarta.

Nota : las entradas de TV de terceros nunca reciben claves.

HAL de entrada de TV

TV Input HAL ayuda al desarrollo de entradas de TV para acceder al hardware específico de TV. Al igual que con otras HAL de Android, la HAL de entrada de TV ( tv_input ) está disponible en el árbol de fuentes de AOSP y el proveedor desarrolla su implementación.

aplicación de televisión

La aplicación de TV del sistema presenta contenido de TV en vivo al usuario. Se proporciona una aplicación de TV de referencia (Live TV) junto con la plataforma Android, que puede ser utilizada tal cual, personalizada, ampliada o reemplazada por los fabricantes de dispositivos. El código fuente está disponible en el Proyecto de código abierto de Android y puede comenzar con él en el artículo de la aplicación Reference TV .

Los fabricantes de dispositivos pueden ampliar sus aplicaciones de TV para implementar características específicas del país o del fabricante del dispositivo, sin embargo, esto no está dentro del alcance de TIF o de la aplicación de TV de referencia.

Como mínimo, la aplicación de TV del sistema debe manejar las siguientes tareas:

Instalación y configuración

  • Detección automática de entradas de TV
  • Deje que las entradas de TV inicien la configuración del canal
  • Controlar la configuración de los padres
  • Editar canales

Visita

  • Accede y navega por todos los canales de TV
  • Acceder a la barra de información del programa de TV
  • Mostrar datos de la guía electrónica de programación (EPG)
  • Admite múltiples pistas de audio y subtítulos
  • Desafío de PIN de control parental de suministro
  • Permitir la superposición de IU de entrada de TV para el estándar de TV (HbbTV, etc.)
  • Rellene los resultados de búsqueda de canales y programas de TV
  • Mostrar tarjetas de vinculación de aplicaciones
  • Compatibilidad con las API de timeshifting
  • Manejar la funcionalidad de DVR y admitir API de grabación de TV

Este conjunto de características aumentará en línea con las nuevas versiones de Android donde se amplían las API TIF de la plataforma. CTS Verifier proporciona la cobertura de la prueba de compatibilidad.

Compatibilidad con entradas de TV de terceros

Android TV proporciona API de desarrollador para entradas de TV de terceros, lo que permite que las aplicaciones instaladas brinden canales de software a la experiencia de TV en vivo. Para garantizar una implementación de dispositivo Android compatible, la aplicación de TV del sistema tiene algunas responsabilidades con respecto a mostrar entradas y canales de TV de terceros al usuario. La aplicación de referencia Live TV proporciona una implementación compatible; si reemplaza la aplicación de TV del sistema, los fabricantes de dispositivos deben asegurarse de que sus propias aplicaciones brinden una compatibilidad similar, para cumplir con las expectativas de los desarrolladores en todos los dispositivos Android TV.

La aplicación de TV del sistema debe mostrar entradas de terceros junto con el servicio de TV en vivo predeterminado del dispositivo. La promesa de las API 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 canales de terceros, tal como se define en la sección de la aplicación de TV de la CDD de Android.

Las siguientes secciones muestran cómo la aplicación Live TV cumple con los requisitos de CDD.

Configuración de un nuevo canal

La adición de nuevas entradas/canales 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 inicio de sesión y otras acciones. La aplicación de TV del sistema debe garantizar que el usuario pueda activar esta actividad de configuración, razón por la cual el CDD requiere que las entradas de terceros sean acciones de navegación mínimas lejos de la aplicación de TV principal.

La aplicación de TV en vivo de referencia proporciona el menú Fuentes de canales para acceder a las entradas.

Ir a la configuración
Figura 8. Vaya a Configuración .

Ir a la fuente del canal en Configuración
Figura 9. Vaya a Fuentes de canales en Configuración.

Seleccione su fuente de la lista.
Figura 10. Seleccione su fuente de la lista.

Agrega canales desde tu fuente
Figura 11. Agregue canales desde su fuente.

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

Notificación que muestra 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 configurar sus fuentes como se ve en la Figura 10.

Consulte Definir su servicio de entrada de TV para conocer las expectativas de los desarrolladores en esta área.

Personaliza la lista de canales

Los fabricantes de dispositivos pueden proporcionar una interfaz de usuario para ocultar ciertos canales y permitir que los usuarios administren sus propias EPG. TV en vivo incluye esta instalación.

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

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

EPG

Los desarrolladores de entrada de terceros deben tener la confianza 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 experiencia de TV en vivo estándar del dispositivo. Se puede usar separación visual o categorías separadas para canales de terceros (consulte la sección de la aplicación de TV del CDD de Android); la clave es que los usuarios puedan encontrar los canales que han instalado.

Los fabricantes deben implementar la aplicación de TV para incluir resultados de búsqueda para solicitudes de búsqueda global a fin de garantizar la mejor experiencia de usuario. Live TV proporciona una implementación (consulte com.android.tv.search.TvProviderSearch ) que proporciona resultados de entradas de terceros (necesarias para la compatibilidad de la plataforma), así como entradas integradas.

Cambio de hora

Para dispositivos con Android 6.0 y superior, la aplicación de TV debe ser compatible con las API de cambio de tiempo del marco de trabajo de Android. Además, los fabricantes deben implementar controles de reproducción en la aplicación de TV, que permitan a los usuarios pausar, reanudar, rebobinar y avanzar rápidamente la reproducción.

Para las entradas de TV que admiten el cambio de hora, la aplicación de TV debe mostrar los controles de reproducción.

Controles de reproducción
Figura 15. Controles de reproducción

DVR

Para dispositivos con Android 7.0 y superior, la aplicación de TV debe ser compatible con las API de grabación de TV del marco de trabajo de Android, para admitir, enumerar y reproducir programas grabados.

Esto permite a los fabricantes de dispositivos conectar sus subsistemas DVR a TIF y reducir drásticamente el esfuerzo de integración necesario para habilitar o integrar la funcionalidad DVR en un dispositivo de TV. También permite que terceros proporcionen sistemas DVR de posventa que se pueden conectar a un dispositivo Android TV.

Además de grabar contenido en vivo, la aplicación de TV también maneja el conflicto de recursos. Por ejemplo, si el dispositivo tiene dos sintonizadores, puede grabar dos programas al mismo tiempo. Si el usuario solicita grabar tres, la aplicación de TV debe manejar el conflicto y debe mostrar una notificación o solicitar que el usuario programe una prioridad para estas solicitudes.

Las aplicaciones de TV 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 solicita grabar un episodio.

Consulte el siguiente diagrama para ver una posible implementación de DVR en Android TV.

Grabación de vídeo digital en Android TV
Figura 16. Grabación de video digital en Android TV

  1. El servicio de entrada de TV le dice a la aplicación de TV cuántos sintonizadores están disponibles para que la aplicación de TV pueda manejar posibles conflictos de recursos.
  2. La aplicación de TV recibe una solicitud iniciada por el usuario para grabar un programa de TV.
  3. La aplicación de TV almacena el horario de grabación en su base de datos interna.
  4. Cuando llega el momento de grabar, la aplicación 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 o no recursos apropiados y sintoniza el canal.
  6. Luego, la aplicación de TV pasa una solicitud para comenzar a grabar 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 aplicación de TV pasa la solicitud de detener la grabación al administrador de entrada de TV.
  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 aplicación de TV pueda mostrar la grabación a los usuarios cuando así lo soliciten.

Para obtener más información sobre cómo implementar funciones de grabación en su servicio de entrada de TV, consulte este artículo de grabación de TV .

Recursos útiles

  • El CDD de Android y las API de desarrollador documentadas son las referencias definitivas.
  • CTS Verifier ejercita las API como parte del programa de pruebas de compatibilidad. Ejecutar esto con 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.
  • Consulte Definir su servicio de entrada de TV para conocer las expectativas de los desarrolladores en esta área.

Control parental

El control parental le permite a un usuario bloquear canales y programas no deseados, pero omitir el bloqueo ingresando un código PIN.

La responsabilidad de la función de control parental se comparte entre la aplicación de TV, el servicio TV Input Manager, el proveedor de TV y la entrada de TV.

El control parental es obligatorio y está cubierto por CTS Verifier.

Varios países han definido sistemas de calificación que TV Inputs puede usar a través de TVContentRating API . Además, las entradas de TV pueden registrar sus propios sistemas de calificación personalizados, como lo demuestra la prueba CTS Verifier, que introduce una calificación 'falsa'. Para los países donde existe un sistema de clasificación estándar, se alienta a los fabricantes de dispositivos a combinar el control parental del marco de entrada de TV con cualquier otro mecanismo que puedan incluir.

Proveedor de televisión

Cada fila de canales 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á destinado a la visualización y no se utiliza para hacer cumplir el control parental.

Administrador de entrada de TV

TV Input Manager almacena todos los TvContentRating bloqueados y responde a isRatingBlocked() para informar si el contenido con la calificación dada debe bloquearse.

Entrada de televisión

TV Input verifica si el contenido actual debe bloquearse llamando a isRatingBlocked() en TV Input Manager cuando la clasificación del contenido mostrado ha cambiado (en el cambio de programa o canal), o la configuración del control parental ha cambiado (en ACTION_BLOCKED_RATINGS_CHANGED y ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED ) . Si se debe bloquear el contenido, la entrada de TV deshabilita el audio y el video y notifica a la aplicación de TV que el contenido actual está bloqueado al llamar a notifyContentBlocked(TvContentRating) . Si el contenido no debe bloquearse, la entrada de TV habilita el audio y el video y notifica a la aplicación de TV que el contenido actual está permitido al llamar a notifyContentAllowed() .

aplicación de televisión

Para cumplir con las API de control parental y, por lo tanto, crear una plataforma compatible, la aplicación de TV del sistema debe proporcionar una forma para que los usuarios administren el control parental, incluidas las clasificaciones personalizadas registradas por aplicaciones específicas.

La aplicación de TV muestra una interfaz de usuario 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 aplicación de TV no almacena directamente la configuración del control parental. Cuando el usuario cambia la configuración del control parental, el TV Input Manager almacena cada TvContentRating bloqueado y el proveedor de TV almacena los canales bloqueados.

La aplicación de TV debe declarar el permiso android.permission.MODIFY_PARENTAL_CONTROLS para cambiar la configuración del control parental.

Se alienta a los fabricantes de dispositivos a:

  • Realice la prueba de controles parentales de CTS Verifier con la aplicación de referencia Live TV para obtener una demostración de los requisitos de compatibilidad.
  • Use la aplicación Live TV como referencia para su propia aplicación de TV: en particular, vea la fuente 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 múltiples dispositivos en un sistema de cine en casa. Android TV lo utiliza para acelerar la configuración y permitir el control remoto de varias entradas de TV a través de la aplicación de TV central. Por ejemplo, puede cambiar entradas, encender o apagar dispositivos y 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, omitiendo la lógica comercial más compleja. Al proporcionar una implementación estándar, Android busca mitigar los problemas de compatibilidad al reducir las implementaciones fragmentadas y el soporte de funciones selectivas. El servicio de control HDMI utiliza los servicios de Android existentes, incluidos la entrada y la alimentación.

Esto significa que las implementaciones de HDMI-CEC existentes deberán rediseñarse para interoperar con Android TIF. Recomendamos que la plataforma de hardware contenga un microprocesador para recibir el encendido de 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 actualmente activa para cambiar a una fuente diferente.
  2. El controlador pasa el comando a HDMI-CEC HAL.
  3. 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 TV Input Manager genera una intención para que la aplicación de TV cambie la fuente.
  6. Luego, la aplicación de TV crea una sesión de administrador de entrada de TV 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 configurar la superficie de banda lateral.
  9. El servicio de administrador de entrada de TV genera un comando de control de enrutamiento correspondiente al servicio de control HDMI cuando se configura la superficie.

Pautas de integración de TV

aplicación de transmisión

Debido a 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 aplicación de transmisión, por ejemplo:

  • MHEG: pila nativa
  • Teletexto: pila nativa
  • HbbTV: solución HbbTV de Vewd Software

En el lanzamiento de Android L, Android TV espera que los fabricantes de dispositivos utilicen integradores de sistemas o las soluciones de Android para pilas de TV regionales, pasen la superficie a pilas de software de TV o pasen el código clave necesario para interactuar con pilas heredadas.

Así es como interactúan la aplicación de transmisión y la aplicación de TV:

  1. La aplicación de TV está enfocada y recibe todas las claves.
  2. La aplicación de TV pasa claves (por ejemplo, el botón rojo) al dispositivo de entrada de TV.
  3. El dispositivo de entrada de TV se integra internamente con la pila de TV heredada.
  4. Al recibir un código clave de activación (por ejemplo, el botón rojo), el dispositivo de entrada de TV activa las aplicaciones de transmisión.
  5. Una aplicación de transmisión se enfoca en la aplicación de TV y maneja las acciones del usuario.

Para la búsqueda/recomendación por voz, la aplicación de transmisión puede admitir la búsqueda en la aplicación para la búsqueda por voz.