「動かない」は誤解です – 最新のRaspberry Piでmjpg-streamerを動かす方法【Bookworm対応】

みなさん、こんにちは。

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」 の上にカメラのスナップショットが表示されれば成功です!

mjpg-streamerのトップ画面
トップ画面にスナップショットが表示

 


 

手順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つです。

  1. 古い手順のままlibjpeg8-devを要求している:
    • Bookwormではlibjpeg8-devが利用できません。このパッケージに依存した古い手順をそのまま試して、エラーでつまずいてしまうケースが多いです。
  2. パッケージがリポジトリにないと誤解している:
    • Debianの公式リポジトリには、mjpg-streamerのバイナリパッケージが提供されていません。そのため、「apt installでインストールできないから使えない」と誤解されがちです。
  3. Bullseye時代のコンパイラの不整合:
    • 一時期、ソースコードの更新とgcc/cmakeのバージョンがうまくかみ合わず、ビルドエラーが発生する時期がありました。しかし、現在の最新版のソースコードでは、Bookwormのコンパイラでも問題なくビルド可能です。

 


 

まとめ

 

今回の手順で、最新のRaspberry Pi環境でもmjpg-streamerが問題なく使えることがわかっていただけたかと思います。

  • Raspberry Pi (Bookworm 64bit) でもmjpg-streamerは問題なくビルド&動作します。
  • libjpeg8-devは不要です。代わりにlibjpeg-devを入れればOKです。
  • ネット上の「動かない」情報は、古い手順や誤解に基づいていることがほとんどです。

監視カメラの構築や、ちょっとしたストリーミングプロジェクトで、ぜひmjpg-streamerを試してみてください!

 

本日も最後までお読みいただきありがとうございました。

それでは、よいRaspberry Piライフを!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール