VRC screen sharing
VRChatのビデオプレイヤーで使える画面共有。https://vrc.jp/ でサービス中。
構成
1. Webアプリ → 2. WebRTCのSFU → 3. FFmpeg → 4. mediamtx (simple-rstp-server) → 5. AVProVideoPlayer
の順に動画が流れていきます。1. はユーザのPCで、 2.~4.はサーバ(私の場合はDebian Linux)、5. はユーザのPCのVRChatのワールドで動きます。
1. Webアプリ(フロントエンド) https://github.com/BinauralMeet/vrcss
Reactで書いたWebアプリです。画面をキャプチャ(getDisplayMedia()を利用)して、WebRTCを使って2.に送ります。
2. WebRTCのSFU(バックエンド) https://github.com/BinauralMeet/bmMediasoupServer
nodejsで動くWebRTCのSFUです。Binaural Meetという近接チャット用のSFUに機能を追加しています。Binaural Meetのサーバのうち、main と media を使います。詳細はServer_setup_memo_for_Binaurl_meetを参照ください。
mainがクライアント(1. Webアプリのこと)からの要求をWeb Socketで受けて、mediaに仕事を振ります。するとmediaが mediasoupを使って仕事をします。'streamingStart' 'streamingStop'というメッセージをクライアントから出しています。これを追っていくと、mediaがFFmpegを起動するところにたどり着きます。
3.FFmpeg
オーディオのフォーマット変換と4.への送信を行う。
bmMediasoupServer/src/MediaServer/ffmpeg.ts にあるように、-f rtsp とかできないとならないので、ソースからのビルドが必要かもしれません。私のときは必要でした。
4. mediamtx
simple-rtsp-server という名前のときのを使っています。立ち上げておくだけでOKでした。