您好,
我正在使用 NXP i.MX8Mplus 开发一款相机模块产品。我使用两台摄像机,一台通过 USB 连接,另一台通过 MIPI-CSI2 接口连接。数据路径如下所示:
摄像头传感器 -> MIPI-CSI -> ISP(绕过,仅 DMA) -> GPU(OSD) -> VPU(硬件编码器) -> 以太网上的 RTSP 流。
我将编码视频流的比特率设置为 4 Mbps。流水线设置如下所示:
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 配置间隔=1!\
fakesink 同步=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 确实支持通过 V4L2 对 H.264/H.265 进行编码器恒定比特率控制,但“稳定比特率”应该理解为 CBR 目标控制,而不是完全固定的瞬时输出。
谢谢你的回复,一平。我现在正在尝试这些建议。还有一个问题,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 配置间隔=1!\
fakesink 同步=false
步骤 3 — 调整 QP 范围(最重要)
|
设置 |
影响 |
|
宽 QP(例如)10–51) |
比特率大幅波动 |
|
窄 QP(例如)20–30) |
变异性较低,质量较低 |
|
非常窄(例如)24–28) |
接近CBR行为 |
针对以下要求:
第四步——共和党/I框架控制
您当前的:
gop-size=60
问题:
gop-size=30(GOP字形越短越好)
减轻:
或者(更好):
步骤 5 — 可选的平滑(网络层面)
即使经过编码器调整,仍可能存在短脉冲串。
添加:
即使编码器出现波动,这也能平滑网络比特率。