【ラズパイDIY講座】ラズパイゼロで作る監視カメラ④ 〜 軽量なWebRTCクライアント Momoで監視カメラを構築する


※ 当ページには【広告/PR】を含む場合があります。
2021/07/20
【ラズパイDIY講座】ラズパイゼロで作る監視カメラ③ 〜 Node.jsでシグナリングサーバ構築
【ラズパイDIY講座】ラズパイゼロで作る監視カメラ⑤ 〜 WebRTCクライアントMomoのシグナリングをハックする
蛸壺の中の工作室|ラズパイゼロで作る監視カメラ④
前回まで など気持ちよく使いたい場合に心理的な制限が掛かります。


合同会社タコスキングダム|蛸壺の技術ブログ
【ラズパイDIY講座】ラズパイゼロで作る監視カメラ③ 〜 Node.jsでシグナリングサーバ構築

シグナリングサーバーを別のラズパイに立ててからWebRTC通信を確立する方法を検討し、さらに理解を深めていきます。




ということで、今回はUV4Lを
WebRTC Native Client Momo で置き換えを狙って、Momoのセットアップから起動確認までを確認していこうと思います。


Momoをラズパイゼロに導入する



まずはラズパイゼロにMomoを導入していきます。
導入手順は
こちらのドキュメント を参考に進めます。
ここからはラズパイゼロのターミナルに入って、バイナリ版のインストール作業します。 バイナリ版は
こちらのページ から選択しましょう。

            $ mkdir momo && cd momo
$ wget https://github.com/shiguredo/momo/releases/download/[バージョンの選択]_raspberry-pi-os_armv6.tar.gz
$ tar -xzf [バージョン]_raspberry-pi-os_armv6.tar.gz
$ mv [バージョン]_raspberry-pi-os_armv6/* .
$ rm -rf [バージョン]_raspberry-pi-os_armv6*
$ ls
html  LICENSE  momo  NOTICE

        

これでバイナリのmomoが利用可能になりました。
次に必要なライブラリをインストールします。

            $ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install libnspr4 libnss3 libsdl2-dev

        

これでMomoのバイナリ版インストールが完了です。


Momoの動作確認



次にMomoの動作確認を行います。
カメラモジュールを使って画像を取り込む場合には、raspi-configからカメラ有効にする必要があります。

            $ sudo raspi-config
#👇以下の設定に進んで有効にする
3 Interface Options    Configure connections to peripherals
    > P1 Camera      Enable/disable connection to the Raspberry Pi Camera
        > Would you like the camera interface to be enabled?
            > <Yes>

        

再起動後、カメラモジュールが有効になっています。
Raspberry Pi OSでカメラモジュールを利用する際には、カメラドライバに以下の設定を加えます。

            $ sudo modprobe bcm2835-v4l2 max_video_width=2592 max_video_height=1944

        

次にMomoを動かしてみましょう。

公式 にもあるようにMomoに使用には以下の3つのモードがあります。

            + テストモード:
    Momo自体に内蔵されているシグナリング機能を利用する。
+ Ayameモード:
    別プログラム・WebRTCシグナリングサーバAyameを利用して、
    Momoとクライアント間で、1:1送受信する。
+ Sora モード:
    別プログラム・WebRTC SFU Soraを使って、
    Momoとクライアント間で、1:1+送受信する。

        

ここではテストモードを利用します。 先程Momoを展開したフォルダに入り、以下を実行してみます。

            $ ./momo --log-level 0 --no-audio-device test
[000:000][477] (v4l2_video_capturer.cpp:76): GetDeviceName(0): device_name=mmal service 16.1, unique_name=platform:bcm2835-v4l2-0
[000:026][477] (v4l2_video_capturer.cpp:76): GetDeviceName(1): device_name=bcm2835-isp, unique_name=platform:bcm2835-isp
[000:034][477] (v4l2_video_capturer.cpp:76): GetDeviceName(2): device_name=bcm2835-isp, unique_name=platform:bcm2835-isp
#...中略
[001:140][480] (agc_manager_direct.cc:68): [agc] GetMinMicLevel
[001:141][480] (agc_manager_direct.cc:72): [agc] Using default min mic level: 12
[001:154][481] (thread.cc:688): Message to Thread 0x0x27405d8 took 202ms to dispatch. Posted from: PostTask@../../../_source/raspberry-pi-os_armv6/webrtc/src/rtc_base/thread.cc:1059
[001:156][480] (thread.cc:688): Message to Thread 0x0x2741590 took 166ms to dispatch. Posted from: PostTask@../../../_source/raspberry-pi-os_armv6/webrtc/src/rtc_base/thread.cc:1059
#...

        

これでMonoのテストモードが起動状態になりました。

momoのエイリアスを付ける



蛇足ですが、毎回Momoをインストールしたフォルダ越しに
./momo と叩くのも面倒ですので、エイリアスを貼って使いやすくします。
monoの実行ファイルの置き場所は各自考えていただくとして、ここではさきほど展開したままの場所を使います。

            $ nano ~/.bashrc

        

で.bashrcの末尾等に以下を追記します。

            #...略
#Momo alias
alias momo='<momoの実行ファイルを置いた場所>/momo'

        

編集したら保存して、設定ファイルを再反映しておきます。

            $ source ~/.bashrc

        

これでmomoがコマンドで何処からでも呼び出せます。

            $ momo --version
WebRTC Native Client Momo 2021.3 (1334a266)

WebRTC: Shiguredo-Build M90.4430@{#3} (90.4430.3.1 dee77cf2)
Environment: [armv6l] Raspbian GNU/Linux 10 (buster)

USE_MMAL_ENCODER=1
USE_JETSON_ENCODER=0
USE_NVCODEC_ENCODER=0
USE_SDL2=0

        

Monoのテストモードで確認



シグナリングサーバーを介さずともMonoが内部で立てているWebサーバーへアクセスすることで動作しているかが確認することもできます。
ここではラズパイゼロ側の固定IPが
192.168.0.123 だったすると、 http://192.168.0.123:8080/html/test.html でChromeでアクセスすることで、リアルタイム画像を取得することができます。


まとめ



今回はラズパイゼロ上でmomoの動作確認を行って見ました。
テストモードでデフォルトの設定でも、体感で1秒以下の遅延で動作していることが確認できました。
またMomoの姉妹製品である
シグナリングサービスAyame を使うことで、WebRTCネットワークのデータチャネル経由でシリアル通信も可能のようです。
MomoのWebRTC通信方式はまた別の記事で、シグナリングの方法がどのようになっているのかを解析してみたいと思います。

参考サイト

Github | shiguredo/momo