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