树莓派4无法通过gStreamer接收树莓派3B的视频流问题
问题解决思路及方案
核心原因
"not-negotiated (-4)"错误本质是GStreamer管道中前后元素的视频格式不兼容。Windows端的GStreamer会自动处理格式适配,但树莓派4的视频输出组件对格式要求更严格,且你的接收命令缺少必要的格式转换环节,同时RTP流的参数也未明确指定,导致协商失败。
修正后的接收端命令
尝试以下几种修改后的命令,按顺序测试:
方案1:添加格式转换并补全RTP参数
export DISPLAY=:0 gst-launch-1.0 -v udpsrc port=5600 ! application/x-rtp, payload=96, media=video, clock-rate=90000, encoding-name=H264 ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false
videoconvert:负责将解码后的视频格式转换为树莓派sink支持的格式- 补全RTP的
clock-rate和encoding-name参数:避免自动协商时的参数缺失 sync=false:关闭同步,进一步降低延迟同时避免同步逻辑导致的协商问题
方案2:指定树莓派专用视频输出组件
如果方案1无效,尝试显式指定适合树莓派的sink(适配X11环境):
export DISPLAY=:0 gst-launch-1.0 -v udpsrc port=5600 ! application/x-rtp, payload=96, media=video, clock-rate=90000, encoding-name=H264 ! rtph264depay ! avdec_h264 ! videoconvert ! ximagesink sync=false
方案3:使用树莓派硬件加速解码
利用树莓派的硬件解码模块替代软件解码,提升效率同时解决格式兼容问题:
export DISPLAY=:0 gst-launch-1.0 -v udpsrc port=5600 ! application/x-rtp, payload=96, media=video, clock-rate=90000, encoding-name=H264 ! rtph264depay ! v4l2h264dec ! videoconvert ! autovideosink sync=false
补充说明
测试命令videotestsrc ! autovideosink能正常工作,是因为videotestsrc默认输出的是树莓派sink直接支持的视频格式,无需额外转换;而H264解码后的格式(通常是YUV420P等)与树莓派屏幕的输出格式不匹配,必须通过videoconvert做格式适配。
内容的提问来源于stack exchange,提问作者Aninano
相关产品推荐
相关产品推荐

