2021年4月17日土曜日

MJPG-Streamerの代替としてµStreamerを試してみた。

 前にMJPG-StreamerでWiFiなFPVカメラにすると遅延がどのぐらい出るのかを試してみたんだけど、そのときは解像度320x240の15FPSで行けそうなぐらいだった。
µStreamerを使うとカメラのハードウェアエンコード機能を使えたりするらしいので、この機能でどのぐらい低遅延になるのかを試してみた。

µStreamerはラズパイに最適化されていてラズパイカメラでもMJPG-Streamerより性能が出るらしいんだけど今回は前回試したときと同じBeagleBone BlueとUVC対応Webカメラで試してみた。

まずはBBBlueのOSのアップデート。だいぶ放置していたので今回はeMMCのOSをまるごとアップデートすることに。OSはこちらからダウンロードした。
今回はeMMCのOSをまるごと入れ替えたかったので、consoleフォルダの中のbone-eMMC-flasherから始まるイメージファイルを使用した。ダウンロード後に解凍するとimgファイルができるのでラズパイ用の書込ツールでimgファイルを適当なSDカードに書き込んだ。

あとはBeagleBone Blueに差し込んでSDボタンを押しながら電源を入れるだけ。LEDが5分ぐらい流れたあとに全点灯して少しするとLEDが消えるので、LEDが全部消えたら(ACアダプタ使用時は緑色だけついた状態)電源を抜いてmicroSDカードを抜いて完成。

電源を入れるとeMMCから新しいOSが起動する。

次に本題のμStreamerをビルドする。MJPG-Streamerのようにapt-getだけでは入れられなかったのでGithubの手順通りにビルドした。手順と一緒にMJPG-streamerとの比較が乗ってるので置き換えを狙っていそうな感じ?確かにMJPG-streamerはラズパイではよく使用例があるんだけどあんまり更新されてなさそうだし…

まずは必要なパッケージをインストール

sudo apt-get update
sudo apt-get install build-essential libevent-dev libjpeg-dev libbsd-dev make usbutils

ustreamer本体をダウンロードしてビルド

git clone --depth=1 https://github.com/pikvm/ustreamer
cd ustreamer
make

ビルドに2分ぐらいかかった。

Webカメラを繋げて起動してみる。BeagleBone BlueにACアダプタ接続するの忘れずに(ACアダプタかバッテリがないとUSBポートの電圧が不安定でカメラがうまく起動できない)
今回は前回と同じくC270を使用した。これも一応MJPEGのハードウェアエンコード対応しているらしい。

./ustreamer -m MJPEG -c HW -f 15 -s 0.0.0.0 -p 8080

これでUSBとBeagleBoneをPCに繋いでる場合はhttp://192.168.7.2:8080にアクセスするとµStreamerのページが表示されるはず。
/streamをクリックすると映像が見れる。

デフォルトの640x480でも結構レスポンスが良さそうなので前回同様測定してみた。

解像度640x480の15FPSでも0.25秒だった。ちなみに1280x720でも0.23秒だったのでハードウェアエンコードが効いている感じがある。さらにはFPSを30に上げてみても0.25秒だったので、ハードウェアエンコードができる設定であれば帯域が十分にあれば変わらなそう。(25FPSとかに設定してもC270の設定にないのでFPS30に自動で変更されている)
ちなみにCPU使用率は720Pの30FPS設定でも10%ぐらいだった。

H264のハードウェアエンコード対応のカメラだったら帯域を食わなくていいのかなぁ
でもお高い…
ちなみにSJ4000をUSBカメラモードで使うと遅延が0.31秒ぐらいの遅延だったのでカメラによっても遅延が変わるっぽい。

やっぱりFPVとかやるなら広角レンズのほうが良さそう。C270にワイドレンズつけてもそこまで広がらないからなんかいいのないかなぁ。

μStreamerの方はビルドが面倒かもしれないけどすぐビルドが終わるし、使い勝手もMJPG-streamerとあまり変わらないので置き換えアプリケーションとしてはいいかもしれない。ラズパイに最適化されているらしいので今度はラズパイカメラでh.264での遅延を試してみようかな。

0 件のコメント:

コメントを投稿