Estrutura de entrada de TV

Ícone HAL da Android TV

O Android TV Input Framework (TIF) simplifica a entrega de conteúdo ao vivo para o Android TV. O Android TIF fornece uma API padrão para os fabricantes criarem módulos de entrada para controlar o Android TV e permite pesquisas e recomendações de TV ao vivo por meio de metadados publicados pelo TV Input.

A estrutura não visa implementar padrões de TV ou requisitos regionais, mas torna mais fácil para os fabricantes de dispositivos atenderem aos padrões regionais de transmissão de TV digital sem reimplementação. A documentação nesta seção também pode ser útil para desenvolvedores de aplicativos de terceiros que desejam criar entradas de TV personalizadas.

Componentes

A implementação do Android TV Input Framework inclui um TV Input Manager. O TIF funciona com o aplicativo de TV, um aplicativo de sistema que não pode ser substituído por um aplicativo de terceiros, para acessar canais integrados e sintonizadores IP. O aplicativo de TV se comunica com módulos de entrada de TV fornecidos pelo fabricante do dispositivo ou por terceiros por meio do TV Input Manager.

A estrutura de entrada de TV consiste em:

  • Provedor de TV ( com.android.providers.tv.TvProvider ): um banco de dados de canais, programas e permissões associadas
  • Aplicativo de TV ( com.android.tv.TvActivity ): o aplicativo que lida com a interação do usuário
  • Gerenciador de entrada de TV ( android.media.tv.TvInputManager ): permite que as entradas de TV se comuniquem com o aplicativo de TV
  • Entrada de TV: um aplicativo que representa sintonizadores físicos ou virtuais e portas de entrada
  • TV Input HAL (módulo tv_input ): uma definição de hardware que permite que as entradas de TV do sistema acessem hardware específico de TV quando implementadas
  • Controle Parental: a tecnologia que permite o bloqueio de canais e programas
  • HDMI-CEC: a tecnologia que permite o controle remoto de vários dispositivos via HDMI
  • Tuner Framework: uma estrutura para entrada de TV com sintonizador integrado
  • MediaCas: uma estrutura para acesso condicional
  • Tuner Resource Manager: um serviço para gerenciar os recursos de hardware para entrada de TV, MediaCas e entrada de sintonizador integrado

Esses componentes são abordados em detalhes abaixo. Consulte o diagrama a seguir para obter uma visão detalhada da arquitetura do Android TV Input Framework.

Visão geral da arquitetura TIF do Android
Figura 1. Arquitetura do Android TV Input Framework (TIF)

Fluxo

Veja como a arquitetura é exercida:

  1. O usuário vê e interage com o aplicativo de TV, um aplicativo de sistema que não pode ser substituído por um aplicativo de terceiros.
  2. O aplicativo de TV exibe o conteúdo AV da entrada de TV.
  3. O aplicativo de TV não pode se comunicar diretamente com as entradas de TV. O TV Input Manager identifica o estado das entradas de TV para o aplicativo de TV. Consulte Gerenciador de entrada de TV abaixo para obter mais detalhes sobre essas limitações.

Permissões

  • Somente signatureOrSystem TV Inputs e TV App têm acesso total ao banco de dados do provedor de TV e são capazes de receber KeyEvents.
  • Somente as entradas de TV do sistema podem acessar o HAL de entrada de TV por meio do serviço TV Input Manager. As entradas de TV são acessadas individualmente por meio de sessões do TV Input Manager.
  • Entradas de TV de terceiros têm acesso bloqueado por pacote ao banco de dados do Provedor de TV e podem LER/ESCREVER somente nas linhas de pacote correspondentes.
  • As entradas de TV de terceiros podem exibir seu próprio conteúdo ou conteúdo de entradas de TV de passagem de um fabricante de dispositivo, como HDMI1. Eles não podem exibir conteúdo de entradas de TV sem passagem, como um sintonizador integrado ou IPTV.
  • A permissão TV_INPUT_HARDWARE para um aplicativo de entrada de TV de hardware sinaliza ao serviço TV Input Manager para notificar o serviço TV Input na inicialização para chamar o serviço TV Input Manager e adicionar suas entradas de TV. Essa permissão permite que um aplicativo de entrada de TV de hardware suporte múltiplas entradas de TV por serviço de entrada de TV, além de poder adicionar e remover dinamicamente suas entradas de TV suportadas.

Provedor de TV

O banco de dados do Provedor de TV armazena os canais e programas das entradas de TV. O provedor de TV também publica e gerencia as permissões associadas para que as entradas de TV possam ver apenas seus próprios registros. Por exemplo, uma entrada de TV específica pode ver apenas os canais e programas que forneceu e está proibida de acessar canais e programas de quaisquer outras entradas de TV.

O provedor de TV mapeia internamente o “gênero de transmissão” para o “gênero canônico”. As entradas de TV são responsáveis ​​por preencher o "gênero de transmissão" com o valor no padrão de transmissão subjacente, e o campo "gênero canônico" será preenchido automaticamente com o gênero associado correto em android.provider.TvContract.Genres . Por exemplo, com o padrão de transmissão ATSC A/65 e um programa com gênero 0x25 (que significa “Esportes”), a entrada de TV preencherá o “gênero de transmissão” com a string “Esportes” e o Provedor de TV preencherá o campo “gênero canônico” com o valor mapeado android.provider.TvContract.Genres.SPORTS .

Veja o diagrama abaixo para uma visão detalhada do provedor de TV.

Provedor de TV Android
Figura 2. Provedor de Android TV

Somente aplicativos na partição privilegiada do sistema podem ler todo o banco de dados do provedor de TV.

As entradas de TV de passagem não armazenam canais e programas.

Além dos campos padrão para canais e programas, o banco de dados do Provedor de TV também oferece um campo do tipo BLOB, COLUMN_INTERNAL_PROVIDER_DATA , em cada tabela que as entradas de TV podem usar para armazenar dados arbitrários. Esses dados BLOB podem incluir informações personalizadas, como a frequência do sintonizador associado, e podem ser fornecidos em um buffer de protocolo ou em outra forma. Um campo pesquisável está disponível para tornar determinados canais indisponíveis na pesquisa (como para atender aos requisitos específicos do país para proteção de conteúdo).

Exemplos de campos de banco de dados

O provedor de TV oferece suporte a dados estruturados em tabelas de canal ( android.provider.TvContract.Channels ) e programa ( android.provider.TvContract.Programs ). Essas tabelas são preenchidas e acessadas por entradas de TV e aplicativos de sistema como o aplicativo de TV. Essas tabelas possuem quatro tipos de campos:

  • Exibição: os campos de exibição contêm informações que os aplicativos podem querer tornar visíveis para o usuário, como o nome de um canal ( COLUMN_DISPLAY_NAME ) ou número ( COLUMN_DISPLAY_NUMBER ) ou o título do programa que está sendo visualizado.
  • Metadados: Existem três campos para identificação de conteúdo, de acordo com os padrões relevantes, como ID de fluxo de transporte de um canal ( COLUMN_TRANSPORT_STREAM_ID ), ID de rede original ( COLUMN_ORIGINAL_NETWORK_ID ) e ID de serviço ( COLUMN_SERVICE_ID ).
  • Dados internos : Campos destinados ao uso personalizado das entradas de TV.
    Alguns campos, como COLUMN_INTERNAL_PROVIDER_DATA , são campos BLOB personalizáveis ​​onde uma entrada de TV pode armazenar metadados arbitrários sobre seu canal ou programa.
  • Sinalização: Os campos de sinalização representam se um canal deve ser restrito à pesquisa, navegação ou visualização. Isto pode ser definido apenas no nível do canal. Todos os programas obedecem à configuração do canal.
    • COLUMN_SEARCHABLE : restringir a pesquisa de alguns canais pode ser um requisito em determinadas regiões. COLUMN_SEARCHABLE = 0 significa que o canal não deve ser exposto nos resultados da pesquisa.
    • COLUMN_BROWSABLE : Visível apenas para aplicativos do sistema. Restringindo a navegação do canal pelos aplicativos. COLUMN_BROWSABLE = 0 significa que o canal não deve ser incluído na lista de canais.
    • COLUMN_LOCKED : Visível apenas para aplicativos do sistema. Restringir a visualização do canal por contas inválidas sem inserir o código PIN. COLUMN_LOCKED = 1 significa que o canal deve ser protegido por controle parental.

Para uma lista mais completa dos campos, consulte android/frameworks/base/media/java/android/media/tv/TvContract.java

Permissões e controle de acesso

Todos os campos ficam visíveis para qualquer pessoa com acesso à linha correspondente. Nenhum campo está diretamente acessível aos usuários; eles veem apenas o que aparece no aplicativo de TV, nos aplicativos do sistema ou nas entradas de TV.

  • Cada linha possui PACKAGE_NAME , o pacote (app) que possui aquela linha, verificado em Consultar, Inserir, Atualizar via TvProvider.java. Uma entrada de TV pode acessar apenas as informações que escreveu e é isolada das informações fornecidas por outras entradas de TV.
  • Permissões READ, WRITE via AndroidManifest.xml (requer consentimento do usuário) para determinar os canais disponíveis.
  • Somente aplicativos signatureOrSystem podem adquirir permissão ACCESS_ALL_EPG_DATA para acessar todo o banco de dados.

Gerenciador de entrada de TV

O TV Input Manager fornece uma API de sistema central para a estrutura geral de entrada do Android TV. Ele arbitra a interação entre aplicativos e entradas de TV e fornece funcionalidade de controle parental. As sessões do TV Input Manager devem ser criadas individualmente com entradas de TV. O TV Input Manager permite acesso às entradas de TV instaladas para que os aplicativos possam:

  • Liste as entradas de TV e verifique seu status
  • Crie sessões e gerencie ouvintes

Para sessões, uma entrada de TV pode ser sintonizada pelo aplicativo de TV apenas para URIs adicionados ao banco de dados do provedor de TV, exceto para entradas de TV de passagem que podem ser sintonizadas usando TvContract.buildChannelUriForPassthroughInput() . Uma entrada de TV também pode ter seu volume definido. As entradas de TV fornecidas e assinadas pelo fabricante do dispositivo (aplicativos de assinatura) ou outros aplicativos instalados na partição do sistema terão acesso a todo o banco de dados do Provedor de TV. Esse acesso pode ser usado para construir aplicativos para navegar e pesquisar todos os canais e programas de TV disponíveis.

Um aplicativo pode criar e registrar um TvInputCallback com o android.media.tv.TvInputManager para ser chamado de volta na mudança de estado de uma entrada de TV ou na adição ou remoção de uma entrada de TV. Por exemplo, um aplicativo de TV pode reagir quando uma entrada de TV é desconectada, exibindo-a como desconectada e impedindo sua seleção.

O TV Input Manager abstrai a comunicação entre o aplicativo de TV e as entradas de TV. A interface padrão do TV Input Manager e TV Input permite que vários fabricantes de dispositivos criem seus próprios aplicativos de TV, ao mesmo tempo que ajuda todas as entradas de TV de terceiros a funcionarem em todos os aplicativos de TV.

Entradas de TV

As entradas de TV são aplicativos Android no sentido de que possuem um AndroidManifest.xml e são instalados (via Play, pré-instalados ou carregados de forma lateral). A Android TV oferece suporte a aplicativos de sistema pré-instalados, aplicativos assinados pelo fabricante do dispositivo e entradas de TV de terceiros.

Algumas entradas, como a entrada HDMI ou a entrada do sintonizador integrado, podem ser fornecidas apenas pelo fabricante, pois se comunicam diretamente com o hardware subjacente. Outros, como IPTV, mudança de local e STB externo, podem ser fornecidos por terceiros como APKs na Google Play Store. Depois de baixada e instalada, a nova entrada pode ser selecionada no aplicativo de TV.

Exemplo de entrada de passagem

Entrada do sistema Android TV
Figura 3. Entrada do sistema Android TV

Neste exemplo, a entrada de TV fornecida pelo fabricante do dispositivo é confiável e tem acesso total ao provedor de TV. Como entrada de TV passthrough, não registra nenhum canal ou programa no Provedor de TV. Para obter o URI usado para fazer referência à entrada de passagem, use o método utilitário android.media.tv.TvContract buildChannelUriForPassthroughInput(String inputId) . O aplicativo de TV se comunica com o TV Input Manager para acessar a entrada HDMI da TV.

Exemplo de sintonizador integrado

Entrada de sintonizador integrado para Android TV
Figura 4. Entrada do sintonizador integrado do Android TV

Neste exemplo, a entrada de TV do sintonizador integrado fornecida pelo fabricante do dispositivo é confiável e tem acesso total ao provedor de TV.

Exemplo de entrada de terceiros

Entrada de terceiros da Android TV
Figura 5. Entrada de terceiros do Android TV

Neste exemplo, a entrada externa de TV STB é fornecida por terceiros. Como essa entrada de TV não pode acessar diretamente o feed de vídeo HDMI recebido, ela deve passar pelo Gerenciador de entrada de TV e usar a entrada de TV HDMI fornecida pelo fabricante do dispositivo.

Através do TV Input Manager, a entrada STB TV externa pode falar com a entrada HDMI TV e solicitar que ela mostre o vídeo em HDMI1. Assim, a entrada de TV STB pode controlar a TV enquanto a entrada de TV HDMI fornecida pelo fabricante renderiza o vídeo.

Exemplo de imagem em imagem (PIP)

Principais eventos da Android TV
Figura 6. Principais eventos do Android TV

O diagrama acima mostra como os botões de um controle remoto são passados ​​para uma entrada de TV específica para exibição de imagem em imagem (PIP). Esses pressionamentos de botão são interpretados pelo driver de hardware fornecido pelo fabricante do dispositivo, convertendo scancodes de hardware em códigos-chave do Android e passando-os para as funções InputReader e InputDispatcher do pipeline de entrada padrão do Android como KeyEvents . Estes, por sua vez, acionam eventos no aplicativo de TV se ele estiver em foco.

Somente entradas de TV do sistema são elegíveis para receber InputEvents e somente se tiverem a permissão do sistema RECEIVE_INPUT_EVENT . A entrada de TV é responsável por determinar quais InputEvents consumir e deve permitir que o aplicativo de TV manipule as chaves que não precisa consumir.

O aplicativo de TV é responsável por saber qual sistema de entrada de TV está ativo, ou seja, selecionado pelo usuário, e por desambiguar KeyEvents recebidos e encaminhá-los para a sessão correta do TV Input Manager, chamando dispatchInputEvent() para passar o evento para a entrada de TV associada .

Exemplo de entrada MHEG-5

O diagrama a seguir mostra uma visão mais detalhada de como KeyEvents são roteados por meio do Android TIF.

Exemplo de botão vermelho do Android TV
Figura 7. Exemplo de botão vermelho do Android TV

Ele retrata o fluxo de um aplicativo de botão vermelho, comum na Europa para permitir que os usuários acessem aplicativos interativos em suas televisões. Um aplicativo pode ser entregue por meio desse fluxo de transporte. Quando o botão é clicado, ele permite que os usuários interajam com esses aplicativos de transmissão. Por exemplo, você pode usar esses aplicativos de transmissão para acessar páginas da web ou resultados esportivos relacionados.

Consulte a seção Aplicativo de transmissão para saber como os aplicativos de transmissão interagem com o aplicativo de TV.

Neste exemplo:

  1. O App TV fica em foco e recebe todas as chaves.
  2. KeyEvents (por exemplo, o botão vermelho) são passados ​​para a entrada de TV ativa como InputEvents.
  3. A entrada de TV do sistema integra-se à pilha MHEG-5 e possui a permissão do sistema RECEIVE_INPUT_EVENT .
  4. Ao receber o código de ativação (por exemplo, botão vermelho), a entrada de TV ativa o aplicativo de transmissão.
  5. A entrada de TV consome KeyEvents como InputEvents e o aplicativo de transmissão é o foco e manipula InputEvents até ser descartado.

Nota : As entradas de TV de terceiros nunca recebem chaves.

Entrada de TV HAL

O HAL de entrada de TV auxilia no desenvolvimento de entradas de TV para acessar hardware específico de TV. Tal como acontece com outros HALs Android, o HAL de entrada de TV ( tv_input ) está disponível na árvore de origem AOSP e o fornecedor desenvolve sua implementação.

Nota : A partir do Android 14, a interface HAL de entrada da TV é definida usando AIDL .

Aplicativo de TV

O aplicativo de TV do sistema apresenta conteúdo de TV ao vivo ao usuário. Um aplicativo de TV de referência (TV ao vivo) é fornecido juntamente com a plataforma Android, que pode ser usado como está, personalizado, estendido ou substituído pelos fabricantes de dispositivos. O código-fonte está disponível no Android Open Source Project e você pode começar a usá-lo no artigo do aplicativo Reference TV .

Os fabricantes de dispositivos podem estender seus aplicativos de TV para implementar recursos específicos do fabricante do dispositivo ou do país, mas isso não está no escopo do TIF ou do aplicativo de TV de referência.

No mínimo, o aplicativo de TV do sistema precisa realizar as seguintes tarefas:

Instalação e configuração

  • Detecção automática de entradas de TV
  • Deixe as entradas de TV iniciarem a configuração do canal
  • Controlar as configurações dos pais
  • Editar canais

Visualizando

  • Acesse e navegue por todos os canais de TV
  • Acesse a barra de informações do programa de TV
  • Exibir dados do Guia Eletrônico de Programação (EPG)
  • Suporta múltiplas faixas de áudio e legendas
  • Fornecer desafio de PIN de controle parental
  • Permitir sobreposição de interface de entrada de TV para padrão de TV (HbbTV, etc.)
  • Preencher resultados de pesquisa para canais e programas de TV
  • Exibir cartões de vinculação de aplicativos
  • Suporte a APIs de mudança de horário
  • Lidar com a funcionalidade DVR e suportar APIs de gravação de TV

Este conjunto de recursos aumentará de acordo com as novas versões do Android onde as APIs TIF da plataforma são estendidas. O CTS Verifier fornece cobertura de teste de compatibilidade.

Suporte para entradas de TV de terceiros

A Android TV fornece APIs de desenvolvedor para entradas de TV de terceiros, permitindo que aplicativos instalados forneçam canais de software na experiência de TV ao vivo. Para garantir uma implementação de dispositivo Android compatível, o aplicativo de TV do sistema tem algumas responsabilidades em relação à exibição de entradas e canais de TV de terceiros para o usuário. O aplicativo de referência Live TV fornece uma implementação compatível; se substituirem o aplicativo de TV do sistema, os fabricantes de dispositivos deverão garantir que seus próprios aplicativos forneçam compatibilidade semelhante, para atender às expectativas dos desenvolvedores em todos os dispositivos Android TV.

O aplicativo de TV do sistema deve exibir entradas de terceiros junto com o serviço de TV ao vivo padrão do dispositivo. A promessa das APIs do desenvolvedor é que os usuários poderão encontrar canais (uma vez instalados) dentro de sua experiência de TV padrão.

É permitida a diferenciação visual entre canais integrados e canais de terceiros, conforme definido na seção Aplicativo de TV do Android CDD.

As seções a seguir mostram como o aplicativo Live TV atende aos requisitos de CDD.

Nova configuração de canal

A adição de novas entradas/canais de terceiros começa com o usuário encontrando e instalando uma entrada de TV de uma loja de aplicativos, como o Google Play.

Algumas entradas de TV de terceiros adicionam canais automaticamente ao banco de dados do TvProvider. No entanto, a maioria fornecerá uma atividade de configuração para permitir que o usuário configure seus canais, forneça detalhes de login e outras ações. O aplicativo de TV do sistema precisa garantir que o usuário possa ativar essa atividade de configuração, e é por isso que o CDD exige que entradas de terceiros sejam ações mínimas de navegação fora do aplicativo de TV principal.

O aplicativo de referência Live TV fornece o menu Channel Sources para acessar as entradas.

Vá para as configurações
Figura 8. Vá para Configurações .

Vá para a origem do canal em configurações
Figura 9. Vá para Fontes de canais em Configurações.

Selecione sua fonte na lista.
Figura 10. Selecione sua fonte na lista.

Adicione canais da sua fonte
Figura 11. Adicione canais da sua fonte.

Além disso, um cartão de notificação é mostrado na parte superior do menu do aplicativo de TV após a instalação de um novo TvInput, para levar o usuário diretamente à configuração:

Notificação que mostra que novas fontes de canais estão disponíveis.
Figura 12. Notificação que mostra que novas fontes de canais estão disponíveis.

Se o usuário agir por meio da notificação, ele poderá optar por configurar suas fontes, conforme visto na Figura 10.

Consulte Definir seu serviço de entrada de TV para conhecer as expectativas dos desenvolvedores nesta área.

Personalize a lista de canais

Os fabricantes de dispositivos podem fornecer uma interface de usuário para ocultar determinados canais e permitir que os usuários gerenciem seus próprios EPGs. A TV ao vivo inclui esta facilidade.

Abra a lista de canais em Configurações.
Figura 13. Abra a lista de canais em Configurações .

Personalize sua lista de canais.
Figura 14. Personalize sua lista de canais.

EPG

Os desenvolvedores de entrada de terceiros precisam ter certeza de que os usuários podem navegar facilmente pelos seus canais durante o uso geral, em todos os dispositivos Android TV compatíveis.

Canais de entradas de terceiros devem ser apresentados como parte da experiência de TV ao vivo padrão EPG do dispositivo. Separação visual ou categorias separadas para canais de terceiros podem ser usadas (consulte a seção Aplicativo de TV do Android CDD) - o principal é que os usuários possam encontrar os canais que instalaram.

Os fabricantes devem implementar o aplicativo de TV para incluir resultados de pesquisa para solicitações de pesquisa globais, a fim de garantir a melhor experiência do usuário. A TV ao vivo fornece uma implementação (veja que fornece resultados de entradas de terceiros (necessárias para compatibilidade de plataforma), bem como entradas integradas.

Mudança de tempo

Para dispositivos com Android 6.0 e superior, o aplicativo de TV deve oferecer suporte às APIs de mudança de horário da estrutura do Android. Além disso, os fabricantes devem implementar controles de reprodução no aplicativo de TV, que permitem aos usuários pausar, retomar, retroceder e avançar a reprodução.

Para entradas de TV que suportam mudança de tempo, o aplicativo de TV precisa exibir controles de reprodução.

Controles de reprodução
Figura 15. Controles de reprodução

DVR

Para dispositivos com Android 7.0 e superior, o aplicativo de TV deve oferecer suporte às APIs de gravação de TV da estrutura Android para oferecer suporte, listar e reproduzir programas gravados.

Isso permite que os fabricantes de dispositivos conectem seus subsistemas DVR ao TIF e reduzam drasticamente o esforço de integração necessário para ativar ou integrar a funcionalidade DVR em um dispositivo de TV. Ele também permite que terceiros forneçam sistemas DVR de reposição que podem ser conectados a um dispositivo Android TV.

Além de gravar conteúdo ao vivo, o aplicativo de TV também lida com conflitos de recursos. Por exemplo, se o dispositivo tiver dois sintonizadores, ele poderá gravar dois programas ao mesmo tempo. Se o usuário solicitar a gravação de três, o aplicativo de TV deverá lidar com o conflito e deverá exibir uma notificação ou solicitar que o usuário agende uma prioridade para essas solicitações.

Os aplicativos de TV também podem implementar uma lógica mais sofisticada, como perguntar ao usuário se ele gostaria de gravar todos os episódios futuros de uma série quando solicitar a gravação de um episódio.

Consulte o diagrama a seguir para ver uma possível implementação de DVR no Android TV.

Gravação de vídeo digital na Android TV
Figura 16. Gravação de vídeo digital no Android TV

  1. O serviço de entrada de TV informa ao aplicativo de TV quantos sintonizadores estão disponíveis para que o aplicativo de TV possa lidar com possíveis conflitos de recursos.
  2. O aplicativo de TV recebe uma solicitação iniciada pelo usuário para gravar um programa de TV.
  3. O App TV armazena a programação de gravação em seu banco de dados interno.
  4. Na hora de gravar, o aplicativo de TV envia uma solicitação para sintonizar o canal associado à gravação.
  5. O serviço de entrada de TV recebe essa solicitação, responde se há ou não recursos apropriados e sintoniza o canal.
  6. Em seguida, o aplicativo de TV envia uma solicitação para iniciar a gravação ao TV Input Manager.
  7. O TV Input Service recebe esta solicitação e inicia a gravação.
  8. O serviço de entrada de TV armazena os dados reais de vídeo em seu armazenamento, que pode ser armazenamento externo ou armazenamento em nuvem.
  9. Quando chega a hora de terminar a gravação, o aplicativo de TV passa a solicitação de interrupção da gravação para o TV Input Manager.
  10. Assim que o serviço de entrada de TV recebe a solicitação, ele interrompe a gravação e adiciona seus metadados associados ao provedor de TV para que o aplicativo de TV possa mostrar a gravação aos usuários quando solicitado.

Para obter mais informações sobre como implementar recursos de gravação em seu serviço de entrada de TV, consulte este artigo sobre gravação de TV .

Recursos úteis

  • O CDD do Android e as APIs de desenvolvedor documentadas são as referências definitivas.
  • O CTS Verifier exercita as APIs como parte do programa de testes de compatibilidade. Executar isso na TV ao vivo pode ser uma maneira útil de ver o EPG, a pesquisa, o controle dos pais e outros requisitos no contexto de entradas de terceiros.
  • Consulte Definir seu serviço de entrada de TV para conhecer as expectativas dos desenvolvedores nesta área.

Controle dos pais

O controle dos pais permite que um usuário bloqueie canais e programas indesejados, mas ignore o bloqueio inserindo um código PIN.

A responsabilidade pela funcionalidade de controle parental é compartilhada entre o aplicativo de TV, o serviço TV Input Manager, o provedor de TV e a entrada de TV.

O controle dos pais é obrigatório e é coberto pelo CTS Verifier.

Vários países definiram sistemas de classificação que as entradas de TV podem usar por meio da API TVContentRating . Além disso, as entradas de TV podem registrar seus próprios sistemas de classificação personalizados, conforme demonstrado pelo teste CTS Verifier, que introduz uma classificação “falsa”. Para países onde existe um sistema de classificação padrão, os fabricantes de dispositivos são incentivados a combinar o TV Input Framework Parental Control com quaisquer outros mecanismos que possam incluir.

Provedor de TV

Cada linha de canal possui um campo COLUMN_LOCKED que é usado para bloquear a visualização de canais específicos sem inserir um código PIN. O campo do programa COLUMN_CONTENT_RATING destina-se à exibição e não é usado para impor o controle dos pais.

Gerenciador de entrada de TV

O TV Input Manager armazena todos TvContentRating bloqueados e responde a isRatingBlocked() para avisar se o conteúdo com a classificação determinada deve ser bloqueado.

Entrada de TV

A entrada de TV verifica se o conteúdo atual deve ser bloqueado chamando isRatingBlocked() no TV Input Manager quando a classificação do conteúdo exibido mudou (na mudança de programa ou canal) ou as configurações de controle dos pais mudaram (em ACTION_BLOCKED_RATINGS_CHANGED e ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED ) . Se o conteúdo for bloqueado, a entrada de TV desabilita o áudio e o vídeo e notifica o aplicativo de TV de que o conteúdo atual está bloqueado chamando notifyContentBlocked(TvContentRating) . Se o conteúdo não deve ser bloqueado, a entrada de TV ativa áudio e vídeo e notifica o aplicativo de TV de que o conteúdo atual é permitido chamando notifyContentAllowed() .

Aplicativo de TV

Para honrar as APIs de controle parental e, portanto, criar uma plataforma compatível, o aplicativo de TV do sistema precisa fornecer uma maneira para os usuários gerenciarem o controle parental, inclusive para quaisquer classificações personalizadas registradas por aplicativos específicos.

O aplicativo de TV mostra uma interface de usuário com código PIN quando é notificado por uma entrada de TV de que o conteúdo atual está bloqueado ou quando o usuário tenta visualizar um canal bloqueado.

O aplicativo de TV não armazena diretamente as configurações de controle parental. Quando o usuário altera as configurações de controle parental, cada TvContentRating bloqueado é armazenado pelo TV Input Manager e os canais bloqueados são armazenados pelo provedor de TV.

O aplicativo de TV precisa declarar a permissão android.permission.MODIFY_PARENTAL_CONTROLS para alterar as configurações de controle dos pais.

Os fabricantes de dispositivos são incentivados a:

  • Exerça o teste de controle parental do CTS Verifier em relação ao aplicativo de TV ao vivo de referência para obter uma demonstração dos requisitos de compatibilidade.
  • Use o aplicativo Live TV como referência para seu próprio aplicativo de TV: em particular, consulte as fontes ContentRatingsManager e RatingSystemsFragment e como eles lidam com classificações personalizadas.

HDMI-CEC

HDMI-CEC permite que um dispositivo controle outro, permitindo assim que um único controle remoto controle vários aparelhos em um home theater. Ele é usado pelo Android TV para acelerar a configuração e permitir o controle distante de várias entradas de TV por meio do aplicativo de TV central. Por exemplo, ele pode alternar entradas, ligar ou desligar dispositivos e muito mais.

O Android TIF implementa HDMI-CEC como o serviço de controle HDMI para que os fabricantes de dispositivos precisem apenas desenvolver drivers de baixo nível que interajam com o HAL leve do Android TV, ignorando lógicas de negócios mais complexas. Ao fornecer uma implementação padrão, o Android procura mitigar problemas de compatibilidade, reduzindo implementações fragmentadas e suporte seletivo a recursos. O serviço de controle HDMI usa os serviços Android existentes, incluindo entrada e energia.

Isso significa que as implementações HDMI-CEC existentes precisarão ser reprojetadas para interoperar com o Android TIF. Recomendamos que a plataforma de hardware contenha um microprocessador para receber a ativação do CEC e outros comandos.

Integração CEC na Android TV
Figura 17. Integração CEC no Android TV

  1. O barramento CEC recebe um comando da fonte atualmente ativa para mudar para uma fonte diferente.
  2. O driver passa o comando para o HAL HDMI-CEC.
  3. O HAL notifica todos os ActiveSourceChangeListeners .
  4. O serviço de controle HDMI é notificado sobre alteração de fonte via ActiveSourceChangeListener .
  5. O serviço TV Input Manager gera uma intenção para o aplicativo de TV mudar a fonte.
  6. O aplicativo de TV então cria uma sessão do TV Input Manager para a entrada de TV que está sendo alternada e chama setMain nessa sessão.
  7. A sessão do TV Input Manager passa essas informações para a entrada HDMI da TV.
  8. A entrada HDMI da TV solicita a definição da superfície da banda lateral.
  9. O TV Input Manager Service gera um comando de controle de roteamento correspondente de volta ao HDMI Control Service quando a superfície é configurada.

Diretrizes de integração de TV

Aplicativo de transmissão

Como cada país tem requisitos específicos de transmissão (MHEG, Teletexto, HbbTV e mais), espera-se que os fabricantes forneçam as suas próprias soluções para a aplicação de transmissão, por exemplo:

  • MHEG: pilha nativa
  • Teletexto: pilha nativa
  • HbbTV: solução HbbTV da Vewd Software

Na versão Android L, o Android TV espera que os fabricantes de dispositivos usem integradores de sistemas ou soluções Android para pilhas de TV regionais, passem a superfície para pilhas de software de TV ou passem o código-chave necessário para interagir com pilhas legadas.

Veja como o aplicativo de transmissão e o aplicativo de TV interagem:

  1. O App da TV fica em foco, recebendo todas as chaves.
  2. O aplicativo de TV passa chaves (por exemplo, botão vermelho) para o dispositivo de entrada de TV.
  3. O dispositivo de entrada de TV integra-se internamente à pilha de TV herdada.
  4. Ao receber um código de ativação (por exemplo, botão vermelho), o dispositivo de entrada de TV ativa aplicativos de transmissão.
  5. Um aplicativo de transmissão se concentra no aplicativo de TV e gerencia as ações do usuário.

Para pesquisa/recomendação por voz, o aplicativo de transmissão pode oferecer suporte à pesquisa no aplicativo para pesquisa por voz.