前回の続きです。NTTコミュニケーションズ株式会社提供のリアルタイムコミュニケーションのためのプラットフォームであるSkyWayを使ってみます。前回はJavaScriptでカメラとマイクのストリーミングと双方向でのテキストデータのやり取りのプログラムを作成しました。
今回はRaspberry PiでSkyWayの動作確認をしました。単純にWindowsと同様には動作しなかったですが、要点を押さえれば同じように使えると思います。その要点を中心に書きます。
主に以下のページを見ながら作業をしました。こちらも参照して下さい。
SkyWay JavaScript SDK チュートリアル
ここでの環境は以下です。
Raspberry Pi 4 Model B
USBカメラ(logicool c270)
SDカード(32G)
周辺機器(モニタ、キーボード、マウス、電源等のRaspberry Piをパソコンと同様に利用出来るようにするための周辺機器)
ブラウザはchromium(Raspberry Pi標準)です。
今現在で最新のRaspberry Pi 4です。このRaspberry Pi 4ではHDMIの仕様が変更になったので変換ケーブルも買いました。HDMIの変更(発展とか進化という表現の方がいいと思いますが。)を理解していないでRaspberry Pi だけ届いたのでモニタに接続出来ませんでした。
以下は、Amazonの【国内正規代理店版】へのリンクです。今現在ですが、販売店により価格がバラバラのようなので必要な場合は調べてみて下さい。手元にない場合はHDMIのケーブルも必要です。
Raspberry PiへのSSHの操作(TeraTerm)にはWindows10 ProのPCを利用しています。
以下の2点を対応すればRaspberry PiでもWindowsと同様にSkyWayが利用出来ました。
オーディオの優先順位
ブラウザで認識させるカメラの解像度の指定
順番に書きます。
オーディオの優先順位の変更
オーディオの優先順位の変更で何をするかというとUSBカメラのマイクを優先して認識してブラウザで使えるようにするということです。
まずターミナルから現在の状態を確認します。
$ cat /proc/asound/modules
以下のように表示されました。USBカメラのマイクは2番目です。
この順序を変更します。
/etc/modprobe.d/alsa-base.conf というファイルを作成します。もしあれば変更します。以下のように編集して作成します。
options snd slots=snd_usb_audio,snd_bcm2835 options snd_usb_audio index=0 options snd_bcm2835 index=1
再起動します。再度確認してUSBカメラのマイクが最初になっていれば設定完了です。
カメラの解像度の指定
JavaScriptでgetUserMediaというAPIを利用してWebブラウザでカメラ映像、マイク音声を取得していますが、今までは解像度を指定しないで利用していました。もちろんこれで問題なく取得出来ていましたがRaspberry Piでは動作しませんでした。
カメラの機種にもよるかもしれないですが、以下のようにカメラとマイクを取得する際に解像度を指定しました。これで問題なくカメラ映像、マイク音声が取得出来ました。
getUserMedia({video:{ width: 800, height: 600 }, audio: true},
以下のチュートリアルの「カメラ映像、マイク音声の取得」の項目にも説明があります。必要な場合はこちらも参照して下さい。
JavaScript SDK チュートリアル
動作確認
WebサーバはローカルのWindows10上のXAMPPでとりあえずHTTPSでアクセス出来るようにしています。
プログラムは前回のプログラムに上記のようにカメラの解像度を指定しました。
Raspberry PiにカメラをUSB接続して、ブラウザから画面を表示します。
Windows側でリモート接続してみます。問題なく表示されました。テキストデータのやり取りも出来ました。
反対にWindows側にUSBカメラを接続してRaspberry Pi側からも見えました。これで無事に動作が確認出来ました。
Raspberry PiでのSkyWayの活用
特定アプリ専用のPC
Raspberry Piならコスト的にも専用アプリ用のPCとしてSkyWayのトップページの事例のような利用が可能かと思います。長時間起動したままでの遠隔監視、双方向コミュニケーション等が出来ると思います。
GPIOでの拡張
今回はブラウザ間のみの通信でしたが、MQTT over the WebSocketを利用すればブラウザからRaspberry PiのOS間との通信が出来ます。ということは、Raspberry PiのGPIOの操作が出来るということです。
以下の記事からで遠隔操作を取り上げましたが、同様のことをP2Pのイメージで操作出来ます。P2Pなので感覚的には直接Raspberry Piを操作するようになります。(またこれについては書きたいと思います。)
Raspberry PiでIoT(MQTTで遠隔操作編 その1)MQTTでの通信
(※2020/01/21追記 このSkyWayでの遠隔操作についての記事を以下で書きました。)
SkyWayでRaspberry Piの遠隔操作(その1)MQTT over WebSocket
SkyWayでRaspberry Piの遠隔操作(その2)SkyWayからの操作
(補足)SkyWay WebRTC Gateway
今回の一連の記事ではブラウザベースでSkyWayを利用しました。SkyWay WebRTC Gatewayを利用すればブラウザを経由しないでSkyWayを利用出来るようです。まだしっかりと試していないので補足ということにします。
今回はここまでです。また書きたいと思います。