やっぱりブラウザで動作させるのがジャスティスなんですよね。
やりたかったこと
監視カメラみたいなものが作りたかった。
- Raspberry Pi + USB Camera
- RPiは撮影した映像を垂れ流すだけで、受信はしない
- RPiにはGUI不要
- 垂れ流した映像は、別のマシン上のブラウザで閲覧する想定
こんな感じのことを想定していました。とりあえず、映像送信側のコーディングをしようと思って、SkyWayのJavaScript SDKを使って、コードを書いてみました。
その際、どうせRPiはGUIがなくてもいいので、Node環境上で動作するかやってみました。
やったこと
テキトーにスクリプトを書いてみた。
const Peer = require('skyway-js');
const peer = new Peer({
key: 'xxxxx',
debug: 3
});
peer.on('open', function () {
console.log('opened : ' + peer.id);
});
peer.on('error', function (err) {
console.log('error : ' + err);
});
とりあえずPeerをNewするところまで。これを実行してみた。
$ node -v
v8.12.0
$ node script.js
/Users/pokiiio/Desktop/skyway-test/node_modules/skyway-js/dist/skyway.js:14
})(window, function() {
^
ReferenceError: window is not defined
at Object.<anonymous> (/Users/pokiiio/Desktop/skyway-test/node_modules/skyway-js/dist/skyway.js:14:4)
at Module._compile (module.js:653:30)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
at Module.require (module.js:597:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/Users/pokiiio/Desktop/skyway-test/script.js:3:14)
at Module._compile (module.js:653:30)
はいはい。ブラウザ環境がやっぱり必要そうですよね。
それならば、browser-env
でブラウザ環境をエミュレートしてみてはどうだろうかと。
$ npm install browser-env --save
よしなにInstallしてみて、スクリプトの先頭で、require('browser-env')();
を呼ぶ。
require('browser-env')();
const Peer = require('skyway-js');
const peer = new Peer({
key: 'xxxxx',
debug: 3
});
peer.on('open', function () {
console.log('opened : ' + peer.id);
});
peer.on('error', function (err) {
console.log('error : ' + err);
});
これでどうじゃ。
$ node script.js
SkyWay: { Error: The domain "null" is not registered to this API key. Please confirm your settings on the SkyWay dashboard https://skyway.io/ds
at socket_Socket.socket.on.error (/Users/pokiiio/Desktop/skyway-test/node_modules/skyway-js/dist/skyway.js:17016:19)
at socket_Socket../node_modules/events/events.js.EventEmitter.emit (/Users/pokiiio/Desktop/skyway-test/node_modules/skyway-js/dist/skyway.js:1139:17)
at Socket._io.on.message (/Users/pokiiio/Desktop/skyway-test/node_modules/skyway-js/dist/skyway.js:13452:16)
at Socket../node_modules/socket.io-client/node_modules/component-emitter/index.js.Emitter.emit (/Users/pokiiio/Desktop/skyway-test/node_modules/skyway-js/dist/skyway.js:7987:20)
at Socket../node_modules/socket.io-client/lib/socket.js.Socket.onevent (/Users/pokiiio/Desktop/skyway-test/node_modules/skyway-js/dist/skyway.js:7205:10)
at Socket../node_modules/socket.io-client/lib/socket.js.Socket.onpacket (/Users/pokiiio/Desktop/skyway-test/node_modules/skyway-js/dist/skyway.js:7163:12)
at Manager.<anonymous> (/Users/pokiiio/Desktop/skyway-test/node_modules/skyway-js/dist/skyway.js:7840:15)
at Manager../node_modules/socket.io-client/node_modules/component-emitter/index.js.Emitter.emit (/Users/pokiiio/Desktop/skyway-test/node_modules/skyway-js/dist/skyway.js:7987:20)
at Manager../node_modules/socket.io-client/lib/manager.js.Manager.ondecoded (/Users/pokiiio/Desktop/skyway-test/node_modules/skyway-js/dist/skyway.js:6659:8)
at Decoder.<anonymous> (/Users/pokiiio/Desktop/skyway-test/node_modules/skyway-js/dist/skyway.js:7840:15) type: 'invalid-domain' }
error : Error: The domain "null" is not registered to this API key. Please confirm your settings on the SkyWay dashboard https://skyway.io/ds
ほうほう、よくわからんけど、null
をDashboardのAvailable domains
に追加すればいいのね(錯乱)、と思いnull
を追加。
そして再度実行。
$ node script.js
SkyWay: { Error: The domain "null" is not registered to this API key. Please confirm your settings on the SkyWay dashboard https://skyway.io/ds
(以下省略)
ダメですよね・・・。
WebRTCですから、Webブラウザじゃないとダメですよね・・・。
ちょっと出直してきます。
ダメだったけど
サンプルコードがたくさん準備されてるので、まずはそれを動かしつつ、コードを写経してみようと思います。
@n0bisukeさんに、npmモジュールも教えていただいたので、こちらも使ってみようと思います。
https://www.npmjs.com/package/skyway-gateway