Estrutura de entrada de TV

Ícone HAL do 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 que os fabricantes criem módulos de entrada para controlar o Android TV e permite a pesquisa e recomendações de TV ao vivo por meio de metadados publicados pela TV Input.

A estrutura não busca 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 TV App, um aplicativo do sistema que não pode ser substituído por um aplicativo de terceiros, para acessar canais integrados e sintonizadores de IP. O TV App se comunica com os módulos de TV Input fornecidos pelo fabricante do dispositivo ou outras partes 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
  • TV App ( 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 implementado
  • Controle dos Pais: a tecnologia para permitir o bloqueio de canais e programas
  • HDMI-CEC: a tecnologia para permitir o controle remoto de vários dispositivos via HDMI
  • Tuner Framework: uma estrutura para entrada de TV com sintonizador embutido
  • MediaCas: um framework para acesso condicional
  • Tuner Resource Manager: um serviço para gerenciar o recurso 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

Aqui está como a arquitetura é exercida:

  1. O usuário vê e interage com o aplicativo de TV, um aplicativo do 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 falar 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

  • Apenas as entradas de TV signatureOrSystem e o aplicativo de TV têm acesso total ao banco de dados do provedor de TV e podem 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/GRAVAR somente nas linhas de pacote correspondentes.
  • As entradas de TV de terceiros podem exibir seu próprio conteúdo ou conteúdo das 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 de IPTV integrado.
  • A permissão TV_INPUT_HARDWARE para um aplicativo de entrada de TV de hardware sinaliza ao serviço de gerenciamento de entrada de TV para notificar o serviço de entrada de TV na inicialização para chamar o serviço de gerenciamento de entrada de TV e adicionar suas entradas de TV. Essa permissão permite que um aplicativo de entrada de TV de hardware ofereça suporte a várias 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 os canais e programas de quaisquer outras entradas de TV.

O provedor de TV mapeia "gênero de transmissão" para "gênero canônico" internamente. As entradas de TV são responsáveis ​​por preencher "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 de android.provider.TvContract.Genres . Por exemplo, com padrão de transmissão ATSC A/65 e 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 .

Consulte o diagrama abaixo para obter uma visão detalhada do Provedor de TV.

Provedor de TV Android
Figura 2. Provedor de TV Android

Apenas os 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 frequência do sintonizador associado, e podem ser fornecidos em um buffer de protocolo ou de 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 suporta dados estruturados em tabelas de canal ( android.provider.TvContract.Channels ) e programa ( android.provider.TvContract.Programs ). Essas tabelas são preenchidas e acessadas por TV Inputs e aplicativos do sistema, como o TV App. Essas tabelas têm 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 identificar o conteúdo, de acordo com os padrões relevantes, como o ID do fluxo de transporte de um canal ( COLUMN_TRANSPORT_STREAM_ID ), ID da rede original ( COLUMN_ORIGINAL_NETWORK_ID ) e ID do serviço ( COLUMN_SERVICE_ID ).
  • Dados internos : Campos que são para uso personalizado de 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. Isso pode ser definido apenas no nível do canal. Todos os programas seguem a 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 o canal de ser navegado por 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. Restringindo 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 pelo controle dos pais.

Para obter 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 são visíveis para qualquer pessoa com acesso à linha correspondente. Nenhum campo é acessível diretamente aos usuários; eles veem apenas o que o aplicativo de TV, os aplicativos do sistema ou as entradas de TV aparecem.

  • Cada linha tem PACKAGE_NAME , o pacote (app) que possui essa linha, verificado em Query, Insert, Update 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 de READ, WRITE via AndroidManifest.xml (requer consentimento do usuário) para determinar os canais disponíveis.
  • Apenas 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 o Android TV Input Framework geral. Ele arbitra a interação entre aplicativos e entradas de TV e fornece funcionalidade de controle dos pais. As sessões do TV Input Manager devem ser criadas individualmente com TV Inputs. O TV Input Manager permite o acesso a TV Inputs 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 que ele adicionou 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 ajustado. 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 em 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 enquanto ajudam todas as entradas de TV de terceiros a funcionar em todos os aplicativos de TV.

Entradas de TV

Entradas de TV são aplicativos Android no sentido de que têm um AndroidManifest.xml e são instalados (via Play, pré-instalados ou carregados por sideload). O Android TV é compatível com aplicativos do 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 falam 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 uma entrada de TV passthrough, não registra nenhum canal ou programa com o Provedor de TV. Para obter o URI usado para fazer referência à entrada de passagem, use o método de utilitário android.media.tv.TvContract buildChannelUriForPassthroughInput(String inputId) . O aplicativo de TV se comunica com o Gerenciador de entrada de TV para alcançar a entrada de TV HDMI.

Exemplo de sintonizador integrado

Entrada do sintonizador integrado do 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 do Android TV
Figura 5. Entrada de terceiros do Android TV

Neste exemplo, a entrada de TV STB externa é fornecida por terceiros. Como essa entrada de TV não pode acessar diretamente o feed de vídeo HDMI que está chegando, 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 de TV STB externa pode falar com a HDMI TV Input e pedir para mostrar 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)

Eventos-chave do Android TV
Figura 6. Eventos-chave 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 keycodes do Android e passando-os para as funções InputReader e InputDispatcher do pipeline de entrada do Android padrão como KeyEvents . Estes, por sua vez, acionam eventos no aplicativo de TV se estiver em foco.

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

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

Exemplo de entrada MHEG-5

O diagrama a seguir mostra uma visão mais detalhada de como os KeyEvents são roteados pelo Android TIF.

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

Ele descreve o fluxo de um aplicativo Red button, comum na Europa para permitir que os usuários acessem aplicativos interativos em suas televisões. Um aplicativo pode ser entregue por esse 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 relacionadas ou resultados esportivos.

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 está em foco e recebe todas as teclas.
  2. KeyEvents (por exemplo, o botão vermelho) é passado para a entrada de TV ativa como InputEvents.
  3. A entrada de TV do sistema integra-se com a pilha MHEG-5 e tem a permissão do sistema RECEIVE_INPUT_EVENT .
  4. Ao receber o código de ativação (por exemplo, botão vermelho), a TV Input 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 dispensado.

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

Entrada de TV HAL

O TV Input HAL auxilia no desenvolvimento de TV Inputs para acessar hardware específico de TV. Assim como em outros HALs do Android, o TV Input HAL ( tv_input ) está disponível na árvore de origem do AOSP e o fornecedor desenvolve sua implementação.

Aplicativo de TV

O aplicativo de TV do sistema apresenta conteúdo de TV ao vivo para o usuário. Um aplicativo de TV de referência (Live TV) é 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 lidar com as seguintes tarefas:

Configuração e configuração

  • Detectar automaticamente 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 em todos os canais de TV
  • Acesse a barra de informações do programa de TV
  • Exibir dados do Guia de Programação Eletrônica (EPG)
  • Suporta várias faixas de áudio e legendas
  • Fornecer desafio de PIN de controle dos pais
  • Permitir sobreposição de IU de entrada de TV para o padrão de TV (HbbTV, etc.)
  • Preencha os resultados da pesquisa para canais e programas de TV
  • Exibir cartões de vinculação de aplicativos
  • Suporta APIs de timeshift
  • Lide com a funcionalidade do DVR e suporta APIs de gravação de TV

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

Suporte para entradas de TV de terceiros

O Android TV fornece APIs de desenvolvedor para entradas de TV de terceiros, permitindo que aplicativos instalados forneçam canais de software para a 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 TV ao vivo de referência fornece uma implementação compatível; se substituir o aplicativo de TV do sistema, os fabricantes de dispositivos devem garantir que seus próprios aplicativos forneçam compatibilidade semelhante para atender às expectativas do desenvolvedor 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.

A diferenciação visual entre canais integrados e canais de terceiros é permitida, conforme definido na seção App de TV do CDD do Android.

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 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 as entradas de terceiros sejam ações de navegação mínimas longe do aplicativo de TV principal.

O aplicativo de TV ao vivo de referência fornece o menu Fontes de canal para acessar as entradas.

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

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

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

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

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

A notificação que mostra novas fontes de canal está disponível.
Figura 12. Notificação que mostra que novas fontes de canal estão disponíveis.

Se o usuário realizar uma ação 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 as expectativas do desenvolvedor nesta área.

Personalizar a lista de canais

Os fabricantes de dispositivos podem fornecer uma interface do usuário para ocultar determinados canais e permitir que os usuários gerenciem seus próprios EPGs. 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 para seus canais durante o uso geral, em todos os dispositivos Android TV compatíveis.

Os canais de entradas de terceiros devem ser apresentados como parte do EPG de experiência de TV ao vivo padrão do dispositivo. Separação visual ou categorias separadas para canais de terceiros podem ser usadas (consulte a seção App de TV do CDD do Android) — o importante é 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 global, a fim de garantir a melhor experiência do usuário. A TV ao vivo fornece uma implementação (consulte com.android.tv.search.TvProviderSearch ) 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 ser compatível com as APIs de mudança de tempo 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 time shifting, o aplicativo de TV precisa exibir os 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 ser compatível com as APIs de gravação de TV da estrutura do 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 habilitar ou integrar a funcionalidade DVR em um dispositivo de TV. Ele também permite que terceiros forneçam sistemas DVR de pós-venda 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 aparelho tiver dois sintonizadores, pode gravar dois programas ao mesmo tempo. Se o usuário pedir para gravar três, o aplicativo de TV deve lidar com o conflito e apresentar 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 a um usuário se ele deseja 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 na Android TV.

Gravação de vídeo digital na Android TV
Figura 16. Gravação de vídeo digital na 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 um possível conflito de recursos.
  2. O aplicativo de TV recebe uma solicitação iniciada pelo usuário para gravar um programa de TV.
  3. O TV App armazena a programação de gravação em seu banco de dados interno.
  4. Na hora de gravar, o App TV passa uma solicitação para sintonizar o canal associado à gravação.
  5. O TV Input Service recebe esta solicitação, responde se há ou não recursos adequados e sintoniza o canal.
  6. Em seguida, o aplicativo de TV passa uma solicitação para iniciar a gravação para o TV Input Manager.
  7. O TV Input Service recebe esta solicitação e inicia a gravação.
  8. O TV Input Service armazena os dados de vídeo reais em seu armazenamento, que pode ser armazenamento externo ou armazenamento em nuvem.
  9. Quando é hora de terminar a gravação, o TV App passa a solicitação de parada de gravação para o TV Input Manager.
  10. Depois 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 a implementação de 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 teste de compatibilidade. Executá-lo 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 as expectativas do desenvolvedor nesta área.

Controle dos pais

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

A responsabilidade pela funcionalidade de controle dos pais é compartilhada entre o aplicativo de TV, o serviço Gerenciador de entrada de TV, 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 o TV Inputs pode usar por meio da API TVContentRating . Além disso, as TV Inputs 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 Controle dos Pais da Estrutura de Entrada de TV com quaisquer outros mecanismos que possam incluir.

Provedor de TV

Cada linha de canal tem 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 cada TvContentRating bloqueado e responde a isRatingBlocked() para avisar se o conteúdo com a classificação fornecida deve ser bloqueado.

Entrada de TV

A TV Input 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 foram alteradas (em ACTION_BLOCKED_RATINGS_CHANGED e ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED ) . Se o conteúdo deve ser bloqueado, a TV Input 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 TV Input habilita á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 dos pais e, portanto, criar uma plataforma compatível, o aplicativo de TV do sistema precisa fornecer uma maneira para os usuários gerenciarem o controle dos pais, inclusive para quaisquer classificações personalizadas registradas por aplicativos específicos.

O aplicativo de TV mostra uma IU de 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 dos pais. Quando o usuário altera as configurações de controle dos pais, 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:

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

HDMI-CEC

O 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 pela 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 o HDMI-CEC como o serviço de controle HDMI para que os fabricantes de dispositivos apenas precisem desenvolver drivers de baixo nível que interajam com o HAL leve do Android TV, ignorando a lógica de negócios mais complexa. Ao fornecer uma implementação padrão, o Android procura mitigar problemas de compatibilidade reduzindo implementações fragmentadas e suporte seletivo de 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 redesenhadas 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 na Android TV

  1. O barramento CEC recebe um comando da fonte atualmente ativa para alternar para uma fonte diferente.
  2. O driver passa o comando para o HDMI-CEC HAL.
  3. O HAL notifica todos os ActiveSourceChangeListeners .
  4. O HDMI Control Service é notificado da mudança de fonte via ActiveSourceChangeListener .
  5. O serviço TV Input Manager gera uma intenção para o aplicativo de TV alternar a fonte.
  6. O aplicativo de TV cria uma Sessão de Gerenciador de Entrada de TV para a Entrada de TV que está sendo alternada e chama setMain nessa sessão.
  7. A Sessão do Gerenciador de Entrada de TV passa essas informações para a Entrada de TV HDMI.
  8. A entrada da TV HDMI 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 é definida.

Diretrizes de integração de TV

Aplicativo de transmissão

Como cada país possui requisitos específicos de transmissão (MHEG, Teletexto, HbbTV e mais), espera-se que os fabricantes forneçam suas próprias soluções para o aplicativo 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 as soluções Android para pilhas de TV regionais, passem a superfície para pilhas de software de TV ou passem o código de chave necessário para interagir com pilhas legadas.

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

  1. O App TV está em foco, recebendo todas as chaves.
  2. O aplicativo de TV passa as chaves (por exemplo, botão vermelho) para o dispositivo de entrada de TV.
  3. O dispositivo de entrada de TV integra-se internamente com a pilha de TV legada.
  4. Ao receber um código de ativação (por exemplo, botão vermelho), o dispositivo de entrada de TV ativa os aplicativos de transmissão.
  5. Um aplicativo de transmissão se concentra no aplicativo de TV e lida com 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.