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、Linux または Mac 向けに一回アプリケーションをパッケージ化すると、ユーザーは任意のプラットフォームを使用して、コンテンツを体験できます。WebRTC 接続モデルをサポートする最新のブラウザ (Google Chrome と Mozilla Firefox のデスクトップ、iOS および Android プラットフォーム版) でストリームを表示できます。(詳細については、「[Pixel Streaming リファレンス」を参照)。
-
Pixel Streaming システムのコンポーネント数が最小に抑えられ、誰でも比較的簡単にローカル ネットワーク内でセットアップできます。ただし、機能は強力で、Web サービスのデプロイ経験があるチームが、クラウドでホストされたカスタム プラットフォームを作成するためのベースとしても使用できます。
-
Pixel Streaming は WebRTC ピアツーピア通信フレームワークを使用しており、ユーザーと Unreal Engine アプリケーション間のレイテンシーが最小に抑えられます。
アーキテクチャ
次の図では、Pixel Streaming セットアップの各コンポーネントの概要を示します。

コンポーネント
-
Pixel Streaming プラグイン: このプラグインは Unreal Engine 内部で動作します。レンダリングされた全フレームの最終結果を、動画圧縮を使用してエンコードし、これらの動画フレームとゲーム音声をメディア ストリームにパックします。そしてこのストリームを接続された 1 つまたは複数のブラウザに直接ピアツーピア接続で送信します。
-
Signalling and Web サーバー: Signalling and Web サーバーの役割は、ブラウザと Pixel Streaming プラグインの間の接続に対してネゴシエーションを実行し、メディア ストリームを再生する HTML および JavaScript 環境をブラウザに提供することです。
接続処理
-
Pixel Streaming コンポーネントを起動すると、Unreal Engine 内で動作する Pixel Streaming プラグインはまず Signalling and Web サーバーとの接続を確立します。
-
JavaScript で記述された制御コードとプレイヤー ウィジェットを含む HTML ページを提供する Signalling サーバーにクライアントは接続します。
-
ユーザーがストリームを開始するとき、Signalling サーバーはクライアントのブラウザと Unreal Engine アプリケーション間の直接接続のネゴシエーションを実行します。
この接続が機能するためには、ブラウザと Unreal Engine アプリケーションで互いの IP アドレスを知る必要があります。双方が同じネットワークで動作している場合は、通常互いの IP アドレスを直接認識しています。ただし、2 つのエンドポイント間でネットワーク アドレス変換 (NAT) サービスが動作していると、外部に見える双方の IP アドレスを変更することがあります。これを解決するには、一般に STUN または TURN サーバーを使用します。これは各コンポーネントに外部から認識できる IP アドレスを伝えます。詳細については、「ホスティングおよびネットワーキングの操作ガイド」を参照してください。
-
クライアントと Unreal Engine アプリケーション間の接続を確立するとすぐに、Pixel Streaming プラグインはブラウザに直接メディアのストリーミングを開始します。クライアントの入力は、プレイヤー ページの JavaScript 環境から直接 Unreal Engine アプリケーションに送信されます。
-
Signalling and Web サーバーは、メディア ストリームの再生が開始した後でも、ブラウザおよび Unreal Engine アプリケーションへの接続を維持します。つまりブラウザから接続を切断されたときに対応できるようにするためです。
上に示したアーキテクチャをセットアップするステップごとの手順については、「入門編」を参照してください。