O Android TV Input Framework (TIF) simplifica a entrega de conteúdo ao vivo para o Android TV. O TIF do Android oferece 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 metadados publicados pela entrada de TV.
O framework não busca implementar padrões de TV ou requisitos regionais, mas facilita para que os fabricantes de dispositivos atendam 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 apps de terceiros que querem criar entradas de TV personalizadas.
Componentes
A implementação do Android TV Input Framework inclui um gerenciador de entrada de TV. A 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 sintonizador IP e integrados. O app TV se comunica com 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: tecnologia que permite bloquear canais e programas
- HDMI-CEC: a tecnologia que permite o controle remoto de vários dispositivos via HDMI
- Framework Tuner: um framework para entrada de TV com sintonizador integrado
- MediaCas: uma estrutura para acesso condicional
- Gerenciador de recursos do sintonizador: 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. Confira o diagrama a seguir para uma visão detalhada da arquitetura do Android TV Input Framework.
Fluxo
Veja como a arquitetura é exercida:
- O usuário vê e interage com o app TV, um app do sistema que não pode ser substituído por um app de terceiros.
- O app de TV mostra o conteúdo de AV da entrada de TV.
- O app TV não pode se comunicar 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
signatureOrSystem
Entradas de TV e app de TV têm acesso total ao banco de dados do provedor de TV e podem receber KeyEvents. - Somente entradas de TV do sistema podem acessar o HAL de entrada de TV pelo serviço do gerenciador de entrada de TV. As entradas de TV são acessadas individualmente por 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 nas linhas de pacote correspondentes.
- As entradas de TV de terceiros podem mostrar o próprio conteúdo ou conteúdo de entradas de TV de passagem de um fabricante de dispositivos, como HDMI1. Eles não podem mostrar conteúdo de entradas de TV não pass-through, como um sintonizador integrado ou de IPTV.
- A permissão
TV_INPUT_HARDWARE
para um app de entrada de TV de hardware sinaliza o serviço do gerenciador de entrada de TV para notificar o serviço de entrada de TV na inicialização para chamar o serviço do gerenciador 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 e adicione e remova dinamicamente as entradas de TV compatíveis.
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 internamente "gênero de transmissão" para "gênero canônico". 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 a transmissão
padrão ATSC A/65 e um programa com 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
.
Confira o diagrama abaixo para uma visão detalhada do provedor de TV.
Somente apps na partição privilegiada do sistema podem ler todo o banco de dados do provedor de TV.
As entradas de TV de passagem não armazenam canais e programas.
Além dos campos padrão para canais e programas, o banco de dados do provedor de TV também oferece um campo do tipo BLOB, COLUMN_INTERNAL_PROVIDER_DATA
, em cada tabela que as entradas de TV podem usar para armazenar dados arbitrários. Esses dados BLOB podem incluir informações personalizadas, como a frequência do sintonizador associado, e podem ser fornecidos em um buffer de protocolo ou outra forma. Um campo pesquisável está
disponível para tornar determinados canais indisponíveis na pesquisa (por exemplo, para atender a
requisitos específicos de cada país para proteção de conteúdo).
Exemplos de campos de banco de dados
O provedor de TV oferece suporte a dados estruturados em tabelas de canais (android.provider.TvContract.Channels
) e programas (android.provider.TvContract.Programs
). Essas tabelas são preenchidas e acessadas por entradas de TV e apps do sistema, como o app de TV. Elas têm quatro tipos de campos:
- Exibição : os campos de exibição contêm informações que os apps podem querer mostrar ao 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 fluxo 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, comoCOLUMN_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 restringido de pesquisa, navegação ou visualização. Isso só pode ser definido 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 aparecer nos resultados da pesquisa.COLUMN_BROWSABLE
: visível apenas para aplicativos do sistema. Restringir a navegação do canal por aplicativos.COLUMN_BROWSABLE = 0
significa que o canal não deve ser incluído na lista.COLUMN_LOCKED
: visível apenas para aplicativos do sistema. Restringir a visualização do canal por contas inválidas sem inserir o código PIN.COLUMN_LOCKED = 1
significa que o canal 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 quem tem acesso à linha correspondente. Nenhum campo é acessível diretamente aos usuários. Eles só veem o que o app de TV, os apps do sistema ou as entradas de TV mostram.
- Cada linha tem
PACKAGE_NAME
, o pacote (app) proprietário dessa linha, verificado em Query, Insert e Update via TvProvider.java. Uma entrada de TV só pode acessar as informações que gravou e fica isolada das informações fornecidas por outras entradas de TV. - Permissões de LEITURA e GRAVAÇÃO via AndroidManifest.xml (requer consentimento do usuário) para determinar os canais disponíveis.
- Apenas apps
signatureOrSystem
podem adquirir a permissãoACCESS_ALL_EPG_DATA
para acessar todo o banco de dados.
Gerenciador de entrada de TV
O gerenciador de entradas de TV fornece uma API do sistema central para o framework de entrada do Android TV. Ele arbitra a interação entre apps e entradas de TV e fornece funcionalidade de controle da família. As sessões do TV Input Manager 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 verificar o status delas
- Criar sessões e gerenciar listeners
Para sessões, uma entrada de TV só pode ser sintonizada pelo app de TV em URIs adicionados ao banco de dados do provedor de TV, exceto para entradas de TV de passagem, que podem ser sintonizadas usando TvContract.buildChannelUriForPassthroughInput()
.
Uma entrada de TV também pode ter 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 que navegam e pesquisam em todos os canais e programas de TV disponíveis.
Um app pode criar e registrar um TvInputCallback
com o
android.media.tv.TvInputManager
para ser chamado de volta em uma 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
mostrando que ela está 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 e da entrada de TV permite que vários fabricantes de dispositivos criem seus próprios apps de TV, 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, já que têm um AndroidManifest.xml e são instaladas (pela Play, pré-instaladas ou transferidas por sideload). O Android TV é compatível com apps do sistema pré-instalados, apps assinados pelo fabricante do dispositivo e entradas de TV de terceiros.
Algumas entradas, como a HDMI ou a do sintonizador integrado, só podem ser fornecidas pelo fabricante, já que se comunicam diretamente com o hardware. 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 app TV.
Exemplo de entrada direta
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 canais ou programas com o provedor de TV. Para receber o URI usado
para referenciar a entrada direta, use o método utilitário android.media.tv.TvContract
buildChannelUriForPassthroughInput(String inputId)
.
O app TV se comunica com o gerenciador de entrada de TV para acessar a entrada de TV HDMI.
Exemplo de sintonizador integrado
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
Neste exemplo, a entrada de TV do STB externo é fornecida por terceiros. Como essa entrada de TV não pode acessar diretamente o feed de vídeo HDMI, ela precisa passar pelo gerenciador de entrada de TV e usar a entrada de TV HDMI fornecida pelo fabricante do dispositivo.
Pelo TV Input Manager, a entrada de TV do STB externo pode se comunicar com a entrada de TV HDMI e pedir para 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)
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 picture-in-picture (PIP). Esses toques de botão
são interpretados pelo driver de hardware fornecido pelo fabricante do dispositivo,
convertendo scancodes de hardware em keycodes do Android e transmitindo-os para o
pipeline de entrada padrão do Android
funções InputReader
e InputDispatcher
como
KeyEvents.
Esses eventos acionam outros no app de TV se ele estiver em foco.
Somente 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 consumir e deve
permitir que o app de TV processe as chaves que não precisa consumir.
O app de TV é responsável por saber qual entrada de TV do sistema está ativa, ou seja, selecionada pelo usuário, e por desambiguar os KeyEvents
recebidos e encaminhá-los para a sessão correta do gerenciador de entradas de TV, 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 encaminhados pela TIF do Android.
Ele mostra o fluxo de um app de botão vermelho, comum na Europa para permitir que os usuários acessem apps interativos nas TVs. Um app pode ser entregue por esse fluxo de transporte. Quando o botão é clicado, ele permite que os usuários interajam com esses apps de transmissão. Por exemplo, você pode usar esses apps de transmissão para acessar páginas da Web relacionadas ou resultados de esportes.
Consulte a seção App de transmissão para saber como os apps de transmissão interagem com o app TV.
Neste exemplo:
- O app de TV está em foco e recebe todas as chaves.
KeyEvents
(por exemplo, o botão vermelho) é transmitido para a entrada de TV ativa comoInputEvents.
- A entrada de TV do sistema se integra à pilha MHEG-5 e tem a permissão do sistema
RECEIVE_INPUT_EVENT
. - Ao receber o código de ativação (por exemplo, o botão vermelho), a entrada de TV ativa o app de transmissão.
- A entrada de TV consome
KeyEvents
comoInputEvents
e o app de transmissão é o foco e processaInputEvents
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 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 a implementação dele.
Observação: no Android 14 e versões mais recentes, a interface da HAL de entrada de TV é definida usando a AIDL.
App de TV
O app de TV do sistema apresenta conteúdo de TV ao vivo para o usuário. Um app de TV de referência (TV ao vivo) é fornecido 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. Para começar a usar, consulte o artigo App de TV de referência.
Os fabricantes de dispositivos podem estender os apps de TV para implementar recursos específicos do fabricante ou do país, mas isso não está no escopo do TIF ou do app de TV de referência.
No mínimo, o app de TV do sistema precisa lidar com as seguintes tarefas:
Configuração
- Detectar entradas de TV automaticamente
- Permitir que as entradas de TV iniciem a configuração do canal
- Controlar as configurações da 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 eletrônico de programação (EPG)
- Suporte a várias faixas de áudio e legendas
- 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 resultados de pesquisa para canais e programas de TV
- Mostrar cards de vinculação de apps
- Suporte a APIs de mudança de horário
- Processar a funcionalidade de DVR e oferecer suporte às 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 CTS Verifier oferece a cobertura do teste de compatibilidade.
Suporte para entradas de TV de terceiros
O Android TV oferece APIs de desenvolvedor para entradas de TV de terceiros, permitindo que apps instalados ofereçam canais de software na experiência de TV ao vivo. Para garantir uma implementação compatível do 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. Se substituírem 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 dos desenvolvedores em todos os dispositivos Android TV.
O app de TV do sistema precisa mostrar 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 (depois de instalados) na experiência padrão da TV.
É permitida a diferenciação visual entre canais integrados e de terceiros, conforme definido na seção de apps de TV do CDD do Android.
As seções a seguir mostram como o aplicativo Live TV atende aos requisitos do CDD.
Configuração de novo canal
Para adicionar novas entradas/canais de terceiros, o usuário precisa encontrar e instalar uma entrada de TV em 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 oferece uma atividade de configuração para permitir que o usuário configure os canais, forneça detalhes de login e outras ações. O app de TV do sistema precisa garantir que o usuário possa ativar essa atividade de configuração. Por isso, 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 TV ao vivo de referência oferece o menu "Fontes de canais" para acessar entradas.
Além disso, um card de notificação é mostrado na parte de cima do menu de apps da TV depois que um novo TvInput é instalado, para levar o usuário diretamente à configuração:
Se o usuário realizar uma ação na notificação, ele poderá configurar as fontes, conforme mostrado na Figura 10.
Consulte Definir seu serviço de entrada de TV para saber o que os desenvolvedores esperam 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 os próprios EPGs. A TV ao vivo inclui essa facilidade.
EPG
Os desenvolvedores de entrada de terceiros precisam ter certeza de que os usuários podem navegar facilmente até os canais deles 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 separação visual ou categorias separadas para canais de terceiros. Consulte a seção "App de TV" do CDD do Android. O mais importante é que os usuários consigam encontrar os canais instalados.
Pesquisar
Os fabricantes precisam implementar o app de TV para incluir resultados de pesquisa para solicitações de pesquisa global e garantir a melhor experiência do usuário. A TV ao vivo oferece uma implementação (consulte que fornece resultados de entradas de terceiros (necessário para compatibilidade de plataforma), bem como entradas integradas.
Mudança de horário
Em dispositivos com Android 6.0 e versões mais recentes, o app de TV precisa ser compatível com o framework do Android APIs de time shifting. Além disso, os fabricantes precisam implementar controles de reprodução no app de TV, que permitem aos usuários pausar, retomar, voltar e avançar a reprodução.
Para entradas de TV que oferecem suporte ao time-shifting, o app de TV precisa mostrar controles de reprodução.
DVR
Para dispositivos com Android 7.0 e versões mais recentes, o app de TV precisa ser compatível com o framework do Android APIs de gravação de TV para oferecer suporte, listar e reproduzir programas gravados.
Isso permite que os fabricantes de dispositivos conectem os subsistemas de DVR à TIF e reduzam drasticamente o esforço de integração necessário para ativar ou integrar a funcionalidade de DVR em um dispositivo de TV. Ele também permite que terceiros forneçam sistemas de DVR de reposição 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 programas, o app de TV precisará lidar com o conflito e mostrar uma notificação ou pedir que o usuário agende uma prioridade para esses pedidos.
Os apps de TV também podem implementar uma lógica mais sofisticada, como perguntar a um usuário se ele quer gravar todos os episódios futuros de uma série quando pede para gravar um episódio.
Confira no diagrama a seguir uma possível implementação de DVR no Android TV.
- O serviço de entrada de TV informa ao app de TV quantos sintonizadores estão disponíveis para que o app de TV possa lidar com possíveis conflitos de recursos.
- O app de TV recebe uma solicitação iniciada pelo usuário para gravar um programa de TV.
- O app de TV armazena a programação de gravação no banco de dados interno.
- Quando chega a hora de gravar, o app de TV envia uma solicitação para sintonizar o canal associado à gravação.
- O serviço de entrada de TV recebe essa solicitação, responde se há ou não recursos adequados e sintoniza o canal.
- Em seguida, o app de TV transmite uma solicitação para iniciar a gravação ao gerenciador de entrada de TV.
- O serviço de entrada de TV recebe essa solicitação e começa a gravar.
- O serviço de entrada de TV armazena os dados de vídeo reais no armazenamento, que pode ser externo ou na nuvem.
- Quando chega a hora de terminar a gravação, o app de TV transmite a solicitação de interrupção ao gerenciador de entradas de TV.
- 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 para desenvolvedores documentadas são as referências definitivas.
- O CTS Verifier usa as APIs como parte do programa de testes de compatibilidade. Executar isso na TV ao vivo pode ser uma maneira útil de ver o EPG, Pesquisa, 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 é possível ignorar 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 TV Input Manager, o provedor de TV e a entrada de TV.
O controle da família é obrigatório e coberto pelo Verificador do CTS.
Vários países definiram sistemas de classificação que as entradas de TV podem usar com a API TVContentRating. Além disso, as entradas de TV podem registrar seus próprios sistemas de classificação personalizados, como demonstrado pelo teste do CTS Verifier, que apresenta uma classificação "falsa". Nos 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
usado para bloquear
canais específicos para que não possam ser assistidos sem um código PIN. O campo "programa" COLUMN_CONTENT_RATING
é destinado à exibição e não é usado para aplicar o controle da família.
Gerenciador de entrada de TV
O TV Input Manager armazena todos os TvContentRating
bloqueados e
responde a isRatingBlocked()
para informar se o conteúdo com a classificação
especificada deve ser bloqueado.
Entrada da TV
A entrada de TV verifica se o conteúdo atual deve ser bloqueado chamando
isRatingBlocked()
no gerenciador de entrada de TV quando a classificação do
conteúdo exibido muda
(na mudança de programa ou canal) ou quando as configurações de controle da família são alteradas (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 puder
ser bloqueado, a entrada de TV vai ativar o áudio e o vídeo e notificar o app de TV
que o conteúdo atual é permitido chamando notifyContentAllowed()
.
App de TV
Para respeitar as APIs de controle parental e, portanto, criar uma plataforma compatível, o app de TV do sistema precisa oferecer uma maneira para os usuários gerenciarem o controle parental, incluindo classificações personalizadas registradas por apps específicos.
O app de TV mostra uma interface de PIN quando é notificado por uma entrada de TV de que o conteúdo atual está bloqueado ou quando o usuário tenta acessar um canal bloqueado.
O app TV não armazena diretamente as configurações de controle da família. Quando o
usuário muda as configurações do controle da família, todos os
TvContentRating
bloqueados são armazenados 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.
Recomendamos que os fabricantes de dispositivos:
- Faça o teste de controle da família do CTS Verifier no 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. Em particular, consulte as fontes ContentRatingsManager e RatingSystemsFragment e como elas processam classificações personalizadas.
HDMI-CEC
O HDMI-CEC permite que um dispositivo controle outro, possibilitando 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 remoto de várias entradas de TV pelo app central da TV. Por exemplo, ele pode alternar entradas, ligar ou desligar dispositivos e muito mais.
A 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 interajam com a HAL do Android TV leve, ignorando uma lógica de negócios mais complexa. Ao fornecer uma implementação padrão, o Android busca reduzir problemas de compatibilidade reduzindo implementações fragmentadas e suporte seletivo a recursos. O serviço de controle HDMI usa os serviços Android atuais, incluindo entrada e energia.
Isso significa que as implementações atuais do HDMI-CEC precisam ser reprojetadas para interoperar com a TIF do Android. Recomendamos que a plataforma de hardware tenha um microprocessador para receber comandos de ativação e outros comandos CEC.
- O barramento CEC recebe um comando da fonte ativa no momento para mudar para outra fonte.
- O driver transmite o comando para a HAL do HDMI-CEC.
- A HAL notifica todos os
ActiveSourceChangeListeners
. - O serviço de controle HDMI é notificado da mudança de fonte via
ActiveSourceChangeListener
. - O serviço TV Input Manager gera uma intent para o app de TV mudar a fonte.
- Em seguida, o app de TV cria uma sessão do TV Input Manager para a entrada de TV que está sendo
trocada e chama
setMain
nessa sessão. - A sessão do gerenciador de entrada de TV transmite essas informações para a entrada de TV HDMI.
- A entrada de TV HDMI solicita a definição da superfície de banda lateral.
- O serviço TV Input Manager gera um comando de controle de roteamento correspondente de volta 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, teletexto, HbbTV e muito mais), espera-se que os fabricantes forneçam 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 Android para stacks de TV regionais, transmitam a superfície para stacks de software de TV ou transmitam o código de tecla necessário para interagir com stacks legadas.
Confira como o app de transmissão e o app TV interagem:
- O app de TV está em foco, recebendo todas as chaves.
- O app de TV transmite chaves (por exemplo, botão vermelho) para o dispositivo de entrada de TV.
- O dispositivo de entrada de TV se integra internamente com a pilha de TV legada.
- Ao receber um código de ativação (por exemplo, o botão vermelho), o dispositivo de entrada de TV ativa apps de transmissão.
- Um app de transmissão assume o foco no app de TV e processa as ações do usuário.
Para pesquisa/recomendação por voz, o app de transmissão pode oferecer suporte à pesquisa no app para pesquisa por voz.