
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+  | 
					
もう少し下げた方が良いかも知れない…。
            お母ちゃん 
             2016.6.6 
          
		
		
		
		
		
		
		
		
ディレクトリ移動
が
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へはアクセスできません。
書き方が悪いのでしょうか?