2026年8月12日水曜日

MediaMTXでAction 5 ProのHWエンコードを使ってみた。

 前にラズパイでuStreamerでUSBカメラのMJPEGエンコーダを使ってそのままストリーミングしたらめっちゃ低遅延だったんだけど、友人がDJI Osmo Action 5 Proを持ってるとのことだったので借りてきてH264バージョンを試してみることに。

まず初めにどのフォーマットに対応してるのか確認。ウェブカメラモードにしてラズパイゼロに繋いで、

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

をしてみると

ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture

        [0]: 'MJPG' (Motion-JPEG, compressed)
                Size: Discrete 1280x720
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
        [1]: 'H264' (H.264, compressed)
                Size: Discrete 1280x720
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)

まずは前回と同じ条件(720pのMJPEG)で測定してみた。

247msだった。C270だと160msぐらいだったのに。Action 5 ProのほうがC270より遅延がある。やはりここはUSBカメラのチップによるのかな。

お次はH264と思ったんだけどuStreamerが対応していないようなのでMediaMTXで試してみることに。

MediaMTXはラズパイカメラの遅延を試したときに使ったやつをそのまま使うことに。H264をそのまま入れてやるのにffmpegも必要だった。(copyなので変換はしていない)

mediamtx.ymlの下の方のpaths:を書き換える。

paths:
  cam0:
    runOnInit: ffmpeg -f v4l2 -input_format h264 -video_size 1920x1080 -framerate 30 -i /dev/video0 -c:v copy -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH
    runOnInitRestart: yes

解像度は720pと1080pが対応してるのでそれに合わせて入れてやらないとだめっぽい。

とりあえず1080pで遅延測定。

遅延は312msほど。フルHDでこの遅延はなかなか良いのかも。ちなみにWebRTCを使ってブラウザから見てる。

次は720p

遅延は319msだった。フルHDとあんまり変わらないかも。ちなみに帯域は2Mbpsぐらい。動かないと1/4ぐらいになる。フルHDだと4Mbpsぐらい。

カメラがめっちゃ温かい。そして電源に繋いであるのにバッテリーが減っているのでラズパイと同じところから供給では電流が足りていない可能性。今回はUSB2.0ってのもあるかもしれないけど。

ラズパイカメラV1より画質が良くて低遅延なんだけども今のところの遅延最強はC270とuStreamerかなぁ。

0 件のコメント:

コメントを投稿