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は、どうも中途半端です。

関連記事