1 背景
查看DeepStream源码后,我的项目中DeepStream在另一个线程中运行,开启RTSP流重连功能后,有时会堵塞在设定状态函数(无论设定哪一个bin中的元素,都会阻塞),暂时没有另一台机器供我研究是否因为版本问题造成的,或者线程问题。我试图通过其他办法进行解决。
if (gst_element_set_state (src_bin->bin,
GST_STATE_NULL) == GST_STATE_CHANGE_FAILURE) {
g_message ("%s:err\n", __func__);
GST_ERROR_OBJECT (src_bin->bin, "Can't set source bin to NULL");
return FALSE;
}
Gstreamer RTSP client timeout issues
问题:
我有一些问题与Gstreamer的RTSP客户端。因此,我有一个客户端程序,我希望它从一个看门狗函数给我适当的响应,每当RTSP客户端接收/发送消息或返回错误等,并相应地退出代码,如果有错误。我要做的是,
- 我只需在我的机器上使用VLC创建一个RTSP服务器,并连接到这个服务器。显然我可以成功地创建连接。
- 我通过简单地关闭VLC来停止服务器。所以现在watch dog函数应该接收到正确的错误码,并将其打印到屏幕上。但它从来不这样做。在Gstreamer的RTSP文档中,有一个名为gst_rtsp_connection_connect的函数,它接受一个连接和一个超时值,在文档中指出,如果超时为NULL,该函数可能永远阻塞。所以我认为,由于我在timeout字段中设置了NULL,它永远不会超时,并且认为它仍然连接到服务器,因此永远不会进入任何看门狗函数。然而,当我申请一个5秒的超时,然后它直接在5-7秒后终止连接,并进入一些看门狗函数。我不希望我的代码立即给出错误,即使有一个正确的连接,服务器仍然在工作中,我只是希望它在服务器实际关闭时给出一些错误,并且超时时间已经过去。我该如何解决这个问题?
/*
* INCLUDES
* /usr/include/gstreamer-1.0
* /usr/include/glib-2.0
* /usr/lib/x86_64-linux-gnu/glib-2.0/include
* /usr/include/gstreamer-1.0/gst/rtsp
*
* LIBRARIES
* gstreamer-1.0
* gstrtsp-1.0
* gobject-2.0
* glib-2.0
*
* MISC.
* -std=c99
*
*
*
* */
#include <gst/gst.h>
#include <gst/rtsp-server/rtsp-server.h>
#include <gst/rtsp/gstrtspmessage.h>
#include <gst/rtsp/gstrtspurl.h>
#include

文章讨论了在Gstreamer的RTSP客户端中遇到的连接超时问题,以及在DeepStream项目中线程可能堵塞的情况。作者提到在尝试设置bin状态时遇到阻塞,并怀疑可能是版本或线程问题。同时,RTSP客户端在服务器关闭时未能正确响应,可能是因为连接超时设置不当。文章提供了相关函数和回调示例,并寻求解决方案。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



