RaspberryPi
webcam

Raspberry piとApacheとWebカメラで外部から見られる監視カメラを作った話。

More than 3 years have passed since last update.

Raspberry piの環境構築の話とメモ

Webカメラを監視カメラとして利用したいなーと思ってWebサーバーを構築していますが、やっとできたのでメモ書き

やりたかったこと:
外からRaspberry pi に接続しているWebカメラにアクセスして画像情報を見られるようにする。

用意したもの:
・Raspberry pi(+電源とか、raspiを動かすために必須なもの)
・DDNS
・Apache(Webサーバ)
・mjpg-streamer(ストリーミングサーバ)
・Webカメラ

では書いていきます。


DDNSの取得と設定
http://ieserver.net/ にて取得。
cronに http://ieserver.net/ddns-update.txt を.txtから.plにして登録。
一定の間隔で実行されるようにしておく(自分の場合は15分刻み)
これでxxxxxx(任意).dip.jpにIPをひも付けます。


apacheをインストール
sudo apt-get install apache2
だけ。
Webサーバのルートをデフォルトで /var/www に変更したのでhtmlファイルなどはそこに置くことで、Apacheを起動させとりあえずローカルからに限定されるけどアクセスできるようにする。


mjpg-streamerのインストール
$ svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer
$ cd mjpg-streamer
$ sudo make install

でインストール完了。(インストールでパーミッション注意)


ストリーミングサーバーを起動する
・ターミナルからオプション指定して起動するか、
・シェルスクリプトを書くか
のどちらか。

今回は、ターミナルからオプションをいちいち指定するのは面倒なため後者を採用
=>シェルスクリプトの例文はこちらに載っています。
( http://make.bcde.jp/category/28/#content75 )
※ここでは8080ポートを起動させているのでそれに従って以下を書いていきます。
これを sh start_server.shで起動するとストリーミングサーバを起動させることができます。


ルータのポートの設定
外部からxxxxxx(任意).dip.jpにアクセスした時にRaspiにアクセスできるようにします。
インターネット側から特定のポートにアクセスした場合、指定したローカルアドレスに転送するということです。

ルータの設定は各メーカで違うのでそれは解説できませんが、今回の場合
・接続元IP→Raspberry piのローカルIP ポート番号80 (Apacheで立てたWebサーバ用)
・接続元IP→Raspberry piのローカルIP ポート番号8080 (mjpg-streamerのストリーミングサーバ用)
の2つをポートマッピング設定できればいいと思います。


以上で、
・DDNSを使ってホスト名にIPを割り当てる
・Webサーバを立てる
・Webカメラのストリーミングサーバを立てる
・外部からアクセスできるようにする。
が一通りできたと思います。

これで、すでに外部からのカメラ画像の表示はできているわけですが、表示方法に2種類ありまして
・mjpg-streamerがもともと用意しているHTMLファイルにアクセスする
・mjpg-streamerからストリームを取得してそれを表示する自作のHTMLファイルを用意する。
の2種類です。
前者は単純に http://設定したDDNSのホスト名:8080 でアクセスすれば見られます。とりあえずカメラの性能とか見たい場合はこちらを選択する感じで。
ただ、僕はカメラ画像だけではなくていろいろWebに表示させたいなーということを考えてたので後者を選択します。


HTMLファイルを構築する
といっても0からではなくて、mjpgstreamerにサンプルが幾つか用意されているのでそれを使うのがおすすめです。
いろいろサンプルはありますが、個人的なおすすめはJavaScriptのサンプルです。
http://設定したDDNSのホスト名:8080/javascript_simple.html にあるので見てください。

とりあえずそのソースを引っ張ってきて、あとは自分の好きなようにHTMLレイアウトを決めればいい感じに表示させることができます。


おまけ
Raspberry piでXwindow開いてブラウザでいろいろ調べたりしながら作業すると動作が重たくてフラストレーション溜まっちゃうので、以上の作業をするには普通にSSHしてやるのが正解な気がします。

mjpg-streamerのストリーミングサーバはターミナルがフォアグラウンドの時Ctrl+Cで停止することができますが、SSHでアクセスしている時用にシェルスクリプトを組んでもいいかもしれません。
(参照: http://albertlabo.wiki.fc2.com/wiki/mjpg-streamer )


Node.jsの構築に関しては完全にこれです。

(参照:http://qiita.com/yuyakato/items/a1225154445520dc2db39 )

で、いろいろとNode.jsの話をググってたんですけどNode.jsってWebサーバーにもなるんですね。何も知らなくて普通にApacheでいろいろやってしまいました。
(参照:http://qiita.com/hosomichi/items/1991567e56dea41d1021 )
(参照:http://usicolog.nomaki.jp/engineering/raspberryPi/raspberryPi_Nodejs.html)

とりあえずサーバのこと、ちょっとお勉強になったので良しとします。