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

基于GStreamer的UDP RTSP流接收端无画面问题排查

GStreamer UDP推送静态图片流接收端无画面问题排查

我尝试用GStreamer搭建基于UDP的静态图片流推送,流程为单张图片 → UDP流(GStreamer实现)→ 接收端无画面。已通过GStreamer诊断工具验证安装正常,且交换过收发端设备,但接收端始终无法显示画面,终端也无明显错误提示。以下是收发端的配置及输出:

发送端(服务器)

  • 运行环境:Ubuntu 16.04,GStreamer 1.8.3
  • 配置说明:参考GitHub帖子修改,将x264enc替换为avenc_h263,本机IP为192.168.3.30
  • 执行命令:
gst-launch-1.0 -v multifilesrc location=./IMG_7995.JPG loop=true ! jpegdec ! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=30/1 ! avenc_h263 ! rtph263ppay pt=96 ! udpsink host=192.168.3.30 port=6000
  • 终端输出:
** (gst-launch-1.0:11311): CRITICAL **: gst_ffmpeg_cfg_set_property: assertion 'qdata->size == sizeof (gint64)' failed
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstJpegDec:jpegdec0.GstPad:src: caps = "video/x-raw\,\ format\=\(string\)I420\,\ width\=\(int\)4032\,\ height\=\(int\)3024\,\ interlace-mode\=\(string\)progressive\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ chroma-site\=\(string\)mpeg2\,\ colorimetry\=\(string\)1:4:0:0\,\ framerate\=\(fraction\)0/1"

接收端(客户端)

  • 运行环境:Ubuntu 18.04,GStreamer 1.14.5
  • 配置说明:参考GStreamer示例修改,将ffdec_h263替换为avdec_h263,因元素不存在错误移除queue-delay=0
  • 执行命令:
gst-launch-1.0 udpsrc port=6000 ! application/x-rtp, clock-rate=90000,payload=96 ! rtph263pdepay ! avdec_h263 ! xvimagesink
  • 终端输出:
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock

问题分析与解决建议

1. avenc_h263编码器兼容性问题

发送端出现的gst_ffmpeg_cfg_set_property断言错误,说明GStreamer 1.8.3版本的avenc_h263存在配置兼容性问题,对高分辨率输入(4032×3024)适配性差,可能导致编码器无法正常输出码流。

修复方案:
改用兼容性更好的x264enc编码器,同时限制输出分辨率避免性能瓶颈:

# 发送端修改后命令
gst-launch-1.0 -v multifilesrc location=./IMG_7995.JPG loop=true ! jpegdec ! videoconvert ! videoscale ! video/x-raw,width=1280,height=720,framerate=30/1 ! x264enc tune=zerolatency ! rtph264pay pt=96 ! udpsink host=192.168.3.30 port=6000

接收端对应修改为适配H.264的管线:

gst-launch-1.0 udpsrc port=6000 ! application/x-rtp,clock-rate=90000,payload=96 ! rtph264depay ! avdec_h264 ! videoconvert ! xvimagesink

2. 视频Caps协商异常

发送端jpegdec输出的framerate=0/1,与后续指定的30/1帧率未完成正确协商,导致编码器无法生成稳定码流。需在videoscale后强制指定完整的视频参数,确保Caps传递一致。

修复方案:
移除冗余的videorate,直接在videoscale后添加明确的视频Caps:

! videoscale ! video/x-raw,width=1280,height=720,framerate=30/1 !

3. 接收端缺少格式转换元素

GStreamer 1.14.5中xvimagesink对部分视频格式支持有限,avdec_h263输出的格式可能无法直接显示,需添加videoconvert完成格式适配:

# 接收端修改后命令
gst-launch-1.0 udpsrc port=6000 ! application/x-rtp,clock-rate=90000,payload=96 ! rtph263pdepay ! avdec_h263 ! videoconvert ! xvimagesink

4. 发送端Pipeline预滚未完成

发送端输出停留在Pipeline is PREROLLING ...,说明管线未完成预滚,编码器未触发码流输出。可给multifilesrc添加force-idle=false参数强制激活管线:

multifilesrc location=./IMG_7995.JPG loop=true force-idle=false !

5. UDP目标IP配置问题

如果收发端是不同设备,发送端udpsink的host需改为接收端的IP地址,而非本机IP;若为同一机器则无需修改,跨设备时可改用广播地址(如192.168.3.255)确保接收端能收到流。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:24:57