Curieux de savoir comment Google a construit techniquement Stadia, son offre de cloud gaming ? Plongez donc dans la retranscription – en quatre parties – de la présentation « Stadia Streaming Tech: A Deep Dive » qui a eu lieu lors du Google I/O en 2019. Dans cette première partie, nous commencerons avec la première intervention de Guru Somadder, responsable de l’ingénierie chez Google qui a mis en place le “Project Stream“ puis Stadia. Bonne lecture !
Après avoir passé une décennie et demie à s’occuper de produits réseaux de grande qualité, Guru Somadder s’est retrouvé impliqué dans l’unviers du cloud gaming presque par accident au sein d’une sous-équipe interne appelée « Playability » (Nda : Jouabilité).
La jouabilité, explique Guru, est une mesure de la qualité globale d’un jeu telle qu’elle est perçue par les joueurs. Cette jouabilité est affectée par de nombreuses variables telles que le jeu joué, l’environnement dans lequel il est joué, les contrôles, l’affichage et bien d’autres encore.
L’équipe « Jouabilité » veille à ce que l’expérience offerte par Stadia soit cohérente, agréable et aussi exacte que celle prévue par le développeur d’un titre particulier. Elle se concentre donc sur la conception et la construction d’une infrastructure grandement adaptable pour la diffusion en temps réel, également connue sous le nom de « Streamer », sur la construction des API qui permettent de s’interfacer avec la plateforme et, bien sûr, sur l’optimisation de l’expérience de jeu globale du joueur, le tout à l’échelle de Google.
Son objectif est assez simple : offrir la meilleure expérience de jeu possible. Rien de plus aisé, n’est-ce pas ? En fait, pas tant que ça, explique Guru, d’autant plus qu’ils essaient d’établir une toute nouvelle approche du jeu vidéo. C’est pourquoi dans leur présentation, Guru Somadder, Khaled Abdel Rahman et Rob McCool ont décidé de présenter leur parcours et leurs efforts pour atteindre cet objectif.
Ainsi, voici le plan de leur présentation, dont chaque partie sera traitée dans un article de notre série de retranscriptions :
- Le background : la plupart des gens ne sont pas au courant des problèmes et des défis technologiques que posent le cloud gaming. Nous allons donc aborder cette question et établir une compréhension commune dans cette première partie.
- La recherche en expérience utilisateur : nous allons parler des recherches approfondies que l’équipe « Jouabilité » a menées pour comprendre ce qu’est le streaming de jeux vidéo.
- Le streamer : ici, nous exposerons en détails la réalisation des recherches précédemment citées.
- Le “Project Stream“ où nous reviendrons sur les retours d’expériences de ce test mené à grande échelle.
- La boite à outils de l’équipe « Jouabilité » : dans cette dernière partie, nous parlerons de quelques API et outils dont dispose l’équipe « Jouabilité » pour pousser l’optimisation encore plus loin.
Mais d’abord, un peu de contexte pour établir une compréhension commune
Les joueurs s’attendent à ce que le jeu réagisse à leurs inputs avec des changements attendus de manière naturelle et en temps réel. Il doit également offrir une expérience cohérente dans les divers environnements dans lesquels se trouvent les joueurs. Enfin, il doit fournir une expérience qui soit exacte dans sa livraison et conforme à l’intention des développeurs du jeu.
En quoi cela diffère-t-il d’un service de diffusion vidéo en continu classique comme YouTube ?
Pour mieux comprendre cela, examinons une architecture de diffusion vidéo en continu classique (dite passive) grandement simplifiée.
Les médias à transmettre sont généralement hébergés dans des centres de données distants et peuvent bénéficier d’un encodage et d’optimisations hors ligne. La communication et la transmission se font généralement par le biais d’un protocole fiable comme la TVHD envoyée en morceaux de 2 à 10 secondes. La latence en temps réel est moins importante. La nature même de l’encombrement se prête aussi très bien aux mises en cache Internet standard. Les clients vont chercher le contenu à la demande et le mettent en cache selon leurs besoins. Ces caches rendent la lecture du client fluide et très résistante aux défaillances du réseau.
En quoi le cloud gaming est-il différent ?
Tout d’abord, le cloud gaming est interactif ce qui signifie que les exigences de latences sont tout simplement trop strictes pour permettre une mise en mémoire tampon de quelque nature que ce soit. On ne peut pas non plus permettre une compression de flux binaire trop intensive en terme de calculs pour obtenir la qualité souhaitée. De plus, la nature ouverte des jeux rend également la mise en cache du contenu qu’ils fournissent tout simplement impossible ou très difficile. Enfin, les défaillances du réseau peuvent être extrêmement visibles et doivent être évitées à tout prix. Une plateforme de cloud gaming se doit de pouvoir maintenir une expérience optimale dans toutes les conditions possibles.
À quoi peut donc ressembler une plateforme de cloud gaming ?
Et bien, il est possible qu’elle ressemble à quelque chose comme ça :
Les jeux sont hébergés dans des centres de données distants. Les joueurs ont généralement des supports qui, à eux seuls, ne sont pas capables d’héberger de tels jeux ou d’offrir les expériences uniques que permet une plateforme de cloud gaming. Les données audio et vidéo brutes d’un jeu sont capturées et encodées pour être mises en paquets et diffusées sur Internet, le tout sous l’œil attentif d’un moteur de répétition de données en temps réel. Ce processus s’inverse du côté du client. Vous recevez les paquets, décodez les données et envoyez le tout à l’écran. De la même manière, les données et la voix d’un joueur sont prises et envoyées au jeu à distance.
Bien entendu, tout cela se passe en temps réel.
Alors pourquoi tout cela est-il si difficile ?
La clé du succès dans le cloud gaming , c’est d’être capable de fournir une expérience de jeu cohérente au joueur à l’échelle. Cela signifie qu’il faut pouvoir mettre à l’échelle tout le spectre des supports possibles, être capable de gérer la fragmentation de ce parc et la non-uniformité de leur matériel et de leurs logiciels. En clair, il faut donc pouvoir s’adapter à tous les endroits où les joueurs accèdent au service et à tous les types de réseaux qu’ils soient câblés, sans fil, avec perte et qu’ils aient une latence variable ou élevée.
Quelle est donc la première chose qui vous vient à l’esprit quand vous pensez au cloud gaming ? Qu’en est-il de la latence ?
Parlons-en de la latence ! L’équipe de Guru Somadder a passé beaucoup de temps à faire des recherches approfondies sur les effets de la latence. En voici quelques exemples.
On découvre ainsi que les transferts de données via HDMI sur votre téléviseur prennent entre 16 et 33 millisecondes, sachant que les taux de rafraîchissement des écrans observés sont de l’ordre de 4 à 16 millisecondes. En ce qui concerne les périphériques, les transferts d’informations depuis les ports USB ajoutent une latence d’environ 8 millisecondes.
Sans parler de neurosciences, l’être humain est, aussi, source de latences
On parle bien toujours de cloud gaming mais voici quelques résultats intéressants tirés d’une publication de SJ Tarp sur les neurosciences en 2001, publication qui caractérise les effets d’un cerveau et d’un système nerveux. Ainsi, on apprend qu’il faut au moins 13 millisecondes à l’être humain pour traiter les stimuli visuels et entre 70 et 180 millisecondes pour que les ordres poussés par votre cerveau atteignent vos doigts.
Et oui, même nous, nous avons de la latence.
Voici un autre exemple : nous avons tous vu des éclairs et entendu le tonnerre, n’est-ce pas ? La lumière voyage vite, très vite, à une vitesse de 300 000 km par seconde. Google utilise cette donnée à son avantage car il faut moins de temps pour qu’un paquet provenant d’un centre de données bien placé ne nous atteigne que pour que les commandes passées par notre cerveau atteignent nos doigts. Il est donc essentiel d’atténuer les effets de la latenc et, de fait, un des objectifs de l’équipe de Guru est de la rendre imperceptible pour les joueurs.
La fidélité visuelle, c’est un autre défi
Fondamentalement, le plus gros défi de l’équipe « Jouabilité » est de maintenir un équilibre délicat entre qualité et réactivité, mais en temps réel.
Pour comprendre le cloud gaming, il faut comprendre l’impact des codecs, des encodeurs et des décodeurs ainsi que les sélectionner judicieusement. Les codecs nécessitent généralement un nombre important d’optimisations spécifiques à leur mise en œuvre pour maintenir à la fois la qualité et la réactivité en temps réel. Les encodeurs convertissent les médias en fonction du codec sélectionné et de la stratégie d’encodage mais ils sont intrinsèquement à la traîne et ils dépassent ou sous-passent par conception pour maintenir une qualité optimale. Enfin, les décodeurs prennent ces médias convertis et les reconvertissent en un format consommable par les appareils de lecture.
Cela représente un défi sur de nombreux fronts car le paysage des décodeurs est fragmenté et non uniforme de part la compatibilité et les capacités des drivers de puces et leurs performances. Il est donc essentiel de traiter ce problème de manière cohérente pour assurer une mise à l’échelle.
Voici un exemple pratique de la façon dont cela se passe dans la vie réelle.
Comme vous pouvez le voir, la demande de navigation dans un menu où le jeu fonctionne à une fréquence d’images beaucoup plus élevée, mais pas aussi visuellement riche, est très différente d’une scène cinématographique visuellement riche qui fonctionne généralement à une fréquence d’images basse.
Imaginez que vous passez d’un menu à l’autre dans un jeu et imaginez que l’encodeur de ce dernier doive maintenir une qualité constante mais être capable de gérer cela en temps réel.
Et bien sûr, la mise en réseau est un défi, n’est-ce pas ?
Lorsqu’on fait du cloud gaming, il est nécessaire de faire face aux défaillances du réseau et aux trafics concurrents. Ce problème doit être traité et atténué en temps réel. Par exemple, si une famille commence à regarder YouTube pendant qu’un joueur est en train de jouer sur Stadia, le joueur doit être en mesure d’obtenir sa part de bande passante. Et contrairement à ce qui est possible de faire avec la Diffusion Dynamique et Adaptative par HTTP (appelée DASH), il n’est pas possible de tirer parti des tampons clients dont la taille est réduite. La dissimulation et la réduction des pertes sont donc très difficiles.
Enfin et si cela ne suffisait pas, la possibilité offerte par le jeu ajoute une toute nouvelle dimension de complexité sur ce qui est affecté par le jeu, le joueur et, bien sûr, le réseau sous-jacent. Comme le montre un article publié par S Vang et S Day en 2009 sur la jouabilité du cloud gaming, les facteurs qui l’affectent sont à la fois subjectifs et objectifs. La fréquence d’images, la résolution, la bande passante, le délai, la qualité, la fluidité… Tous ces facteurs entrent en jeu.
La prochaine partie sera consacrée aux recherches menées par l’équipe “Jouabilité“ sur le streaming de jeux vidéo, recherches qui ont permis d’aboutir à la création de Stadia. Si vous ne voulez pas rater cet article, abonnez-vous au blog. Sinon pour continuer cette discussion technique, n’hésitez pas à vous inscrire sur le Discord Stadia Fr si ce n’est pas déjà fait.