概要
Raspberry Piでmjpg-streamerを用いて、USBカメラ2台による配信を行おうとしたが、select() timeoutエラーで行き詰まりました。
その後、解消方法が分かったので、忘備録として記述。
環境
Raspberry Pi 4B 4G
OS: Bullseyes
USBカメラ: HD画質1080p×1、FHD画質×1
エラー
ターミナルから起動コマンド
カメラ1: /home/pi/mjpg-streamer/mjpg-streamer-experimental/mjpg_streamer -i "/home/pi/mjpg-streamer/mjpg-streamer-experimental/input_uvc.so -f 10 -r 1280x720 -d /dev/video0 -y" -o "/home/pi/mjpg-streamer/mjpg-streamer-experimental/output_http.so -w /home/pi/mjpg-streamer/mjpg-streamer-experimental/www -p 8080"
の後に
カメラ2: /home/pi/mjpg-streamer/mjpg-streamer-experimental/mjpg_streamer -i "/home/pi/mjpg-streamer/mjpg-streamer-experimental/input_uvc.so -f 10 -r 1280x720 -d /dev/video2 -y" -o "/home/pi/mjpg-streamer/mjpg-streamer-experimental/output_http.so -w /home/pi/mjpg-streamer/mjpg-streamer-experimental/www -p 8081"
とすると
i: select() timeout
i: cleaning up resources allocated by input thread
とエラーが出て、カメラ2を起動できない。
どうやらスペックの限界で起動に時間がかかりタイムアウトするようだ。
対処法
下記のサイトも参考にしつつ、色々いじって対処法を試した。
結果としては4が有効であり、無事高解像度でカメラ2台の配信ができるようになった。
- カメラ2の解像度を下げる
- gpu_memを256MBまで増加
- 起動コマンドにオプションで "-timeout 15"を追加
- "-timeout 60"に設定、"fps"を10から5へ減らす
1. カメラ2の解像度を下げる
スペックが足りないならカメラ2の解像度を落とせばいいじゃない。ということで、640×360に落としたところカメラ2も無事起動。
ただ画質が悪いので自分の目的には不適である。
2. gpu_memを256MBまで増加
上記のサイトを参考に、raspi-configより、gpu_memを256MBに設定。
エラーは解消しなかった。128にちょっと下げておくことにした。
3. 起動コマンドにオプションで "-timeout 15"を追加
上記のサイトを参考にtimeoutオプションを設定。効果なし。
4. 思い切って"-timeout 60"に設定したところ起動成功!ただ起動後の配信もかなり処理が重いようで、ラグがものすごいことに。"fps"を10から5へ減らしたところ、まあ見れるくらいに改善。下記で安定。
/home/pi/mjpg-streamer/mjpg-streamer-experimental/mjpg_streamer -i "/home/pi/mjpg-streamer/mjpg-streamer-experimental/input_uvc.so -f 5 -r 1280x720 -d /dev/video2 -y -timeout 60" -o "/home/pi/mjpg-streamer/mjpg-streamer-experimental/output_http.so -w /home/pi/mjpg-streamer/mjpg-streamer-experimental/www -p 8081"
その他、mjpg-streamerを遠隔でカメラの彩度等を調整する方法はこちらから
