Raspberry Piは、USBカメラ(Webカメラ)を使って、簡単にストリーミング配信を行うことができます。Raspberry PiとUSBカメラがあれば、監視カメラを作ることができるため、自宅で子供やペットを見守る用途などに使用することができます。
使用するUSBカメラ
使用するUSBカメラは、UVC(USB Video Class)に対応していれば大抵使えます。
UVCは、主にUSBカメラの通信方法に関する規格です。
このサイトでは、USBカメラ(Webカメラ)は、「LOGICOOL C270」を使用します。
「LOGICOOL C270」は安価、確実に動作するためオススメのカメラです。
USBカメラを接続する
RaspberryPiにUSB端子を接続して、カメラが認識されていることを確認します。
USB接続の確認には「lsusb」コマンドを使用します。
$ lsusb Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 046d:0825 Logitech, Inc. Webcam C270
上記コマンドから「Logitech, Inc. Webcam C270」が認識されていることが確認できます。
IPの確認
Webカメラとして使用するために、まずはRaspberry PiのIPアドレスを確認する。
IPアドレスを確認するには、「ifconfig」コマンドを使用する。
$ ifconfig eth0 Link encap:Ethernet HWaddr XX.XX.XX.XX.XX.XX inet addr:192.168.10.9 Bcast:192.168.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:256982 errors:0 dropped:0 overruns:0 frame:0 TX packets:390592 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:14976277 (14.2 MiB) TX bytes:501705400 (478.4 MiB)
inet addr以下を確認します。上記の例では「192.168.10.9」になります。
MJPG-streamer
Linuxのストリーミングソフトである「MJPG-streamer」をインストールします。
MJPG-streamerは、パッケージ化されていないためSubversionで取得する必要があります。
コマンドを実行して、「MJPG-streamer」のインストールに必要なソフトをインストールしておきます。
$ sudo apt-get update $ sudo apt-get install -y subversion libjpeg-dev imagemagick
Subversionをインストールしたら、「MJPG-streamer」を取得して、インストールします。
$ svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer $ cd mjpg-streamer $ make $ sudo make install
ストリーミングサーバーの起動
MJPG-streamerを起動するためのスクリプトを編集します。
外部に公開する場合は、簡単ですがユーザー名とパスワードが必要な設定にします。
以下のように、アクセスするのに必要となる任意のIDとPWを設定して、スクリプトを実行する。
mjpg-streamerのフォルダ内に以のファイルを作成し、編集します。
$ vi start_server.sh
ファイル内に以下のスクリプトを追加します。
PORTでポート番号の変更、ID,PWでアクセス時に要求されるユーザ名とパスワードを変更することができます。
#!/bin/sh PORT="8080" #ポート番号 ID="user" #ID PW="passward" #パスワード SIZE="320x240" #画面サイズ FRAMERATE="2" #フレームレート export LD_LIBRARY_PATH=/usr/local/lib ./mjpg_streamer \ -i "input_uvc.so -f $FRAMERATE -r $SIZE -d /dev/video0 -y -n" \ -o "output_http.so -w /usr/local/www -p $PORT -c $ID:$PW"
以下のスクリプトを実行すると、ストリーミングサーバが立ち上がります。
$ sudo sh start_server.sh
アクセスして動作確認する
ブラウザでhttp://[IPアドレス]:[ポート番号]をURL欄に入力して、ページを表示します。
ローカルIPでRaspberry Piにアクセスすると、下のようにMJPG-streamerが用意する画面が表示され、USBカメラが撮影した画像を見ることができます。
上記までの例の場合は、「http://192.168.10.9:8080」を入力します。ユーザー名とパスワードを求められるため、起動スクリプトで設定したID,PWを入力します。
上記までは、自宅内のローカルネットワークで繋げている場合です。
ルーターを通して、ローカルIPでアクセスしています。
外部アクセスできるようにする
上記まででは、自宅内のローカルネットワークでしかWebカメラを利用することができないため、外部からWebカメラを確認できるように設定を変更します。
外部に公開するには、上記までに加えて以下を行います。
デフォルトのユーザpiをそのまま使い続けるわけには行かないため使用する前に行うべき設定のに記されている設定を行っておきます。
・rootパスワードの設定
・piユーザの削除
また、以下の「ファイヤーウォールの設定」を行い、不正なポートアクセスを防いでおきます。
ルーターのポート設定
最後に、Webカメラが使用しているポートを、外部に公開するために、ルーターのポート設定を行います。
ルーターの設定では、「ポートマッピング設定」「NAT」等から設定を行います。
インターネット側から特定のポートにアクセスした場合、指定したローカルアドレスに転送します。
ルーターの設定は、各メーカによって違うため、すべてに対応する説明はできません。ご自宅のルーターのマニュアルに従って設定してください。
RaspberryPi(Linux)起動時に,自動でMjpegを起動する
Raspberry Piに限らずLinuxで起動時に、スクリプトを実行したい場合は、/etc/rc.local ファイルにコマンドを記述すればサーバの起動時に自動的に実行されます。
/etc/rc.local ファイルを以下のように修正します。
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi #ここから追加 sh /home/user/mjpg-streamer/start_server.sh & #ここまで追加 exit 0
ここで指定する起動用のスクリプトはmjpegの実行パスを絶対パスに修正しておきます。
#!/bin/sh PORT="8080" #ポート番号 ID="user" #ID PW="passwd" #パスワード SIZE="320x240" #画面サイズ FRAMERATE="2" #フレームレート MJPEGDIR=/home/user/mjpg-streamer export LD_LIBRARY_PATH=/usr/local/lib $MJPEGDIR/mjpg_streamer \ -i "input_uvc.so -f $FRAMERATE -r $SIZE -d /dev/video0 -y -n" \ -o "output_http.so -w /usr/local/www -p $PORT -c $ID:$PW"
これで、Raspberry Pi(Linux)を再起動すると、Mjpegが自動起動します。