💡

[UE5]PixelStreamingのパラメータ設定方法

2022/12/14に公開

はじめに

PixelStreamingDemoをAWSに実装する記事を書いた後、1ヶ月程集中してPixel Streamingに向き合ってきて、Matchmakerやら起動オプションやらがなんとなくわかってきたので備忘録 + Advent Calenderに参加という一石二鳥の目的で記事にします。

全体構成図

PixelStreamingプラグインに含まれるMatchmakerを使用して、各ユーザーに個別のUEアプリ体験を提供する際の構成図例です。この例ではSignaling ServerとUEアプリを同じサーバーに配置しています。

Matchmakerの起動

Matchmakerのフォルダを見てみましょう。

公式ページをみると、Signaling Serverを起動する前にrun.batを実行してMatchmakerを起動せよとのこと。

ではrun.batの中を見てみましょう。

run.bat
:: Copyright Epic Games, Inc. All Rights Reserved.
@echo off

pushd %~dp0

call setup.bat

title Matchmaker

::Run node server
node matchmaker %*

popd
pause

setup.batを実行した後にmatchmaker.jsを呼び出し、run.bat実行時の引数をmatchmaker.jsに全て渡していますね。

また、matchmaker.jsの中で、config.jsonを読み取る記述があります。

config.json
{
	"HttpPort": 80,
	"UseHTTPS": false,
	"MatchmakerPort": 9999,
	"LogToFile": true
}

config.jsonの値を書き換えるか、run.bat実行時に引数を指定することでconfig.jsonの値を上書きすることができます。

実行例
run.bat --HttpPort 90 --LogToFile false

Signaling Serverの起動

前回書いた記事でも軽く触れているので参考に。
起動方法は公式ページにも記載してあるので省きます。

ここでもconfig.jsonを見てみましょう。

config.json
{
	"UseFrontend": false,
	"UseMatchmaker": false,
	"UseHTTPS": false,
	"UseAuthentication": false,
	"LogToFile": true,
	"LogVerbose": true,
	"HomepageFile": "/Public/player.html",
	"AdditionalRoutes": {},
	"EnableWebserver": true,
	"MatchmakerAddress": "",
	"MatchmakerPort": "9999",
	"PublicIp": "localhost",
	"HttpPort": 80,
	"HttpsPort": 443,
	"StreamerPort": 8888,
	"SFUPort": 8889
}

ここでもStart_SignallingServer.ps1実行時に引数を指定することでconfig.jsonの値を上書きすることができます。
デフォルトでUseMatchmakerはfalseになっているので、trueに直さなければなりません。
UseMatchmakerをtrueにした場合、MatchmakerAddressMatchmakerPortを指定する必要があります。
MatchmakerAddressは127.0.0.1、MatchmakerPortは9999がデフォルトです。

実行例
./Start_SignallingServer.ps1 --UseMatchmaker true --MatchmakerAddress 0.0.0.0 --MatchmakerPort 9999 --PublicIp 0.0.0.1 --HttpPort 88 --StreamerPort 8988 --SFUPort 8989

UEアプリの起動

公式のPixelStreamingリファレンスにある設定項目は、UEアプリ起動時に引数として渡すことで変更可能です。
ただ公式ページが更新されていないのか、書いてある通りに引数を指定しても変更されないことがあるので、プラグインの中身を見て正しい記述をしましょう。

設定項目はエンジンフォルダの
~\Engine\Plugins\Media\PixelStreaming\Source\PixelStreaming\PrivateSettings.cppに記述されています。

例として、PixelStreamingのfpsを変更してみましょう。
Settings.cppでは次のように書かれています。

デフォルトでは60fpsですね。
プロジェクトによりますが、60fpsもいらない場合があります。アクション系のゲームでもない限り、30fpsで十分でしょう。その方がダウンロードするユーザーのデータ使用量にも、提供者側のお財布にも優しくなります。

実行例
~.exe -AudioMixer -PixelStreamingIP=0.0.0.1 -PixelStreamingPort=8888 -PixelStreamingWebRTCFps=30

引数の書き方としては、次の画像のように赤枠で囲った部分をそのまま引数として指定すれば良いみたいです。

ここで注意したいのは、値はスペースではなくで指定し、先頭のハイフンは1つです。
MatchmakerやSignalingServerとは違うので注意しましょう。

まとめ

書いてて気づいたが、SignalingなのかSignallingなのかわからなくなった。
調べたところどっちでも良いそうで、アメリカはSignaling、イギリスはSignallingを使う人が多いらしい。(Epicってアメリカの会社じゃなかったか?)
ともあれPixelStreamingに関しての調査は一旦終わりなのと、 UE Advent Calenderにも参加できたという自分的に節目のような感じなので、新年からはまた他の事をやってみますかね。

明日のカレンダー3は@daria_siebenさんの「ダメージ計算周りのパラメーターをGameplayEffectで設定していたのをDataAssetで設定するように移行した話」です。

Discussion