Aperçu de l’architecture de l’application TV de Stadia

Depuis que Google a lancé Stadia pour Android TV en juin dernier, ils ont reçu de nombreuses demandes concernant l’élaboration de cette nouvelle expérience, les utilisateurs ayant remarqué des similitudes visuelles entre l’expérience Stadia sur Android TV et celle sur Chromecast Ultra. C’est pourquoi dans un billet publié le 20 août 2021 par Matt Joseph, responsable de l’ingénierie, et Maksym Motornyy, ingénieur logiciel en chef chez Stadia, les ingénieurs de Stadia ont décidé d’aborder son histoire sur les téléviseurs, détailler certaines de leurs décisions de mise en œuvre et partager un résumé de l’architecture de l’application Stadia pour Android TV.

Cet article est une traduction et adaptation d’un article posté sur le blog de développement de Stadia. Vous pouvez retrouver l’article original ici.

Tout d’abord, un peu d’histoire sur Stadia

Pour en savoir plus sur le modèle d’architecture de Stadia pour Android TV, il faut d’abord faire un peu d’histoire sur la mise en œuvre de Stadia pour Chromecast Ultra. Sur les appareils Chromecast Ultra, les applications sont appelées applications Réceptrices Web. Pour Stadia, les ingénieurs de Google ont créé un récepteur Web personnalisé permettant de jouer à un jeu vidéo diffusé en continu sur l’appareil.

Un récepteur Web personnalisé comprend généralement trois éléments :

  • Une application Web (HTML, CSS, JavaScript, ressources).
  • L’utilisation de l’API du récepteur Web au sein de cette application Web.
  • La configuration avec Google pour déterminer comment et quand cette application Web est lancée.

Une application TV sur un Chromecast Ultra. Image modifiée de la documentation pour les développeurs.

Les appareils Chromecast Ultra, comme de nombreux appareils de salon, sont des appareils de petite taille dont les ressources sont limitées. En général, les récepteurs Web sont assez minimalistes en termes d’interface utilisateur et de fonctionnalité, prenant souvent la forme de lecteurs (par exemple, pour l’audio/vidéo) ou de miroirs (par exemple, pour les onglets Chrome).

Comme on peut s’y attendre, la jouabilité est primordiale pour Stadia. Disposant d’une mémoire vive, d’une puissance de calcul et d’une puissance thermique limitées, l’interface utilisateur devait être légère tout en répondant aux besoins d’un service de streaming de jeux vidéo exigeant. Cette interface devait également être plus complète que les autres récepteurs Web, car la manette Stadia devait pouvoir fonctionner comme une télécommande. Cette solution devait également bien fonctionner avec le client de streaming de jeux vidéo sur Chromecast Ultra.

Compte tenu de l’expérience de l’équipe frontend en matière d’applications de salon et de langages de programmation compatibles avec le Web, Dart a été choisi, notamment parce qu’il dispose d’un support intégré pour la compilation de code Dart en JavaScript déployable, via la fonctionnalité intégrée Dart-to-JavaScript compilation.

Ce choix a par ailleurs des propriétés intéressantes, étant donné que Dart (via Flutter) est également utilisé pour les applications Stadia natives Android et iOS. Par exemple, une quantité significative de code Dart a pu être partagé entre l’application TV et les applications mobiles, comme des parties de la connectivité du contrôleur Stadia, la prise en charge de la localisation et la gestion de l’état du jeu.

Comme vous pouvez vous y attendre, cette expérience a fait l’objet de nombreux efforts d’optimisation afin d’obtenir l’expérience utilisateur requise. Il a fallu un vaste effort de collaboration entre les équipes chargées de l’interface utilisateur, de la jouabilité sur Stadia, des équipes chargées du matériel de Google, etc. Les ingénieurs de Stadia ont donc disposé d’une application web et d’un support OS pour le streaming. Comment cette application est-elle devenue une application Android TV ?

Retour à Android TV

Pour donner une réponse pertinente, nous devons faire une rapide digression sur une technologie qui est très cool (d’un point de vue de développeur ou de geek évidemment) : Cobalt. Cobalt est une « plateforme haute performance à faible encombrement qui met en œuvre un sous-ensemble de HTML5/CSS/JS pour exécuter des applications, dont l’application YouTube TV ».

En d’autres termes, il s’agit d’un moteur d’exécution qui permet à des applications Web de fonctionner sur des appareils limités en ressources. Il a été développé à l’origine par l’équipe en charge de YouTube, avec pour principal objectif de répondre avec succès à la très large gamme d’appareils de l’écosystème de salon.

Cobalt a également une propriété unique en ce sens qu’il ne s’appuie pas directement sur la plateforme de salon sous-jacente. Il utilise plutôt quelque chose appelé Starboard, qui est une couche de portage de Cobalt et l’abstraction de son système d’exploitation. Android est l’une des plateformes que Cobalt supporte nativement, afin de permettre aux développeurs d’applications web de se lancer rapidement.

Nous avons donc un moyen d’exécuter une application web sur des appareils Android TV via Cobalt. Qu’en est-il du streaming de jeux vidéo ? L’équipe Jouabilité sur Stadia, qui se concentre sur cette technologie centrale de streaming, s’est employée à prendre la pile de streaming déjà utilisée dans l’application mobile Stadia sur Android et de prendre en charge le modèle Cobalt. Cela signifie que, comme pour les plates-formes existantes, il leur a été possible de combiner une technologie de streaming de jeux vidéo à haute performance avec un code client à haute vitesse de développement.

Lorsque tout est combiné, l’architecture ressemble alors à quelque chose du genre :

Une vue simplifiée de l'architecture Stadia sur Android TV

Il y a eu beaucoup de travail en cours de route ! Pour que ce modèle fonctionne bien, de nombreux changements ont été apportés à chaque couche de cette pile. Dans le client de streaming Stadia par exemple, les ingénieurs de Google se sont efforcés de maximiser les performances et de contrôler la qualité du streaming de jeux sur de nombreux appareils Android TV, notamment le décodage vidéo entrant et la latence d’entrée.

Dans Cobalt, ils ont ajouté des fonctions pour prendre en charge les cas d’usage de Stadia et les fonctionnalités de Cobalt ont été étendues via des plugins. Cela leur a permis d’intégrer le client de streaming Stadia, ainsi que les fonctionnalités de la plate-forme pour Android TV, comme le support des manettes. Et ces changements vont profiter également aux autres applications utilisant Cobalt.

Dans l’application TV, le code a été optimisé pour prendre en charge l’ensemble des fonctionnalités de Cobalt, connecter les flux avec les plugins mentionnés ci-dessus et veiller à ce qu’aucun de ces changements n’ait d’impact sur l’expérience en production sur Chromecast Ultra.

Outre les modifications apportées à chaque couche, les ingénieurs de Google ont dû relever de nombreux défis en cours de route. Parmi ceux-ci, citons :

  • Les événements liés au jeu, tels que les achats en jeu : ils provoquent un événement dans l’interface utilisateur, ainsi que dans le système Android TV, et provoquent à leur tour une réponse dans les dépendances au niveau d’Android, telles que les services Google Pay.
  • L’authentification : l’application TV doit désormais prendre en charge l’authentification par le biais d’un justificatif d’identité ajouté au mobile et aux sessions, ainsi qu’aux utilisateurs qui sont connectés à leurs appareils Android TV.
  • La surface limitée des API Web : Cobalt ne prend en charge qu’un sous-ensemble limité d’API Web JavaScript, HTML et CSS afin de maintenir des performances élevées et de conserver une empreinte réduite pour s’adapter à un large éventail d’appareils de salon. Cela a nécessité un travail important pour garantir que l’expérience utilisateur, ainsi que les tests automatisés, continuent de fonctionner correctement.
  • Les entrées : diriger correctement les entrées vers les différentes parties de l’expérience (par exemple : une entrée donnée est-elle destinée à l’interface utilisateur ou à la session de jeu ?) et tester le large éventail de dispositifs d’entrées disponibles pour les utilisateurs constitue une entreprise importante.

L’un des aspects les plus intéressants de ce modèle est le fait que les modifications apportées à l’application Web Stadia TV ont été déployées dans le cadre du processus existant pour Chromecast Ultra, ce qui a permis aux ingénieurs de Google de valider leur travail dans un environnement de production avant le lancement sur Android TV.

Quelle sera la suite ?

Avec Stadia pour Android TV disponible sur des millions d’appareils, le spectre d’écrans pris en charge dans le salon s’est considérablement élargi ! Il s’agissait d’un travail de collaboration entre plusieurs dizaines de personnes au sein de Stadia et de Google, et cela n’aurait pas été possible sans la contribution de chacun.

L’échelle est une force motrice importante dans nombres de ces décisions architecturales. Pour réussir à adapter l’application aux écrans de salon, Google investit ses efforts d’ingénierie de manière à maximiser la réutilisation. Ses ingénieurs ne voulaient pas écrire – ou réécrire – des applications pour chaque nouveau dispositif qu’ils voulaient prendre en charge. De plus, les multiples points d’infrastructure et de codes partagés soutiennent la capacité de Google à s’étendre à un large éventail d’appareils de salon. En itérant sur leur application TV, en améliorant Cobalt et en continuant à promouvoir la réutilisation du code Dart sur leurs terminaux, les ingénieurs derrière Stadia sont en mesure de mieux planifier l’avenir. Ce travail est réalisé en collaboration avec de nombreuses personnes au sein des équipes de Stadia et de Google.

Le travail d’ingénierie derrière Stadia est colossal, pour rendre l’expérience quasi magique. Mais tout magicien sait que la magie n’existe pas. Ce sont de nombreuses heures de travail minutieux, d’efforts, d’échecs et de réussites. Du travail sur les moindres détails pour faire disparaitre les grosses ficelles. Toutes ces heures investies par les ingénieurs de Google pour nous offrir la meilleure des expériences vidéo-ludique en streaming est la preuve du soutien et du sérieux de Google pour Stadia. Tant d’efforts investis n’a aucun sens si c’est pour fermer la plateforme. Ils représentent donc bien la volonté de Google de la faire grandir.

Vous avez aimé cet article technique ? N’hésitez pas à nous donner votre avis en commentaires et sur nos réseaux.

Ce contenu est cool ? Partage-le !