Raspberry Pi 5でUSBカメラを接続してエンコードして配信テストします。

実はRaspberry Pi 5はハードウェアエンコードが無くなりました。ソフトウェアエンコードしかできないため高負荷なHVEC(H265)の対応も厳しいです。これはきつい。Raspberry Pi 4の方がハードウェアエンコードがあるため低負荷で動画を配信できます。Raspberry Pi 5は高いし、発熱するし、ハードウェアエンコードないし。。。。

まあRaspberry Pi 4のハードウェアエンコードは性能が低く画質が綺麗ではないため、Raspberry Pi 5でソフトウェアエンコードしたほうが画質は良好です。またCPUパワーが増しているので、ソフトウェアエンコードを使えばいいよね!という話ですが、まあ実際にRaspberry Pi 5でRTMP配信してみます。OSはubuntu24.04です。

 

USBカメラを接続

USBカメラを接続しました。認識しているかコマンドで確認します。

lsusb

Bus 002 Device 003: ID 32e4:9230 HD USB Camera HD USB Cameraとカメラを認識しました。カメラのドライバー的なv4l-utilsをインストールします。

sudo apt install v4l-utils

カメラデバイスとして認識したか確認します。

ls /dev/video*

次のようにビデオがたくさん表示されましたが、video0があるので認識しました。
/dev/video0 /dev/video22~~~/dev/video27 /dev/video32~~/dev/video37

video0のフォーマットを確認してみます。

v4l2-ctl --list-formats-ext --device /dev/video0

MJPGで1920×1080で30fpsが上限であることが分かりました。

[0]: ‘MJPG’ (Motion-JPEG, compressed)
Size: Discrete 1920×1080
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1280×720
Interval: Discrete 0.017s (60.000 fps)
Size: Discrete 1024×768
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640×480
Interval: Discrete 0.008s (120.101 fps)
Size: Discrete 800×600
Interval: Discrete 0.017s (60.000 fps)
Size: Discrete 1280×1024
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320×240

 

ffmpegでも良いですが、Gstreamerをインストールします。主要以外のバージョンも適当に入れます。これだけ入れておけば、大体の機能が動くでしょう。

sudo apt install gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly

動くか確認します。以下コマンドで画像が出てきました。

gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink

YoutubeへRTMP送信します。MJPGを使うことで滑らかになります。配信urlは適宜差し替えてください。*************でマスクしています。H264をCPU処理するしかないです。

gst-launch-1.0 -e v4l2src device=/dev/video0 ! "image/jpeg,width=1920,height=1080,framerate=30/1" ! jpegparse ! jpegdec ! videoconvert ! x264enc bitrate=2500 speed-preset=veryfast tune=zerolatency ! h264parse ! flvmux streamable=true name=mux ! rtmpsink location='rtmp://a.rtmp.youtube.com/live2/************* live=1' audiotestsrc wave=sine freq=440 ! audioconvert ! voaacenc bitrate=128000 ! mux.

CPU負荷率50%ぐらいでRTMP配信できました。60分続けても問題ありませんでした。Raspberry Pi 5は、どうも中途半端です。