cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

メモ:お手軽にWebRTCでVideoChatをしたいので、Janus-gatewayをAWS EC2やRaspberry Pi4上に立てたときのメモ

(まだ書きかけ)
 今、ネットワーク越しに動画データを送りたいと考えたときに、どうしてもWEBRTCがその候補に挙がってきます。WEBRTCのライブラリやサービスは山のようにあるのですが、進歩が速いことを理由に行き届かないことが多くて、どれもこれも中途半端で問題だらけです。

 まずWEBRTCが何なのかを把握するために、次の4つぐらいの区別が付くようにしとく必要が有ります。
・WEBRTC(P2P): 1対1で繋ぐとき。(もともとの設計。簡単。)
・WEBRTC SFUサーバー: サーバーを中心の媒介として複数間をつなぐとき
(・WEBRTC MCUサーバー): サーバーを中心の媒介として処理をさせつつ複数間をつなぐとき。使う機会はあまりなさそう。
・WEBRTCクライアント: ユーザーがWEBRTCを使うときのインターフェース

 インターネットに繋いでNAT越えをするときには、次も知っておく必要が有ります。WEBRTCが難しいとか言われるのは、むしろこっちな気がする。
・STUNサーバー: インターネットから自分クライアントのネットワークがどのように見えているかを教えてくれるもの
・TURNサーバー: NAT越しのデータをやり取りするときに中継してくれるもの。サービスをお金を払って買うのでなければ、基本的にcoturnとかでPublicIPのサーバーを自分で用意する必要がある。
逆に言うとインターネットに繋ぐ必要が無ければ、こんなの要らないんです。SoftetherVPNを繋げても構わないとかいう環境だったら、そうしちゃった方が早いし安い。

 今やりたいことは自分の管理下にあるローカルネットワークで動画を転送したいだけです。なので、GstreamerでもFFMpegでも良いっちゃ良いのですが、なんだかトラブルだらけであまり直に触りたくありません。OBSが遅延無く配信してくれればそれでも十分なのですが、遅延が大きいのが解決できません。遅延が少ないことを前提にするとWEBRTCに乗っかるのが早い、となります。

 お金がたっぷりあれば、時雨堂さんのSora Cloudが抜群に良いと思います。簡単に圧倒的な高画質を実現できるし、NAT越えに困ることも無いでしょう。HololensやUnity用でクライアントを作るためのSDKも用意されていて、他には類似の良いものがあまり見つけられません。(結局止めてたらしい。)
でも、固定費を年間60万円とか120万円とかそれ以上払える場合に限りますし、ビジネス展開することが前提のサービスです。また、海外との接続は対象外になっています。あとクライアントのためのSDKを作ってすぐ止めてしまう(ROSとか。。。Momoも音声デバイス選択とか放置されているし)ので、開発コストを掛けるリスクが取れません。

 ちょっとWEBRTCを試してみたいとか、ビジネスとしてサービスを提供するのでなければ、オープンソースで開発されているWEBRTCサーバーが選択肢に入ってきます。
・Mediasoup
・Janus-gateway
が有名どころです。たいてい有料のものも含めて、どのサービスもクライアントは自分で作れ、というスタンスなのですが、開発コストを掛けたくないので、良いサンプルがあるかどうかがとても重要になってきます。

 Githubに落ちているクライアントをつまみ食い程度に試した印象だと、Mediasoupは2020年以前のクライアントサンプルがことごとくまともに動かない感じがします。WEBインターフェースのgetUserMediaがhttps必須になった後のもので、使いやすい感じのものが見つけられませんでした。(Electronで動いて欲しかった、けど、分からなかった。)
Janus-Gatewayは、自身が用意しているWEBサンプルが充実しているのと、中国人の方が作りかけているQtとC++を使ったインターフェースが動くには動いてくれました。中途半端でもC++で書いてあってくれれば、あとはこっちで何とかなるので大変に有難い。ただ残念ながらGithubに上がっているJanus-Gateway向けの他のクライアントの例は多くは有りませんでした。

ということで、個人レベルでWEBRTC SFUを使うなら、Janus-gatewayの公式サンプルが良さそうです。

メモ:Janus-gatewayを立てて、推奨画質やビットレートの目標値を設定するのに編集が必要だったファイルはこちら。
nano /var/www/html/janus.js
sudo nano /opt/janus/etc/janus/janus.jcfg
sudo nano /opt/janus/etc/janus/janus.plugin.videoroom.jcfg

リンク
[0] https://github.com/meetecho/janus-gateway
[1] https://www.mikan-tech.net/entry/2020/05/02/173000
[2] https://www.mikan-tech.net/entry/2020/05/02/173000
[3] https://qiita.com/mksamba/items/601ae5b738b16b2b81d3
[4] https://github.com/meetecho/janus-gateway/issues/1354
[5] https://qiita.com/mksamba/items/601ae5b738b16b2b81d3
[6] https://towardsaws.com/setting-up-janus-webrtc-on-aws-a8aa8914b0c6
[7] https://qiita.com/satosisotas/items/d154b168772982a74b8d
[8] https://stackoverflow.com/questions/60261648/ice-failed-for-component-1-in-stream
[9] https://qiita.com/akase244/items/09d0898e51cf1b0faad7


AWS
[/] https://qiita.com/kanegoon/items/4bcdf5184cf1752eb44f