Epicでは、GoogleがWebRTCのバージョンにおける脆弱性を公開 (詳細はこちら)したことを認識しており、EOS SDKに対する影響および次のステップを調査しています。
通常、ユーザーが Unreal Engine アプリケーションを体験するデバイスは、ゲーム ワールドを画面にレンダリングし、ゲームプレイ ロジックを実行するデバイスと同じです。これは、ビルドするターゲットがデスクトップ プラットフォーム、モバイル OS、コンソールのいずれであっても違いはありません。マルチプレイヤー ネットワーク ゲームでは、ゲームプレイ ロジックの各部を分散してアプリケーションの複数のインスタンスで実行できます。ただし個々のインスタンスは、それぞれのプレイヤーに対して、引き続きローカルにゲーム ワールドをレンダリングします。HTML5 デプロイメント オプションを使用して Web ブラウザ内で実行できるプロジェクトのバージョンを作成するときでも、ゲーム ロジックとレンダリングは各ユーザーの Web ブラウザ内でローカルに実行されることに変わりはありません。
これに対して Pixel Streaming では、Unreal Engine アプリケーションをリモートで、ユーザーがおそらく見ることがないコンピュータで実行します。このコンピュータは、例えば、物理的に組織内のどこかにあるデスクトップの場合もあれば、クラウドのホスティング サービスで提供される仮想マシンの場合もあります。Unreal Engine では対象コンピュータで利用可能なリソース、CPU、GPU、メモリなどを使用して、ゲーム ロジックを実行し、各フレームをレンダリングします。このレンダリング出力を連続的にエンコードしてメディア ストリームに渡します。これは、軽量なスタックである Web サービスを通過します。その後ユーザーは、他のコンピュータやモバイル デバイスで動作する標準 Web ブラウザでブロードキャスト ストリームを表示できます。

ユーザーにとっては、YouTube や Netflix などのサービスでビデオ ストリームを視聴する場合と同じ結果になります。ただし、次の 2 つの点が異なります。
- ストリームでは、事前に記録されたビデオ クリップを再生するのではなく、Unreal Engine でリアルタイムに生成されてレンダリングされたフレームとオーディオを再生する。
- キーボード、マウス、およびタッチ イベント、さらにプレイヤー Web ページから発信されるカスタム イベントを Unreal Engine に送信することで、ユーザーはブラウザからエクスペリエンスをコントロールできる。
利点
Pixel Streaming システムを使用することで、いくつかのメリットを得ることができます。
- モバイル デバイスや軽量の Web ブラウザでも、他の場合よりも優れた画質のグラフィックを表示できる。強力な GPU を利用するネイティブ デスクトップ アプリケーションでレンダリングするときにのみ可能なレンダリング機能を使用して、複雑なシーンを高解像度で表示できます。
- ユーザーが大規模な実行可能ファイルやコンテンツ ファイルを事前にダウンロードする必要はなく、インストールの必要もない。ユーザーがダウンロードする必要があるのは、プレイするときのメディア ストリームだけです。
- 複数の個別パッケージを作成して配布することなく、複数のプラットフォームをサポートできる。アプリケーションを Windows で一度パッケージ化すると、ユーザーは任意のプラットフォームを使用して、コンテンツを体験できます。ユーザーがストリームを表示できるのは、WebRTC 接続モデルをサポートする最新のブラウザでです。これには、デスクトップ、iOS、Android プラットフォーム用の Google Chrome と Mozilla Firefox も含まれます。(「Pixel Streaming のリファレンス」 を参照。)
- Pixel Streaming システムには、ローカル ネットワーク内で比較的簡単に設定可能な最小限のコンポーネントが含まれる。ただし、備わっている機能は強力で、Web サービスのデプロイに豊富な経験があるチームが、クラウドでホストされたカスタム プラットフォームを作成するためのベースとしても使用できます。
- Pixel Streaming は WebRTC ピアツーピア通信フレームワークを使用して、ユーザーと Unreal Engine アプリケーション間のレイテンシーを可能な限り低く抑える。
アーキテクチャ
次の画像では、シンプルな Pixel Streaming セットアップの各コンポーネントの概要について説明します。

コンポーネント
- Pixel Streaming プラグイン - このプラグインは Unreal Engine 内部で実行されます。レンダリングされたフレームの最終結果を H.264 ビデオ圧縮を使用してエンコードします。ゲーム オーディオとともにビデオ フレームをメディア ストリームにパックして、WebRTC Proxy サーバーにストリームを送信します。
- Signaling and Web サーバー - Signaling and Web サーバーは、ブラウザと WebRTC Proxy サーバー間で接続のネゴシエーションを行い、メディア ストリームを再生する HTML および JavaScript 環境をブラウザに提供します。
接続プロセス
- すべての Pixel Streaming コンポーネントを起動する際、Unreal Engine 内で実行されている Pixel Streaming プラグインはまず WebRTC Proxy サーバーとの接続を確立し、メディア ストリームの送信を開始します。
- クライアントは、JavaScript で記述されたコントロール コードやプレイヤーのウィジェットを含む HTML ページを提供する Signaling サーバーに接続します。
- ユーザーがストリームを開始するとき、Signaling サーバーはクライアント ブラウザと WebRTC Proxy サーバー間の直接接続の確立をネゴシエートします。
この接続を機能させるには、ブラウザと WebRTC Proxy サーバーで互いの IP アドレスを認識できるようにする必要があります。両方が同一のネットワーク上で動作している場合は、通常は互いの IP アドレスが直接認識されています。ただし、2 つのエンドポイント間でネットワーク アドレス変換 (NAT) サービスを使用している場合は、外部から認識可能ないずれかの IP アドレスが変更されることがあります。これを解決するには STUN または TURN サーバーを使用する方法が一般的です。これによって、各コンポーネントに外部から認識可能な IP アドレスが伝えられます。詳細については、「ホスティングおよびネットワーキング ガイド」を参照してください。
- クライアントと WebRTC Proxy 間の接続が確立されると、WebRTC Proxy は直ちにブラウザに直接メディア ストリームを開始します。クライアントの入力は、プレイヤー ページの JavaScript 環境から直接 WebRTC Proxy に送信され、中継されて Unreal Engine に返されます。
- Signaling and Web サーバーは、メディア ストリームの再生が開始された後でもブラウザと WebRTC Proxy サーバーとの接続を維持します。これは、必要な場合にユーザーに対してストリームを中止したり、ブラウザから接続を切断されたときに対応できるようにしたりするためです。
上記のアーキテクチャを設定する手順については、「Pixel Streaming 入門」を参照してください。