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


2021/07/20
蛸壺の中の工作室|ラズパイゼロで作る監視カメラ④

前回まででラズパイゼロのWebRTCクライアントとしてUV4Lを利用してきましたが、商用利用防止のためのウォーターマークが消せないなど気持ちよく使いたい場合に心理的な制限が掛かります。

ということで、今回は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

記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

電子工作を身近に知っていただけるように、材料調達からDIYのハウツーまで気になったところをできるだけ細かく記事にしてブログ配信してます。