你好
我目前正在 i.MX95 上评估 H265 解码 → 编码流水线。 i.MX95上的 延迟和稳定性与 i.MX8MP相比,在类似的工作负载和配置下,延迟和稳定性明显更差。
关于 i.MX8MP使用
imxvpudec_h265
vpuenc_hevc
我能够实现:
极低的端到端延迟(≈ 10 毫秒)
多数据流的稳定运行
无明显的冻结或人工痕迹
关于 i.MX95使用
v4l2h265dec
v4l2h265enc
我观察到了:
单个解码 → 编码流水线的 ~90 毫秒延迟
运行时出现冻结和视觉假象 4 路同步摄像机数据流
为了重现这个问题,我使用了 IP 摄像机(通过 RTSP 传输 H265),其管道如下:
test-launch "(
rtspsrc location=rtsp://10.42.0.85 drop-on-latency=true latency=0 buffer-mode=4 !
rtph265depay !
h265parse config-interval=1 !
v4l2h265dec !
v4l2h265enc !
rtph265pay name=pay0 pt=96
)"该流水线在使用单台摄像机时工作正常,但当扩展到 4 个摄像头就会出现冻结和伪影。
为什么 i.MX95 上的 H265 VPU 管线比 i.MX8MP 上的潜伏性更高?
i.MX95 上的 v4l2h265dec 和 v4l2h265enc 之间是否完全支持 DMABUF 零拷贝?
如果没有,是否存在隐式内存拷贝,可以解释额外的延迟和带宽压力?
目前的 i.MX95 VPU 驱动程序是否存在已知的限制?
低延迟运行
多流解码 + 编码
内部缓冲深度
是否有推荐的 V4L2 控件或 io 模式(捕获/输出 io模式)来最大限度地减少 i.MX95 的延迟?
在未来的电路板支持包版本中,i.MX95 VPU驱动程序是否有望达到与i.MX8MP相同的性能,还是更高的延迟是一种固有的设计权衡?
我的目标是 实时、低延迟的视频处理(解码 → 处理 → 编码),类似于 i.MX8MP 可实现的功能。
感谢您的支持。
你好
你在 i.mx8MP 和 i.MX95 上使用哪个电路板支持包 版本来重现这个问题?
您是否在 800 万像素和 95 万像素上使用相同的 GST 管道(除解码器/编码器元件外)?
据我所知,i.MX95 没有导致高延迟的已知限制。
在 i.MX95 上,编码器支持 mmap 和 dmabuf,这可以在解码器和编码器之间建立一个传输 dma-buf 的流水线,而无需复制。
网络摄像机编码时是否没有 B 帧?这样我们就可以禁用解码帧重排,从而减少延迟。请检查这一点。您可以使用以下 v4l2 控件禁用帧重排
" v4l2h264dec extra-controls="decode,display_delay_enable=1,display_delay=0" "
您可以使用以下命令列出所有 v4l2 控制:
v4l2-ctl -l -d
此致
内核版本
是的,这是同一个 gstreamer 管道。
网络摄像机不对 B 帧进行编码。我执行了你的命令,但并没有解决问题。屏幕上仍有伪影,延迟也很高。不过,从质量上讲,它似乎消除了冻结现象。
```
v4l2-ctl -l -d /dev/v4l/by-path/platform-4c480000.vpu-video-index0
用户控制
min_number_of_capture_buffers 0x00980927 (int) : min=1 max=32 step=1 default=1 value=1 flags=read-only
thumbnail_mode 0x00981901 (bool) : default=0 value=0 flags=write-only
编解码器控制
h264_profile 0x00990a6b (menu) : min=0 max=4 default=0 value=0 (Baseline)
hevc_profile 0x00990b67 (menu) : min=0 max=0 default=0 value=0 (Main)
display_delay 0x00990b8d (int) : min=0 max=0 step=1 default=0 value=0
display_delay_enable 0x00990b8e (bool) : default=0 value=0
```
```
v4l2-ctl -l -d /dev/v4l/by-path/platform-4c480000.vpu-video-index1
用户控制
horizontal_flip 0x00980914 (bool) : default=0 value=0
vertical_flip 0x00980915 (bool) : default=0 value=0
rotate 0x00980922 (int) : min=0 max=270 step=90 default=0 value=0 flags=modify-layout
min_number_of_output_buffers 0x00980928 (int) : min=1 max=32 step=1 default=1 value=1 flags=read-only
编解码器控制
video_gop_size 0x009909cb (int) : min=0 max=2047 step=1 default=30 value=30
video_bitrate_mode 0x009909ce (menu) :min=0 max=1 default=1 value=1 (恒定比特率) flags=update
video_bitrate 0x009909cf (int) : min=1 max=1500000000 step=1 default=2097152 value=2097152
frame_level_rate_control_enable 0x009909d7 (bool) :default=1 value=1
h264_mb_level_rate_control 0x009909da (bool) : default=1 value=1
number_of_mbs_in_a_slice 0x009909dc (int) : min=0 max=262143 step=1 default=1 value=1
slice_partitioning_method 0x009909dd (menu) :min=0 max=1 default=0 value=0 (Single)
force_key_frame 0x009909e5 (button) : value=0 flags=write-only, execute-on-write
intra_refresh_period 0x009909ec (int) :min=0 max=2160 step=1 default=0 value=0
intra_refresh_period_type 0x009909ed (menu) : min=0 max=1 default=1 value=1 (Cyclic)
h264_i_frame_qp_value 0x00990a5e (int) :min=0 max=51 step=1 default=30 value=30
h264_p_frame_qp_value 0x00990a5f (int) : min=0 max=51 step=1 default=30 value=30
h264_b_frame_qp_value 0x00990a60 (int) :min=0 max=51 step=1 default=30 value=30
h264_minimum_qp_value 0x00990a61 (int) : min=0 max=51 step=1 default=8 value=8
h264_maximum_qp_value 0x00990a62 (int) :min=0 max=51 step=1 default=51 value=51
h264_8x8_transform_enable 0x00990a63 (bool) : default=1 value=1
h264_cpb_buffer_size 0x00990a64 (int) : min=0 max=18750000 step=1 default=0 value=0
h264_entropy_mode 0x00990a65 (menu) : min=0 max=1 default=1 value=1 (CABAC)
h264_i_frame_period 0x00990a66 (int) : min=0 max=2047 step=1 default=0 value=0
h264_level 0x00990a67 (menu) :min=0 max=16 default=14 value=14 (5)
h264_loop_filter_alpha_offset 0x00990a68 (int) : min=-6 max=6 step=1 default=0 value=0
h264_loop_filter_beta_offset 0x00990a69 (int) :min=-6 max=6 step=1 default=0 value=0
h264_loop_filter_mode 0x00990a6a (menu) : min=0 max=2 default=0 value=0 (Enabled)
h264_profile 0x00990a6b (menu) :min=0 max=4 default=4 value=4 (High)
vertical_size_of_sar 0x00990a6c (int) : min=0 max=65535 step=1 default=0 value=0
horizontal_size_of_sar 0x00990a6d (int) :min=0 max=65535 step=1 default=0 value=0
aspect_ratio_vui_enable 0x00990a6e (bool) : default=0 value=0
vui_aspect_ratio_idc 0x00990a6f (menu) :min=0 max=17 default=0 value=0 (Unspecified)
h264_constrained_intra_pred 0x00990a7f (int) : min=0 max=1 step=1 default=0 value=0
h264_chroma_qp_index_offset 0x00990a80 (int) :min=-12 max=12 step=1 default=0 value=0
hevc_minimum_qp_value 0x00990b58 (int) : min=0 max=51 step=1 default=8 value=8
hevc_maximum_qp_value 0x00990b59 (int) :min=0 max=51 step=1 default=51 value=51
hevc_i_frame_qp_value 0x00990b5a (int) : min=0 max=51 step=1 default=30 value=30
hevc_p_frame_qp_value 0x00990b5b (int) : min=0 max=51 step=1 default=30 value=30
hevc_b_frame_qp_value 0x00990b5c (int) : min=0 max=51 step=1 default=30 value=30
hevc_profile 0x00990b67 (menu) : min=0 max=0 default=0 value=0 (Main)
hevc_level 0x00990b68 (menu) : min=0 max=8 default=7 value=7 (5)
hevc_loop_filter 0x00990b6c (menu) :min=0 max=2 default=1 value=1 (Enabled)
hevc_loop_filter_beta_offset 0x00990b6d (int) : min=-6 max=6 step=1 default=0 value=0
hevc_loop_filter_tc_offset 0x00990b6e (int) :min=-6 max=6 step=1 default=0 value=0
hevc_refresh_type 0x00990b6f (menu) : min=0 max=2 default=2 value=2 (IDR)
hevc_num_of_i_frame_b_w_2_idr 0x00990b70 (int) :min=0 max=2047 step=1 default=0 value=0
hevc_constant_intra_prediction 0x00990b72 (int) : min=0 max=1 step=1 default=0 value=0
hevc_strong_intra_smoothing 0x00990b76 (int) : min=0 max=1 step=1 default=1 value=1
hevc_tmv_prediction 0x00990b79 (int) :min=0 max=1 step=1 default=1 value=1
prepend_sps_and_pps_to_idr 0x00990b84 (int) : min=0 max=1 step=1 default=1 value=1
frame_skip_mode 0x00990b86 (menu) : min=0 max=2 default=0 value=0 (Disabled)
average_qp_value 0x00990b91 (int) : min=0 max=51 step=1 default=0 value=0 flags=read-only
````
电路板支持包 版本是:
谢谢
ok 还请确认我上面提到的 B 框架问题。
此致
是的,网络摄像机编码时没有 B 帧。我试过你的命令,但没有解决问题。屏幕上仍有伪影,延迟也很高。不过,从质量上讲,它似乎消除了冻结现象。
你好
确认:网络摄像机编码时没有 B 帧(仅限 I-P)。我在解码器上应用了 display_delay_enable=1,display_delay=0。这有助于消除冻结现象,但延迟时间仍为约 90 毫秒。
为了隔离瓶颈,我在这条流水线上使用了 GStreamer 元素延迟跟踪器:
```
rtspsrc location=rtsp://... drop-on-latency=true latency=0 buffer-mode=4!rtph265depay!h265parse 配置间隔=1!v4l2h265dec extra-controls= " 解码,display_delay_enable=1,display_delay=0 " 捕获-io-mode=4 output-io-mode=4!v4l2h265enc extra-controls= " 编码,video_bitrate_mode=1,video_bitrate=2097152,frame_level_rate_control_enable=0,video_gop_size=30 " 捕获-io-mode=4 输出 io-mode=4!h265parse 配置间隔=1!rtph265pay name=pay0 pt=96
```
每个元素的延迟结果(640x480 @ 30fps,单流):
仅编码器就占了约 67 毫秒(约 2 个帧周期)。这在各次运行中是一致的。解码器在 ~2 毫秒时没有问题。
我已经试过了:
这些方法都不能明显减少编码器的延迟。
我的问题主要集中在编码器上:
感谢您的帮助。