Skip to content

Instantly share code, notes, and snippets.

@KensakuKOMATSU
Last active September 29, 2020 00:47
Show Gist options
  • Save KensakuKOMATSU/e49c5a3a933b97b39867 to your computer and use it in GitHub Desktop.
Save KensakuKOMATSU/e49c5a3a933b97b39867 to your computer and use it in GitHub Desktop.

janus

https://github.com/meetecho/janus-gateway

Meetecho がメンテしているオープンなWebRTC Gateway Project. 今んところLinuxをサポート

  • サーバーサイドLinuxとしてのふがほげ
  • Raspberry PI用のふがほげ に使うのに便利そう

個人的に気に入っているのは

  • libwebrtc.soに依存していない(webrtcスタックをスクラッチで書いてる)
  • 独立した Open source (libwebrtc.soはchromiumの一部だし、いじるのつらぽ)
  • ビデオエンコードはGStream に任せる感じになっているので、融通効きそう ってところ

Install pre requested libraries

  • Install dependency libraries
sudo aptitude install libmicrohttpd-dev libjansson-dev libnice-dev \
    libssl-dev libsrtp-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libini-config-dev libcollection-dev \
    pkg-config gengetopt libtool automake cmake
  • Install libscrtp manually, cause it was 1.4.x
wget https://github.com/cisco/libsrtp/archive/v1.5.0.tar.gz
tar xfv v1.5.0.tar.gz
cd libsrtp-1.5.0
./configure --prefix=/usr --enable-openssl
make libsrtp.so; sudo make install
  • Install libsctp, since I prefer it;-)
git clone https://github.com/sctplab/usrsctp
cd usrsctp
./bootstrap
./configure --prefix=/usr; make; sudo make install
  • install libwebsocket
git clone git://git.libwebsockets.org/libwebsockets
cd libwebsockets
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
make; sudo make install
  • note that I give up to install belows, since it fails fetching
aptitude install doxygen graphviz

compile

git clone https://github.com/meetecho/janus-gateway.git
cd janus-gateway
sh autogen.sh
./configure --prefix=/opt/janus --disable-rabbitmq --disable-docs --disable-websockets
make
sudo make install
sudo make configs

これで、/opt/janus 以下に、諸々インストールされる ※ Dec 14, 2015にインストールしょうとしたら、websocket の library みつからんエラーが出るので。対処策として disableした

とりあえず大切なのは、

/opt/janus/bin/janus ... Janus (WebRTC Gateway) /opt/janus/etc/janus/janus.cfg ... config (なんか、イッパイサンプルのコンフィグがある)

  • message while doing configure
RabbitMQ support:          no
WebSockets support:        yes
DataChannels support:      yes
Recordings post-processor: no
TURN REST API client:      no
Doxygen documentation:     no
Plugins:
    Echo Test:             yes
    Streaming:             yes
    Video Call:            yes
    SIP Gateway:           yes
    Audio Bridge:          yes
    Video Room:            yes
    Voice Mail:            yes
    Record&Play:           yes

とりあえず、

$ /opt/janus/bin/janus
---------------------------------------------------
  Starting Meetecho Janus (WebRTC Gateway) v0.0.9
---------------------------------------------------

Reading configuration from /opt/janus/etc/janus/janus.cfg
(以下省略)

って感じで動いたw まずは、一旦とめた

raspberry pi cameraとの連動

参考URL http://www.rs-online.com/designspark/electronics/blog/building-a-raspberry-pi-2-webrtc-camera

  • gstreamerのインストール
sudo apt-get update
sudo apt-get install gstreamer1.0
  • gstreamerで、H.264をjanusに送る(このストリームをJanusがWebRTC Gatewayとして中継する感じになる)

まず、gstreamerからのstreamを受けるために設定を変える

vi /opt/janus/etc/janus/janus.plugin.streaming.cfg

もともと書いてあった、[gstreamer-sample]の設定をコメントアウトし、以下を追加
[gst-rpwc]
type = rtp
id = 1
description = RPWC H264 test streaming
audio = no
video = yes
videoport = 8004
videopt = 96
videortpmap = H264/90000
videofmtp = profile-level-id=42e028\;packetization-mode=1

そんで、GStreamerをH.264 encodeするように動かし・・・

raspivid --verbose --nopreview -hf -vf --width 640 --height 480 --framerate 15 --bitrate 1000000 --profile baseline --timeout 0 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! udpsink host=127.0.0.1 port=8004

janusを動かす

/opt/janus/bin/janus

で、サンプルのhtmlアクセスするために、

$ cd /opt/janus/share/janus/demos
$ http-server <-- sudo npm -g install http-serverで入れてあるのが前提
Starting up http-server, serving ./ on: http://0.0.0.0:8081
Hit CTRL-C to stop the server

あとは、firefoxで

  1. [Start]
  2. [Streams List]で、[RPWC H264 Streaming...]を選択
  3. [Watch or Listen]をクリック すると、右側にWebRTCでRaspberry PI camの映像が!

※ Chromeだと接続できませんw(H.264サポートしてないのでw)

@KensakuKOMATSU
Copy link
Author

streamingが不安定だったので、色々調べたら rtp の timestamp が GStreamer 側で固定(更新されない)ことが問題だった

以下のようにGstreamer側で do-timestamp=true をつけると、幸せになれる

raspivid -t 0 -w 640 -h 480 -fps 5 -b 2000000 --nopreview -hf -vf --profile baseline -o - | gst-launch-1.0 -v fdsrc do-timestamp=true ! h264parse ! rtph264pay config-interval=1 pt=96 ! udpsink host=127.0.0.1 port=8004 sync=false

@KensakuKOMATSU
Copy link
Author

最後の sync=false は、特にいらない

@KensakuKOMATSU
Copy link
Author

以下のエラーがよくでると残念な感じになる

[ERR] [ice.c:janus_ice_send_thread:2914] [786786240] ... only sent -1 bytes? (was 538)
[ERR] [ice.c:janus_ice_send_thread:2939] [786786240] ... only sent -1 bytes? (was 1410)
[ERR] [ice.c:janus_ice_send_thread:2939] [786786240] ... only sent -1 bytes? (was 1410)
[ERR] [ice.c:janus_ice_send_thread:2939] [786786240] ... only sent -1 bytes? (was 1410)

@KensakuKOMATSU
Copy link
Author

これ、送信エラーだと思う、特にWifiインタフェースカードが熱くなると頻発するので、その辺の絡み?

WPA2だと厳しいのは、そのせい???

@KensakuKOMATSU
Copy link
Author

有線Ethernetにしたらかなり安定。ただ、環境に依存して安定だったり不安定だったり

@KensakuKOMATSU
Copy link
Author

カメラをUSB camに変えてみる

@KensakuKOMATSU
Copy link
Author

sudo apt-get update -y
sudo apt-get dist-upgrade -y --force-yes

ここまでやったら、uv4lがupgradeされてた

The following packages will be upgraded:
  libmp3lame0 libmysqlclient18 libopencv-core2.3 libopencv-imgproc2.3 libpq5
  libraspberrypi-bin libraspberrypi-dev libraspberrypi-doc libraspberrypi0
  mysql-common node ntp nuscratch omxplayer raspberrypi-bootloader rpcbind
  sudo unzip uv4l uv4l-raspicam uv4l-raspicam-extras uv4l-server uv4l-uvc
  uv4l-webrtc

@KensakuKOMATSU
Copy link
Author

dpkg: dependency problems prevent configuration of uv4l-raspicam:
 uv4l-raspicam depends on uv4l (>= 1.9.8); however:
  Package uv4l is not configured yet.

dpkg: error processing uv4l-raspicam (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of uv4l-raspicam-extras:
 uv4l-raspicam-extras depends on uv4l-raspicam (>= 1.9.28); however:
  Package uv4l-raspicam is not configured yet.

dpkg: error processing uv4l-raspicam-extras (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of uv4l-server:
 uv4l-server depends on uv4l (>= 1.9.5); however:
  Package uv4l is not configured yet.
dpkg: error processing uv4l-server (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of uv4l-webrtc:
 uv4l-webrtc depends on uv4l-server (>= 1.1.35); however:
  Package uv4l-server is not configured yet.

dpkg: error processing uv4l-webrtc (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of uv4l-renderer:
 uv4l-renderer depends on uv4l-webrtc (>= 1.1.19); however:
  Package uv4l-webrtc is not configured yet.

dpkg: error processing uv4l-renderer (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of uv4l-uvc:
 uv4l-uvc depends on uv4l (>= 1.9.4); however:
  Package uv4l is not configured yet.
dpkg: error processing uv4l-uvc (--configure):
 dependency problems - leaving unconfigured
Setting up node (4.2.1-1) ...
Errors were encountered while processing:
 uv4l
 uv4l-raspicam
 uv4l-raspicam-extras
 uv4l-server
 uv4l-webrtc
 uv4l-renderer
 uv4l-uvc
E: Sub-process /usr/bin/dpkg returned an error code (1)

@KensakuKOMATSU
Copy link
Author

uv4lあたりが全てdist-upgradeしっぱい・・・

@KensakuKOMATSU
Copy link
Author

単に、rebootしてないのが問題だった><

@KensakuKOMATSU
Copy link
Author

うーーーーん、カメラのせいな気がする。何しても gstreamer が認識してくれない(><)

@qpcrazy
Copy link

qpcrazy commented Feb 22, 2018

KensakuKOMATSU 様 今週頭からラズパイv2カメラを使用して、以下URLのsampleを動作させようとしている熊倉というものですhttps://goo.gl/xUAZF2
今現在でも、ラズパイカメラ連動での動作はできない状況でしょうか?
いまいろいろとトライしていますが、カメラ映像をwebで見るところまでいけておりません
お教えいただけますとありがたいです

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment