SkyWay WebRTC GatewayをNode.jsで使う

前回のRuby版では切断後、再接続するとうまく接続できなかったので、Node.jsでやってみます。

前準備

Nodeのインストール

ラズパイの場合Node.jsの最新版をインストールするのが面倒なので、このスクリプトでインストールすると手っ取り早いです。

nodered.jp

$ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

もともとNode-REDをインストールするためのスクリプトなのでいろいろインストールされますが、害はないので良しとします。

インストール結果:

Running Node-RED install for user pi at /home/pi on raspbian


This can take 20-30 minutes on the slower Pi versions - please wait.

  Stop Node-RED                       ✔
  Remove old version of Node-RED      ✔
  Remove old version of Node.js       ✔
  Install Node.js LTS                 ✔   Node v12.13.1   Npm 6.13.4
  Clean npm cache                     ✔
  Install Node-RED core               ✔   1.0.3 
  Move global nodes to local          -
  Install extra Pi nodes              ✔
  Npm rebuild existing nodes          -
  Add shortcut commands               ✔
  Update systemd script               ✔

ライブラリのインストール

$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt install -y autoconf automake libtool
$ sudo apt install -y gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
$ cd ~
$ wget https://github.com/thaytan/gst-rpicamsrc/archive/master.zip
$ unzip master.zip
$ cd gst-rpicamsrc-master
$ ./autogen.sh --prefix=/usr --libdir=/usr/lib/arm-linux-gnueabihf/
$ make
$ sudo make install

SkyWay WebRTC Gatewayのインストール

$ curl -L -o ~/.skyway/gateway_linux_arm --create-dirs https://github.com/skyway/skyway-webrtc-gateway/releases/download/0.0.4/gateway_linux_arm
$ chmod +x ~/.skyway/gateway_linux_arm

Nodeモジュールのインストール

ワークディレクトリにインストールします。

$ cd ~/programs/skyway
$ npm init -y
$ npm i skyway-gateway

サンプル

app.js

'use strict';
const SkyWay = require('skyway-gateway');
 
const options = {
    apikey: `My SkyWay API Key`, // API KEY
    peer_id: process.argv[2],
    camera: 'RASPI', // RASPI or USB
    codec: 'H264' //VP8 or H264
    // targetHost: '',
    // domain: '',
}
 
const skyway = new SkyWay(options);
(async () => {
    await skyway.startGateWay(`~/.skyway`); //skyway-gateway path
    const peerData = await skyway.start();
    console.log(peerData);
 
    skyway.dataListen((msg, rinfo) => {
        const mes = msg.toString('ascii', 0, rinfo.size);
        console.log(`data len: ${rinfo.size} data: ${mes}`);
    });
})();

実行してみる

$ node app.js peer1

起動に失敗するときがある。。

{type: 'STARTUP_ERROR',mes: 'Create Peer Error! 再度Node.jsプロセスを起動してみて下さい。'}

もう一度nodeを実行すると正常起動しますが、永続化に難があるので、gatewayを事前に手動で起動しておけばOKです。

$ ~/.skyway/gateway_linux_arm &
sleep 5
$ node app.js peer1

永続化

ラズパイの起動時に自動的にgatewayが立ち上がるようにしておきます。

~/programs/skyway/run.sh

node app.js peer1 &

/etc/rc.local

/home/pi/.skyway/gateway_linux_arm &
sleep 5
cd /home/pi/programs/skyway
./run.sh > /home/pi/skyway.log &

うまくいった〜!

リンク

www.npmjs.com

blog.starboard.dev