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

如何让GStreamer应用实现正常的RTSP视频流输出?

解决GStreamer自建RTSP服务的问题

1. 修复gst_element_make_from_uri断言错误

这个断言错误大概率是URI格式不对,或者你用错了创建元素的方式:

  • 检查代码里传去gst_element_make_from_uri的URI字符串,必须是完整合法格式,比如RTSP服务要写成rtsp://0.0.0.0:80/stream。
  • 摄像头输入类元素(比如v4l2src)不支持从URI创建,别用这个函数,直接用gst_element_factory_make实例化就行。

2. 解决Caps格式导致的无输出问题

你去掉Caps单引号后程序能跑但没输出,说明代码里的Caps处理有误:

  • GStreamer代码里设置Caps不需要加单引号,直接用gst_caps_from_string传纯字符串,比如:
    GstCaps *caps = gst_caps_from_string("video/x-raw,width=1280,height=720,format=NV12");
    
  • 要确保Caps正确绑定到元素上,用gst_element_link_filtered或者gst_element_set_caps来关联,别像命令行那样随便拼接字符串。

3. 强制摄像头输出指定分辨率和格式

摄像头实际输出1280x1080-NV21和你要求的1280x720-NV12不匹配,这是无输出的核心原因,按下面的方法解决:

  • 实例化v4l2src后直接设置设备路径,再用Caps强制约束输出:
    GstElement *src = gst_element_factory_make("v4l2src", "camera-src");
    g_object_set(src, "device", "/dev/video0", NULL);
    GstCaps *caps = gst_caps_from_string("video/x-raw,width=1280,height=720,format=NV12,framerate=30/1");
    gst_element_link_filtered(src, downstream_element, caps);
    gst_caps_unref(caps);
    
  • 如果摄像头不支持直接输出NV12,就加格式转换元素,比如videoconvert或者nvvidconv(NVIDIA硬件加速用):
    // 在摄像头源和下游元素之间插转换环节
    GstElement *convert = gst_element_factory_make("videoconvert", "conv");
    // 先约束摄像头输出它支持的格式(比如NV21),再转成NV12
    GstCaps *src_caps = gst_caps_from_string("video/x-raw,width=1280,height=720,format=NV21");
    gst_element_link_filtered(src, convert, src_caps);
    gst_caps_unref(src_caps);
    
    GstCaps *dst_caps = gst_caps_from_string("video/x-raw,width=1280,height=720,format=NV12");
    gst_element_link_filtered(convert, downstream_element, dst_caps);
    gst_caps_unref(dst_caps);
    
  • 先跑v4l2-ctl --list-formats-ext命令查摄像头支持的所有参数,确认你要的分辨率和格式是否在列表里,不在的话要么换参数,要么加转换。

额外调试技巧

  • 启动程序前设置export GST_DEBUG=3,打开GStreamer调试日志,能看到管道元素的链接状态、Caps协商失败的具体原因,方便定位问题。
  • 把你能正常运行的gst-launch命令拆成代码里的元素逐个构建,对比两者的管道结构、属性设置,确保完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:40:17