O Google está comprometido em promover a equidade racial para as comunidades negras. Veja como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Estrutura de entrada de TV

Ícone Android TV HAL

O Android TV Input Framework (TIF) simplifica a entrega de conteúdo ao vivo na Android TV. O TIF do Android fornece uma API padrão para os fabricantes criarem módulos de entrada para controlar a 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 procura implementar padrões de TV ou requisitos regionais, mas facilita aos fabricantes de dispositivos atender 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 do sistema que não pode ser substituído por um aplicativo de terceiros, para acessar os canais de sintonizador interno e IP. O aplicativo TV se comunica com os módulos de entrada de TV fornecidos pelo fabricante do dispositivo ou por outras partes através do Gerenciador de entrada de TV.

A estrutura de entrada da 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
  • TV Input Manager ( 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
  • HAL de entrada de TV (módulo tv_input ): uma definição de hardware que permite que as entradas de TV do sistema acessem hardware específico da TV quando implementadas
  • Controle Parental: a tecnologia para permitir o bloqueio de canais e programas
  • HDMI-CEC: a tecnologia para permitir o controle remoto de vários dispositivos através de HDMI

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

Visão geral da arquitetura Android TIF
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 TV exibe o conteúdo AV da entrada da TV.
  3. O aplicativo de TV não pode falar diretamente com as entradas da TV. O TV Input Manager identifica o estado das entradas de TV para o aplicativo de TV. Consulte o Gerenciador de entrada de TV abaixo para obter mais detalhes sobre essas limitações.

Permissões

  • Somente 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.
  • Apenas as entradas de TV do sistema podem acessar o HAL de entrada de TV através do serviço TV Input Manager. As entradas de TV são acessadas individualmente através das sessões do TV Input Manager.
  • Entradas de TV de terceiros têm acesso bloqueado ao pacote ao banco de dados do Provedor de TV e podem LER / ESCREVER apenas para corresponder às linhas do pacote.
  • As entradas de TV de terceiros podem exibir seu próprio conteúdo ou o conteúdo das entradas de TV de um fabricante do dispositivo, como HDMI1. Eles não podem exibir conteúdo de entradas de TV que não sejam de passagem, como um sintonizador interno ou IPTV.
  • TV_INPUT_HARDWARE permissão TV_INPUT_HARDWARE para um aplicativo de entrada de TV de hardware, sinaliza o serviço TV Input Manager para notificar o serviço de entrada de TV na inicialização para ligar para 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 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.

Fornecedor 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 fornecidos e é proibida de acessar os canais e programas de 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 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 o programa com o gênero 0x25 (significando "Esportes"), a Entrada de TV preencherá o "gênero de transmissão" com a sequência "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.

Fornecedor de TV Android
Figura 2. Provedor de TV Android

Somente aplicativos na partição privilegiada do sistema podem ler o banco de dados inteiro 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 TV Provider 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 outro formato. Um campo Pesquisável está disponível para tornar determinados canais indisponíveis na pesquisa (como para atender aos requisitos específicos de país para proteção de conteúdo).

Exemplos de campos do banco de dados

O provedor de TV suporta dados estruturados nas tabelas de canais ( android.provider.TvContract.Channels ) e de programa ( android.provider.TvContract.Programs ). Essas tabelas são preenchidas e acessadas por entradas de TV e aplicativos do 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 tornar visíveis para o usuário, como o nome de um canal ( COLUMN_DISPLAY_NAME ) ou o número ( COLUMN_DISPLAY_NUMBER ) ou o título do programa que está sendo exibido.
  • 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 ), o ID original da rede ( COLUMN_ORIGINAL_NETWORK_ID ) e o ID do serviço ( COLUMN_SERVICE_ID ).
  • Dados internos : campos destinados ao uso personalizado de entradas de TV.
    Alguns campos, como COLUMN_INTERNAL_PROVIDER_DATA , são campos BLOB personalizáveis, nos quais uma entrada de TV pode armazenar metadados arbitrários sobre seu canal ou programa.
  • Sinalizador: os campos de sinalizador representam se um canal deve ser restringido de pesquisa, navegação ou exibição. Isso pode ser definido apenas no nível do canal. Todos os programas diferem para a configuração no 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 para apenas aplicativos do sistema. Restringindo o canal de ser visualizado 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 é diretamente acessível aos usuários; eles veem apenas o que o aplicativo de TV, os aplicativos do sistema ou as entradas de TV aparecem.

  • Cada linha possui PACKAGE_NAME , o pacote (aplicativo) que possui essa linha, marcado em Consulta, 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 a 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 do sistema central para o Android TV Input Framework geral. Arbitra a interação entre aplicativos e entradas de TV e fornece a funcionalidade de controle dos pais. As sessões do TV Input Manager devem ser criadas individualmente com as Entradas de TV. O TV Input Manager permite acesso às entradas de TV instaladas para que os aplicativos possam:

  • Listar entradas de TV e verificar 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 foram adicionadas ao banco de dados do provedor de TV, exceto para entradas de TV TvContract.buildChannelUriForPassthroughInput() 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 criar 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 alteração 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 do TV Input permite que vários fabricantes de dispositivos criem seus próprios aplicativos de TV, ajudando todas as entradas de TV de terceiros a trabalharem em todos os aplicativos de TV.

Entradas de TV

Entradas de TV são aplicativos Android no sentido de que eles têm um AndroidManifest.xml e estão instalados (via Play, pré-instalado ou com carregamento lateral). A Android TV suporta 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 interno, podem ser fornecidas apenas pelo fabricante, pois falam diretamente com o hardware subjacente. Outros, como IPTV, troca de lugar e STB externo, podem ser fornecidos por terceiros como APKs no Google Play Store. Uma vez baixado e instalado, a nova entrada pode ser selecionada no aplicativo de TV.

Exemplo de entrada de passagem

Entrada do sistema de TV Android
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 transmitida, ela não registra nenhum canal ou programa com o provedor de TV. Para obter o URI usado para referenciar a entrada de passagem, use o método do utilitário android.media.tv.TvContract buildChannelUriForPassthroughInput(String inputId) . O aplicativo TV se comunica com o Gerenciador de entrada de TV para acessar a entrada de TV HDMI.

Exemplo de sintonizador embutido

Entrada do sintonizador integrado da Android TV
Figura 4. Entrada do sintonizador interno da Android TV

Neste exemplo, a Entrada de TV com Sintonizador Interno 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 da Android TV

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

Por meio do Gerenciador de entrada de TV, a entrada de TV externa STB pode falar com a entrada de TV HDMI e solicitar que ele mostre o vídeo em HDMI1. Portanto, 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 na imagem (PIP)

KeyEvents da Android TV
Figura 6. KeyEvents do Android TV

O diagrama acima mostra como os botões no controle remoto são passados ​​para uma entrada de TV específica para exibição imagem em imagem (PIP). Essas teclas são interpretadas pelo driver de hardware fornecido pelo fabricante do dispositivo, convertendo scancodes de hardware em códigos de chave do Android e passando-os para o pipeline de entrada padrão do Android , o InputReader e o InputDispatcher funcionam como KeyEvents . Por sua vez, esses eventos são acionados no aplicativo de TV, se estiver em foco.

Somente as 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 da TV é responsável por determinar quais InputEvents consumir e deve permitir que o TV App manipule as teclas que não precisa consumir.

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

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 da Android TV
Figura 7. Exemplo de botão vermelho da Android TV

Ele descreve o fluxo de um aplicativo de botão vermelho, comum na Europa por permitir que os usuários acessem aplicativos interativos em suas televisões. Um aplicativo pode ser entregue nesse 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 aplicativo de 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 se integra à pilha MHEG-5 e tem a permissão do sistema RECEIVE_INPUT_EVENT .
  4. Ao receber o código-chave 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 lida com InputEvents até ser descartado.

Nota : Entradas de TV de terceiros nunca recebem teclas.

Entrada de TV HAL

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

Aplicativo de TV

O sistema TV App 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 usada como está, personalizada, estendida ou substituída pelos fabricantes de dispositivos. O código-fonte está disponível no Android Open Source Project e você pode começar com ele no artigo do aplicativo Reference TV .

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

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

Instalação e configuração

  • Detectar automaticamente entradas de TV
  • Permitir que as entradas de TV iniciem a configuração do canal
  • Controlar as configurações dos pais
  • Editar canais

Visualizando

  • Acesse e navegue em todos os canais de TV
  • Acessar 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
  • Desafio de PIN de controle parental de fornecimento
  • Permitir sobreposição da interface de entrada da TV para o padrão de TV (HbbTV, etc.)
  • Preencher resultados de pesquisa para canais e programas de TV
  • Exibir cartões de vinculação de aplicativo
  • APIs de mudança de horário de suporte
  • Lidar com a funcionalidade DVR e suportar APIs de gravação de TV

Esse conjunto de recursos aumentará de acordo com as novas versões do Android nas quais as APIs da plataforma TIF são estendidas. O CTS Verifier fornece a cobertura do 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 os aplicativos instalados entreguem canais de software para a experiência de TV ao vivo. Para garantir uma implementação de dispositivo Android compatível, o aplicativo TV do sistema tem algumas responsabilidades em relação à superfície de entradas e canais de TV de terceiros para o usuário. O aplicativo Live TV de referência fornece uma implementação compatível; ao 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 de TV Android.

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

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

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

Nova configuração de canal

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

Algumas entradas de TV de terceiros adicionam automaticamente canais 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 esta atividade de configuração, e é por isso que o CDD exige que entradas de terceiros sejam ações mínimas de navegação para longe do aplicativo de TV principal.

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

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

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

Selecione sua fonte da lista.
Figura 10. Selecione sua fonte da 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 à instalação:

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

Se o usuário executar uma ação por meio da notificação, ele poderá optar por configurar suas fontes, como visto na Figura 10.

Consulte Defina o serviço de entrada da TV para obter as expectativas dos desenvolvedores nesta área.

Personalize a lista de canais

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

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. É possível usar a separação visual ou categorias separadas para canais de terceiros (consulte a seção Aplicativo de TV do CDD do Android) - a chave é que os usuários podem 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 a compatibilidade da plataforma), bem como de entradas internas.

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 rapidamente a reprodução.

Para entradas de TV compatíveis com mudança de horário, 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 TV deve oferecer suporte às APIs de gravação da estrutura de Android, para oferecer suporte, listar e reproduzir programas gravados.

Isso permite que os fabricantes de dispositivos conectem seus subsistemas de DVR ao TIF e reduzam drasticamente o esforço de integração necessário para ativar ou integrar a funcionalidade do DVR em um dispositivo de TV. Ele também permite que terceiros forneçam sistemas DVR de pós-venda que possam 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 pedir para gravar três, o aplicativo de TV deve lidar com o conflito e deve 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 eles gostariam de gravar todos os episódios futuros de uma série quando solicitassem gravar um episódio.

Veja 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 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 aplicativo de TV armazena a programação de gravação em seu banco de dados interno.
  4. Quando é 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 com a disponibilidade ou não de recursos apropriados e sintoniza o canal.
  6. Em seguida, o aplicativo TV passa uma solicitação para iniciar a gravação no TV Input Manager.
  7. O serviço de entrada de TV recebe essa solicitação e inicia a gravação.
  8. O Serviço de entrada de TV armazena os dados de vídeo reais em seu armazenamento, que podem ser armazenamento externo ou armazenamento em nuvem.
  9. Quando é hora de terminar a gravação, o aplicativo TV passa a solicitação de parada da gravação para o Gerenciador de entrada de TV.
  10. Depois que o Serviço de entrada de TV recebe a solicitação, para 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 os recursos de gravação no serviço de entrada de TV, consulte este artigo de 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. 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 Defina o serviço de entrada da TV para obter as expectativas dos desenvolvedores nesta área.

Controle dos pais

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

A responsabilidade pela funcionalidade de controle dos pais é compartilhada entre o aplicativo 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 do CTS Verifier, que introduz uma classificação 'falsa'. Nos países onde existe um sistema de classificação padrão, os fabricantes de dispositivos são incentivados a combinar o Controle Parental da TV Input Framework com quaisquer outros mecanismos que possam incluir.

Fornecedor de TV

Cada linha do canal possui um campo COLUMN_LOCKED usado para impedir a exibiçã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 os TvContentRating bloqueados e responde a isRatingBlocked() para avisar se o conteúdo com a classificação especificada 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 foi alterada (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 Entrada da TV desabilita o áudio e o vídeo e notifica o aplicativo de TV que o conteúdo atual está bloqueado chamando notifyContentBlocked(TvContentRating) . Se o conteúdo não deve ser bloqueado, a Entrada de TV 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 sistema TV App precisa fornecer uma maneira de os usuários gerenciarem o controle dos pais, incluindo as classificações personalizadas registradas por aplicativos específicos.

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

O aplicativo TV não armazena diretamente as configurações do controle dos pais. Quando o usuário altera as configurações do controle dos pais, todos os TvContentRating bloqueados são armazenados 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 no 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 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 dispositivos em um home theater. É usado pela Android TV para acelerar a configuração e permitir controle distante sobre várias entradas de TV por meio do aplicativo central de TV. 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 precisem apenas desenvolver drivers de baixo nível que interajam com o leve Android TV HAL, ignorando uma lógica comercial mais complexa. Ao fornecer uma implementação padrão, o Android procura atenuar os problemas de compatibilidade, reduzindo implementações fragmentadas e suporte a recursos seletivos. O Serviço de Controle HDMI usa os serviços Android existentes, incluindo entrada e energia.

Isso significa que as implementações existentes de HDMI-CEC precisarão ser redesenhadas para interoperar com o Android TIF. Recomendamos que a plataforma de hardware contenha um microprocessador para receber a energia 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 Serviço de Controle HDMI é notificado sobre a alteração da fonte via ActiveSourceChangeListener .
  5. O serviço TV Input Manager gera uma intenção do aplicativo de TV mudar a fonte.
  6. O aplicativo de TV cria uma sessão do Gerenciador de entrada de TV para a entrada de TV que está sendo trocada 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 serviço Gerenciador de entrada de TV gera um comando de controle de roteamento correspondente de volta ao serviço de controle HDMI quando a superfície está 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, a 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 de chave necessário para interagir com pilhas herdadas.

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

  1. O aplicativo de TV está em foco, recebendo todas as teclas.
  2. O aplicativo TV passa as teclas (por exemplo, botão vermelho) para o dispositivo de entrada da TV.
  3. O dispositivo de entrada de TV se integra internamente à pilha de TV herdada.
  4. Ao receber um código de tecla 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 concentra-se 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 suportar a pesquisa no aplicativo para pesquisa por voz.