树莓派CM4下V4L2设置MJPG供GStreamer UDP推流格式回退问题求助
问题根因
你当前管线的核心错误是对GStreamer媒体类型的误用:
- MJPG属于压缩图像格式,对应的GStreamer caps媒体类型为
image/jpeg video/x-raw是GStreamer定义的未压缩原始像素格式类,仅支持YUY2、NV12、RGB这类非压缩格式,你在该类型下强制指定pixelformat=MJPG属于无效参数,GStreamer会自动忽略并 fallback 到采集设备支持的raw格式最高配置,也就是1920x1080@5fps的YUYV格式,这就是你帧率上不去、格式强制回退的原因。
修复后的管线
无需提前通过v4l2-ctl手动设置格式,v4l2src会自动根据caps配置采集设备参数,直接使用以下管线即可:
gst-launch-1.0 -v v4l2src device=/dev/video0 ! \ "image/jpeg, width=1920, height=1080, framerate=60/1" ! \ rndbuffersize max=65000 ! \ udpsink host=127.0.0.1 port=1234
运行后查看输出的caps参数,不会再出现format=YUY2的字段,格式会正确识别为MJPG,帧率也会达到你设置的数值。
推流优化建议
如果是推流到远端客户端播放,建议添加rtpjpegpay元素将MJPG帧封装为标准RTP包,降低客户端解码适配成本,参考管线:
gst-launch-1.0 -v v4l2src device=/dev/video0 ! \ "image/jpeg, width=1920, height=1080, framerate=30/1" ! \ rtpjpegpay ! \ udpsink host=替换为远端客户端IP port=1234
内容的提问来源于stack exchange,提问作者Come Raczy
相关产品推荐
相关产品推荐

