はじめに
前回webカメラを使って写真を送る監視カメラを作成しました。
前回記事:【はじめてのRaspberry PIで監視カメラを作ってみた。】
本当はその時にカメラモジュールを使用するつもりでしたが、エラーが起きたためwebカメラにしました。
そのため、今回再チャレンジしてみました。
機能概要
今回は前回とは別軸で、ペットを監視する為の動画配信機能を作成しようと思います。
年末年始に家を空けてる間いに、ペットの様子が見たい!と思ったので、ペットを監視する為の動画配信機能を最優先にしました。
スペック
あとで重要になるのでスペックを書いておきます。
・Raspberry Pi B+
・raspbian 8 Jessie
RaspberryPiのconfig設定
まずはカメラモジュールを繋げたら、
下記コマンドでRaspberryPiのconfig設定画面を表示します。
$ sudo raspi-config
するとこんな設定画面が出てくるので、まずはEnable Cameraを選択。
これで完了です。
カメラ動作テスト
次にカメラが正常に使えるかテストしてみます
raspistillコマンドは、静止画を撮影するコマンドです。
$ raspistill -o img.jpg
写真ができている事を確認
$ ls
Desktop Downloads Pictures Templates img.jpg ←これ
ちゃんとできてますね。
ではscpでlocalのPCにコピーして実際に写真を見てみます。
おお!ピントが合ってないですが、一応撮れてますね!
これで、カメラ自体の動作は問題無い事が確認できました。
motionで使う
次に、前回も登場したmotionなのですが、実はカメラモジュールには使えないそうなのです。
代わりにカメラモジュール用のmotion-mmalcamを使用します。
motion-mmalcamはconfの内容等は通常のmotionと同じみたいです。
$ wget https://www.dropbox.com/s/xdfcxm5hu71s97d/motion-mmal.tar.gz
$ tar -zxvf motion-mmal.tar.gz
では早速起動させてみます。
$ sudo ./motion -n -c motion-mmalcam.conf
./motion: error while loading shared libraries: libavformat.so.53: cannot open shared object file: No such file or directory
エラーになりました、libavformatが無いみたいですね。
そもそも、libavformatとはなんぞや?
wikipedia:FFmpeg
FFmpeg(エフエフエムペグ)は動画と音声を変換することのできるUNIX系OS生まれのフリーソフトウェアであり、libavcodec(動画/音声のコーデックライブラリ)、libavformat(動画/音声のコンテナライブラリ)、libswscale(色空間・サイズ変換ライブラリ)、libavfilter(動画のフィルタリングライブラリ)などを含む。
ふむふむ、ようは動画や写真を扱うライブラリなのね。
ではインストールしますかね。
$ sudo apt-get -y install libavcodec-dev libavcodec53 libavformat53 libavformat-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
E: パッケージ libavcodec53 が見つかりません
E: パッケージ libavformat53 が見つかりません
ええ?!インストールできない orz
こちらでapt-file使うと良いよみたいなもの見つけたので、試してみる。
$ sudo apt-get install apt-file
~~snip~~
$ sudo apt-file update
~~snip~~
$ apt-file search libavformat.so.53 ←反応が無いから、対象がhitしなかったらしい。
$ apt-file search libavformat.so ←hitした様子。
libavformat-dev: /usr/lib/arm-linux-gnueabihf/libavformat.so
libavformat56: /usr/lib/arm-linux-gnueabihf/libavformat.so.56
libavformat56: /usr/lib/arm-linux-gnueabihf/libavformat.so.56.1.0
omxplayer: /usr/lib/omxplayer/libavformat.so
omxplayer: /usr/lib/omxplayer/libavformat.so.56
omxplayer: /usr/lib/omxplayer/libavformat.so.56.25.101
お!なんかhitした思ったので、とりあえず、「libavformat-dev」と「libavformat56」をインストールしてみたのですが、もちろん解決にならずorz
まぁ、上の知恵袋でも言ってた様にOSがダメなのかもしれない...
OSの確認
とりあえず、OSが原因かもしれないのでOSを確認します。
$ cat /etc/debian_version
>> 8.0
8系なのでやはり、Jessieでした。
やはり、7系のWheezyにするしか無いのか。。。
そもそも今回の原因は何だろう。
motion-mmalcamを起動しようとするとlibavformatが無いというエラーになる。
ffmpegはlibavformatを含む。
ffmpegが入ってないのがダメなのか?
~/work/ffmpeg/ffmpeg-2.7.2 $ ffmpeg -version
-bash: ffmpeg: コマンドが見つかりません
入ってない...
ん〜良くわからないけどffmpeg入れたら動くのでは?と思いました。
ffmegをインストール
Rapberry Pi 2 のRapbian jessieでffmpegをセルフビルドしてみた
ではこちらの記事に忠実に従ってにffmpegを入れます。
・まずはビルドに必要なパッケージをインストールします。
・fdk-aacなるものをビルドします。
・そしてffmpegをビルドします。
ffmpegのビルドに6時間かかりました...
$ sh myconfig.sh ←ビルド開始
~~~snip~~~
collect2: error: ld terminated with signal 9 [強制終了]
Makefile:122: recipe for target 'ffmpeg_g' failed
make: *** [ffmpeg_g] Error 1
make: *** 未完了のジョブを待っています....
real 332m24.627s
user 319m54.230s
sys 6m27.370s
エラーにより強制終了されましたorz
6時間が水の泡です。
mjpg-streamerを使う。
途方にくれていると、motion以外にも簡単に動画配信できる、mjpg-streamerなる物が有る事をしりました。
今回は動画配信機能なので、mjpg-streamerで全く問題ありません。
と言う事で、まずはOSを入れ替えるより、mjpg-streamerで対応する事にしました。
今回はこちらの記事を参考にしました
ではまず、libjpeg62-devをインストールします^^
$ sudo apt-get install libjpeg62-dev cmake
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
Package libjpeg62-dev is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
libjpeg9-dev libjpeg8-dev libjpeg62-turbo-dev
E: Package 'libjpeg62-dev' has no installation candidate
エラー....
オワタ\(^o^)/
と思ったのですが、こちらの記事に回避方法が書いてありました。
p.292:mjpg-streamerインストール用コマンドの2番め
mjpg-streamerをインストールするためのコマンドの2番めは下記のようなものでした。
$ sudo apt-get install libjpeg62-dev cmake
このコマンドが
E: Package ′libjpeg62-dev′ has no installation candidate
というエラーにより終了する場合、このコマンドを下記のように変更してください。libjpeg62-devをlibjpeg8-devに変更しています。
$ sudo apt-get install libjpeg8-dev cmake
どうやらlibjpeg8-devで代用できるようです。
これに従って、いったんlibpeg8でやってみます。
$ sudo apt-get install libjpeg8-dev cmake
~~snip
libjpeg8-dev:armhf (8d1-2) を設定しています ...
うまく行きました!!
では次にmjpg-streamerをクローンしてきます。
$ git clone https://github.com/jacksonliam/mjpg-streamer.git mjpg-streamer
そしてmake!
$ cd mjpg-streamer/mjpg-streamer-experimental
~/mjpg-streamer/mjpg-streamer-experimental $ make
$ sudo mv mjpg-streamer/mjpg-streamer-experimental /opt/mjpg-streamer
さぁ!準備は整いました!
いざ起動!!
$ cd /opt/mjpg-streamer
$ ./mjpg_streamer -o "./output_http.so -w ./www -p 8080" -i "./input_raspicam.so -fps 30 -x 320 -y 240"
~~~snip~~~
i: fps.............: 30
i: resolution........: 320 x 240
i: camera parameters..............:
Sharpness 0, Contrast 0, Brightness 50
Saturation 0, ISO 400, Video Stabilisation No, Exposure compensation 0
Exposure Mode 'auto', AWB Mode 'auto', Image Effect 'none'
Metering Mode 'average', Colour Effect Enabled No with U = 128, V = 128
Rotation 0, hflip No, vflip No
o: www-folder-path...: ./www/
o: HTTP TCP port.....: 8080
o: username:password.: disabled
o: commands..........: enabled
~~~snip~~~
キタ━━━(゚∀゚).━━━!!!
動きました!
ではブラウザで確認してみます。
http://[Raspberry piのIPアドレス]:8080
おお、きてるきてる!!
赤外線カメラだからか色が薄いです。
本当はこんな感じでもっと赤い色をしています。
ではせっかくの赤外線なので、暗転してみます。
ドーーーン!
おお!かなりはっきり写りました!
しかも、動画の動きも滑らかです。
motionでwebカメラ使った時のカクカクと比べると、おなじ30fなのにこちらの方が、かなりスムーズですね。
これで留守中でもペットがはっきり見えます。
とりあえず、今回はこれで良しとします。
しかし、motionでもカメラモジュールを使用したいので、そのうちOSを下げる等して、libavcodec53エラーを解決したいなぁと思います。
他に良い解決方があれば教えてくださいw