Considerações a respeito do design do aplicativo para AIR for TV

Considerações a respeito de vídeo

Diretrizes de codificação de vídeo

Ao transmitir vídeo para um aparelho de TV, a Adobe recomenda respeitar as seguintes diretrizes:

Codec de vídeo:

H.264, perfil Principal ou Alto, codificação progressiva

Resolução:

720i, 720p, 1080i ou 1080p

Taxa de quadros:

24 quadros por segundo ou 30 quadros por segundo

Codec de áudio:

O AAC-LC ou o AC-3, o 44.1 kHz, estéreo ou estes codecs de áudio multicanal: E-AC-3, DTS, DTS Express, DTS-HD High Resolution Audio ou DTS-HD Master Audio

Taxa de bit composta:

até 8M bps, dependendo da largura de banda disponível

Taxa de bit de áudio:

até 192 Kbps

Proporção de pixels:

1 × 1

A Adobe recomenda usar o codec H.264 para vídeo entregue a dispositivos AIR for TV.

Nota: O AIR for TV também suporta vídeo codificado com Sorenson Spark ou codecs On2 VP6. No entanto, o hardware não decodifica nem apresenta esses codecs. Em vez disso, o runtime decodifica esses codecs usando o software; portanto, o vídeo é exibido com uma taxa de quadros muito menor. Por isso, use o H.264 se for possível.

A classe StageVideo

O AIR for TV suporta decodificação e apresentação de hardware de vídeo H.264 codificado. Use a classe StageVideo para habilitar esse recurso.

Consulte Uso da classe StageVideo para apresentação acelerada por hardware no Guia do desenvolvedor do ActionScript 3.0 para obter detalhes sobre:

  • a API da classe StageVideo e das classes relacionadas.

  • limitações ao uso da classe StageVideo.

Para um melhor suporte aos aplicativos AIR existentes que usam o objeto Video para vídeo H.264 codificado, o AIR for TV usa um objeto StageVideo internamente . Fazer isso significa que a reprodução de vídeo tira proveito da decodificação e da apresentação do hardware. No entanto, o objeto Video está sujeito às mesmas restrições de um objeto StageVideo. Por exemplo, se o aplicativo tentar girar o vídeo, nenhum giro ocorrerá, uma vez que o hardware, não o runtime, estará apresentando o vídeo.

Contudo, ao escrever novos aplicativos, use o objeto StageVideo para vídeo H.264 codificado.

Para obter um exemplo do uso da classe StageVideo, consulte Fornecendo vídeo e conteúdo para a Plataforma Flash em TV .

Diretrizes de fornecimento de vídeo

Em um dispositivo AIR for TV, a largura de banda disponível da rede pode variar durante a reprodução de vídeo. Essas variações podem ocorrer, por exemplo, quando outro usuário começa a usar a mesma conexão com a Internet.

Portanto, a Adobe recomenda que o seu sistema de fornecimento de vídeo use capacidades de taxa de bits adaptáveis. Por exemplo, no lado do servidor, o Flash Media Server suporta capacidades de taxa de bits adaptáveis. No lado do cliente, você pode usar a estrutura de mídia de fonte aberta Open Source Media Framework (OSMF).

Os seguintes protocolos estão disponíveis para o fornecimento de conteúdo de vídeo em uma rede para um aplicativo do AIR for TV:
  • Transmissão Dinâmica em HTTP e HTTPS (formato F4F)

  • Transmissão em RTMP, RTMPE, RTMFP, RTMPT e RTMPTE

  • Download Progressivo em HTTP e HTTPS

Para obter mais informações, consulte o seguinte:

Considerações a respeito de áudio

O ActionScript para reprodução de som não é diferente nos aplicativos AIR for TV em comparação com outros aplicativos AIR. Para mais informações, consulte Trabalho com som no Guia do desenvolvedor do ActionScript 3.0 .

Quanto ao suporte de áudio multicanal no AIR for TV, considere o seguinte:

  • O AIR for TV suporta áudio multicanal para vídeos que são continuamente baixados de um servidor HTTP. O suporte para áudio multicanal em vídeos transmitidos pelo Adobe Flash Media Server ainda não está disponível.

  • Embora o AIR for TV seja compatível com muitos codecs de áudio, nem todos os dispositivos para o AIR for TV são compatíveis com o conjunto inteiro. Use o método flash.system.Capabilities hasMultiChannelAudio() para verificar se o dispositivo do AIR for TV é compatível com o codec de áudio específico de multicanais como o AC-3.

    Por exemplo, considere um aplicativo que progressivamente baixa um arquivo de vídeo de um servidor. O servidor possui diferentes arquivos de vídeo H.264 que são compatíveis com diferentes codecs de áudio de multi-canais. O aplicativo poderá utilizar hasMultiChannelAudio() para determinar qual arquivo de vídeo deve ser solicitado do servidor. Como alternativa, o aplicativo poderá enviar ao servidor uma string contida em Capabilities.serverString . A string indica quais codecs de áudio multicanais estão disponíveis, permitindo ao servidor selecionar o arquivo de vídeo correto.

  • Ao usar um dos codecs de áudio DTS, existem situações em que hasMultiChannelAudio() retorna true , mas o áudio DTS não é reproduzido.

    Por exemplo, considere um player de Blu-raio com uma saída S/PDIF, conectada a um velho ampliador. O velho ampliador não apoia DTS, mas S/PDIF não tem nenhum protocolo para notificar o player de Blu-raio. Se o player de Blu-raio enviar a corrente DTS ao velho ampliador, o usuário não ouve nada. Por isso, como uma prática recomendada usando DTS, forneça uma interface do usuário para que o usuário possa indicar se nenhum som está jogando. Então, o seu aplicativo pode reverter a um codec diferente.

A seguinte tabela resume quando usar diferentes codecs de áudio nos aplicativos do AIR for TV. A tabela também indica quando os dispositivos do AIR for TV utilizam aceleradores de hardware para decodificar um codec de áudio. A decodificação de hardware melhora o desempenho e evita a sobrecarga da CPU.

Codec de áudio

Disponibilidade para dispositivo do AIR for TV

Decodificação de hardware

Quando usar este codec de áudio

Mais informações

AAC

Sempre

Sempre

Em vídeos codificados com H.264.

Em transmissão de áudio tal como um serviço de transmissão de música na Internet.

Ao usar um fluxo contínuo AAC exclusivamente de áudio, encapsule o fluxo contínuo de áudio num recipiente MP4.

mp3

Sempre

Não

Para sons contidos nos arquivos SWF do aplicativo.

Em vídeos codificados com Sorenson Spark ou On2 VP6.

Um vídeo H.264 que utilize mp3 para áudio não é reproduzido em dispositivos do AIR for TV.

AC-3 (Dolby Digital)

E-AC-3 (Dolby Digital Avançado)

DTS Digital Surround

DTS Express

DTS-HD High Resolution Audio

DTS-HD Master Audio

Verificar

Sim

Em vídeos codificados com H.264.

Geralmente, o AIR for TV envia um fluxo de áudio multicanal para um receptor externo de áudio/vídeo que decodifica e reproduz o áudio.

Speex

Sempre

Não

Recebendo uma transmissão de voz ao vivo.

Um vídeo H.264 que utilize Speex para o áudio não é reproduzido em dispositivos do AIR for TV. Use Speex somente com vídeos codificados com Sorenson Spark ou On2 VP6.

NellyMoser

Sempre

Não

Recebendo uma transmissão de voz ao vivo.

Um vídeo H.264 que utilize NellyMoser para o áudio não é reproduzido em dispositivos do AIR for TV. Use NellyMoser somente com vídeos codificados com Sorenson Spark ou On2 VP6.

Nota: Alguns arquivos de vídeo contêm dois fluxos de áudio. Por exemplo, um arquivo de vídeo poderá conter um fluxo AAC e um fluxo AC3. O AIR for TV não é compatível com tais arquivos de vídeo, e o uso desse arquivo poderá causar a ausência de som do vídeo.

Aceleração por hardware de gráfico

Usando aceleração gráfica de hardware

Os dispositivos AIR for TV fornecem aceleração de hardware para operações com imagens 2D. Os aceleradores de imagem de hardware do dispositivo liberam a CPU para realizar as seguintes operações:

  • Renderização de bitmaps

  • Escala de bitmap

  • Mesclagem de bitmap

  • Preenchimento sólido do retângulo

Esta aceleração gráfica de hardware significa que muitas operações com imagens no aplicativo do AIR for TV podem estar executando com alto desempenho. Algumas dessas operações incluem:

  • Transições de deslocamento

  • Transições de escala

  • Intensificação e esmaecimento gradual da imagem (fade in e fade out)

  • Imagens de composição múltipla com alfa

Para obter os benefícios de desempenho da aceleração gráfica de hardware para estes tipos de operações, use uma das seguintes técnicas:

  • Defina a propriedade cacheAsBitmap como true nos objetos MovieClip e em outros objetos de exibição que possuem conteúdo na maioria das vezes inalterável. Em seguida, execute as transições laterais, as transições de intensidade e as mesclagens de alfa nesses objetos.

  • Use a propriedade cacheAsBitmapMatrix nos objetos de exibição que você deseja escalar ou converter (aplicar reposicionamento de x e y).

    Usando operações da classe Matrix para escala e conversão, os aceleradores de hardware do dispositivo executam as operações. Alternativamente, considere o cenário no qual você altera as dimensões de um objeto de exibição que tem sua propriedade cacheAsBitmap definida como true . Quando as dimensões são alteradas, o software do runtime redesenha o bitmap. O redesenho com o software produz um desempenho pior do que a escala com aceleração de hardware usando uma operação Matrix.

    Por exemplo, considere um aplicativo que exibe uma imagem que se expande quando um usuário a seleciona. Use os tempos múltiplos de operação de escala Matrix para criar a ilusão de uma imagem em expansão. Contudo, dependendo da imagem original e da imagem final, a qualidade da imagem final poderá ser inaceitável. Portanto, redefina as dimensões do objeto de exibição depois que as operações de expansão forem concluídas. Uma vez que cacheAsBitmap seja true , o software do runtime redesenhará o objeto de exibição, mas somente uma vez, e proporcionará uma imagem de alta qualidade.

    Nota: Geralmente, os dispositivos AIR for TV não suportam rotação e inclinação de hardware acelerado. Portanto, se você especificar a rotação e a inclinação na classe Matrix, o AIR for TV executará todas as operações de Matrix no software. Essas operações de software podem ter um impacto prejudicial ao desempenho.
  • Use a classe BitmapData para criar o comportamento de armazenamento de bitmap personalizado em cache.

Para obter mais informações sobre cache de bitmap, consulte o seguinte:

Gerenciando a memória gráfica

Para executar operações de imagem acelerada, os aceleradores de hardware usam memória gráfica especial. Se o seu aplicativo usar toda a memória gráfica, executará lentamente porque o AIR for TV reverterá para o uso do software das operações de imagem.

Para gerenciar o uso de memória gráfico pelo seu aplicativo:

  • Quando você estiver usando uma imagem ou outro dado de bitmap, libere sua memória gráfica associada. Para tanto, chame o método dispose() da propriedade bitmapData do objeto Bitmap. Por exemplo:

    myBitmap.bitmapData.dispose();
    Nota: A liberação da referência para o objeto BitmapData não libera a memória gráfica imediatamente. O coletor de lixo do runtime eventualmente libera a memória gráfica, mas a chamada de dispose() oferece maior controle para o seu aplicativo.
  • Use o PerfMaster Deluxe, um aplicativo do AIR fornecido pela Adobe, para entender melhor a aceleração gráfica de hardware no seu dispositivo de destino. Este aplicativo mostra os quadros por segundo para executar várias operações. Use o PerfMaster Deluxe para comparar diferentes implementações da mesma operação. Por exemplo, compare a movimentação de uma imagem em bitmap com a movimentação de uma imagem em vetor. O PerfMaster Deluxe está disponível em Flash Platform para TV .

Gerenciando a lista de exibição

Para tornar um objeto de exibição invisível, defina a propriedade visible do objeto como false . Em seguida, o objeto continuará na lista de exibição, mas o AIR for TV não irá renderizá-lo nem exibi-lo. Essa técnica é útil para objetos que frequentemente entram e saem de visualização, porque demanda apenas um pouco mais de processamento. No entanto, a definição da propriedade visible em false não libera nenhum dos recursos do objeto. Portanto, ao concluir a exibição de um objeto ou, ao menos, concluí-la por algum tempo, remova o objeto da lista de exibição. Do mesmo modo, defina todas as referências ao objeto como null . Essas ações permitem que o coletor de lixo libere os recursos do objeto.

uso de imagem PNG e JPEG

PNG e JPEG são dois formatos de imagem comuns em aplicativos. Quanto a esses formatos de imagem no AIR for TV, considere o seguinte:

  • O AIR for TV geralmente usa aceleração de hardware para decodificar arquivos JPEG.

  • O AIR for TV geralmente usa software para decodificar arquivos PNG. A decodificação de arquivos PNG no software é rápida.

  • PNG é o único formato de plataforma cruzada que suporta transparência (um canal alfa).

Portanto, use esses formatos de imagem da seguinte maneira em seus aplicativos:

  • Use arquivos JPEG para as fotografias tirarem proveito da decodificação por aceleração de hardware.

  • Use os arquivos de imagem PNG para os elementos de interface do usuário Os elementos de interface do usuário pode ter uma configuração alfa, e a decodificação com software proporciona um desempenho suficientemente rápido para os elementos de interface do usuário.

O palco nos aplicativos AIR for TV

Ao criar um aplicativo do AIR for TV, considere o seguinte ao trabalhar com a classe Stage:

  • Resolução de tela

  • A área de visualização segura

  • O modo de escala do palco

  • O alinhamento do palco

  • O estado de exibição do palco

  • Desenhando para vários tamanhos de tela

  • A configuração de qualidade do palco

Resolução de tela

Atualmente, os aparelhos de TV costumam ter uma das seguintes resoluções de tela: 540p, 720p e 1080p. Essas resoluções de tela resultam nos seguintes valores na classe ActionScript Capabilities:

Resolução de tela

Capabilities.screenResolutionX

Capabilities.screenResolutionY

540p

960

540

720p

1280

720

1080p

1920

1080

Para escrever um aplicativo do AIR for TV de tela inteira para um dispositivo específico, defina os códigos Stage.stageWidth and Stage.stageHeight para a resolução de tela do dispositivo. Contudo, para escrever um aplicativo de tela inteira que execute em vários dispositivos, use as propriedades Capabilities.screenResolutionX e Capabilities.screenResolutionY para definir as dimensões do palco.

Por exemplo:

stage.stageWidth = Capabilities.screenResolutionX; 
stage.stageHeight = Capabilities.screenResolutionY;

A área de visualização segura

A área de visualização segura em um televisor é uma área da tela que é afastada das bordas da tela. Essa área é inserida suficientemente longe para que o usuário possa ver a área inteira, sem que o bisel do televisor oculte qualquer parte da área. Uma vez que o bisel, que é a moldura física em torno da tela, varia de acordo com o fabricante, o afastamento necessário também varia. A área de visualização segura tenta garantir que a área visível da tela. A área de visualização segura também é conhecida como área de título segura .

Overscan é a área da tela que não é visível porque está atrás do bisel.

A Adobe recomenda um afastamento de 7,5% em cada borda da tela. Por exemplo:

Exibir gráfico inteiro
A área de visualização segura para uma resolução de tela de 1920 x 1080

Considere sempre a área de visualização segura ao projetar um aplicativo do AIR for TV de tela inteira:

  • Use a tela inteira para os planos de fundo, tais como imagens de fundo ou cores de fundo.

  • Use a área de visualização segura somente para elementos de aplicativo críticos tais como texto, imagens, vídeo e itens de interface do usuário como botões.

A tabela a seguir mostra as dimensões da área de visualização segura de cada resolução de tela típica, usando um afastamento de 7,5%.

Resolução de tela

Largura e altura de uma área de visualização segura

Largura do afastamento à direita e à esquerda

Altura do afastamento superior e inferior

960x 540

816 x 460

72

40

1280x 720

1088x 612

96

54

1920 x 1080

1632 x 918

144

81

Contudo, uma prática melhor é sempre calcular dinamicamente a área de visualização segura. Por exemplo:

var horizontalInset, verticalInset, safeAreaWidth, safeAreaHeight:int; 
 
horizontalInset = .075 * Capabilities.screenResolutionX; 
verticalInset = .075 * Capabilities.screenResolutionY; 
safeAreaWidth = Capabilities.screenResolutionX - (2 * horizontalInset); 
safeAreaHeight = Capabilities.screenResolutionY - (2 * verticalInset);

O modo de escala do palco

Defina Stage.scaleMode como StageScaleMode.NO_SCALE e fique na escuta de eventos de redimensionamento de palco.

stage.scaleMode = StageScaleMode.NO_SCALE; 
stage.addEventListener(Event.RESIZE, layoutHandler);

Essa configuração torna as coordenadas do palco iguais às coordenadas do pixel. Junto com o estado de exibição FULL_SCREEN_INTERACTIVE e o alinhamento de palco TOP_LEFT , essa configuração permite que você use eficientemente a área de visualização segura.

Especificamente, nos aplicativos de tela inteira esse modo de escala significa que as propriedades stageWidth e stageHeight da classe Stage correspondem às propriedades screenResolutionX e screenResolutionY da classe Capabilities.

Além disso, quando a janela do aplicativo muda de tamanho, os conteúdos do palco mantêm seu tamanho definido. O runtime não executa automaticamente nenhum layout ou escala. Do mesmo modo, o runtime despacha o evento resize da classe Stage quando a janela muda de tamanho. Portanto, você tem controle completo sobre como ajustar os conteúdos do aplicativo quando o aplicativo inicial e quando a janela do aplicativo muda de tamanho.

Nota: O comportamento NO_SCALE é igual ao de qualquer aplicativo do AIR. Nos aplicativos AIR for TV, no entanto, essa configuração é crítica para usar a área de visualização segura.

O alinhamento do palco

Defina Stage.align como StageAlign.TOP_LEFT :

stage.align = StageAlign.TOP_LEFT; 

Esse alinhamento coloca a coordenada 0,0 no canto superior esquerdo da tela, o que é conveniente para a colocação de conteúdo usando ActionScript.

Junto com o modo de escala NO_SCALE e com o estado de exibição FULL_SCREEN_INTERACTIVE , essa configuração permite que você use eficientemente a área de visualização segura.

O estado de exibição do palco

Defina Stage.displayState num aplicativo do AIR for TV de tela inteira como StageDisplayState.FULL_SCREEN_INTERACTIVE :

stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; 

Este valor define o aplicativo do AIR para expandir o palco sobre a tela inteira com a entrada de teclado ativada.

A Adobe recomenda o uso da configuração FULL_SCREEN_INTERACTIVE . Junto com o modo de escala NO_SCALE e com o estado de alinhamento TOP_LEFT , essa configuração permite que você use eficientemente a área de visualização segura.

Portanto, nos aplicativos de tela inteira, em um manipulador do evento ADDED_TO_STAGE na classe document principal, faça o seguinte:

private function onStage(evt:Event):void 
{ 
    stage.scaleMode = StageScaleMode.NO_SCALE; 
    stage.align = StageAlign.TOP_LEFT; 
    stage.addEventListener(Event.RESIZE, onResize); 
    stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; 
}

Em seguida, no manipulador do evento RESIZE :

  • Compare os tamanhos da resolução da tela com a largura e a altura do palco. Se forem iguais, o evento RESIZE ocorreu, porque o estado de exibição do palco mudou para FULL_SCREEN_INTERACTIVE .

  • Calcule e salve as dimensões da área de visualização segura e dos afastamentos correspondentes.

private function onResize(evt:Event):void 
{ 
    if ((Capabilities.screenResolutionX == stage.stageWidth) && 
        (Capabilities.screenResolutionY == stage.stageHeight)) 
    { 
         
        // Calculate and save safe viewing area dimensions. 
    } 
}

Quando as dimensões do palco forem iguais a Capabilities.screenResolutionX e screenResolutionY , o AIR for TV fará com que o hardware libere a melhor fidelidade possível para os vídeos e imagens.

Nota: A fidelidade com a qual as imagens e o vídeo são exibidos numa tela de TV pode diferir dos valores Capabilities.screenResolutionX e screenResolutionY , que dependem do dispositivo que está executando o AIR for TV. Por exemplo, uma caixa set-top que executa o AIR for TV pode ter uma resolução de tela de 1280 x 720, e a TC conectada pode ter uma resolução de tela de 1920 x 1080. Contudo, o AIR for TV faz com que o hardware libere a melhor fidelidade possível. Portanto, nesse exemplo, o hardware exibe um vídeo de 1080p usando uma resolução de tela de 1920 x 1080.

Desenhando para vários tamanhos de tela

Você pode desenvolver o mesmo aplicativo do AIR for TV de tela inteira para trabalhar e bem e ter uma boa aparência em vários dispositivos AIR for TV. Faça o seguinte:

  1. Defina as propriedades de palco scaleMode , align e displayState com os valores recomendados: StageScaleMode.NO_SCALE , StageAlign.TOP_LEFT e StageDisplayState.FULL_SCREEN_INTERACTIVE , respectivamente.

  2. Configure a área de visualização segura com base em Capabilities.screenResolutionX e Capabilities.screenResolutionY .

  3. Ajuste o tamanho e o layout do conteúdo de acordo com a largura e a altura da área de visualização segura.

    Embora os objetos do conteúdo sejam grandes, especialmente quando comparados com aplicativos de dispositivos móveis, os conceitos tais como layout dinâmico, posicionamento relativo e conteúdo adaptável são iguais. Para mais informações sobre o ActionScript em apoio a esses contextos, consulte Criação de conteúdo do Flash móvel para vários tamanhos de tela .

A qualidade do palco

A propriedade Stage.quality do aplicativo do AIR for TV é sempre StageQuality.High . Ela não pode ser alterada.

Essa propriedade especifica a qualidade de renderização de todos os objetos Stage.

Tratamento de entrada do controle remoto

Os usuários geralmente interagem com o seu aplicativo do AIR for TV usando um controle remoto. No entanto, manipule a entrada de tecla da mesma forma que você manipula a entrada de tecla de um teclado num aplicativo para computador pessoal. Especificamente, manipulou o evento KeyboardEvent.KEY_DOWN . Para mais informações, consulte Captura da entrada do teclado no Guia do desenvolvedor do ActionScript 3.0 .

As teclas do controle remoto mapeiam constantes do ActionScript. Por exemplo, as teclas do teclado direcional de um controle remoto mapeiam da seguinte maneira:

Tecla de teclado direcional do controle remoto

Constante do ActionScript 3.0

Up

Keyboard.UP

Para baixo

Keyboard.DOWN

À Esquerda

Keyboard.LEFT

À Direita

Keyboard.RIGHT

OK ou Selecionar

Keyboard.ENTER

O AIR 2.5 adicionou muitas outras constantes de Teclado para suportar entrada de controle remoto. Para mais informações, consulte Classe keyboard no livro Referência do ActionScript® 3.0 para Adobe® Flash® Platform .

Para garantir que seu aplicativo funcione no máximo possível de dispositivos, a Adobe recomenda o seguinte:

  • Use somente teclas de teclado direcional, se possível.

    Diferentes dispositivos de controle remoto possuem diferentes conjuntos de teclas. No entanto, eles geralmente possuem sempre teclas de teclado direcional.

    Por exemplo, um controle remoto de um reprodutor Blu-ray geralmente não têm as teclas “canal acima” e “canal abaixo”. Mesmo as teclas para reproduzir, pausar ou parar não existem em todos os controles remotos.

  • Use as teclas Menu e Info se o aplicativo precisar de algo mais do que as teclas de teclado direcional.

    As teclas Menu e Info são as próximas teclas mais comuns nos controles remotos.

  • Considere o uso frequente de controles remotos universais.

    Mesmo que você esteja criando um aplicativo para um dispositivo específico, entenda que muitos usuários não usam um controle remoto que vem com o dispositivo. Em vez disso, eles usam um controle remoto universal. Do mesmo modo, os usuários nem sempre programam seus controle remotos universais para que correspondam a todas as teclas do controle remoto do dispositivo. Portanto, é recomendável usar somente as teclas mais comuns.

  • Certifique-se de que o usuário sempre escape de uma situação usando uma das teclas do teclado direcional.

    Ás vezes o seu aplicativo tem um bom motivo para usar uma tecla que não seja das mais comuns nos controles remotos. Proporcionar uma rota de escape com teclas de teclado direcional faz o seu aplicativo ter um comportamento agradável em todos os dispositivos.

  • Não exija entrada para ponteiro exceto se você conhecer o destino para o qual o dispositivo do AIR for TV tenha uma capacidade de entrada para ponteiro.

    Embora muitos aplicativos de desktop prevejam entrada para mouse, a maioria dos televisores não suporta entrada para mouse. Portanto, se você estiver convertendo aplicativos de desktop para serem executados em televisores, certifique-se de alterar o aplicativo para não prever entrada para mouse. Essas modificações incluem mudanças na manipulação de eventos e alterações nas instruções ao usuário. Por exemplo, quando a tela de inicialização de um aplicativo é exibida, não exiba um texto que diga “Clique para iniciar”.

Gerenciamento do foco

Quando um elemento de interface do usuário mantém o foco em um aplicativo de computador pessoal, é objetivo do usuário introduzir eventos tais como eventos de teclado e de mouse. Além disso, um aplicativo destaca o elemento de interface do usuário com o foco. O gerenciamento do foco em um aplicativo do AIR for TV é diferente do gerenciamento do foco em um aplicativo de computador pessoal, porque:

  • Os aplicativos de computador pessoal frequentemente usam a tecla tab para mudar o foco para o próximo elemento da interface do usuário. O uso da tecla tab não se aplica aos aplicativos AIR for TV. Os dispositivos de controle remoto geralmente possuem uma tecla tab. Portanto, o gerenciamento do foco com a propriedade tabEnabled de um DisplayObject como o de um computador pessoal não é aplicável.

  • Os aplicativos de computador pessoal frequentemente esperam que o usuário use o mouse para focalizar um elemento da interface do usuário.

Portanto, no seu aplicativo, faça o seguinte:

  • Adicione ao Palco um evento do escutador que escute eventos do teclado tais como KeyboardEvent.KEY_DOWN .

  • Providencie uma lógica de aplicação para determinar qual elemento da interface do usuário será destacado para o usuário final. Certifique-se de destacar um elemento da interface do usuário quando o aplicativo iniciar.

  • Com base em sua lógica de aplicação, despache o evento Keyboard que o Palco recebeu para o objeto apropriado do elemento da interface do usuário.

    Você também pode usar Stage.focus ou Stage.assignFocus() para dirigir o foco para um elemento da interface do usuário. Também é possível adicionar um escutador de eventos ao DisplayObject de forma que ele receba eventos do teclado.

Design de interface de usuário

Faça a interface do usuário de um aplicativo do AIR for TV funcionar bem em televisores incorporando essas recomendações sobre:

  • a responsividade do aplicativo

  • a usabilidade do aplicativo

  • a personalidade e as expectativas do usuário

Responsividade

Use as seguintes dicas para tornar um aplicativo do AIR for TV o mais responsivo possível.

  • Faça com que o arquivo SWF inicial do aplicativo seja o menor possível.

    No arquivo SWF inicial, carregue apenas os recursos necessários para iniciar o aplicativo. Por exemplo, carregue somente a imagem da tela de inicialização do aplicativo.

    Embora essas recomendações sejam válidas para os aplicativos AIR para computador pessoal, são ainda mais importantes para os dispositivos AIR for TV. Por exemplo, os dispositivos AIR for TV não têm potência de processamento igual à dos computadores pessoais. Do mesmo modo, eles armazenam o aplicativo na memória flash, cujo acesso não é tão rápido como nos discos rígidos dos computadores pessoais.

  • Certifique-se de que o aplicativo execute a uma taxa de quadros de ao menos 20 quadros por segundo.

    Projete seus gráficos para atingir essa meta. A complexidade de suas operações gráficas pode afetar a taxa de quadros por segundo. Para obter dicas sobre como melhorar o desempenho de renderização, consulte Otimizando o desempenho para a plataforma Adobe Flash .

    Nota: O hardware gráfico nos dispositivos AIR for TV geralmente atualizam a tela à taxa de 60 Hz ou 120 Hz (60 ou 120 vezes por segundo). O hardware varre o palco em busca de atualizações a, por exemplo, 30 quadros por segundo ou 60 quadros por segundo para exibição em tela de 60 Hz ou 120 Hz. Contudo, se o usuário experimentará essas altas taxas de quadro dependerá da complexidade das operações gráficas do aplicativo.
  • Atualiza a tela dentro de 100 - 200 milésimos de segundo a partir da entrada do usuário.

    Os usuários ficam impacientes quando as atualizações demoram demais, o que geralmente resulta em vários toques nas teclas.

Usabilidade

Os usuários dos aplicativos AIR for TV estão em um ambiente de “sala de estar”. Eles estão sentados na sala vendo TV a cerca de 3 a 5 metros de distância. A sala às vezes é escura. Eles geralmente usam um aparelho de controle remoto para seus comandos. Mais de uma pessoa pode usar o aplicativo; às vezes usam juntos e, às vezes, em sequência.

Portanto, ao projetar a interface do usuário para melhor usabilidade num televisor, considere o seguinte:

  • Faça com que os elementos da interface do usuário sejam grandes.

    Ao conceber texto, botões ou qualquer outro elemento de interface, considere que o usuário está sentado em uma sala. Faça tudo fácil de ver e ouvir, por exemplo, a 5 metros de distância. Não caia na tentação de abarrotar a tela só porque ela é grande.

  • Use um bom contraste para tornar o conteúdo fácil de ver e ler de qualquer parte da sala.

  • Faça com que fique óbvio qual elemento da interface do usuário está em foco, tornando-o brilhante.

  • Use movimento apenas quando necessário. Por exemplo, passar de uma tela para outra para obter continuidade pode funcionar bem. Contudo, o movimento pode causar distração se não ajuda o usuário a navegar ou se não é intrínseco ao aplicativo.

  • Forneça sempre um meio óbvio para o usuário retornar na interface.

Para mais informações sobre o uso do controle remoto, consulte Tratamento de entrada do controle remoto .

Personalidade e expectativas do usuário

Considere que os usuários dos aplicativos AIR for TV estão geralmente procurando entretenimento de qualidade na TV em um ambiente divertido e descontraído. Eles não são necessariamente especialistas em computadores ou em tecnologia.

Portanto, projete os seus aplicativos AIR for TV com as seguintes características:

  • Não use termos técnicos.

  • Evite diálogos modais.

  • Use instruções informais e fáceis, apropriadas a um ambiente de sala de estar, não a um ambiente de trabalho ou técnico.

  • Use imagens que tenham a alta qualidade de produção que os telespectadores esperam.

  • Crie uma interface de usuário que trabalhe de maneira fácil com um dispositivo de controle remoto. Não use interface de usuário ou elementos de design que se adaptem melhor a um aplicativo de desktop ou móvel. Por exemplo, as interfaces de usuário em dispositivos de desktop e móveis geralmente envolvem apontar ou clicar botões com um mouse ou com o dedo.

Fontes e texto

Você pode usar fontes do dispositivo ou fontes incorporadas no seu aplicativo AIT para TV.

Fontes de dispositivo são as fontes que são instaladas em um dispositivo. Todos os dispositivos AIR for TV têm as seguintes fontes de dispositivo:

Nome da fonte

Descrição

_sans

A fonte de dispositivo _sans é uma fonte sans-serif. A fonte de dispositivo _sans . instalada nos dispositivos AIR for TV é a Myriad Pro. Normalmente, uma fonte sem serifa terá uma melhor aparência na TV do que fontes com serifa, devido à distância de visualização.

_serif

A fonte de dispositivo _serif é uma fonte serif. A fonte de dispositivo serif instaladas em todos os dispositivos AIR for TV é a Minion Pro.

_typewriter

A fonte de dispositivo _typewriter é uma fonte monospace. A fonte de dispositivo _typewriter instalada em todos os dispositivos AIR for TV é a Courier Std.

Todos os dispositivos AIR for TV têm as seguintes fontes de dispositivo asiáticas:

Nome da fonte

Idioma

Categoria de fonte

código do local

RyoGothicPlusN-Regular

Japonês

sans

ja

RyoTextPlusN-Regular

Japonês

serif

ja

AdobeGothicStd-Light

Coreano

sans

ko

AdobeHeitiStd-Regular

Chinês Simplificado

sans

zh_CN

AdobeSongStd-Light

Chinês Simplificado

serif

zh_CN

AdobeMingStd-Light

Chinês Tradicional

serif

zh_TW e zh_HK

Essas fontes de dispositivo do AIR for TV são:

  • Da biblioteca de fontes Adobe® Type Library

  • Assistir a bons programas de televisão

  • Projetado para titulação de vídeo

  • São fontes de contorno, não fontes bitmap

Nota: Os fabricantes de dispositivos incluem outras fontes de dispositivo no dispositivo. Essas fontes de dispositivo fornecidas pelos fabricantes são instaladas em adição às fontes do dispositivo AIR for TV.

A Adobe fornece um aplicativo chamado FontMaster Deluxe, que exibe todas as fontes de dispositivo presentes no dispositivo. O aplicativo está disponível em Flash Platform para TV .

Você também pode usar fontes de dispositivo no seu aplicativo AIT para TV. Para mais informações, consulte Renderização avançada de texto no Guia do desenvolvedor do ActionScript 3.0 .

A Adobe recomenda o seguinte a respeito dos campos de texto TLF:

  • Use os campos de texto TLF para textos em idiomas asiáticos para tirar proveito do local em que o aplicativo está sendo executado. Defina a propriedade locale no objeto TextLayoutFormat associado ao objeto TLFTextField. Para mais informações, consulte Seleção de código de idiomas no Guia do desenvolvedor do ActionScript 3.0 .

  • Especifique o nome da fonte na propriedade fontFamily no objeto TextLayoutFormat se a fonte não for uma das fontes do dispositivo AIR for TV. O AIR for TV usará a fonte se ela estiver disponível no dispositivo. Se a fonte que você deseja não estiver no dispositivo, baseada na configuração de locale , o AIR for TV substituirá a fonte de dispositivo apropriada do AIR for TV.

  • Especifique _sans , _serif, ou _typewriter para a propriedade fontFamily , juntamente com a configuração da propriedade locale para fazer com que o AIR for TV escolha uma fonte de dispositivo correta para o AIR for TV. Dependendo do local, o AIR for TV escolhe seu conjunto de fontes de dispositivo asiáticas ou seu conjunto de fontes de dispositivo não asiáticas. Essas configurações proporcionam um modo fácil de usar automaticamente a fonte correta para a maior parte das variações idiomáticas asiáticas ou do inglês.

Nota: Se você estiver usando campos de texto clássicos para texto em idioma asiático, especifique um nome de fonte de uma fonte de dispositivo do AIR for TV para garantir uma renderização adequada. Se você souber que outra fonte está instalada no dispositivo de destino, também poderá especificá-la.

Quanto ao desempenho do aplicativo, considere o seguinte:

  • Os campos de texto clássicos proporcionam um desempenho mais rápido do que os campos de texto TLF.

  • Um campo de texto clássico que usa fontes bitmap proporciona um desempenho melhor.

    As fontes bitmap proporcionam um bitmap para cada caractere, ao contrário de fontes geométricas, que fornecem apenas dados de contorno de cada caractere. As duas fontes de dispositivo podem ser fontes bitmap.

  • Se você especificar uma fonte de dispositivo, certifique-se de que a fonte de dispositivo esteja instalada no dispositivo de destino. Se a fonte não estiver instalada no dispositivo, o AIR for TV buscará e usará outra fonte que esteja instalada no dispositivo. Contudo, esse comportamento torna mais lento o desempenho do aplicativo.

  • Como ocorre com qualquer objeto de exibição, se um objeto TextField for na maioria das vezes inalterável, defina a propriedade cacheAsBitmap do objeto como true . Essa configuração melhora o desempenho em transições como mudança de intensidade (fading), deslocamento e mesclagem de alfa. Use cacheAsBitmapMatrix para escala e conversão. Para obter mais informações, consulte Aceleração por hardware de gráfico .

Segurança do sistema de arquivos

Os aplicativos AIR for TV são aplicativos AIR e, portanto, podem acessar o sistema de arquivos do dispositivo. No entanto, em um dispositivo de “sala de estar” é muito importante que um aplicativo não possa acessar os arquivos de sistema do dispositivo ou os arquivos de outros aplicativos. Os usuários de TVs e dispositivos associados não esperam nem toleram qualquer falha no dispositivo — acima de tudo, eles estão assistindo à TV.

Portanto, o aplicativo do AIR for TV tem uma visualização limitada do sistema de arquivos do dispositivo. Usando o ActionScript 3.0, seu aplicativo pode acessar somente diretórios específicos (e seus subdiretórios). Além disso, os nomes dos diretórios que você usa no ActionScript não são nomes de diretórios reais no dispositivo. Esta camada extra protege os aplicativos AIR for TV contra o acesso mal-intencionado ou inadvertido aos arquivos locais que não pertençam a eles.

Para obter mais detalhes, consulte Visualização de diretórios para aplicativos AIR for TV .

A caixa de proteção do aplicativo do AIR

Os aplicativos AIR for TV são executados em uma caixa de segurança de aplicativo do AIR, descrita em A caixa de proteção do aplicativo do AIR .

A única diferença com os aplicativos AIR for TV é que esses têm acesso limitado ao sistema de arquivos, conforme descrito em Segurança do sistema de arquivos .

Ciclo de vida do aplicativo

Ao contrário de um ambiente de computação pessoal, o usuário final não pode fechar a janela na qual o aplicativo do AIR for TV está executando. Portanto, forneça um mecanismo de interface do usuário para saída do aplicativo.

Geralmente, um dispositivo permite que o usuário saia incondicionalmente de um aplicativo com a tecla de saída do controle remoto. No entanto, o AIR for TV não despacha o evento flash.events.Event.EXITING para o aplicativo. Portanto, salve o estado do aplicativo frequentemente para que o aplicativo possa recuperar-se para um estado razoável quando iniciar na próxima vez.

Cookies HTTP

O AIR for TV é compatível com os cookies contínuos de HTTP e com o cookies de sessão. O AIR for TV armazena cada cookie do aplicativo do AIR em um diretório específico do aplicativo:

/app-storage/<app id>/Local Store

O arquivo de cookie é nomeado cookies .

Nota: O AIR em outros dispositivos, como dispositivos pessoais, não armazenam cookies separadamente para cada aplicativo. O armazenamento de cookie específico de aplicativo é compatível com o modelo de aplicativo e de segurança do sistema do AIR for TV.

Use a propriedade URLRequest.manageCookies do ActionScript da seguinte maneira:

  • Defina manageCookies como true . Este valor é o padrão. Isso significa que o AIR for TV adiciona cookies automaticamente às solicitações ao HTTP e memoriza os cookies na resposta do HTTP.

    Nota: Mesmo quando manageCookies é true , o aplicativo pode adicionar um cookie manualmente a uma solicitação ao HTTP usando URLRequest.requestHeaders . Se esse cookie tiver o mesmo nomde de um cookie que o AIR for TV esteja gerenciando, a solicitação terá dois cookies com o mesmo nome. Os valores dos dois cookies podem ser diferentes.
  • Defina manageCookies como false . Esse valor significa que o aplicativo é responsável por enviar cookies automaticamente às solicitações ao HTTP e por memorizar os cookies na resposta do HTTP.

Para obter mais informações, consulte URLRequest .