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
相关产品推荐
相关产品推荐

