最近、ブラウザでのDOSゲームのストリーミングに関する短い記事を書きました。少し技術的なレビューをする時が来ました。このプロジェクトは私だけが行っているので、アマチュアとして位置づけています。ストリーミングゲームを可能にする公開されているテクノロジーの中で、WebRTCのみを区別でき
、私のサービスが構築されています。ご想像のとおり、ブラウザとサーバーの部分で構成されています。
ブラウザ部分
このサービスの主要コンポーネントは、JanusWebRTCサーバーです。箱から出して、サーバーに接続し、WebRTCプロトコルをサポートするためのシンプルなAPIを提供します。したがって、ブラウザ部分は、Janus APIのラッパーとして、可能な限り単純であることが判明しました 。
サーバー部分
サーバー側の dosboxでは、 ffmpegと Janusが使用されます。それらはすべてドッカーコンテナにまとめられます。
サービスの現在のバージョンは以下を使用します。
- 最新のdosboxバージョン
- vp9およびopusコーデックのサポートでコンパイルされたffmpegの最新バージョン
- マイナーな追加を含む最新バージョンのjanus(以下でそれらについて)
オーディオとビデオのストリーミング
dockerが起動すると、スーパーバイザーは3つのプログラムすべてを起動します。Dosboxはゲームを起動し、フレームとサウンドの生成を継続的に開始します。このデータはffmpegにリダイレクトされ、2つのRTPストリーム(サウンド、ビデオ)が作成されます。Janusストリーミングプラグイン( 標準コンポーネント)は、これらのストリームをリッスンし、ブラウザー用のWebRTCデータを生成します。
{dosbox} --> {ffmpeg} --> {janus streaming plugin} --> {browser}
キーボードのサポート
WebRTCデータフィードは、ゲームアクション(ボタンクリック)をサポートするために使用されます。プレーヤーがボタンをクリックするたびに、ブラウザーのキーボードハンドラーがトリガーされます。データチャネルを介してテキストコマンドをサーバーに送信します。
- パイプkdown-ボタンがクリックされたとき
- pipekup-ボタンが離されたとき
サーバーでは、このデータは私の拡張機能(ソースコード)によって処理され ます。着信コマンドが記録される名前付きパイプが作成されます。一方、dosboxは常にこのパイプを読み取り、処理のためにキーボードイベントをキューに追加します。 データチャネルは順序付きモードで動作し、1つのパケットの寿命は16ミリ秒です。それら。キーボードイベントは、押された順序で配信されます。
{browser} --> {janus data text channel} --> {pipe} --> {dosbox}
インフラ
このサービスはAmazonプラットフォームで開始されます。クライアントごとに新しいFargateタスクが作成されます。タスクを開始すると、パブリックIPが受信され、ブラウザーに送信されます。IPを受信すると、ブラウザはJanusサーバーへのWebRTC接続を開始します。dosboxが終了すると、Fargateタスクは自動的に停止します。技術的には、同時プレイヤーの数に制限はありません。
{browser} --> {+fargate} --> {ip} --> {browser}
...
{browser} --> {stop} --> {-fargate}
結論の代わりに
何を書くべきかをもっと詳しく理解するまで、それはかなり表面的 に判明しました。一般的に、アーキテクチャは非常に機能していることが証明されました。このサービスは無料です。こちらでお試し いただけます。
レビュー記事: DOSクラウドゲーミング