構成はタイトルのまんまです。
正しいやり方かどうかは分かりませんが、動かすことが出来たのでメモしておきます。2021/12/26現在の情報です。
Sora Laboの設定
ユーザー登録をして、シグナリングURLとシグナリングキーを確認しておく。(このあと使う)
送信側 momoの起動
momoを起動しWebカメラの映像を送出する。
momoを実行するPCにはWebカメラが接続されていることが前提。
Momoの起動オプション
./momo sora --signaling-url wss://node-01.sora-labo.shiguredo.jp/signaling --channel-id USERNAME@CHANNEL-ID --metadata '{"signaling_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}' --role sendonly
ここで、--signaling-url
や --metadata '{"signaling_key": "xxxxxxxxxxxxxxxxxxxxxx"}'
のxxxxxxxxxxxxxxxxxxxxxx
の部分はSora Laboのページに表示された値を使う。
channel-id
はSora Laboに登録したGitHubのユーザー名と@
と任意の文字列の組み合わせ。
例えばcomoc@sora-test-channel
。
受信側 Unityの設定とプレイ
SoraSample.csスクリプトの修正
2021/12/26時点のGitHubのmasterブランチのSoraSample.cs
スクリプトでは、DataChannelMessaging
と記述すべき部分が DataChannel
になっているので、DataChannelMessaging
に置換する。またconfig.DataChannels
もconfig.DataChannelMessaging
に置換する。
recvonlyシーンを開く
Sora Unity SDK Samplesプロジェクトを開き、recvonly
シーンを読み込む。
Scriptの設定
HierarchyからScript
を選択し、InspectorからSignaling Url
、Channel Id
、Signaling Key
の3か所に、momoで指定したものと同じ値を入力する。
実行
エディタのPlayボタンを押した後、「開始」ボタンを押す。
うまく行けば、このスクショのように、送出側のカメラ映像が表示される。
Linuxで ffmpeg で任意の映像ソースを仮想ビデオデバイス /dev/videoN にして momo から送出
手元にビデオデバイスがない(動画ファイルならある)ときに使える技。
ffmpegを使って再生
例. VIDEOFILE.mp4
を /dev/video2
のソースにする。
ffmpeg -re -stream_loop -1 -i VIDEOFILE.mp4 -map 0:v -f v4l2 /dev/video2
オプションの意味
* -re
はフレームレートを維持
* -stream_loop -1
は無限ループ
* -map 0:v
はビデオだけ抽出
* -f v4l2
v4l2のフォーマットを強制
momo で /dev/videoN をビデオデバイスとする。解像度は4Kにしてみる
momo --video-device="/dev/video2" --resolution 4K sora --signaling-url wss://node-01.sora-labo.shiguredo.jp/signaling --channel-id USERNAME@CHANNEL-ID --metadata '{"signaling_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}' --role sendonly
-video-device="/dev/video2"
ビデオデバイスを指定。(このオプションを指定する順番をいろいろ試してみたところmomo
の直後ならば動くようだ)
--resolution 4K
解像度を4Kにする。
Unity側のRawImageに設定されているテクスチャの解像度が640x480に固定されていたので、SoraSample.cs
を改造して3840,2160にしないとぬるい画になってしまう。
以上。