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

Docker容器中GStreamer rtpbin无法接收RTCP数据包问题排查

Docker容器中GStreamer rtspsrc无法接收RTCP SR报告问题排查

我开发了一个需要获取RTSP发送端报告(SR)的应用,实现逻辑如下:
给rtspsrc添加new-manager回调,获取其内部的rtpbin,再通过get-internal-session动作信号获取recv_rtcp_sink_0会话,最后连接on-receiving-rtcp信号回调以处理RTCP数据包。

相关实现代码:

static void new_manager_callback (
    GstElement * rtspsrc,
    GstElement * manager,
    gpointer udata) 
{
    /*
    rtspsrc - a rtspsrc
    manager - a GstElement
    udata - No description available
    */
    GstPad *sinkpad;
    GObject *session;
    
    sinkpad = gst_element_request_pad_simple (manager, "recv_rtcp_sink_0");
    if (!sinkpad) {
        g_printerr("Failed to get sinkpad\n");
        return;
    }
    
    g_signal_emit_by_name (manager, "get-internal-session", 0, &session);
    g_print("requested session\n");
    if (!session) {
        g_printerr("Failed to get internal session\n");
        return;
    }

    // // callback (GstElement * session, GstBuffer * buffer, gpointer udata)
    g_print("creating on-receiving-rtcp cb\n");
    // g_signal_connect(session, "on-receiving-rtcp", G_CALLBACK (on_receiving_rtcp_callback), NULL)
    g_signal_connect_after (session, "on-receiving-rtcp", G_CALLBACK (on_receiving_rtcp_callback), NULL);
    // g_print("after on-receiving-rtcp cb0000");
    g_object_unref(session);
}

问题现象

应用在主机上运行正常,可正常获取SR报告;但迁移至与主机同版本Ubuntu、同版本GStreamer的Docker容器后,无法触发RTCP数据包的回调。

补充信息

  • 主机和容器中,均能正常接收rtph264depay的RTP数据回调及appsink的new-sample回调,仅容器内无法接收RTCP数据包。
  • 已尝试通过rtspsrc的port-range属性指定UDP RTP/RTCP端口并映射到主机,也启用了系统转发设置,但问题仍未解决。

使用的GStreamer管道

rtspsrc location=%s name=rtsp ! rtph264depay name=rtpdepay ! avdec_h264 ! videoconvert ! appsink name=appsink sync=true emit-signals=true

疑问

该问题的可能原因是什么?是否存在网络网桥或主机网络设置阻止RTCP数据包转发至Docker容器?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:12:50