こんにちは、
私はカメラモジュール製品としてNXP i.MX8Mplusを使っています。私は2台のカメラを使っています。1台はUSB接続、もう1台はMIPI-CSI2インターフェース接続です。データパスは次のようになります。
センサ -> MIPI-CSI -> ISP(バイパス、DMAのみ) -> GPU(OSD) -> VPU(白エンコーダー) -> イーサネット上のRTSPストリーム。
エンコードされたビデオストリームのビットレートを4Mbpsに設定しました。パイプラインの設定は次のようになります。
gst-launch-1.0-v \
v4l2src デバイス=/dev/video2 io-mode=dmabuf !\
video/x-raw、format=NV12、width=1920、height=1080、framerate=30/1 !\
vpuenc_hevc ビットレート=4000 gop-size=60 !\
h265parse config-interval=1 !\
fakesink sync=false
問題点:お客様の報告によると、ビットレートは大きく変動し、変動は+/-50%、時にはピークが100%に達することもあります。お客様の期待値の変動は最大20%に制限しなければなりません。
どうすればこれを実現できるのでしょうか?IMX8Mplusで使っているSDKではCBRがサポートされていないのを見ました。私はYocto SDKを使っています。古い『mikeldore』ブランチです:
Repo init -U https://github.com/nxp-imx/imx-manifest.git -b IMX-Linux-mickledore -m imx-6.1.55-2.2.0.xml
お知らせください:
変動幅を20%に抑えることが可能であれば、その方法を教えてください。
よろしくお願いします。
パンカジ
i.MX95はH.264/H.265からV4L2までのエンコーダー定ビットレート制御をサポートしていますが、「定常ビットレート」は完全に固定された瞬時出力ではなくCBRターゲット制御として理解されるべきです。
Yipingさん、ご返信ありがとうございます。今、これらの提案を試しています。もう一つ質問ですが、IMX95についてはどうでしょうか?IMX95のエンコーダは定常ビットレートをサポートしていますか?
よろしくお願いします。
パンカジ
はい、ばらつきを減らすことはできますが、以下の通りです:
ステップ1 — V4L2エンコーダへのスイッチ(クリティカル)
交換する:
vpuenc_hevc
説明:
v4l2h265enc
ステップ2 — リアルタイムレート制御とCBRモードを有効にする
gst-launch-1.0-v \
v4l2src デバイス=/dev/video2 io-mode=dmabuf !\
video/x-raw、format=NV12、width=1920、height=1080、framerate=30/1 !\
v4l2h265enc extra-controls="encode, \
frame_level_rate_control_enable=1, \
video_bitrate_mode=1, \
video_bitrate=4000000, \
h265_min_qp=20, \
h265_max_qp=30" !\
h265parse config-interval=1 !\
fakesink sync=false
ステップ3 — QP範囲の調整(最も重要)
|
設定 |
効果 |
|
ワイドQP(例:10-51) |
ビットレートの大きな変動 |
|
狭いQP(例:20~30) |
変動が少なければ品質も低く |
|
非常に狭い(例:24~28) |
近CBR挙動 |
要件:
ステップ4 — GOP / Iフレーム制御
あなたの現在の状況:
gop-size=60
問題:
gop-size=30(GOPが短い方が効果的)
緩和:
または(より良い):
ステップ5 — オプションの平滑化(ネットワークレベル)
エンコーダーの調整後でも、短いバーストノイズが残る場合があります。
次を追加します
これにより、エンコーダーが変動しても、ネットワークビットレートが安定します。