TopazChatを利用することでVRChat上で低遅延での配信を行うことが可能です。この仕組みを応用することで作業配信やゲームプレイ配信をゲーム内で見られたりするのですが、 専用のPrefabとのセット運用が主な部分もあり、MEROOM 939号室などに設置されているiwaSync3 メディアプレイヤーや、 UdonSharpを開発したMerlin氏によるUSharpVideoなどでは利用しづらいといった面があります。(TopazChatの提供するエンドポイントとストリームキーを組み合わせたURLを入力すれば再生は可能なはずです)

今回はToapzChatの提供する配信システムと近いものをローカルマシン上で動作させ、そのシステムを通してVRChat上で配信を行う方法について解説します。


TopazChatの仕組み

TopazChatはAWS上に配置されたWowza Streaming Engineをコアとした配信インフラが用意されており1RTMPで配信を受け付け、 RTSPでVRChat Wrolds SDK 3に付属するVRC AVPro Video Playerコンポーネントでそれを受信、再生するといった構成となっています。 iwaSync3やUSharpVideoもLiveモードではVRC AVPro Video Playerが利用されるため、冒頭でも触れたようにURLさえ入力してしまえば再生自体は可能なはずですが、TopazChat Player内のVRC AVPro Video Playerコンポーネントでは有効なUse Low Latencyオプションが使われていないため、3秒から5秒ほどのタイムラグが生じます。

TopazChat PlayerのVRC AVPro Video Player TopazChat PlayerのVRC AVPro Video Player
USharpVideoのVRC AVPro Video Player USharpVideoのVRC AVPro Video Player
iwaSync3のVRC AVPro Video Player iwaSync3のVRC AVPro Video Player

これについてはiwaSync3やUSharpVideoを改造して、Use Low Latencyオプションの切り替えができるようにすればよさそうです。

RTMPで映像ストリームを受け付けて、RTSPで配信するという部分についてはaler9/rtsp-simple-serverというソフトウェアで実現できるため、こちらを利用してローカル配信環境の構築を行います。


ローカル配信の準備

  • OBS Studio
    • RTMPでデスクトップ映像などを送出可能な配信ソフトウェア
  • aler9/rtsp-simple-server
    • RTSP/RTMPで受けてRTSP/RTMP/HLSで配信を流すことのできるGo製プロダクト

1. rtmp-simple-serverの起動

rtsp-simple-serverをダウンロードし、任意の場所に展開します。展開した場所にある rtsp-simple-server.exe を実行すると、RTSPがTCP 8554 ポート、UDP 8000 ポート、UDP 8001 ポートで、RTMPがTCP 1935 ポートで、HLSがTCP 8888 ポートでListenされます。

rtsp-simple-serverの起動直後 rtsp-simple-serverの起動直後

この時点でRTMPで映像を送信し、RTSPで配信する機能が有効なため、TCP 8554 ポートを外部からアクセス可能なように設定します。この部分については各ユーザーのネットワーク環境に依存するため割愛しますが、Minecraftサーバーを立てる際などに行うポート開放作業と同じなので、 Googleなどで検索するといろいろと記事が見つかるのではないかと思います。もしも自分以外のユーザーの配信も受け付ける場合、追加でTCP 1935 ポートもアクセス可能なようにしてください。

2. OBSの設定

OBS Studioを起動し、設定から配信タブを開きます。

OBS Studioの配信先設定画面 OBS Studioの配信先設定画面

サーバーには rtmp://localhost 、ストリームキーには任意の文字列(図中では local-streaming )を設定します。もしも他の人からの配信を受け付ける場合、サーバー部分には rtmp://<自分のIP> を入力してもらってください。(自分のIPが 203.0.113.123 の場合、 rtmp://203.0.113.123 )

続いて出力タブを開き、エンコード設定を行います。設定内容はTopazChatでの推奨値に合わせています。

OBS Studioのエンコード設定画面 OBS Studioのエンコード設定画面
設定項目 設定内容
エンコーダ NVIDIA NVENC H.264
レート制御 CBR
ビットレート 2000
キーフレーム間隔 0
プリセット Max Performance
プロファイル high
Look-ahead チェック無し
心理視覚チューニング チェック有り
最大Bフレーム 0

NVENCを利用しない場合は以下の設定にしてください。CPUでのエンコードになります。

設定項目 設定内容
エンコーダ x264
レート制御 CBR
ビットレート 2000
キーフレーム間隔 0
CPU使用のプリセット veryfast
プロファイル high
チューン なし

3. OBSでの配信開始

配信開始を押すとローカルのrtmp-simple-serverに映像が送信され始めます。ソースに画面キャプチャやウィンドウキャプチャを追加することで、デスクトップ上の内容を配信することが可能です。

4. VRChat上での視聴

iwaSync3やUSharpVideoなどの利用できるワールドで、Liveモードに切り替えた状態で rtstp://<自分のIP>:8554/<2.で設定したストリームキー> (自分のIPが 203.0.113.123 、ストリームキーが local-streaming の場合、 rtspt://203.0.113.123:8554/local-streaming ) をURL入力欄に入れて再生します。 先に述べたように3秒から5秒ほどのずれがありますが、デスクトップ上の映像が再生され始めます。自分のIPについてはルーターの設定画面や、診断君などのWebサービスで確認可能です。


メリットとデメリット

TopazChatではビットレート制限がありますが、ローカルサーバー経由の場合はそういった制限が無いため、画質を良くしたいなどのケースではメリットになりえます。しかし、通常のiwaSync3やUSharpVideoを利用する場合はYouTube Liveでの配信と大差ないラグとなるため、あまり大きなメリットであるとも言えません。 Use Low Latencyオプションが有効であれば、300msから500ms程度の遅延になるので、改造されたiwaSync3やUSharpVideoのあるワールドであれば優位性が出てくるかもしれません。また、YouTube Liveはアカウント作成から24時間は配信が行えないため、そういった待機時間を回避するというケースでは使えるかもしれません。

メリットかつデメリットとして、視聴者のIPアドレスが把握できるというものがあります。デフォルト設定ではログレベルが info となっているため、サーバーのログに表示されます。こちらについてはログレベルを error または warn に変更することで容易には確認できないようにすることが可能です。

デメリットとして、上りの帯域幅をかなり占有し得るというものがあります。配信ビットレートが2,000 kbpsの場合、視聴者の数×2,000 kbpsの上り通信が発生するため、人数によっては50 Mbps程の通信が常に行われる可能性があります。


まとめ

VRChatでローカルサーバーを経由してリアルタイム配信を行う方法について解説しました。デフォルトオプションそのままでの運用のため無駄なポートが開いたままであるなど、細かい部分に気になる部分はありますが、短期間での運用であれば使えるケースはあると思います。

AWS上に構築する検証なども行ったので、そちらについて別記事を上げる予定です。


  1. https://twitter.com/TyounanMOTI/status/1245023266520961025 ↩︎