Raspberry Pi 2 のカメラを motion から MJPG-streamer に変更
motion で監視カメラとして家の様子をストリーミングしているのだけど、motionは結構、遅延が大きい。
今のところ、動体検知や録画はしていないので、MJPG-streaming を使ってみることにした。
目次
カメラ
カメラも替えました。こちらです。画像も綺麗で良い感じ!
そのうちRaspberry Pi 上に、長女ちゃんのマイクラ実況配信システムを構築したいので、音声も拾えるやつにしました。
MJPG-streamer のインストール
恒例の
1 2 |
sudo apt-get update sudo apt-get upgrade |
モジュール
1 |
sudo apt-get install subversion libjpeg-dev imagemagick |
ソースコードをDL
1 |
svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer |
ディレクトリ移動
1 |
cd mjpg-streamer |
make する
1 |
make |
インストール
1 |
sudo make install |
※ インストールしなくてもmjpg-streamer のディレクトリで動作します。(下記の記述は mjpg-streamer ディレクトリで動かしています。)
MJPG-streamer の起動
まずは現在動いている motion を停止
1 |
sudo service motion stop |
MJPG-streamer を起動!
1 |
./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www" |
・・・起動はしたけど、カメラ画面が真っ白で何も映っていない。
YUYV のオプションをつける必要があった。-y を付けて起動。
1 |
./mjpg_streamer -i "./input_uvc.so -y" -o "./output_http.so -w ./www" |
映ったー!
元々 motion で設定してあった 8081 ポートに Basic認証つきで 640×480 で 公開する。-b を指定するとバックグラウンドモードでの起動。
1 |
./mjpg_streamer -i "./input_uvc.so -y -r 640x480 -f 15" -o "./output_http.so -p 8081 -w ./www -c ID:PASSWORD" -b |
MJPG-streamer の自動起動を設定する
シェル・スクリプトのファイルを作成
ホームディレクトリに、シェル・スクリプト用のディレクトリ作成。
(シェル・スクリプトって普通どこに置くんだろ)
1 2 |
cd ~ mkdir tool |
ディレクトリ移動
1 |
cd tool |
ファイル作成
1 |
vi ./stream.sh |
私はこのように設定しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/bin/sh # This is Web-streaming server start up script.for raspi # No warrantly. # Config PORT="8081" ID="ベーシック認証のID" # 適宜変更してください PW="ベーシック認証のパスワード" # 適宜変更してください SIZE="640x480" # 320x240でも良いです F_RATE="15" # 5 fps なので 1秒5コマです。 MJPG_STREAMER=/usr/local/bin/mjpg_streamer export LD_LIBRARY_PATH=/usr/local/lib $MJPG_STREAMER \ -i "input_uvc.so -f $F_RATE -r $SIZE -d /dev/video0 -y" \ -o "output_http.so -w /usr/local/www -p $PORT -c $ID:$PW" -b |
動作確認
実行
1 |
sh /home/pi/tool/stream.sh |
動くことを確認して、一旦終了してみる。
終了
通常起動時の終了方法は、Control + C で終了させます。バックグラウンドモードの場合は、下記のコマンドで終了します。
1 |
kill -9 `pidof mjpg_streamer` |
これで、カメラを再起動したい場合も、上記コマンドで出来るようになりました。
シェル・スクリプト追加
1 |
sudo vi /etc/rc.local |
下記二行を追加
1 2 |
# MJPG Streamer Start sh /home/pi/tool/stream.sh |
こんな感じになりました。
1 2 3 4 5 6 7 8 9 10 |
# Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi # MJPG Streamer Start sh /home/pi/tool/stream.sh exit 0 |
設定が完了したので、最初にDLしてmakeした mjpg-streamer ディレクトリは削除しました。
1 |
rm -r ~/mjpg-streamer/ |
motion のアンインストール
motion は一旦アンインストールしておく
1 |
sudo apt-get --purge remove motion |
アンインストール後はこれもやっといとが特に何も削除されなかった
1 |
sudo apt-get autoremove |
ウェブページに埋め込み
埋め込んでいたページのURLを変更
1 |
<p><img src="Basic認証のID:Password@https://homemadegarbage.com:8081/" /></p> |
1 |
<p><img src="Basic認証のID:Password@https://homemadegarbage.com:8081/?action=stream" /></p> |
ストリーミングの様子
フレームレート15もあればヌルヌル動く!!MJPG-Streamerは遅延も僅かでとってもいい感じ!
CPU使用率
[2017年2月1日追記] CPU使用率についてご質問を頂いたので調べてみました。
vmstat だと 18%
1 2 3 4 |
$ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 294048 47312 331240 0 0 3 6 34 47 18 1 81 0 0 |
top (+1)だと、70%前後 という感じでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ top top - 09:49:05 up 21:30, 3 users, load average: 0.82, 0.80, 0.82 Tasks: 162 total, 1 running, 161 sleeping, 0 stopped, 0 zombie %Cpu0 : 0.0 us, 0.4 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu1 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu2 : 0.0 us, 1.3 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu3 : 67.9 us, 1.0 sy, 0.0 ni, 31.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 882772 total, 612392 used, 270380 free, 55292 buffers KiB Swap: 102396 total, 0 used, 102396 free. 345256 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 623 root 20 0 33832 4944 4000 S 69.0 0.6 898:04.04 mjpg_strea+ |
もう少し下げた方が良いかも知れない…。
ディレクトリ移動
が
cd mkdir
になっています。
cd tool
では?
ご指摘ありがとうございます。
修正しました。
現設定にてCPU使用率はどれくらいになるでしょうか?
現在のCPU使用率を確認してみました。記事に追記しましたので参考になれば幸いです。
ありがとうございます。参考にさせていただきました。
make install後にディレクトリを削除されています。ですがその後のコマンド例ではmake installしたモジュールではなく、ディレクトリ内のファイルを使っていると思われます。
また、svnを実行したのは自分なので、ディレクトリを削除するのにsudoは不要かと思われます。
ご指摘ありがとうございます。修正させて頂きました。
ま さん、ご指摘ありがとうございました(´;ω;`) 助かりました!!
複数カメラを指定した際に片方だけアクセスが出来ません。
ポートを8494、8495にしています。
以下抜粋コードです。
$MJPG_STREAMER \
-i “input_uvc.so -f $F_RATE -r $SIZE -d /dev/video0 -y” \
-o “output_http.so -w /usr/local/www -p $PORT0 -c $ID:$PW” -b
$MJPG_STREAMER \
-i “input_uvc.so -f $F_RATE -r $SIZE -d /dev/video1 -y” \
-o “output_http.so -w /usr/local/www -p $PORT1 -c $ID:$PW” -b
並列で動作できないのか、先に起動したvideo0の映像へはアクセスできますが、
video1へはアクセスできません。
書き方が悪いのでしょうか?