概要
- Raspberry Pi で常時監視+暗視可能な仕組みを作ったときのメモ
- ストリーミング配信は mjpeg 方式で 15~30 fps 出るようにする
- パブリックに公開するので、同時接続数が増えた時に Raspberry Pi が死なないようにプロキシサーバーを立てる
用意するもの
-
Raspberry Pi Model B+ 以上
$ uname -a Linux raspberrypi 4.1.18+ #846 Thu Feb 25 14:11:56 GMT 2016 armv6l GNU/Linux
-
Raspberry Pi 用暗視カメラモジュール
- たとえばこれ → サインスマート Raspberry Pi用 赤外線カメラレンズ
-
プロキシ用サーバー
- 自分しか見ないなら不要
- さくらのVPS等、インターネットへの outbound traffic が従量課金ではないものが望ましい
あると嬉しい
- Raspberry Pi に対する固定IP
ポートフォワードで解決できなくもない
Raspberry Pi セットアップ
カメラモジュール
以下のサイトを参考にした
https://www.rs-online.com/designspark/raspberry-pi-camera
sudo raspi-config
するとこまででOK。
mjpg-streamer
- mjpg-streamer の Raspberry Pi 用の Fork をコンパイル(make)
https://github.com/jacksonliam/mjpg-streamer -
/opt/mjpg-streamer
下にインストール(make install
せずに単純にコピー)- ファイル群のオーナーを、実行ユーザー(仮に
pi
とする)に変更しておく
- ファイル群のオーナーを、実行ユーザー(仮に
-
Systemd 用のファイルを作成
/opt/mjpg-streamer/systemd/run.sh#!/bin/bash ROOT=/opt/mjpg-streamer AUTH_USER={Basic認証用のユーザー名} AUTH_PASS={Basic認証用のパスワード} cd $ROOT $ROOT/mjpg_streamer -i "$ROOT/input_raspicam.so -fps 15 -x 640 -y 480" -o "$ROOT/output_http.so -c $AUTH_USER:$AUTH_PASS"
/etc/systemd/system/mjpg-streamer.service[Unit] Description=mjpg-streamer [Install] WantedBy=multi-user.target [Service] User=pi Group=pi ExecStart=/opt/mjpg-streamer/systemd/run.sh
-
サービスの起動
# systemctl start mjpg-streamer.service
動作確認
ブラウザから http://raspberrypi:8080/?action=stream
にアクセス
プロキシサーバーセットアップ
$ uname -a
Linux myproxy 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
-
mjpeg-relay を
/opt
下に clone- submodule も初期化する
- ファイル群のオーナーを、実行ユーザーに変更しておく
-
実行
- python 2.7 でしか動かないので注意
$ python relay.py "http://{Basic認証用のユーザー名}:{Basic認証用のパスワード}@raspberrypi:8080/?action=stream"
動作確認
ブラウザから http://myproxy:54321/stream
にアクセス
成果物
http://namauni.com/timemachine
※過去の gif 動画になります
備考
mjpeg-relay は docker 化が可能なようだが、手元の環境では動かなかった。
docker run
で python プロセスが立ち上がった時に、 relay.py#L80 の except EOFError:
に入ってるっぽい。
因みにシェルスクリプトから実行しても同じ症状なので、せめて systemd でサービス化したかったけど諦めた。python-daemon
使ってほしい。