Note ! 本記事は公開から1年以上経過しています。
- Raspberry Pi OS・FFmpeg などの版とパッケージ構成は変わりやすいです。公式リリースノートと推奨ビルド手順で確認してください。
- RTMP 配信は配信先サービスの仕様変更の影響を受けます。エンドポイント・認証・非推奨化の有無を最新ドキュメントで確認してください。
- 発熱と電源要求は世代とケースで異なります。長時間配信時は温度と電流容量を実測で確認してください。
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 1920x1080 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 1280x720 Interval: Discrete 0.017s (60.000 fps) Size: Discrete 1024x768 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 640x480 Interval: Discrete 0.008s (120.101 fps) Size: Discrete 800x600 Interval: Discrete 0.017s (60.000 fps) Size: Discrete 1280x1024 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 320x240 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は、どうも中途半端です。