ホスティングおよびネットワーキングの操作ガイド

Pixel Streaming システムをホストするためのネットワークの詳細なコンフィギュレーションおよび考慮事項を説明します。

Epicでは、GoogleがWebRTCのバージョンにおける脆弱性を公開 (詳細はこちら)したことを認識しており、EOS SDKに対する影響および次のステップを調査しています

Web サービスの開発やデプロイの経験がない場合でも、「概要」および「入門」ページで説明されている、シンプルな LAN 内で機能する Pixel Streaming を設定することは可能です。ただし、複雑なネットワークやオープンなインターネット上でサービスをデプロイする場合や、ユーザー エクスペリエンスと接続フローを設計し直す場合は、現行の設定を再検討する必要があります。

Pixel Streaming を伴うシグナリング サーバー、Web サーバー、および Matchmaker サーバーは、リファレンス実装のみです。これらの実装は、あらゆるケースのための完全なソリューションとして捉えられていません。むしろ、これらは自身の目的に応じて変更することをお勧めします。この目的のために Pixel Streaming Infrastructure (外部ウェブサイト) 内にシグナリング サーバー、Web サーバー、および Matchmaker が用意されているため、Unreal Engine エンド ユーザー ライセンス契約 (「配布」と「エキザンプル」のサブライセンスについて参照してください) に従って自由に配布できます。

Pixel Streaming フロントエンドと Web サーバーの変更の詳細については、「Pixel Streaming インフラストラクチャ」ページを参照してください。

STUN および TURN サーバー

Signaling and Web サーバーが Unreal Engine アプリケーションとブラウザ間で接続を直接ネゴシエートできるようにするためには、互いに相手に自身の IP アドレスを送信する必要があります。つまり、ブラウザは UE5 アプリケーションにより送信された IP アドレスにアクセスできる (その逆も同様) ことが必要です。

シンプルな LAN では、各エンドポイントは通常、それ自身のネットワーク カードで把握しているプライベート IP アドレスを使用して、相手がアクセスできることを前提にしています。オープンなインターネットやサブネットにまたがる場合、またはブラウザと UE5 アプリケーションの間にネットワーク アドレス変換 (NAT) がある場合、一般的にこの前提は当てはまりません。代わりに、各パーティは STUN (Session Traversal Utilities for NAT) プロトコルを実装しているサーバーにクエリを送信して、それ自身のパブリック公開の IP アドレスを検出する必要があります。STUN サーバーが各エンドポイントにパブリック公開の IP アドレスを通知した後、Signaling and Web サーバーは直接接続を引き続き仲介できます。

Pixel Streaming with STUN and TURN servers

別の方法として、TURN サーバーを使用して、UE5 アプリケーションとブラウザ間のメディア ストリームを中継することができます。TURN プロトコルでは、TURN サーバーは UE5 アプリケーションとブラウザの両方に接続します。UE5 アプリケーションは、ストリーム データのすべてを TURN サーバーに送信します。ここからブラウザにデータが転送されます。この場合、UE5 アプリケーションとブラウザ間に直接接続はありません。ワイヤレス キャリア ネットワーク経由でモバイル デバイスをサポートする必要がある場合、TURN サーバーを使うこと以外の選択肢はありません。モバイル ネットワークでは、WebRTC プロトコルを使用してクライアントが正常に接続できないことがあります。

サーバーから別のサーバーにフォールバックする機能とともに、STUN/TURN プロトコルを併用して、ICE (Interactive Connectivity Establishment) フレームワークを構成します。

インターネット上では、STUN/TURN サーバーの オープンソース実装 をいくつか見つけることができます。独自にホスティングするのではなく、無料で利用可能な パブリック STUN サーバー も存在しますが、このようなサービスを利用する際は注意が必要です。TURN プロトコルを介してメディアを中継する際に必要なスループットと帯域幅のため、無料のパブリック TURN サービスはほとんどありません。

利用しやすいように、「Samples/platform_scripts/」フォルダ内には Windows および Linux で CoTURN を実行するスクリプトが含まれています。CoTURN は、無料かつオープン ソースの STUN/TURN サーバーであり、プロダクション環境にも対応します。以前にシッピングに含めていた STUN/TURN リファレンス サーバーは、プロダクション レベルのものではなかったため、これらは削除しました。

ICE 接続を使用するように Pixel Streaming を設定するには、使用する STUN および TURN サーバーのホスト名を Signaling and Web サーバー用の peerConnectionOptions コンフィギュレーション パラメータに設定する必要があります。このパラメータのフォーマットや指定方法の詳細については、 「Pixel Streaming リファレンス」 を参照してください。

さらに、独自の STUN または TURN サーバーをホスティングする場合、peerConnectionOptions パラメータで指定した IP アドレスとポートが、オープンなインターネット上でも認識できることを確認してください。

複数プレイヤー エンドポイント

同じ Unreal Engine セッションにすべてのユーザーをまとめたいが、そのセッションをコントロールするのに、同じ機能をすべてには利用したくない場合があります。

たとえば、プレゼンテーションのようなエクスペリエンスを作成するときに、プレゼンターは自分のブラウザから Unreal Engine をフルコントロールできるようにして、他のユーザーはストリームを表示できるだけにする場合があります。あるいは、ユーザーごとにカスタマイズした一連のコントロールを作成して、ユーザーが協力してエクスペリエンスの異なる部分をリアルタイムでコントロールできるようにする場合などもあります。

これらのシナリオでは、1 つのスタックの Web サービスが動作している Unreal Engine の 1 つのインスタンスがありますが、Signaling and Web サーバーに異なるプレイヤー HTML ページを作成できます。

Multiple player pages

このシナリオでは、異なる HTML プレイヤー ページとその JavaScript 環境をカスタマイズでき、必要なコントロールだけを公開できます。次に、各クラスのユーザーが Signaling and Web サーバーから異なる URL をリクエストする必要があります。たとえば、プレゼンターは http://yourhostname/presenter.html を、他のユーザーは http://yourhostname/attendee.html をロードします。

プレイヤー ページのカスタマイズ方法の詳細については、「プレイヤー Web ページをカスタマイズする」を参照してください。

マッチメイキングのある複数フルスタック

すべてのユーザーが同じストリームに接続するのではなく、各ユーザーに対して独自のインタラクティブなエクスペリエンスを提供したい場合もあります。これを実行するためには、各ユーザーに対して Pixel Streaming コンポーネントの個別スタックを実行して、各ユーザーを個別の Signaling and Web サーバーに誘導し、接続を開始します。

個別ホストで Pixel Streaming コンポーネントの各スタックを設定できます。または、全員が異なるポートで通信するように各スタック内でコンポーネントに対してポートを設定をすることで、同じホストで複数のスタックを配置することもできます。これらのポート設定の詳細については、「Pixel Streaming リファレンス」を参照してください。

同じコンピュータで Pixel Streaming を使用して Unreal Engine の複数インスタンスを実行する計画の場合、NVIDIA GeForce ラインなど一般ユーザー レベルの多くのグラフィック カードで同時に実行できるエンコーダは最大 3 つであることに注意してください。Quadro や Tesla などプロフェッショナル グレードのカードには、これと同じ制限はありません。

この種の設定のために、Pixel Streaming システムで、利用可能な Signaling and Web サーバーがどれか、クライアント接続で使用されているかどうかを追跡する Matchmaker (マッチメイカー) サーバーを利用することができます。

Multiple full stacks with a Matchmaker Server

各クライアントを独自の Signaling and Web サーバーの URL に接続させるのではなく、Matchmaker サーバーに最初に接続します。Matchmaker は独自の Signaling and Web サーバー (クライアントと UE5 アプリケーション間のピアツーピア接続を設定) に対する各リクエスタのリダイレクトを処理します。接続がアクティブである限り、Matchmaker サーバーは、ブラウザからの新しい受信接続を同じ Signaling and Web サーバーにはリダイレクトしません。

Pixel Streaming システムには、Matchmaker サーバーのリファレンス実装が「Samples/PixelStreaming/WebServers/Matchmaker」フォルダに含まれています。このサーバーはそのまま使用できますが、Signaling and Web サーバーから同じメッセージを処理するのであれば、ニーズに合わせて「matchmaker.js」ファイルをカスタマイズできます。

Matchmaker サーバーの設定方法

  1. Signaling and Web サーバーを起動する前に、「run.bat」ファイルを実行して Matchmaker サーバーを起動します。デフォルトでは、サーバーはクライアントからの HTTP 接続に対してポート 90 でリッスンし、Signaling and Web サーバーからの接続はポート 9999 でリッスンします。コマンドラインで次のコンフィギュレーション パラメータを指定することで、これらの設定をオーバーライドすることもできます。

    パラメータ

    説明

    --HttpPort

    ブラウザからの HTTP 受信接続を Matchmaker サーバーがリッスンするポート番号を定義します。

    --MatchmakerPort

    Signaling and Web サーバーからの受信ステータス メッセージを Matchmaker サーバーがリッスンするポート番号を定義します。

    次に例を挙げます。

    > node cirrus --HttpPort 88 --MatchmakerPort 9988

  2. Signaling and Web サーバーに対する次のコンフィギュレーション パラメータを設定します。

    パラメータ

    説明

    --UseMatchmaker

    このパラメータを「true」にすると、Signaling and Web サーバーが現在のステータスを Matchmaker サーバーに送信するようになります。

    --MatchmakerAddress

    Signaling and Web サーバーの接続先である Matchmaker サーバーの IP アドレス。

    --MatchmakerPort

    Signaling and Web サーバーがメッセージを Matchmaker サーバーに送信する必要があるときに使用するポート番号。この値が Matchmaker サーバー用に設定した --MatchmakerPort 値と一致することを確認します。

    --PublicIp

    Signaling and Web サーバーのパブリック公開の IP アドレス。Matchmaker サーバーがユーザーを Signaling and Web サーバーにリダイレクトするときは、この IP アドレスに誘導します。したがって、これは接続するブラウザから認識できる必要があります。

    --HttpPort

    HTTP 接続を Signaling and Web サーバーがリッスンするポート番号。Matchmaker サーバーがユーザーを Signaling and Web サーバーにリダイレクトするときは、このポート番号に誘導します。

    これらのパラメータを設定する方法については、「Pixel Streaming リファレンス」を参照してください。

オンデマンドのスケーリング

上記に示したような戦略、つまりクライアントの各受信接続に個別のフルスタックで対応しようとすると、実行する Unreal Engine アプリケーションの数を事前に設定したくない場合があります。サーバー数よりユーザー数が少ない場合はリソースが無駄になり、逆にユーザー数よりサーバー数が少ない場合は、接続がフリーになるまでユーザーは待機する必要があります。代わりに、クライアントが接続を試みるたびに、新しいサーバー インスタンスを起動させるようにしたほうがよい場合があります。

Pixel Streaming システムのコンポーネントとオプションの Matchmaker サーバーがあると、このような動的にスケーリングするホスティング システムの設定に必要なすべての構成要素が揃います。ただし、今のところ、このレベルのクラウド デプロイメントを独自のクラウド サービス プロバイダで設定するかはユーザー次第です。

SFU とは

Selective Forwarding Unit (SFU) とは、メディア ストリームを参加者間でインテリジェントにルーティングするサーバーです。Pixel Streaming での SFU の役割は、Unreal Engine アプリケーションからのストリーミング データを受信し、受信者のピア (通常は接続された Web ブラウザ) に配信することです。各受信者のピアの優勢なネットワーク状況に適合するよう任意でデータの一部を設定します。

SFU 使用時には、Pixel Streaming はストリーミング帯域幅を適合させるためにサイマルキャストの手法を実装します。このサイマルキャストの手法では、Unreal インスタンスによって異なる解像度で複数のストリームが生成されます。続いて、SFU は、受信者のネットワーク状況に基づいて、受信者に送信するストリームの品質バリアントを選択します。

現時点では、Pixel Streaming の SFU 機能は実験段階であるため、注意してください。

SFUSetup

SFU を使用する場合

SFU は 1 対多のストリーミングを可能にします。これは、ピアツーピアの形式で Pixel Streaming アプリケーションにすべてのピアが接続された場合に、通常対応可能なピアの接続数を超える可能性のある状況です。SFU の使用が多くの場合に適切となるのは、Pixel Streaming アプリケーションに複数の受信者が接続する必要があり、その受信者がさまざまなネットワーク状況下にあって、異なる品質のストリーミング レベルが求められる場合 (ビットレート、解像度、フレームレートが低いなど) です。

SFU のコンフィギュレーション

SFU のコンフィギュレーションは、「Samples/PixelStreaming/WebServers/SFU」の「config.js」ファイルを変更することで行えます。

デフォルトで、SFU は 2 つの品質レベルを実現するよう構成されています。1 つは完全な解像度のストリームで、もう 1 つは半分の解像度のストリームです。このコンフィギュレーションは、 -SimulcastParameters= (詳細については、「Pixel Streaming リファレンス」を参照) を使用することで変更できます。

3 つを超えるサイマルキャスト ストリーミングを作成すれば、コンシューマー向け GPU で H.264 ハードウェア エンコーダ (多くの場合でエンコーディング セッションは最大 3 つ) を使用していても、その制限を超えることができます。

SFU レイヤー切り替え機能を作成する

SFU のレイヤー切り替え機能を最大限テストするため、ストリーミングで SFU の利用可能なレイヤーの切り替えを強制するのに必要なブループリントを追加しました。

SFULayerBP

上記をレベルのブループリントに追加すると、割り当てられたキーを接続済みのピアとして使用し、レイヤーを切り替えることができます。

SFU は、接続に基づいて自動的にレイヤーを切り替えるように設計されているため、実際の実装にこのブループリントを使用することは必須ではありません。

Layer1

レイヤー 1

Layer2

レイヤー 2

Layer3

レイヤー 3

ホスト マシン ハードウェア機能

Unreal Engine アプリケーションと Pixel Streaming Web サービスをホストするのに Amazon (AWS) や Microsoft Azure などのサービス プロバイダを利用することを選択した場合は、異なるハードウェア機能を備えたホストの多様な複数ティアから選択することになります。ホストの機能は、提供可能なストリームの品質に影響することに留意してください。

たとえば、GPU の性能やメモリが十分ではないホストを選択すると、ストリームでビデオの品質を最大限に引き出せない場合があります。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル