Considérations à prendre en compte lors de la création d’une application AIR pour TV

Considérations liées à la vidéo

Directives d’encodage vidéo

Si vous diffusez en continu la vidéo sur un périphérique TV, Adobe recommande de respecter les directives d’encodage suivantes :

Codec vidéo :

encodage progressif, H.264 ou faisant appel au profil Principal ou Haut

Résolution :

720i, 720p, 1 080i ou 1 080p

Cadence :

24 images par seconde ou 30 images par seconde

Codec audio :

AAC-LC ou AC-3, 44,1 kHz, stéréo, ou les codecs audio multicanal suivants : E-AC-3, DTS, DTS Express, DTS-HD High Resolution Audio ou DTS-HD Master Audio

Vitesse de transmission combinée :

jusqu’à 8 Mbits/s selon la bande passante disponible

Vitesse de transmission audio :

jusqu’à 192 Kbits/s

Format des pixels :

1 × 1

Adobe recommande d’adopter le codec H.264 pour la vidéo diffusée sur un périphérique AIR pour TV.

Remarque : AIR pour TV prend également en charge la vidéo codée par le biais des codecs Sorenson Spark ou On2 VP6. Le matériel n’assure toutefois pas le décodage ou la présentation de ces codecs. Au lieu de cela, le moteur d’exécution décode et présente ces codecs via un processus logiciel. La cadence de lecture de la vidéo est par conséquent beaucoup moins élevée. Dans la mesure du possible, il est par conséquent conseillé d’adopter le codec H.264.

Classe StageVideo

AIR pour TV prend en charge le décodage et la présentation à accélération matérielle des vidéos codées par le biais du codec H.264. La classe StageVideo permet d’activer cette fonctionnalité.

Voir Présentation à accélération matérielle par le biais de la classe StageVideo dans le Guide du développeur d’ActionScript 3.0 pour plus d’informations sur les points suivants :

  • API de la classe StageVideo et des classes apparentées

  • Restrictions d’utilisation de la classe StageVideo

Pour optimiser la prise en charge des applications AIR existantes qui adoptent l’objet Video pour les vidéos codées au format H.264, AIR pour TV utilise en interne un objet StageVideo. Cette caractéristique signifie que la lecture de la vidéo exploite le rendu et la présentation à accélération matérielle. L’objet Video est toutefois soumis aux mêmes restrictions qu’un objet StageVideo. Par exemple, si l’application tente de faire pivoter la vidéo, il ne se produit pas de rotation, puisque c’est le matériel, et non le moteur d’exécution, qui assure la présentation de la vidéo.

Lorsque vous programmez une nouvelle application, adoptez toutefois l’objet StageVideo pour la vidéo H.264.

Pour plus d’informations sur l’utilisation de la classe StageVideo, voir Delivering video and content for the Flash Platform on TV (disponible en anglais uniquement).

Directives de diffusion de la vidéo

Sur un périphérique AIR pour TV, la bande passante disponible du réseau risque de varier au cours de la lecture de la vidéo. Ces variations se produisent parfois lorsqu’un autre utilisateur commence à utiliser la même connexion à Internet, par exemple.

Adobe recommande par conséquent que le système de diffusion de la vidéo intègre des fonctionnalités de vitesse de transmission adaptative. Côté serveur, Flash Media Server prend par exemple en charge des fonctionnalités de vitesse de transmission adaptative. Côté client, vous disposez de la structure OSMF (Open Source Media Framework).

Les protocoles suivants permettent de diffuser un contenu vidéo via le réseau à l’intention d’une application AIR pour TV :
  • Diffusion en continu dynamique HTTP et HTTPS (format F4F)

  • Diffusion en continu RTMP, RTMPE, RTMFP, RTMPT et RTMPTE

  • Téléchargement progressif HTTP et HTTPS

Pour plus d’informations, consulter les références suivantes :

Considérations liées à l’audio

Le code ActionScript de lecture du son ne présente aucune différence entre les applications AIR pour TV et les autres applications AIR. Pour plus d’informations, voir Utilisation du son dans le manuel Guide du développeur d’ActionScript 3.0 .

En ce qui concerne la prise en charge du son multicanal dans AIR pour TV, tenez compte des points suivants :

  • AIR pour TV prend en charge le son multicanal des vidéos téléchargées progressivement à partir d’un serveur HTTP. Le son multicanal des vidéos diffusées à partir d’Adobe Flash Media Server n’est pas encore pris en charge.

  • Bien qu’AIR pour TV prenne en charge de nombreux codecs audio, tous les périphériques AIR pour TV ne prennent pas en charge tous les codecs. Utilisez la méthode hasMultiChannelAudio() de flash.system.Capabilities pour vérifier si un périphérique AIR pour TV prend en charge un codec audio multicanaux particulier, tel que AC-3.

    Prenons par exemple le cas d’une application qui télécharge progressivement un fichier vidéo d’un serveur. Le serveur dispose de plusieurs fichiers vidéo H.264 qui prennent en charge divers codecs audio multicanaux. L’application peut utiliser la méthode hasMultiChannelAudio() pour déterminer le fichier vidéo à solliciter auprès du serveur. L’application peut par ailleurs envoyer au serveur la chaîne contenue dans Capabilities.serverString . Cette chaîne indique les codecs audio multicanaux disponibles, ce qui permet au serveur de sélectionner le fichier vidéo approprié.

  • lorsque vous utilisez l’un des codecs audio DTS, il existe des cas dans lesquels hasMultiChannelAudio() renvoie true , mais où le son DTS n’est pas lu.

    Prenons par exemple un lecteur Blu-ray muni d’une sortie S/PDIF, raccordé à un ancien amplificateur. L’ancien d’amplificateur ne prend pas en charge DTS, mais S/PDIF ne dispose d’aucun protocole pour en informer le lecteur Blu-ray. Si le lecteur Blu-ray envoie le flux DTS à l’ancien amplificateur, l’utilisateur n’entend rien. Par conséquent, lors de l’utilisation de DTS, il est recommandé de fournir une interface utilisateur afin que l’utilisateur puisse indiquer si aucun son n’est en cours de lecture. Votre application peut ensuite utiliser un autre codec.

Le tableau suivant indique quand utiliser les différents codecs audio dans une application AIR pour TV : Ce tableau indique également quand les périphériques AIR pour TV font appel aux accélérateurs matériels pour décoder un codec audio. Le décodage matériel améliore les performances et décharge l’UC.

Codec audio

Disponibilité sur le périphérique AIR pour TV

Décodage matériel

Utilisation du codec audio

Informations complémentaires

AAC

Toujours

Toujours

Dans les vidéos H.264

Pour la diffusion en continu de l’audio, tel qu’un service de diffusion en continu de musique sur Internet

Lors de l’utilisation d’un flux AAC audio uniquement, encapsulez le flux dans un conteneur MP4.

MP3

Toujours

Non

Pour le son dans les fichiers SWF de l’application

Dans les vidéos codées avec Sorenson Spark ou On2 VP6.

Une vidéo H.264 dont le son est au format mp3 n’est pas reproduite sur les périphériques AIR pour TV.

AC-3 (Dolby Digital)

E-AC-3 (Enhanced Dolby Digital)

DTS Digital Surround

DTS Express

DTS-HD High Resolution Audio

DTS-HD Master Audio

Vérifier

Oui

Dans les vidéos H.264

En général, AIR pour TV transmet un flux audio multicanaux à un récepteur audio/vidéo externe qui décode et lit le son.

Speex

Toujours

Non

Lors de la réception d’un flux vocal en direct.

Une vidéo H.264 qui utilise le codec audio Speex n’est pas reproduite sur les périphériques AIR pour TV. Utilisez Speex uniquement avec les vidéos codées à l’aide de Sorenson Spark ou d’On2 VP6.

NellyMoser

Toujours

Non

Lors de la réception d’un flux vocal en direct.

Une vidéo H.264 qui utilise le codec audio NellyMoser n’est pas reproduite sur les périphériques AIR pour TV. Utilisez NellyMoser uniquement avec les vidéos codées à l’aide de Sorenson Spark ou d’On2 VP6.

Remarque : certains fichiers vidéo contiennent deux flux audio. Par exemple, un fichier vidéo peut contenir un flux AAC et un flux AC3. AIR pour TV ne prend pas en charge ces fichiers vidéo ; l’utilisation de tels fichiers peut empêcher la diffusion du son de la vidéo.

Accélération graphique matérielle

Utilisation de l’accélération graphique matérielle

Un périphérique AIR pour TV prend en charge l’accélération matérielle des opérations graphiques 2D. Les accélérateurs graphiques matériels du périphérique confient à l’unité centrale l’exécution des opérations suivantes :

  • Rendu des bitmaps

  • Mise à l’échelle des bitmaps

  • Fusion des bitmaps

  • Remplissage rectangulaire solide

Cette accélération graphique matérielle permet à de nombreuses opérations graphiques d’une application AIR pour TV d’être particulièrement performantes. Parmi ces opérations figurent :

  • Transitions par glissement

  • Transitions par mise à l’échelle

  • Ouverture et fermeture en fondu

  • Composition de plusieurs images avec couche alpha

Pour que ces types d’opérations exploitent les avantages de l’accélération graphique matérielle, utilisez l’une des techniques suivantes :

  • Définissez la propriété cacheAsBitmap sur true pour les objets MovieClip et autres objets d’affichage dont le contenu ne change généralement pas. Exécutez ensuite des transitions par glissement, des transitions en fondu et la fusion alpha sur ces objets.

  • Utilisez la propriété cacheAsBitmapMatrix sur les objets d’affichage qui requièrent une mise à l’échelle ou une translation (appliquez le repositionnement x et y).

    Les accélérateurs matériels du périphérique exécutent les tâches requises en recourant aux opérations de la classe Matrix pour la mise à l’échelle et la translation. Vous pouvez également envisager un scénario dans lequel vous modifiez les dimensions d’un objet d’affichage dont la propriété cacheAsBitmap est définie sur true . En cas de modification des dimensions, le logiciel du moteur d’exécution actualise le bitmap. Les performances d’une actualisation effectuée par le biais du logiciel sont inférieures à une mise à l’échelle réalisée via une accélération matérielle par le biais d’une opération Matrix.

    Considérez par exemple une application qui affiche une image dont la taille augmente lorsqu’un utilisateur la sélectionne. Utilisez plusieurs fois l’opération de mise à l’échelle de la classe Matrix pour donner une impression d’agrandissement de l’image. Toutefois, selon la taille de l’image d’origine et celle de l’image finale, la qualité de cette dernière risque d’être inacceptable. Réinitialisez par conséquent les dimensions de l’objet d’affichage une fois les opérations d’agrandissement terminées. Etant donné que la propriété cacheAsBitmap est définie sur true , le logiciel du moteur d’exécution actualise une fois seulement l’objet d’affichage et produit une image de qualité élevée.

    Remarque : en règle générale, les périphériques AIR pour TV ne prennent pas en charge la rotation et l’inclinaison à accélération matérielle. Par conséquent, si vous spécifiez une opération de rotation et d’inclinaison dans la classe Matrix, AIR pour TV exécute toutes les opérations Matrix par le biais du logiciel. Ces opérations logicielles ont parfois des répercussions négatives sur les performances.
  • Utilisez la classe BitmapData pour créer un comportement personnalisé de mise en cache des bitmaps.

Pour plus d’informations sur la mise en cache sous forme de bitmap, consulter les références suivantes :

Gestion de la mémoire graphique

Pour effectuer des opérations graphiques accélérées, les accélérateurs graphiques ont recours à une mémoire graphique spéciale. Si l’application utilise la totalité de la mémoire graphique, elle s’exécute plus lentement, car AIR pour TV confie à nouveau le traitement des opérations graphiques au logiciel.

Pour gérer l’utilisation de la mémoire graphique par l’application :

  • Une fois l’utilisation d’une image ou autres données de bitmap terminée, libérez la mémoire graphique correspondante. Pour ce faire, appelez la méthode dispose() de la propriété bitmapData de l’objet Bitmap. Exemple :

    myBitmap.bitmapData.dispose();
    Remarque : libérer la référence à l’objet BitmapData ne libère pas immédiatement la mémoire graphique. L’utilitaire de récupération de place du moteur d’exécution libère la mémoire graphique, mais appeler la méthode dispose() permet à l’application de mieux contrôler le processus.
  • Faites appel à PerfMaster Deluxe, une application AIR fournie par Adobe, pour mieux comprendre l’accélération graphique matérielle sur le périphérique cible. Cette application illustre le nombre d’images par seconde requis pour exécuter diverses opérations. PerfMaster Deluxe permet de comparer diverses implémentations d’une même opération. Vous pouvez, par exemple, comparer le déplacement d’une image bitmap au déplacement d’une image vectorielle. PerfMaster Deluxe est disponible à l’adresse suivante : Flash Platform for TV .

Gestion de la liste d’affichage

Pour rendre un objet d’affichage invisible, définissez sa propriété visible sur false . L’objet se trouve toujours dans la liste d’affichage, mais AIR pour TV n’effectue pas son rendu et ne l’affiche pas. Cette technique est utile pour les objets qui apparaissent et disparaissent fréquemment, car elle n’implique qu’une faible charge de traitement. Définir la propriété visible sur false ne libère toutefois aucune des ressources de l’objet. Par conséquent, lorsque l’affichage d’un objet est terminé ou si un objet ne va plus s’afficher pendant un certain temps, supprimez l’objet de la liste d’affichage. Définissez également toutes les références à l’objet sur null . Ces actions permettent au nettoyeur de mémoire de libérer les ressources de l’objet.

Utilisation des images PNG et JPEG

PNG et JPEG sont des formats d’image standard dans les applications. En ce qui concerne ces formats d’image dans les applications AIR pour TV, tenez compte des considérations suivantes :

  • AIR pour TV a généralement recours à l’accélération matérielle pour décoder les fichiers JPEG.

  • AIR pour TV décode généralement les fichiers PNG par le biais du logiciel. Le décodage logiciel des fichiers PNG est rapide.

  • Le format PNG est le seul format bitmap multiplate-forme qui prend en charge la transparence (un canal alpha).

Par conséquent, utilisez comme suit ces formats d’image dans une application :

  • Adoptez le format JPEG pour les photographies en vue d’exploiter le décodage à accélération matérielle.

  • Adoptez le format d’image PNG pour les éléments de l’interface utilisateur. Les performances du décodage logiciel sont suffisamment élevées pour ces éléments, qui gèrent un paramètre alpha.

Scène dans les applications AIR pour TV

Si vous créez une application AIR pour TV, tenez compte des considérations suivantes lors de l’utilisation de la classe Stage :

  • Résolution d’écran

  • Zone de visualisation efficace

  • Mode de mise à l’échelle de la scène

  • Alignement de la scène

  • État d’affichage de la scène

  • Prise en compte de tailles d’écran diverses

  • Paramètre de qualité de la scène

Résolution d’écran

A l’heure actuelle, la résolution des écrans de périphériques TV correspond à 540p, 720p et 1 080p. Ces résolutions d’écran donnent lieu aux valeurs suivantes dans la classe Capabilities d’ActionScript :

Résolution d’écran

Capabilities.screenResolutionX

Capabilities.screenResolutionY

540p

960

540

720p

1 280

720

1 080p

1 920

1 080

Pour créer une application AIR pour TV en plein écran destinée à un périphérique donné, codez en dur les propriétés Stage.stageWidth et Stage.stageHeight sur la résolution de l’écran du périphérique. Toutefois, pour créer une application en plein écran qui s’exécute sur plusieurs périphériques, définissez les dimensions de l’objet Stage à l’aide des propriétés Capabilities.screenResolutionX et Capabilities.screenResolutionY .

Exemple :

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

Zone de visualisation efficace

La zone de visualisation efficace d’un téléviseur correspond à la partie de l’écran qui est encastrée par rapport aux bords de l’écran. L’écart est suffisamment important pour que l’utilisateur final puisse visualiser la zone dans son intégralité, sans que la bordure du téléviseur ne la masque partiellement. Etant donné que les dimensions de la bordure physique qui entoure l’écran varient selon le constructeur, l’écart requis est défini en conséquence. La zone de visualisation efficace tente de garantir la visibilité d’une partie de l’écran. Elle porte également le nom de zone de titre sécurisée .

Le surbalayage identifie la partie de l’écran qui n’est pas visible, car elle est placée derrière la bordure.

Adobe recommande un écart de 7,5 % sur chaque bord de l’écran. Exemple :

Afficher le graphique en taille réelle
Zone de visualisation efficace pour une résolution d’écran de 1 920 x 1 080

Veillez à tenir compte de la zone de visualisation efficace lorsque vous créez une application AIR pour TV en plein écran :

  • Utilisez l’écran entier pour les arrière-plans (images ou couleurs d’arrière-plan).

  • Limitez-vous à la zone de visualisation efficace pour les éléments déterminants de l’application tels que le texte, les graphiques, la vidéo et les éléments de l’interface utilisateur (les boutons, par exemple).

Le tableau ci-dessous indique les dimensions de la zone de visualisation efficace pour chaque résolution d’écran standard avec un écart de 7,5 %.

Résolution d’écran

Largeur et hauteur de la zone de visualisation efficace

Largeur de l’écart gauche et droit

Hauteur de l’écart supérieur et inférieur

960 x 540

816 x 460

72

40

1 280 x 720

1 088x 612

96

54

1 920 x 1 080

1 632 x 918

144

81

Il est toutefois recommandé de calculer la zone de visualisation efficace de façon dynamique. Exemple :

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

Mode de mise à l’échelle de la scène

Définissez la propriété Stage.scaleMode sur StageScaleMode.NO_SCALE et écoutez les événements de redimensionnement de la scène.

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

Ce paramètre définit les coordonnées de la scène sur les coordonnées de pixel. A l’instar de l’état d’affichage FULL_SCREEN_INTERACTIVE et de l’alignement de la scène TOP_LEFT , ce paramètre permet d’exploiter pleinement la zone de visualisation efficace.

Dans les applications en plein écran, ce mode de mise à l’échelle signifie que les propriétés stageWidth et stageHeight de la classe Stage correspondent aux propriétés screenResolutionX et screenResolutionY de la classe Capabilities.

Par ailleurs, lorsque la fenêtre de l’application change de taille, le contenu de la scène conserve sa taille définie. Le moteur d’exécution n’exécute ni mise en forme, ni mise à l’échelle automatique. Il distribue également l’événement resize de la classe Stage en cas de changement de taille de la fenêtre. Vous maîtrisez par conséquent pleinement le mode de réglage du contenu de l’application au démarrage de cette dernière et lors du redimensionnement de sa fenêtre.

Remarque : le comportement NO_SCALE est identique à celui de toute application AIR. Dans une application AIR pour TV, l’utilisation de ce paramètre joue toutefois un rôle déterminant dans l’utilisation de la zone de visualisation efficace.

Alignement de la scène

Définissez la propriété Stage.align sur StageAlign.TOP_LEFT :

stage.align = StageAlign.TOP_LEFT; 

Cet alignement place la coordonnée 0,0 dans l’angle supérieur gauche de l’écran, ce qui est adapté au positionnement du contenu à l’aide d’ActionScript.

A l’instar du mode de mise à l’échelle NO_SCALE et de l’état d’affichage FULL_SCREEN_INTERACTIVE , ce paramètre permet d’exploiter pleinement la zone de visualisation efficace.

État d’affichage de la scène

Dans une application AIR pour TV en plein écran, définissez la propriété Stage.displayState sur StageDisplayState.FULL_SCREEN_INTERACTIVE :

stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; 

Cette valeur définit l’application AIR de sorte que la scène occupe la totalité de l’écran et autorise la saisie utilisateur.

Adobe recommande l’utilisation du paramètre FULL_SCREEN_INTERACTIVE . A l’instar du mode de mise à l’échelle NO_SCALE et de l’alignement de la scène TOP_LEFT , ce paramètre permet d’exploiter pleinement la zone de visualisation efficace.

Par conséquent, pour une application en plein écran, procédez comme suit dans un gestionnaire associé à l’événement ADDED_TO_STAGE dans la classe principale du document :

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; 
}

Puis, dans le gestionnaire de l’événement RESIZE :

  • Comparez les tailles de résolution d’écran à la largeur et la hauteur de la scène. Si elles sont identiques, l’événement RESIZE s’est produit, parce que l’état d’affichage de la scène est passé à FULL_SCREEN_INTERACTIVE .

  • Calculez et enregistrez les dimensions de la zone de visualisation efficace et les écarts correspondants.

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

Lorsque les dimensions de la scène équivalent à Capabilities.screenResolutionX et screenResolutionY , AIR pour TV oblige le périphérique à fournir la meilleur fidélité possible pour vos vidéos et images.

Remarque : la fidélité à laquelle les images et les vidéos s’affichent sur l’écran d’un téléviseur peut différer des valeurs de Capabilities.screenResolutionX et de screenResolutionY , qui dépendent du périphérique exécutant AIR pour TV. Par exemple, la résolution d’écran du décodeur exécutant AIR pour TV peut être de 1280 x 720 et celle du téléviseur raccordé de 1920 x 1080. AIR pour TV oblige toutefois le périphérique à fournir la meilleure fidélité possible. Par conséquent, dans cet exemple, le périphérique affiche une vidéo de 1080p avec une résolution d’écran de 1920 x 1080.

Prise en compte de tailles d’écran diverses

Vous pouvez développer la même application AIR pour TV en plein écran de sorte à assurer son exécution sur divers périphériques AIR pour TV sans problème d’affichage. Procédez comme suit :

  1. Définissez les propriétés de la scène scaleMode , align et displayState sur les valeurs recommandées : StageScaleMode.NO_SCALE , StageAlign.TOP_LEFT et StageDisplayState.FULL_SCREEN_INTERACTIVE (respectivement).

  2. Configurez la zone de visualisation efficace en fonction des paramètres Capabilities.screenResolutionX et Capabilities.screenResolutionY .

  3. Réglez la taille et la mise en forme du contenu en fonction de la largeur et de la hauteur de la zone de visualisation efficace.

    En dépit de la taille élevée des objets du contenu, en particulier si vous les comparez aux applications pour périphériques mobiles, les concepts tels que la mise en forme dynamique, le positionnement relatif et le contenu adaptatif demeurent inchangés. Pour plus d’informations sur la prise en charge de ces concepts par le biais d’ActionScript, voir Authoring mobile Flash content for multiple screen sizes (disponible en anglais uniquement).

Qualité de la scène

La propriété Stage.quality d’une application AIR pour TV est toujours StageQuality.High . Il est impossible de la modifier.

Cette propriété spécifie la qualité de rendu de tous les objets Stage.

Gestion de la saisie par télécommande

Les utilisateurs communiquent généralement avec l’application AIR pour TV à l’aide d’une télécommande. Gérez toutefois la saisie par touche de télécommande comme la saisie par touche de clavier dans une application de bureau. Gérez en particulier l’événement KeyboardEvent.KEY_DOWN . Pour plus d’informations, voir Capture de la saisie au clavier dans le manuel Guide du développeur d’ActionScript 3.0 .

Les touches de la télécommande sont mappées sur des constantes ActionScript. Par exemple, le mappage des touches du pavé directionnel d’une télécommande est le suivant :

Touche du pavé directionnel d’une télécommande

Constante ActionScript 3.0

Haut

Keyboard.UP

Bas

Keyboard.DOWN

Gauche

Keyboard.LEFT

Droite

Keyboard.RIGHT

OK ou Sélectionner

Keyboard.ENTER

AIR 2.5 intègre de nombreuses autres constantes Keyboard pour prendre en charge la saisie par télécommande. Pour en consulter la liste complète, voir Classe Keyboard dans le manuel Guide de référence ActionScript 3.0 pour la plate-forme Adobe Flash .

Pour assurer le fonctionnement de l’application sur un nombre aussi élevé que possible de périphériques, Adobe recommande de respecter les directives suivantes :

  • Dans la mesure du possible, utilisez uniquement les touches du pavé directionnel.

    Les ensembles de touches varient selon les télécommandes. La grande majorité des télécommandes intègrent toutefois des touches de pavé directionnel.

    Ainsi, une télécommande de périphérique Blu-ray ne comporte généralement pas de touche permettant de passer à la chaîne suivante ou à la chaîne précédente. Même les touches de lecture, pause et arrêt ne figurent pas sur toutes les télécommandes.

  • Utilisez les touches Menu et Informations si les touches du pavé directionnel ne suffisent pas à l’application.

    Après les touches du pavé directionnel, les touches Menu et Informations sont les plus courantes sur les télécommandes.

  • Tenez compte de l’utilisation fréquente des télécommandes universelles.

    Même si vous créez une application destinée à un périphérique déterminé, gardez à l’esprit le fait que de nombreux utilisateurs préfèrent éviter la télécommande fournie avec le périphérique. Ils ont au contraire recours à une télécommande universelle. Par ailleurs, les utilisateurs ne programment pas toujours la télécommande universelle de sorte à mapper toutes les touches de la télécommande du périphérique. Il est par conséquent recommandé de n’utiliser que les touches les plus courantes.

  • Veillez à ce que les utilisateurs puissent désactiver toute opération par le biais de l’une des touches du pavé directionnel.

    L’application a parfois recours à bon escient à une touche qui n’est pas fréquemment utilisée sur une télécommande. Fournir une voie de sortie à l’aide de l’une des touches du pavé directionnel assure le comportement approprié de l’application sur tous les périphériques.

  • Ne sollicitez pas d’entrée de pointeur à moins que vous ne sachiez que le périphérique AIR pour TV cible dispose d’une fonctionnalité d’entrée de pointeur.

    Bien que de nombreuses applications de bureau attendent une entrée de souris, la plupart des téléviseurs ne prennent pas en charge l’entrée de pointeur. Par conséquent, si vous convertissez une application de bureau en application pour téléviseur, veillez à la modifier de façon à ce qu’elle n’attende pas d’entrée de souris. Ces modifications affectent la gestion des événements et les instructions destinées à l’utilisateur. Lorsque l’écran de démarrage de l’application apparaît, n’affichez pas le texte « Cliquez pour démarrer », par exemple.

Gestion de la cible d’action

Lorsqu’un élément de l’interface utilisateur correspond à la cible d’action dans une application de bureau, il est la cible d’événements de saisie utilisateur tels que les événements de clavier et de souris. Par ailleurs, une application affiche en surbrillance l’élément de l’interface utilisateur qui est la cible d’action. Une application AIR pour TV et une application de bureau gèrent différemment la cible d’action, car :

  • Les applications de bureau ont souvent recours à la touche de tabulation pour faire de l’élément suivant de l’interface utilisateur la cible d’action. L’utilisation de la touche de tabulation ne s’applique pas aux applications AIR pour TV. Les télécommandes ne comportent généralement pas de touche de tabulation. Par conséquent, à l’encontre du bureau, la gestion de la cible d’action à l’aide de la propriété tabEnabled d’un objet DisplayObject n’est pas prise en charge.

  • Les applications de bureau attendent souvent de l’utilisateur qu’il sélectionne un élément de l’interface utilisateur à l’aide de la souris.

Procédez de ce fait comme suit dans l’application :

  • Ajoutez un écouteur d’événements à l’objet Stage qui écoute des événements Keyboard tels que KeyboardEvent.KEY_DOWN .

  • Définissez la logique de l’application de sorte à déterminer l’élément de l’interface à mettre en surbrillance à l’intention de l’utilisateur. Veillez à mettre en surbrillance un élément de l’interface utilisateur au démarrage de l’application.

  • En vous basant sur la logique de l’application, distribuez l’événement Keyboard reçu par l’objet Stage à l’objet approprié de l’élément de l’interface utilisateur.

    Vous disposez également de la propriété Stage.focus ou Stage.assignFocus() pour faire d’un élément de l’interface utilisateur la cible d’action. Vous pouvez ensuite ajouter un écouteur d’événements à cet objet DisplayObject pour qu’il reçoive les événements de clavier.

Création d’une interface utilisateur

Pour assurer le bon fonctionnement de l’interface utilisateur d’une application AIR pour TV sur un téléviseur, tenez compte des recommandations relatives :

  • au temps de réaction de l’application ;

  • à la convivialité de l’application ;

  • à la personnalité et aux attentes de l’utilisateur.

Temps de réaction

Tenez compte des conseils suivants pour réduire autant que possible le temps de réaction d’une application AIR pour TV.

  • Réduisez autant que possible la taille du fichier SWF initial de l’application.

    Dans le fichier SWF initial, chargez uniquement les ressources requises pour démarrer l’application. Limitez-vous par exemple à l’image de l’écran de démarrage de l’application.

    Bien que cette recommandation s’applique aux applications AIR de bureau, elle est d’une importance particulière pour les périphériques AIR pour TV. Les périphériques AIR pour TV ne disposent par exemple pas de la puissance de traitement d’un ordinateur de bureau. Ils stockent par ailleurs l’application en mémoire flash, dont l’accès n’est pas aussi rapide qu’un disque dur sur un ordinateur de bureau.

  • Veillez à ce que l’application s’exécute à une cadence de 20 images/seconde au moins.

    Créez les graphiques de sorte à atteindre cet objectif. La complexité des opérations graphiques risque d’affecter la cadence. Pour plus d’informations sur l’amélioration des performances de rendu, voir Optimisation des performances pour la plate-forme Adobe Flash .

    Remarque : le matériel graphique d’un périphérique AIR pour TV applique généralement un taux de rafraîchissement de l’écran de 60 ou 120 Hz (en d’autres termes, l’écran est mis à jour 60 ou 120 fois par seconde). Le matériel analyse la scène pour identifier les mises à jour à une cadence de 30 ou 60 images par seconde, par exemple, sur un écran de 60 ou 120 Hz. La complexité des opérations graphiques de l’application détermine toutefois si ces cadences élevées sont appliquées ou non.
  • Mettez à jour l’écran dans les 100 - 200 millisecondes qui suivent une saisie utilisateur.

    Si le délai de mise à jour est plus long, l’utilisateur s’impatiente et appuie souvent plusieurs fois sur les touches.

Convivialité

Les utilisateurs d’une application AIR pour TV résident dans un environnement de type « salon ». Ils sont assis à 3 mètres au moins du téléviseur. La pièce est souvent sombre. Ils ont généralement recours à une télécommande à des fins de saisie. Il est possible que plusieurs personnes utilisent l’application, parfois conjointement, parfois en série.

Tenez par conséquent compte des considérations suivantes pour assurer la convivialité de l’interface utilisateur sur un téléviseur :

  • Assignez une taille élevée aux éléments de l’interface utilisateur.

    Lors de la conception du texte, des boutons ou de tout autre élément de l’interface utilisateur, tenez compte du fait que l’utilisateur est assis à l’autre bout de la pièce. Assurez-vous que tout élément est clairement visible et lisible à une distance de 3 mètres, par exemple. Evitez d’encombrer l’écran pour l’unique raison que l’écran est de taille élevée.

  • Définissez un contraste approprié afin que l’utilisateur puisse visualiser et lire aisément le contenu de l’autre bout de la pièce.

  • Identifiez clairement la cible d’action en assurant la luminosité de l’élément de l’interface utilisateur concerné.

  • N’utilisez le mouvement qu’en cas de besoin. Glisser d’un écran à l’autre à des fins de continuité, par exemple, peut donner des résultats satisfaisants. Toutefois, le mouvement empêche parfois l’utilisateur de se concentrer s’il ne l’aide pas à naviguer ou s’il n’est pas intrinsèque à l’application.

  • Proposez toujours à l’utilisateur un moyen évident de retourner à son point de départ par le biais de l’interface utilisateur.

Pour plus d’informations sur l’utilisation de la télécommande, voir Gestion de la saisie par télécommande .

Personnalité et attentes de l’utilisateur

Gardez à l’esprit le fait que les utilisateurs d’applications AIR pour TV recherchent généralement une expérience télévisuelle divertissante de qualité, dans un environnement dénué de stress. Ils ne maîtrisent pas nécessairement l’informatique.

Créez de ce fait des applications AIR pour TV aux caractéristiques suivantes :

  • Evitez le jargon technique.

  • Evitez les boîtes de dialogue modales.

  • Utilisez des instructions conviviales et informelles adaptées à un environnement de type salon, plutôt qu’à la sphère professionnelle ou technique.

  • Intégrez les graphiques de qualité élevée auxquels s’attendent les téléspectateurs.

  • Créez une interface utilisateur qui fonctionne de façon transparente avec une télécommande. N’utilisez pas une interface utilisateur ou des éléments de conception adaptés à une application de bureau ou à une application mobile. Par exemple, dans les interfaces utilisateur des périphériques de bureau et des périphériques mobiles, il est souvent nécessaire de pointer, cliquer ou appuyer sur des boutons avec une souris ou un doigt.

Polices et texte

Dans l’application AIR pour TV, utilisez les polices de périphérique ou les polices incorporées.

Les polices de périphérique sont installées sur le périphérique. Tous les périphériques AIR pour TV intègrent les polices suivantes :

Nom de la police

Description

_sans

La police de périphérique _sans contient des caractères sans serif. La police de périphérique _sans installée sur tous les périphériques AIR pour TV est Myriad Pro. En règle générale, une police sans-sérif est mieux reproduite sur un téléviseur que les polices sérif en raison de la distance de visionnage.

_serif

La police de périphérique _serif contient des caractères serif. La police de périphérique _serif installée sur tous les périphériques AIR pour TV est Minion Pro.

_typewriter

La police de périphérique _typewriter est une police à espacement fixe. La police de périphérique _typewriter installée sur tous les périphériques AIR pour TV est Courier Std.

Tous les périphériques AIR pour TV intègrent également les polices de périphérique asiatiques suivantes :

Nom de la police

Langue

Catégorie de caractère

Code des paramètres régionaux

RyoGothicPlusN-Regular

japonais

sans

ja

RyoTextPlusN-Regular

japonais

serif

ja

AdobeGothicStd-Light

coréen

sans

ko

AdobeHeitiStd-Regular

chinois simplifié

sans

zh_CN

AdobeSongStd-Light

chinois simplifié

serif

zh_CN

AdobeMingStd-Light

chinois traditionnel

serif

zh_TW et zh_HK

Ces polices de périphérique AIR pour TV :

  • sont extraites de la typothèque d’Adobe® ;

  • donnent un résultat satisfaisant sur un téléviseur ;

  • sont adaptées au titrage vidéo ;

  • sont des polices vectorielles, plutôt que les polices bitmap.

Remarque : les constructeurs de périphériques intègrent souvent d’autres polices à ces derniers. Ces polices sont installées parallèlement aux polices de périphérique AIR pour TV.

Adobe fournit l’application FontMaster Deluxe, qui affiche toutes les polices du périphérique. Vous trouverez cette application à l’adresse Flash Platform for TV .

Vous pouvez également incorporer des polices à l’application AIR pour TV. Pour plus d’informations sur les polices incorporées, voir Fonctions avancées d’affichage de texte dans le manuel Guide du développeur d’ActionScript 3.0 .

Adobe recommande d’appliquer les directives d’utilisation des champs de texte TLF suivantes :

  • Faites appel aux champs de texte TLF pour le texte en langue asiatique afin d’exploiter les paramètres régionaux en vigueur dans l’application. Définissez la propriété locale de l’objet TextLayoutFormat associé à l’objet TLFTextField. Pour déterminer les paramètres régionaux actifs, voir Choix d’un jeu de paramètres régionaux dans le manuel Guide du développeur d’ActionScript 3.0 .

  • Spécifiez le nom de la police dans la propriété fontFamily de l’objet TextLayoutFormat si la police ne fait pas partie des polices de périphérique AIR pour TV. AIR pour TV utilise la police si elle est disponible sur le périphérique. Si la police requise ne figure pas sur le périphérique, AIR pour TV lui substitue la police de périphérique AIR pour TV appropriée en se référant au paramètre locale .

  • Spécifiez le paramètre _sans , _serif ou _typewriter pour la propriété fontFamily et définissez la propriété locale pour qu’AIR pour TV sélectionne la police de périphérique AIR pour TV appropriée. Selon les paramètres régionaux en vigueur, AIR pour TV effectue une sélection dans le jeu de polices de périphérique asiatiques ou non asiatiques. Ces paramètres permettent d’utiliser automatiquement la police appropriée pour les quatre principaux jeux de paramètres régionaux et l’anglais.

Remarque : si vous utilisez des champs de texte classiques pour le texte en langue asiatique, spécifiez le nom d’une police de périphérique AIR pour TV pour assurer un rendu approprié. Si vous savez qu’une autre police est installée sur le périphérique cible, vous pouvez également l’indiquer.

En ce qui concerne les performances de l’application, tenez compte des considérations suivantes :

  • Les champs de texte classiques assurent de meilleures performances que les champs de texte TLF.

  • Un champ de texte classique qui a recours à des polices bitmap assure des performances optimales.

    A l’encontre des polices vectorielles, qui ne proposent que des données vectorielles associées à chaque caractère, les polices bitmap proposent un bitmap par caractère. Les polices de périphérique comme les polices incorporées peuvent correspondre à des polices bitmap.

  • Si vous spécifiez une police de périphérique, veillez à l’installer sur le périphérique cible. Si tel n’est pas le cas, AIR pour TV recherche et utilise une autre police installée sur le périphérique. Ce comportement ralentit toutefois les performances de l’application.

  • A l’instar de tout objet d’affichage, si un objet TextField n’est que rarement modifié, définissez la propriété cacheAsBitmap correspondante sur true . Ce paramètre améliore les performances des transitions de type fondu, glissement et fusion alpha. Utilisez la propriété cacheAsBitmapMatrix pour la mise à l’échelle et la translation. Pour plus d’informations, voir Accélération graphique matérielle .

Sécurité du système de fichiers

Etant donné que les applications AIR pour TV sont des applications AIR, elles peuvent accéder au système de fichiers du périphérique. Toutefois, si l’application est installée sur un « périphérique de salon », il est déterminant qu’elle ne puisse pas accéder au système de fichiers de ce dernier ou aux fichiers d’autres applications. Les utilisateurs de téléviseurs ou périphériques associés ne s’attendent pas à des pannes et ne les tolèrent pas. Après tout, ils regardent la télévision.

Une application AIR pour TV dispose par conséquent d’une vue limitée du système de fichiers du périphérique. Par le biais d’ActionScript 3.0, l’application peut accéder à des répertoires (et sous-répertoires associés) déterminés uniquement. Par ailleurs, les noms de répertoires en vigueur dans ActionScript ne correspondent pas aux noms de répertoires réels sur le périphérique. Cette couche supplémentaire permet de protéger les applications AIR pour TV contre tout accès malveillant ou accidentel à des fichiers locaux qui ne leur appartiennent pas.

Pour plus d’informations, voir Vue arborescente associée aux applications AIR pour TV .

Sandbox de l’application AIR

Les applications AIR pour TV s’exécutent dans le sandbox d’application AIR, décrit dans Sandbox de l’application AIR .

L’unique différence pour les applications AIR pour TV consiste en un accès limité au système de fichiers, comme indiqué à la section Sécurité du système de fichiers .

Cycle de vie d’une application

A l’encontre d’un environnement de bureau, l’utilisateur final ne peut pas fermer la fenêtre d’exécution de l’application AIR pour TV. Intégrez de ce fait à l’interface utilisateur un mécanisme de sortie de l’application.

En règle générale, un périphérique autorise l’utilisateur final à quitter sans condition une application à l’aide de la touche de sortie de la télécommande. AIR pour TV ne distribue toutefois pas d’événement flash.events.Event.EXITING à l’application. Enregistrez de ce fait régulièrement l’état de l’application, afin qu’elle puisse restaurer un état raisonnable lors du démarrage suivant.

Cookies HTTP

AIR pour TV prend en charge les cookies persistants HTTP et les cookies de session. AIR pour TV enregistre les cookies de chaque application AIR dans un répertoire propre à l’application :

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

Le fichier de cookies est appelé cookies .

Remarque : sur les autres périphériques, notamment les périphériques de bureau, AIR n’enregistre pas les cookies séparément pour chaque application. L’enregistrement des cookies propres à une application prend en charge le modèle de sécurité de l’application et du système d’AIR pour TV.

Faites appel à la propriété ActionScript URLRequest.manageCookies comme suit :

  • Définissez manageCookies sur true . Cette valeur est le paramètre par défaut. Elle signifie qu’AIR pour TV ajoute automatiquement des cookies aux requêtes HTTP et les mémorise dans la réponse HTTP.

    Remarque : même si la propriété manageCookies est définie sur true , l’application peut ajouter manuellement un cookie à une requête HTTP à l’aide d’ URLRequest.requestHeaders . Si ce cookie porte le même nom qu’un cookie géré par AIR pour TV, la requête contient deux cookies au nom identique. La valeur des deux cookies peut être différente.
  • Définissez manageCookies sur false . Cette valeur signifie qu’il incombe à l’application d’envoyer des cookies dans les requêtes HTTP et de les mémoriser dans la réponse HTTP.

Pour plus d’informations, voir URLRequest .