WebRTC Janus
WebRTC Janus は GPLv3 でライセンスされるオープンソースの WebRTC SFU サーバーです。
WebRTC では、P2P で相互に接続を行い映像・音声のやり取りを行なっていましたが、WebRTC SFU では、一度 SFU サーバを経由して映像・音声のやり取りを行います。
P2P では、接続する端末数が増えることで、端末の数だけ送信・受信のための通信が必要になってしまいますが、SFU では、SFU サーバに対して配信することで、SFU サーバに接続する各端末に配信できます。 そのために、大勢が視聴するようなライブ配信などに SFU が用いられることがあります。 その反面、SFU は、一旦サーバを経由するために P2P よりも遅延が大きくなるために、リアルタイム性が低くなってしまいます。
WebRTC Janus は、以下のページからダウンロードして使用することができます。
https://github.com/meetecho/janus-gateway
SFU
SFU とは、映像や音声などのデータを各端末から SFU サーバーにデータを送信し、SFU サーバーから複数の端末にデータを共有します。
P2P
P2P(Peer-to-Peer)とは、互いの端末がサーバーを中継することなく端末同士で直接データを共有します。
WebRTC Janus Plugins
WebRTC Janus は、プラグインとして様々な機能を提供しています。
以下が提供されているプラグインの一覧になります。
- EchoTest Plugin
- Streaming Plugin
- VideoCall Plugin
- SIP Plugin
- NoSIP Plugin
- AudioBridge Plugin
- VideoRoom Plugin
- Record&Play Plugin
- VoiceMail Plugin
- Lua Plugin
- Javascript Plugin
標準で用意されているプラグインで、ほとんどの機能が揃っています。
Streaming Plugin
Streaming Plugin は、映像・音声を配信するための機能を提供します。
今回は、このプラグインを使用して映像・音声を配信します。
Streaming Plugin は以下の janus.plugin.streaming.jcfg で設定を行います。
janus.plugin.streaming.jcfg 設定
rtp-sample: {
type = "rtp"
id = 1
description = "Opus/VP8 live stream coming from external source"
metadata = "You can use this metadata section to put any info you want!"
audio = true
video = true
audioport = 5002
audiopt = 111
audiocodec = "opus"
videoport = 5004
videopt = 100
videocodec = "vp8"
secret = "adminpwd"
}
デフォルトの設定で、上記のように映像と音声を受信するためのポートが指定されています。
このポートに対して、gstreamer を使用して映像と音声を配信します。
gst-launch-1.0
audiotestsrc !
audioresample ! audio/x-raw,channels=1,rate=48000 !
opusenc bitrate=20000 !
rtpopuspay ! udpsink host=webrtc-janus port=5002
videotestsrc !
video/x-raw,width=640,height=480,framerate=30/1 !
videoconvert ! timeoverlay !
vp8enc error-resilient=1 !
rtpvp8pay mtu=1500 ! udpsink host=webrtc-janus port=5004
サンプル
上記の配信を行うサンプルプログラムは、github にソースコードがあります。
https://github.com/nobuo-kobayashi/docker-webrtc-janus
上記のサイトからソースコードをクローンして、下記のようにして実行します。
$ docker-compose build
$ docker-compose up
上記で配信した映像と音声を確認するには、WebRTC Janus のデモページが用意されていますので、そちらを使用します。
Chrome ブラウザで、 https://${ローカルアドレス}:8000 を開くと、デモページを表示することができます。
メニューから Demos を開き、Straming を選択します。
Straming Plugin のでも画面への遷移後、Start ボタンを押下します。
今回の設定では、Opus/VP8 live stream coming from external source に対して、映像・音声を配信していますので、Streams を開き、リストから選択し、Watch or Listen ボタンを押下します。
映像・音声が配信できていれば、テスト映像が配信されていることが確認できます。
Streaming Plugin を使用することで、WebRTC Janus を経由して、多人数への映像配信が行えるようになります。 また、Streaming Plugin の設定を変えることにより、複数の映像も配信できるようになりますので、多視点の映像を配信することなどもできるようになります。