ライブ配信やゲームプレイ、配信保存をself-hostする方法です。
- game : pixel streaming
- live : restreamer
- video : mediacms
- bbs : bsky/oauth
pixel streaming
https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-pixel-streaming-reference
docs : https://github.com/EpicGames/PixelStreamingInfrastructure/tree/master/Frontend/Docs
# https://github.com/EpicGamesExt/PixelStreamingInfrastructure
$ mkdir -p ~/git && cd ~/git
$ git clone https://github.com/EpicGamesExt/PixelStreamingInfrastructure
$ cd ~/git/PixelStreamingInfrastructure/Matchmaker/platform_scripts/cmd/
$ ./setup.bat
$ ./run.bat
# https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-pixel-streaming-reference
# --HttpPort 90
# --MatchmakerPort 9999
# Signaling and Web サーバーに対する次のコンフィギュレーション パラメータを設定します。
$ cd ~/git/PixelStreamingInfrastructure/SignallingWebServer/platform_scripts/cmd/
$ ./setup.bat
$ ./Start_SignallingServer_nopublic.ps1 --UseMatchmaker true --MatchmakerAddress 127.0.0.1 --MatchmakerPort 9999 --PublicIp localhost --HttpPort 80
Matchmaker
を使わないと操作が共通になります。したがって、Matchmaker
を使って各ユーザーが使用するStreamerIdを選択して別々のstackにアクセスするようにします。
urlはhttp://127.0.0.1/?StreamerId=DefaultStreamer, http://127.0.0.1/?StreamerId=DefaultStreamer1
という形になります。このidは起動しているアプリの数だけ生成されます。
ただ、アプリの起動数が多すぎるとserverの負荷が大きくなります。
これを外部につなげる場合はcloudflare tunnelなどを使いましょう。
err
webrtc connection negotiated
このように表示される場合はipを変えてください。同じnetwork内だとうまくいかない場合があります。
option
https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-engine-pixel-streaming-reference
disable player controller
playerのcontrollerを無効にして配信のみにする方法です。
const config = new Config({ useUrlParams: true });
config.setFlagEnabled(Flags.MouseInput, false);
config.setFlagEnabled(Flags.KeyboardInput, false);
config.setFlagEnabled(Flags.TouchInput, false);
config.setFlagEnabled(Flags.GamepadInput, false);
config.setFlagEnabled(Flags.XRControllerInput, false);
const stream = new PixelStreaming(config);
もしくはSignallingWebServer/Public/player.js
の以下の箇所を探してfalse
にします。そして、settingを呼び出せないようにします。
this.flags.set(Flags.KeyboardInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.KeyboardInput, 'Keyboard input', 'If enabled, send keyboard events to streamer', false, useUrlParams));
this.flags.set(Flags.MouseInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.MouseInput, 'Mouse input', 'If enabled, send mouse events to streamer', false, useUrlParams));
this.flags.set(Flags.TouchInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.TouchInput, 'Touch input', 'If enabled, send touch events to streamer', false, useUrlParams));
this.flags.set(Flags.GamepadInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.GamepadInput, 'Gamepad input', 'If enabled, send gamepad events to streamer', false, useUrlParams));
this.flags.set(Flags.XRControllerInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.XRControllerInput, 'XR controller input', 'If enabled, send XR controller events to streamer', false, useUrlParams));
multiplayer
pixel streamingとcallab viewerやvagon streamを使用すると実現できるかもしれません。
- https://dev.epicgames.com/documentation/en-us/unreal-engine/collab-viewer-template-quick-start-in-unreal-engine
- https://vagon.io/blog/how-to-create-multiplayer-unreal-engine-experiences
pixel streaming(PS) ext plugin
superhero fligth animationsを出しているところがやっているのがlocal multiplayerのpixel streamingで、一つのアプリ起動で複数人にcamera, controllerを割り当てる。plugin自体はまだ非公開。
- https://www.docswell.com/s/indieusgames/5EXLLJ-2024-10-23-164940
- https://leon-gameworks.connpass.com/event/328282/
- https://x.com/tarava777/status/1857382063818645792
restreamer
$ git clone https://github.com/datarhei/restreamer
$ cd restreamer
$ docker compose up
services:
restreamer:
image: datarhei/restreamer
#image: datarhei/restreamer:cuda-latest
ports:
- 8080:8080
- 1935:1935
- 6000:6000/udp
restart: always
volumes:
- ./data/config:/core/config
- ./data/data:/core/data
なるべくrtmp
ではなくsrt
を使用してください。rtmpのport:1925
に関しては使わないなら閉じても構いません。
video
配信後のvideoの保存先はrestreamerのserverに保存してhtmlをカスタマイズするのが一番いい。
ただし、自動化には仕組みやコードを書かないといけない。また、動画の安定性はserverやffempg(convert)に依存する。再生されるとserver全体が重くなることもありうるし、別のhost先でやったほうがいいかもしれない。
bsky/oauth
bbs, chat, commentなどはbskyのoauthを利用するのがいいでしょう。
連携に関しては実装できていませんが、大まかな流れを解説します。
まずoauthが完了したときに自サービスのアカウント作成を行います。これらは全部自動化されます。idはdidをそのまま使用します。
今回は簡易版なので、login画面に移るとbbsが表示され、投稿は自動でhandleを入れます。bbsは自分で作る必要があり、bsky/oauthは2024/10/23の時点では未完成です。