TV Input Framework

Ícone da HAL do Android TV

O Android TV Input Framework (TIF) simplifica o envio de conteúdo ao vivo para o Android TV. O Android TIF oferece uma API padrão para que os fabricantes criem módulos de entrada para controlar o Android TV e ativa a pesquisa e as recomendações de TV ao vivo por meio de metadados publicados pela entrada da TV.

O framework não busca implementar padrões de TV ou requisitos regionais, mas facilita para os fabricantes de dispositivos atender aos padrões regionais de transmissão de TV digital sem nova implementação. A documentação desta seção também pode ser útil para desenvolvedores de apps de terceiros que querem criar entradas de TV personalizadas.

Componentes

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

O TV Input Framework consiste em:

  • Provedor de TV (com.android.providers.tv.TvProvider): um banco de dados de canais, programas e permissões associadas
  • App de TV (com.android.tv.TvActivity): o app que processa a interação do usuário
  • Gerenciador de entradas de TV (android.media.tv.TvInputManager): permite que as entradas de TV se comuniquem com o app de TV.
  • Entrada de TV: um app 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 da família: a tecnologia que permite bloquear canais e programas
  • HDMI-CEC: a tecnologia que permite o controle remoto de vários dispositivos por HDMI
  • Tuner Framework: um framework para entrada de TV integrada ao sintonizador
  • MediaCas: um framework para acesso condicional
  • Tuner Resource Manager: um serviço para gerenciar o recurso de hardware de entrada de TV, MediaCas e Embedded-in-Tuner

Esses componentes são abordados em detalhes abaixo. Consulte o diagrama abaixo para uma visualização detalhada da arquitetura do Android TV Input Framework.

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

Fluxo

Veja como a arquitetura é exercida:

  1. O usuário encontra e interage com o app de TV, um app do sistema que não pode ser substituído por um app de terceiros.
  2. O app de TV mostra o conteúdo AV da entrada da TV.
  3. O app de TV não pode falar diretamente com as entradas de TV. O gerenciador de entradas de TV identifica o estado das entradas de TV para o app de TV. Consulte Gerenciador de entradas de TV abaixo para mais detalhes sobre essas limitações.

Permissões

  • Somente as entradas de TV e o app de TV signatureOrSystem 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 a HAL de entrada de TV por meio do serviço Gerenciador de entrada de TV. As entradas de TV são acessadas um para um nas sessões do Gerenciador de entrada de TV.
  • As entradas de TV de terceiros têm acesso bloqueado por pacote ao banco de dados do provedor de TV e podem ler/gravar apenas em linhas de pacote correspondentes.
  • As entradas de TV de terceiros podem mostrar o próprio conteúdo ou o conteúdo das entradas de TV de passagem do fabricante do 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 app de entrada de TV de hardware sinaliza o serviço de entrada de TV para notificar o serviço de entrada de TV na inicialização para chamar o serviço de entrada de TV e adicionar as entradas de TV. Essa permissão permite que um app 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 as entradas de TV com suporte.

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 os próprios registros. Por exemplo, uma entrada de TV específica pode acessar apenas os canais e programas que ela forneceu e não pode 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 "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 o padrão de transmissão ATSC A/65 e o programa com o gênero 0x25 (que significa "Esportes"), a entrada de TV vai preencher o "gênero de transmissão" com a string "Esportes", e o provedor de TV vai preencher o campo "gênero canônico" com o valor mapeado android.provider.TvContract.Genres.SPORTS.

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

Provedor do Android TV
Figura 2. Provedor do Android TV

Somente apps na partição do sistema privilegiado 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 outro formulário. Um campo pesquisável está disponível para tornar determinados canais indisponíveis na pesquisa, por exemplo, para atender a requisitos específicos de proteção de conteúdo de cada país.

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 de programa (android.provider.TvContract.Programs). Essas tabelas são preenchidas e acessadas por entradas de TV e apps do sistema, como o app de TV. Essas tabelas têm quatro tipos de campos:

  • Exibição : os campos de exibição contêm informações que os apps podem querer tornar visíveis para o usuário, como o nome (COLUMN_DISPLAY_NAME) ou o número (COLUMN_DISPLAY_NUMBER) de um canal ou o título do programa que está sendo assistido.
  • Metadados:há três campos para identificar o conteúdo, de acordo com os padrões relevantes, como o ID do stream de transporte de um canal (COLUMN_TRANSPORT_STREAM_ID), o ID da rede original (COLUMN_ORIGINAL_NETWORK_ID) e o ID do serviço (COLUMN_SERVICE_ID).
  • Dados internos: campos para uso personalizado de entradas de TV.
    Alguns campos, como COLUMN_INTERNAL_PROVIDER_DATA, são campos BLOB personalizáveis em que uma entrada de TV pode armazenar metadados arbitrários sobre o canal ou programa.
  • Flag : os campos de flag representam se um canal deve ser restrito para pesquisa, navegação ou visualização. Isso só pode ser definido no nível do canal. Todos os programas são definidos pela configuração do canal.
    • COLUMN_SEARCHABLE: a restrição de pesquisa em 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. Restrição de navegação do canal 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. Restringir o acesso ao canal por contas inválidas sem a necessidade de inserir o PIN. COLUMN_LOCKED = 1 significa que o canal precisa ser protegido pelo controle da família.

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 é diretamente acessível aos usuários. Eles só podem acessar o que o app de TV, os apps do sistema ou as entradas de TV mostram.

  • Cada linha tem PACKAGE_NAME, o pacote (app) que é proprietário dessa linha, verificada em consulta, inserção, atualização via TvProvider.java. Uma entrada de TV pode acessar apenas as informações que ela gravou e é isolada das informações fornecidas por outras entradas de TV.
  • Permissões READ e WRITE via AndroidManifest.xml (exige o consentimento do usuário) para determinar os canais disponíveis.
  • Apenas apps signatureOrSystem podem receber a permissão ACCESS_ALL_EPG_DATA para acessar todo o banco de dados.

Gerenciador de entrada de TV

O gerenciador de entrada de TV oferece uma API de sistema central para o framework de entrada do Android TV. Ele arbitra a interação entre apps e entradas de TV e oferece a funcionalidade de controle da família. As sessões do gerenciador de entradas de TV precisam ser criadas individualmente com as entradas de TV. O gerenciador de entradas de TV permite o acesso a entradas de TV instaladas para que os apps possam:

  • Listar entradas de TV e conferir o status delas
  • Criar sessões e gerenciar ouvintes

Para sessões, uma entrada de TV pode ser sintonizada pelo app de TV apenas para URIs que foram adicionadas 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 o volume definido. As entradas de TV fornecidas e assinadas pelo fabricante do dispositivo (apps de assinatura) ou outros apps 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 apps para navegar e pesquisar em todos os canais e programas de TV disponíveis.

Um app pode criar e registrar uma TvInputCallback com o android.media.tv.TvInputManager para ser chamado novamente 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 app de TV pode reagir quando uma entrada de TV é desconectada exibindo-a como desconectada e impedindo a seleção.

O TV Input Manager abstrai a comunicação entre o app de TV e as entradas de TV. A interface padrão do gerenciador de entrada de TV e da entrada de TV permite que vários fabricantes de dispositivos criem apps de TV próprios, além de ajudar todas as entradas de TV de terceiros a funcionar em todos os apps de TV.

Entradas de TV

As entradas de TV são apps Android no sentido em que têm um AndroidManifest.xml e são instalados (pelo Google Play, pré-instalados ou transferidos por sideload). O Android TV oferece suporte a apps do sistema pré-instalados, apps assinados pelo fabricante do dispositivo e entradas de TV de terceiros.

Algumas entradas, como a entrada HDMI ou a entrada do sintonizador integrado, só podem ser fornecidas pelo fabricante, porque elas se comunicam diretamente com o hardware. Outros, como IPTV, mudança de lugar e STB externo, podem ser fornecidos por terceiros como APKs na Google Play Store. Após o download e a instalação, a nova entrada pode ser selecionada no app de TV.

Exemplo de entrada de passagem

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

Exemplo de sintonizador integrado

Entrada de sintonizador integrada 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 recebido, ela precisa passar pelo gerenciador de entrada de TV e usar a entrada de TV HDMI fornecida pelo fabricante do dispositivo.

Com o gerenciador de entrada de TV, a entrada de TV STB externa pode falar com a entrada de TV HDMI e pedir para ela mostrar o vídeo em HDMI1. Assim, a entrada de TV do STB pode controlar a TV enquanto a entrada de TV HDMI fornecida pelo fabricante renderiza o vídeo.

Exemplo de picture-in-picture (PiP)

KeyEvents do Android TV
Figura 6. KeyEvents do Android TV

O diagrama acima mostra como os botões de um controle remoto são transmitidos para uma entrada de TV específica para exibição de imagem em imagem (PIP). Essas pressões de botão são interpretadas pelo driver de hardware fornecido pelo fabricante do dispositivo, convertendo scancodes de hardware em keycodes do Android e transmitindo-os ao pipeline de entrada padrão do Android. As funções InputReader e InputDispatcher funcionam como KeyEvents. Eles, por sua vez, acionam eventos no app para TV se ele estiver em foco.

Somente as entradas de TV do sistema estão qualificadas 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 serão consumidos e precisa permitir que o app de TV processe as teclas que não precisam ser consumidas.

O app de TV é responsável por saber qual entrada de TV do sistema está ativa, ou seja, selecionada pelo usuário, e para eliminar a ambiguidade de KeyEvents de entrada de TV recebidas e encaminhando-as para a sessão correta do gerenciador de entrada de TV, chamando dispatchInputEvent() para transmitir o evento à entrada de TV associada.

Exemplo de entrada do MHEG-5

O diagrama a seguir mostra uma visão mais detalhada de como as KeyEvents são roteadas pelo TIF do Android.

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

Ele mostra o fluxo de um app de botão vermelho, comum na Europa para permitir que os usuários acessem apps interativos nas televisões. Um app pode ser entregue por esse fluxo de transporte. Quando o botão é clicado, os usuários podem interagir com esses apps de transmissão. Por exemplo, você pode usar esses apps de transmissão para acessar páginas da Web ou resultados esportivos relacionados.

Consulte a seção App de transmissão para saber como eles interagem com o app para TV.

Neste exemplo:

  1. O app de TV está em foco e recebe todas as teclas.
  2. KeyEvents (por exemplo, o botão vermelho) é transmitido 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 de tecla de ativação (por exemplo, um botão vermelho), a entrada da TV ativa o app de transmissão.
  5. A entrada de TV consome KeyEvents como InputEvents, e o app de transmissão é o foco e processa InputEvents até ser dispensado.

Observação: as entradas de TV de terceiros nunca recebem chaves.

HAL de entrada de TV

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

Observação: no Android 14 e versões mais recentes, a interface HAL de entrada de TV é definida usando AIDL.

App de TV

O app de TV do sistema apresenta conteúdo de TV ao vivo ao usuário. Um app de TV de referência (TV ao vivo) é fornecido 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 usar ele no artigo Referência de apps de TV.

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

O app de TV do sistema precisa, no mínimo, processar as seguintes tarefas:

Configuração

  • Detecção automática de entradas de TV
  • Permitir que as entradas de TV iniciem a configuração do canal
  • Controlar as configurações para a família
  • Editar canais

Visualização

  • Acessar e navegar por todos os canais de TV
  • Acessar a barra de informações do programa de TV
  • Mostrar dados do guia de programação eletrônica (EPG)
  • Suporte a várias faixas de áudio e legenda
  • Fornecer o desafio do PIN do controle da família
  • Permitir a sobreposição da interface de entrada de TV para o padrão de TV (HbbTV etc.)
  • Preencher os resultados da pesquisa para canais e programas de TV
  • Mostrar cards de vinculação de apps
  • Oferecer suporte a APIs de mudança de tempo
  • Gerenciar a funcionalidade de DVR e oferecer suporte a APIs de gravação de TV

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

Suporte a entradas de TV de terceiros

O Android TV oferece APIs para desenvolvedores de entradas de TV de terceiros, permitindo que os apps instalados forneçam canais de software na experiência de TV ao vivo. Para garantir uma implementação compatível em um dispositivo Android, o app 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 app de TV ao vivo de referência oferece uma implementação compatível. Ao substituir o app de TV do sistema, os fabricantes de dispositivos precisam garantir que os próprios apps ofereçam compatibilidade semelhante para atender às expectativas do desenvolvedor em todos os dispositivos Android TV.

O app de TV do sistema precisa exibir as entradas de terceiros junto com o serviço de TV ao vivo padrão do dispositivo. A promessa das APIs para desenvolvedores é que os usuários poderão encontrar canais (após a instalação) na experiência de TV padrão.

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

As seções abaixo mostram como o aplicativo de TV ao vivo atende aos requisitos do CDD.

Nova configuração do canal

A adição de novas entradas/canais de terceiros começa quando o usuário encontra e instala uma entrada de TV em uma app store, como o Google Play.

Algumas entradas de TV de terceiros adicionam canais automaticamente ao banco de dados do TvProvider. No entanto, a maioria vai oferecer uma atividade de configuração para que o usuário possa configurar os canais, fornecer detalhes de login e realizar outras ações. O app de TV do sistema precisa garantir que o usuário possa ativar essa atividade de configuração. É por isso que o CDD exige que as entradas de terceiros sejam ações de navegação mínimas longe do app de TV principal.

O app de referência da TV ao vivo oferece o menu "Fontes de canais" para acessar entradas.

Acessar as Configurações
Figura 8. Acesse Configurações.

Acesse a origem do canal nas configurações
Figura 9. Acesse Origens do canal nas Configurações.

Selecione a origem na lista.
Figura 10. Selecione a origem na lista.

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

Além disso, um card de notificação é mostrado na parte de cima do menu do app de TV depois que um novo TvInput é instalado 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 canal estão disponíveis.

Se o usuário realizar uma ação pela notificação, ele poderá configurar as fontes, conforme mostrado na Figura 10.

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

Personalizar a lista de canais

Os fabricantes de dispositivos podem fornecer uma interface para ocultar determinados canais e permitir que os usuários gerenciem as próprias EPGs. A TV ao vivo inclui essa 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 a certeza de que os usuários podem navegar com facilidade pelos canais durante o uso geral em todos os dispositivos Android TV compatíveis.

Os canais de entradas de terceiros precisam ser apresentados como parte do EPG da experiência padrão de TV ao vivo do dispositivo. É possível usar a separação visual ou categorias separadas para canais de terceiros (consulte a seção "App de TV" do CDD do Android). O importante é que os usuários consigam encontrar os canais instalados.

Os fabricantes precisam implementar o app 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 oferece uma implementação (consulte que fornece resultados de entradas de terceiros (obrigatório para compatibilidade com a plataforma) e entradas integradas.

Mudança de horário

Para dispositivos com o Android 6.0 e versões mais recentes, o app de TV precisa oferecer suporte às APIs de mudança de tempo do Android framework. Além disso, os fabricantes precisam implementar controles de reprodução no app para TV, o que permite aos usuários pausar, retomar, retroceder e avançar a reprodução.

Para entradas de TV com suporte a time-shifting, o app de TV precisa mostrar os controles de reprodução.

Controles de mídia
Figura 15. Controles de mídia

DVR

Para dispositivos com o Android 7.0 e versões mais recentes, o app de TV precisa oferecer suporte às APIs de gravação de TV do framework do Android para oferecer suporte, listar e reproduzir programas gravados.

Isso permite que os fabricantes de dispositivos conectem os subsistemas de DVR ao TIF e reduzam significativamente o esforço de integração necessário para ativar ou integrar a funcionalidade de DVR em uma 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 app 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 app de TV precisa processar o conflito e mostrar uma notificação ou solicitar que o usuário programe uma prioridade para essas solicitações.

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

Confira o diagrama a seguir para saber mais sobre uma possível implementação de DVR no Android TV.

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

  1. O serviço de entrada de TV informa ao app de TV quantos sintonizadores estão disponíveis para que ele possa lidar com possíveis conflitos de recursos.
  2. O app de TV recebe uma solicitação iniciada pelo usuário para gravar um programa de TV.
  3. O app de TV armazena a programação de gravação no banco de dados interno.
  4. Quando chega a hora de gravar, o app de TV transmite 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 adequados e sintoniza o canal.
  6. Em seguida, o app de TV transmite uma solicitação para começar a gravar para o TV Input Manager.
  7. O serviço de entrada de TV recebe essa solicitação e começa a gravar.
  8. O serviço de entrada de TV armazena os dados de vídeo reais no armazenamento, que pode ser externo ou na nuvem.
  9. Quando chega a hora de terminar a gravação, o app de TV transmite a solicitação de parada de gravação ao gerenciador de entrada de TV.
  10. Quando o serviço de entrada de TV recebe a solicitação, ele interrompe a gravação e adiciona os metadados associados ao provedor de TV para que o app de TV possa mostrar a gravação aos usuários quando solicitado.

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

Recursos úteis

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

Controle dos pais

O controle da família 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 da família é compartilhada entre o app de TV, o serviço do TV Input Manager, o provedor de TV e a entrada de TV.

O controle da família é obrigatório e está incluído no Verificador do CTS.

Vários países definiram sistemas de classificação que podem ser usados pelas entradas de TV pela API TVContentRating. Além disso, as entradas de TV podem registrar os próprios sistemas de classificação personalizados, conforme demonstrado pelo teste do verificador do CTS, que introduz uma classificação "falsa". Para países em que existe um sistema de classificação padrão, os fabricantes de dispositivos são incentivados a combinar o controle da família do framework de entrada de TV com 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 a necessidade de inserir um código PIN. O campo do programa COLUMN_CONTENT_RATING é destinado à exibição e não é usado para aplicar o controle da família.

Gerenciador de entrada de TV

O gerenciador de entrada de TV armazena todos os TvContentRating bloqueados e responde a isRatingBlocked() para informar se o conteúdo com a classificação indicada precisa ser bloqueado.

Entrada da TV

A entrada de TV verifica se o conteúdo atual precisa ser bloqueado chamando isRatingBlocked() no gerenciador de entrada de TV quando a classificação do conteúdo exibido mudou (na mudança de programa ou canal) ou as configurações de controle da família mudaram (em ACTION_BLOCKED_RATINGS_CHANGED e ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED). Se o conteúdo precisar ser bloqueado, a entrada de TV desativa o áudio e o vídeo e notifica o app de TV de que o conteúdo atual está bloqueado chamando notifyContentBlocked(TvContentRating). Se o conteúdo não precisa ser bloqueado, a entrada de TV ativa o áudio e o vídeo e notifica o app de TV de que o conteúdo atual é permitido chamando notifyContentAllowed().

App de TV

Para atender às APIs de controle familiar e, portanto, criar uma plataforma compatível, o app de TV do sistema precisa oferecer uma maneira de os usuários gerenciarem o controle familiar, incluindo qualquer classificação personalizada registrada por apps específicos.

O app de TV mostra uma interface 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 app de TV não armazena diretamente as configurações de controle da família. Quando o usuário muda as configurações de controle da família, cada TvContentRating bloqueado é armazenado pelo gerenciador de entrada de TV, e os canais bloqueados são armazenados pelo provedor de TV.

O app de TV precisa declarar a permissão android.permission.MODIFY_PARENTAL_CONTROLS para mudar as configurações de controle da família.

Incentivamos os fabricantes de dispositivos a:

  • Use o teste de controle dos pais do Verificador do CTS em relação ao aplicativo de TV ao vivo de referência para uma demonstração dos requisitos de compatibilidade.
  • Use o app TV ao vivo como referência para o próprio app de TV: confira em particular ContentRatingsManager e RatingSystemsFragment, além de como eles processam classificações personalizadas.

HDMI-CEC

O HDMI-CEC permite que um dispositivo controle outro, permitindo 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 à distância sobre várias entradas de TV pelo app de TV central. Por exemplo, ele pode alternar entradas, ligar ou desligar dispositivos e muito mais.

O TIF do Android 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 interagem com o HAL leve do Android TV, pulando a lógica de negócios mais complexa. Ao oferecer uma implementação padrão, o Android procura reduzir os problemas de compatibilidade reduzindo implementações fragmentadas e o suporte seletivo a recursos. O serviço de controle HDMI usa os serviços do Android, incluindo entrada e energia.

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

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

  1. O barramento CEC recebe um comando da origem ativa no momento para mudar para outra origem.
  2. O driver transmite o comando para a HAL HDMI-CEC.
  3. O HAL notifica todos os ActiveSourceChangeListeners.
  4. O serviço de controle HDMI é notificado sobre a mudança de fonte por ActiveSourceChangeListener.
  5. O serviço do TV Input Manager gera um intent para o app de TV mudar a origem.
  6. O app de TV cria uma sessão do 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 transmite essas informações para a entrada HDMI da TV.
  8. A entrada de TV HDMI solicita a definição da superfície do sideband.
  9. O serviço de gerenciamento de entrada de TV gera um comando de controle de roteamento correspondente ao serviço de controle HDMI quando a superfície é definida.

Diretrizes de integração com TV

App de transmissão

Como cada país tem requisitos específicos de transmissão (MHEG, Teletext, HbbTV e outros), os fabricantes precisam fornecer as próprias soluções para o app de transmissão, por exemplo:

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

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

Confira como o app de transmissão e o app de TV interagem:

  1. O app de TV está em foco, recebendo todas as chaves.
  2. O app da TV transmite teclas (por exemplo, o botão vermelho) para o dispositivo de entrada da TV.
  3. O dispositivo de entrada de TV é integrado internamente ao conjunto de TV legada.
  4. Ao receber um código de chave de ativação (por exemplo, o botão vermelho), o dispositivo de entrada de TV ativa os apps de transmissão.
  5. Um app de transmissão recebe o foco no app de TV e processa as ações do usuário.

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