ラズパイ+Ubuntu+webカメラで監視カメラを作る

家でラズパイ4Bをサーバとして運用しています。外出先から部屋の様子を見るために安価なwebカメラを導入して、ストリーミングで見られるようにしました。

Linuxでは有名なmjpg-streamerを使いますが、結構情報が錯綜しているというか、その設定では動きませんでしたということが多発します。

備忘録として将来の自分のためにも残しておきます。

環境

ラズパイ:4B
OS : ubuntu 23.04

構築と設定

webカメラはこれを買いました。

ubuntu23.04が動いているラズパイのUSBにカメラを差し、認識しているかlsusbで確認します。

make、cmakeが入っていなかったのでaptで入れておきます。mjpg-streamerのインストールでも必要になるパッケージもついでに入れておきます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# sudo apt install make build-essential cmake libjpeg-dev
# sudo apt install make build-essential cmake libjpeg-dev
# sudo apt install make build-essential cmake libjpeg-dev

次にmjpg-streamerをgitからもらってきて、インストールします。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# git clone https://github.com/jacksonliam/mjpg-streamer.git
# make
# sudo make install
# git clone https://github.com/jacksonliam/mjpg-streamer.git # make # sudo make install
# git clone https://github.com/jacksonliam/mjpg-streamer.git
# make
# sudo make install

起動用スクリプトを書きます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# vi /home/yourname/mjpg-streamer/mjpg-streamer-experimental/webcam.sh
===
#!/bin/sh
export LD_LIBRARY_PATH="$(pwd)"
# MJPG-Streamerの起動シェル
# MJPG-Streamerの格納先ディレクトリ
MJPG_DIR="/home/yourname/mjpg-streamer/mjpg-streamer-experimental"
# USBカメラのデバイス名
DEV="/dev/video0"
# カメラ設定
WIDTH=1920
HEIGHT=1080
RES="${WIDTH}x${HEIGHT}"
FPS=30
QUALITY=8
PORT=8080
# カレントディレクトリ移動
cd $MJPG_DIR
# 既に動いているプロセスがあればkillしておく
pkill mjpg_streamer
# カメラ種別ごとに実行コマンドを切り替える
./mjpg_streamer -i "./input_uvc.so -d $DEV -r $RES -f $FPS" -o "./output_http.so -w ./www -p $PORT -c ID:Password"
exit 0
===
# vi /home/yourname/mjpg-streamer/mjpg-streamer-experimental/webcam.sh === #!/bin/sh export LD_LIBRARY_PATH="$(pwd)" # MJPG-Streamerの起動シェル # MJPG-Streamerの格納先ディレクトリ MJPG_DIR="/home/yourname/mjpg-streamer/mjpg-streamer-experimental" # USBカメラのデバイス名 DEV="/dev/video0" # カメラ設定 WIDTH=1920 HEIGHT=1080 RES="${WIDTH}x${HEIGHT}" FPS=30 QUALITY=8 PORT=8080 # カレントディレクトリ移動 cd $MJPG_DIR # 既に動いているプロセスがあればkillしておく pkill mjpg_streamer # カメラ種別ごとに実行コマンドを切り替える ./mjpg_streamer -i "./input_uvc.so -d $DEV -r $RES -f $FPS" -o "./output_http.so -w ./www -p $PORT -c ID:Password" exit 0 ===
# vi /home/yourname/mjpg-streamer/mjpg-streamer-experimental/webcam.sh

===
#!/bin/sh

export LD_LIBRARY_PATH="$(pwd)"

# MJPG-Streamerの起動シェル

# MJPG-Streamerの格納先ディレクトリ
MJPG_DIR="/home/yourname/mjpg-streamer/mjpg-streamer-experimental"

# USBカメラのデバイス名
DEV="/dev/video0"

# カメラ設定
WIDTH=1920
HEIGHT=1080
RES="${WIDTH}x${HEIGHT}"
FPS=30
QUALITY=8
PORT=8080

# カレントディレクトリ移動
cd $MJPG_DIR

# 既に動いているプロセスがあればkillしておく
pkill mjpg_streamer

# カメラ種別ごとに実行コマンドを切り替える
./mjpg_streamer -i "./input_uvc.so -d $DEV -r $RES -f $FPS" -o "./output_http.so -w ./www -p $PORT -c ID:Password"

exit 0
===

起動コマンドの-cオプションはBasic認証を設定するものです。

実行権をつけておきます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# chmod 755 webcam.sh
# chmod 755 webcam.sh
# chmod 755 webcam.sh

systemctlに登録して、サーバが起動する時に自動起動するようにし、またデーモンとして起動します(上記シェルスクリプトで起動するとforegroundで起動する)。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# sudo vi /etc/systemd/system/mjpg-streamer.service
===
[Unit]
Description=mjpeg-streamer
After=network-online.target
[Service]
Type=simple
KillMode=process
Restart=always
ExecStart=/home/yourname/mjpg-streamer/mjpg-streamer-experimental/webcam.sh
[Install]
WantedBy = multi-user.target
===
# sudo systemctl daemon-reload
# sudo systemctl enable mjpeg-streamer.service
# sudo systemctl start mjpeg-streamer.service
# sudo vi /etc/systemd/system/mjpg-streamer.service === [Unit] Description=mjpeg-streamer After=network-online.target [Service] Type=simple KillMode=process Restart=always ExecStart=/home/yourname/mjpg-streamer/mjpg-streamer-experimental/webcam.sh [Install] WantedBy = multi-user.target === # sudo systemctl daemon-reload # sudo systemctl enable mjpeg-streamer.service # sudo systemctl start mjpeg-streamer.service
# sudo vi /etc/systemd/system/mjpg-streamer.service

===
[Unit]
Description=mjpeg-streamer
After=network-online.target

[Service]
Type=simple
KillMode=process
Restart=always
ExecStart=/home/yourname/mjpg-streamer/mjpg-streamer-experimental/webcam.sh

[Install]
WantedBy = multi-user.target
===

# sudo systemctl daemon-reload
# sudo systemctl enable mjpeg-streamer.service
# sudo systemctl start mjpeg-streamer.service

これでエラーなく起動できていれば、カメラ映像をストリーミングで見られます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
http://サーバのIP:8080/
http://サーバのIP:8080/
http://サーバのIP:8080/

また、設定画面不要で、直接ストリーミング映像を見るならURLを次のようにします。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
https://サーバのIP:8080/?action=stream
https://サーバのIP:8080/?action=stream
https://サーバのIP:8080/?action=stream

ボクはこのURLをブクマしておいて、外出先からすぐに確認できるようにしています。

タイトルとURLをコピーしました