Jeux DOS Architecture de service de streaming amateur

J'ai récemment écrit un court article sur la diffusion de jeux DOS dans un navigateur. Il est temps de faire un petit examen technique. Le projet est mené exclusivement par moi, je le positionne donc en amateur. Parmi les technologies accessibles au public qui permettent le streaming de jeux, seul WebRTC peut y être distingué et mon service est construit. Comme vous l'avez probablement déjà deviné, il se compose d'un navigateur et d'une partie serveur.





Partie navigateur



Le principal composant du service est le serveur Janus WebRTC. Prêt à l'emploi, il fournit une API simple pour se connecter au serveur et prendre en charge le protocole WebRTC. Par conséquent, la partie navigateur s'est avérée aussi simple que possible, en tant que wrapper sur l' API Janus .



Partie serveur



Du côté serveur dosbox , ffmpeg et Janus sont utilisés . Ils sont tous rassemblés dans un conteneur docker.



La version actuelle du service utilise:



  • Dernière version de dosbox
  • Dernière version de ffmpeg compilée avec le support du codec vp9 et opus
  • La dernière version de janus avec des ajouts mineurs (à leur sujet ci-dessous)




Streaming audio et vidéo



Lorsque le docker démarre, le superviseur démarre les trois programmes. Dosbox lance le jeu et commence à générer des images et des sons en continu. Ces données sont redirigées vers ffmpeg, qui crée deux flux RTP (son, vidéo). Le plugin de streaming Janus ( composant standard ) écoute ces flux et génère des données WebRTC pour le navigateur.



{dosbox} --> {ffmpeg} --> {janus streaming plugin} --> {browser}









Prise en charge du clavier



Les flux de données WebRTC sont utilisés pour prendre en charge les actions de jeu (clics de bouton). Chaque fois que le joueur clique sur le bouton, le gestionnaire de clavier du navigateur est déclenché. Il envoie des commandes texte via le canal de données au serveur.



  • pipe kdown - lorsque le bouton est cliqué
  • pipe kup - lorsque le bouton est relâché




Sur le serveur, ces données sont traitées par mon extension ( code source ). Un tube nommé est créé dans lequel les commandes entrantes sont enregistrées. D'autre part, dosbox lit constamment ce tube et ajoute des événements de clavier à la file d'attente pour traitement. Les canaux de données fonctionnent dans un mode ordonné, la durée de vie d'un paquet est de 16 ms. Ceux. les événements clavier seront livrés dans l'ordre dans lequel ils ont été pressés.



{browser} --> {janus data text channel} --> {pipe} --> {dosbox}













Infrastructure



Le service est lancé sur la plateforme Amazon. Une nouvelle tâche Fargate est créée pour chaque client. Après le démarrage, la tâche reçoit une adresse IP publique, qui est envoyée au navigateur. Lors de la réception d'une adresse IP, le navigateur initie une connexion WebRTC au serveur Janus. Lorsque dosbox se termine, la tâche Fargate s'arrête automatiquement. Il n'y a techniquement aucune limite au nombre de joueurs simultanés.



{browser} --> {+fargate} --> {ip} --> {browser}

...

{browser} --> {stop} --> {-fargate}









Au lieu d'une conclusion



Cela s'est avéré assez superficiel,



cela s'est avéré assez superficiel, jusqu'à ce que je comprenne quoi écrire plus en détail. En général, l'architecture s'est avérée très fonctionnelle. Le service est gratuit, vous pouvez l'essayer ici .



Article de revue: DOS Cloud Gaming



All Articles