You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GStreamer通过UDP传输RAW视频出现协商失败问题求助

问题分析与解决方案

核心问题根源

出现not-negotiated错误的本质是源端发送的RAW视频RTP流的Caps参数与接收端预期的参数不匹配,具体原因有两点:

  1. 源端未强制约束解码后RAW视频的格式、帧率等关键参数,avdec_h264输出的原始视频格式可能并非接收端要求的I420,导致rtpvrawpay打包的RTP流Caps信息不符合接收端预期。
  2. 接收端的Caps参数冗余(包含动态生成的ssrc、timestamp等),且未与源端实际输出的RAW视频参数严格对齐。

修正后的管道命令

源端管道(强制约束RAW视频参数)

gst-launch-1.0 -v -e filesrc location=input.avi ! h264parse ! avdec_h264 ! videoconvert ! video/x-raw,format=I420,width=1280,height=720,framerate=60/1 ! rtpvrawpay ! udpsink host=192.168.1.167 port=7001
  • 新增videoconvert + 明确的video/x-raw Caps,确保解码后输出的是接收端需要的I420格式、1280x720分辨率、60帧/秒的RAW视频,让rtpvrawpay能基于标准参数打包RTP流。

接收端管道(简化并对齐Caps参数)

gst-launch-1.0 -v -e udpsrc port=7001 ! "application/x-rtp,media=video,clock-rate=90000,encoding-name=RAW,sampling=YCbCr-4:2:0,depth=8,width=1280,height=720,framerate=60/1,payload=96" ! rtpvrawdepay ! videoconvert ! video/x-raw,format=I420 ! filesink location=output.y4m
  • 移除所有动态生成的参数(如ssrc、timestamp-offset),只保留固定的、与源端对齐的关键Caps参数;同时简化udpsrc的写法(无需uri,直接用port更简洁)。

额外注意事项

RAW视频的码率极高(1280x720@60的I420格式码率约83Mbps),即使协商成功后,局域网UDP可能出现丢包问题,可通过以下方式优化:

  • 源端udpsink添加buffer-size=67108864参数增大发送缓冲区
  • 接收端udpsrc添加buffer-size=67108864参数增大接收缓冲区

内容的提问来源于stack exchange,提问作者dandan13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:57:45