Ich habe kürzlich einen kurzen Artikel über das Streaming von DOS-Spielen in einem Browser geschrieben. Es ist Zeit für eine kleine technische Überprüfung. Das Projekt wird ausschließlich von mir durchgeführt, daher positioniere ich es als Amateurprojekt. Unter den öffentlich verfügbaren Technologien, die Streaming-Spiele ermöglichen, kann nur WebRTC darauf unterschieden werden
, und mein Dienst ist aufgebaut. Wie Sie wahrscheinlich bereits vermutet haben, besteht es aus einem Browser und einem Serverteil.
Browserteil
Die Hauptkomponente des Dienstes ist der Janus WebRTC-Server. Standardmäßig bietet es eine einfache API für die Verbindung zum Server und die Unterstützung des WebRTC-Protokolls. Daher erwies sich der Browserteil als so einfach wie möglich, als Wrapper über die Janus-API .
Serverteil
Auf der serverseitigen Dosbox werden ffmpeg und Janus verwendet . Sie werden alle zusammen in einem Docker-Container gesammelt.
Die aktuelle Version des Dienstes verwendet:
- Neueste Dosbox-Version
- Neueste Version von ffmpeg, kompiliert mit Unterstützung für vp9 und Opus Codec
- Die neueste Version von Janus mit geringfügigen Ergänzungen (dazu unten)
Audio- und Video-Streaming
Wenn Docker gestartet wird, startet der Supervisor alle drei Programme. Dosbox startet das Spiel und generiert kontinuierlich Frames und Sounds. Diese Daten werden an ffmpeg umgeleitet, wodurch zwei RTP-Streams (Ton, Video) erstellt werden. Das Janus-Streaming-Plugin ( Standardkomponente ) hört diese Streams ab und generiert WebRTC-Daten für den Browser.
{dosbox} --> {ffmpeg} --> {janus streaming plugin} --> {browser}
Tastaturunterstützung
WebRTC-Datenfeeds werden zur Unterstützung von Spielaktionen (Tastenklicks) verwendet. Jedes Mal, wenn der Spieler auf die Schaltfläche klickt, wird der Tastatur-Handler des Browsers ausgelöst. Es sendet Textbefehle über den Datenkanal an den Server.
- Pipe Kdown - wenn auf die Schaltfläche geklickt wird
- Pipe Kup - wenn der Knopf losgelassen wird
Auf dem Server werden diese Daten von meiner Erweiterung ( Quellcode ) verarbeitet. Es wird eine Named Pipe erstellt, in der eingehende Befehle aufgezeichnet werden. Andererseits liest dosbox diese Pipe ständig und fügt der Warteschlange Tastaturereignisse zur Verarbeitung hinzu. Datenkanäle arbeiten in einem geordneten Modus, die Lebensdauer eines Pakets beträgt 16 ms. Jene. Tastaturereignisse werden in der Reihenfolge geliefert, in der sie gedrückt wurden.
{browser} --> {janus data text channel} --> {pipe} --> {dosbox}
Infrastruktur
Der Dienst wird auf der Amazon-Plattform gestartet. Für jeden Client wird eine neue Fargate-Aufgabe erstellt. Nach dem Start erhält die Aufgabe eine öffentliche IP, die an den Browser gesendet wird. Nach Erhalt einer IP initiiert der Browser eine WebRTC-Verbindung zum Janus-Server. Wenn die Dosbox beendet ist, wird die Fargate-Task automatisch gestoppt. Die Anzahl der gleichzeitigen Spieler ist technisch unbegrenzt.
{browser} --> {+fargate} --> {ip} --> {browser}
...
{browser} --> {stop} --> {-fargate}
Anstelle einer Schlussfolgerung
Es stellte sich ganz oberflächlich heraus.
Es stellte sich ganz oberflächlich heraus, bis ich verstehe, worüber ich genauer schreiben soll. Im Allgemeinen erwies sich die Architektur als recht funktionierend. Der Service ist kostenlos, Sie können ihn hier ausprobieren .
Übersichtsartikel: DOS Cloud Gaming