7 stream
syui edited this page 2024-11-17 04:40:43 +00:00

ライブ配信やゲームプレイ、配信保存をself-hostする方法です。

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を無効にして配信のみにする方法です。

https://github.com/EpicGames/PixelStreamingInfrastructure/blob/master/Frontend/Docs/Customizing%20Player%20Input%20Options.md

    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を使用すると実現できるかもしれません。

pixel streaming(PS) ext plugin

superhero fligth animationsを出しているところがやっているのがlocal multiplayerのpixel streamingで、一つのアプリ起動で複数人にcamera, controllerを割り当てる。plugin自体はまだ非公開。

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の時点では未完成です。