みなさん、こんにちは。
Raspberry Piで遊んでいると、監視カメラシステムを構築したくなることってありますよね。そんな時に長年、多くのユーザーに愛されてきたのがmjpg-streamerです。
しかし最近、インターネットで「Debian BullseyeやBookwormではビルドできない」「動かない」といった情報を見かけることが増えました。その影響で、ustreamerという別のソフトウェアに乗り換える方も少なくないようです。
ですが、ちょっと待ってください!
私自身、mjpg-streamerのWebコントロール機能を重宝していますし、まだまだ現役で活躍できるソフトウェアだと思っています。実際に、最新のRaspberry Pi 4 (Bookworm 64bit)でも、きちんとビルドしてストリーミングすることに成功しています。
そこで今回は、改めてRaspberry Piでmjpg-streamerを動かす方法を、最新の環境での手順と合わせてご紹介します。なぜ古い情報では「動かない」とされていたのか、その理由も解説していきますね!
mjpg-streamerってどんなソフト?
mjpg-streamerは、USBカメラやRaspberry Piカメラの映像をMotion JPEG(MJPEG)形式でストリーミングするための、とても軽量なソフトウェアです。Webブラウザから手軽に映像を確認できるため、監視カメラやIoTプロジェクトで長年使われてきました。
必要な環境
まずは、以下のものを用意してください。
- Raspberry Pi 4または5
- OSはRaspberry Pi OS (Debian Bookworm, 64bit)を推奨します。Raspberry Pi 3以前のモデルでも動作しますが、その場合は32bit版のOSが必要です。
- UVC対応のUSBカメラ
手順1: 必要なパッケージをインストールしよう
まずは、mjpg-streamerをビルドするために必要なパッケージをまとめてインストールします。ターミナルを開いて、以下のコマンドを実行してください。
sudo apt update
sudo apt install -y build-essential git cmake pkg-config libjpeg-dev imagemagick libv4l-dev liblog4cpp5-dev
ここで、以前の手順を知っている方は、「あれ、libjpeg8-devは?」と思われたかもしれません。これが、古い情報でつまずく大きなポイントなんです。
Bookwormでは、libjpeg8-devというパッケージは存在しません。代わりにlibjpeg-devをインストールすれば、内部的にlibjpeg62-turbo-devが使われるため、問題なくビルドできます。
手順2: ソースコードを取得してビルドする
次に、GitHubからmjpg-streamerのソースコードを取得し、ビルドを行います。
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
make
エラーが出なければ、mjpg_streamer
という実行可能なファイルが生成されるはずです。何も難しいことはありませんよね?
手順3: 動作確認してみよう
USBカメラをRaspberry Piに接続し、/dev/video0
として認識されていることを確認したら、以下のコマンドで実行してみましょう。
./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -r 1280x720 -f 30" \
-o "./output_http.so -w ./www"
コマンドが実行されたら、PCやスマートフォンのWebブラウザから以下のURLにアクセスしてみてください。
http://<Raspberry PiのIPアドレス>:8080/
「About the examples」 の上にカメラのスナップショットが表示されれば成功です!

手順4: 自動起動を設定する(応用編)
常にmjpg-streamerを動かしておきたい場合は、systemdサービスとして設定するのが便利です。以下の内容で/etc/systemd/system/mjpg-streamer.service
ファイルを作成してください。
[Unit]
Description=mjpg-streamer service
After=network.target
[Service]
ExecStart=/home/pi/mjpg-streamer/mjpg-streamer-experimental/mjpg_streamer \
-i "/home/pi/mjpg-streamer/mjpg-streamer-experimental/input_uvc.so -d /dev/video0 -r 1280x720 -f 30" \
-o "/home/pi/mjpg-streamer/mjpg-streamer-experimental/output_http.so -w /home/pi/mjpg-streamer/mjpg-streamer-experimental/www"
Restart=always
User=pi
WorkingDirectory=/home/pi/mjpg-streamer/mjpg-streamer-experimental
[Install]
WantedBy=multi-user.target
ファイルを保存したら、以下のコマンドでサービスを有効化し、起動します。
sudo systemctl daemon-reload
sudo systemctl enable mjpg-streamer
sudo systemctl start mjpg-streamer
これで、Raspberry Piを再起動しても自動的にmjpg-streamerが起動するようになります。
なぜ「動かない」と言われていたのか?
最後に、インターネット上で見かける「動かない」という情報の背景を解説します。主な理由は以下の3つです。
- 古い手順のままlibjpeg8-devを要求している:
- Bookwormでは
libjpeg8-dev
が利用できません。このパッケージに依存した古い手順をそのまま試して、エラーでつまずいてしまうケースが多いです。
- Bookwormでは
- パッケージがリポジトリにないと誤解している:
- Debianの公式リポジトリには、
mjpg-streamer
のバイナリパッケージが提供されていません。そのため、「apt install
でインストールできないから使えない」と誤解されがちです。
- Debianの公式リポジトリには、
- Bullseye時代のコンパイラの不整合:
- 一時期、ソースコードの更新と
gcc
/cmake
のバージョンがうまくかみ合わず、ビルドエラーが発生する時期がありました。しかし、現在の最新版のソースコードでは、Bookwormのコンパイラでも問題なくビルド可能です。
- 一時期、ソースコードの更新と
まとめ
今回の手順で、最新のRaspberry Pi環境でもmjpg-streamerが問題なく使えることがわかっていただけたかと思います。
- Raspberry Pi (Bookworm 64bit) でもmjpg-streamerは問題なくビルド&動作します。
libjpeg8-dev
は不要です。代わりにlibjpeg-dev
を入れればOKです。- ネット上の「動かない」情報は、古い手順や誤解に基づいていることがほとんどです。
監視カメラの構築や、ちょっとしたストリーミングプロジェクトで、ぜひmjpg-streamerを試してみてください!
本日も最後までお読みいただきありがとうございました。
それでは、よいRaspberry Piライフを!