2024年12月6日金曜日

Luckfox PicoでµStreamerを使ってみた。

 LuckfoxのbuildrootでUVCなWebカメラを接続してustreamerが動くのか試してみた。Webカメラ側でハードウェアでMJPEGに変換したのをそのままブラウザで表示させるぐらいならメモリ64MBでも行けそう。改造したメカナムラジコンもESP32からLuckfoxにすればカメラを見ながら操作できたりするかも?

WiFiにつながるようにしたときにUSB hostは動いていたので、OTGアダプタにUSBハブを繋いでWiFiとLogicool C270を接続してみた。まさかのUSB3.0+USB2.0ハブとして売られていたハブがUSB1.1なMW7211Aが使われていたので今回はBuffaloのUSB2.0ハブに交換した。

ちなみにUSBハブが1.1だと
v4l2-ctl -d /dev/video0 --list-formats-ext
したときに解像度が800x600までしか対応していなかった。USB2.0のハブに交換してみたら1280x720まで対応した。

USBカメラが認識したところでustreamerのインストール。
Luckfoxのbuildrootは2023.02.6なのでustreamerのパッケージが追加される前だった。なので手動で新しいバージョン用のパッケージを追加してみた。

UbuntuのSDKの環境で、
mkdir $HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/package/ustreamer
cd $HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/package/ustreamer
wget https://git.busybox.net/buildroot/plain/package/ustreamer/Config.in
wget https://git.busybox.net/buildroot/plain/package/ustreamer/ustreamer.hash
wget https://git.busybox.net/buildroot/plain/package/ustreamer/ustreamer.mk
としてustreamer用のパッケージ情報をダウンロード。
そしたら
$HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/package/
の中のConfig.inをテキストエディタで開いて
menu "Audio and video applications"の一番下に
source "package/ustreamer/Config.in"
と追加して保存。

あとは
cd $HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/
make menuconfig
で先ほど追加したustreamerをTarget packageのAudio and video applicationsの一番下で選択する。
そしたら
make savedefconfig
make
cd $HOME/luckfox-pico
./build.sh lunch

でLuckfox Pico Mini Bの内蔵フラッシュを選択したいので、2-1-0の順番で選ぶ。

./build.sh

でビルドする。

これでluckfoxに書き込みして
ustreamerって実行すれば動くはずだったんだけど
Segmentation fault (core dumped)が出てしまって起動しない。

仕方ないのでgdbで調べてみると
us_build_short_options()
で落ちてることがわかった。どうやら起動オプションのショートオプションの方の処理で落ちてるっぽい。ということでここをコメントアウトしてビルドしてみることに。

$HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/output/build/ustreamer-6.16/src/ustreamer
の中の
//	us_build_short_options(_LONG_OPTS, short_opts, 128);
をこんな感じにコメントアウトしてもう一回makeからやり直してみた。
そしたら一応セグることはなくなった。バイナリのサイズもなぜか390kbから443kbに増えてるし。uClibcだということが関係しているのかもしれない。
しかしショートオプション(-hみたいなやつ)が使えなくなったのでロングネームオプションで起動してみる。
ustreamer --device=/dev/video0 --host=0.0.0.0 --port=80 --format MJPEG --resolution 1280x720 --desired-fps 15
これでブラウザからアクセスしてみるとちゃんとカメラの映像を表示することができた!
ちなみに30FPSだと少し不安定な気がする。15FPSでも遅延が250msぐらいだったので、ラズパイZero Wと同じぐらいの遅延で行けた。
とりあえずショートオプション使えなくても問題なさそうなのでまずはこのまま使ってみようかな。Buildrootは起動がすごく早いのでROM化すれば気軽にUVCカメラをラグが少ないネットワークカメラにできてしまうかも。

0 件のコメント:

コメントを投稿