Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何进一步调查gstreamer中的链接问题?_Gstreamer_Rtsp_Playbin2 - Fatal编程技术网

如何进一步调查gstreamer中的链接问题?

如何进一步调查gstreamer中的链接问题?,gstreamer,rtsp,playbin2,Gstreamer,Rtsp,Playbin2,首先,你应该知道这个问题的标题是这样的,因为我在把问题缩小了一段时间后,最终陷入了困境。因为可能有更好的方法来解决我的问题,我也在下面解释我的问题,以及我一直在努力解决它。欢迎就其他办法提出建议 问题 我正在使用Android的gstreamer端口通过RTSP协议(UDP是传输方法)渲染来自远程摄像机的视频 使用playbin一切都很好,直到它们不再用于这些相机的子集 不幸的是,由于这些相机属于我们公司的客户,我自己无法使用它们,但我想到的第一件事是,它们肯定有问题 然后,我们正在使用另一个A

首先,你应该知道这个问题的标题是这样的,因为我在把问题缩小了一段时间后,最终陷入了困境。因为可能有更好的方法来解决我的问题,我也在下面解释我的问题,以及我一直在努力解决它。欢迎就其他办法提出建议

问题 我正在使用Android的gstreamer端口通过RTSP协议(UDP是传输方法)渲染来自远程摄像机的视频

使用
playbin
一切都很好,直到它们不再用于这些相机的子集

不幸的是,由于这些相机属于我们公司的客户,我自己无法使用它们,但我想到的第一件事是,它们肯定有问题

然后,我们正在使用另一个Android应用程序作为参考,它仍然能够正常播放来自这些摄像头的视频,所以我现在正尽力进一步调查我这边的问题(我们的Android应用程序)

问题是相当确定的:一些相机总是出故障,另一些相机总是工作。当它们失败时,有时会将
原因未链接
作为原因

当应用程序试图播放这些摄像头的视频时,我成功地转储了与它们相关联的管道图。然后我可以注意到,对于每一个出现故障的摄像头,相关的管道总是缺少一些东西。有些只丢失了接收器元素,有些则同时丢失了源和接收器:

仅源管道的转储:

没有源或汇的管道转储:

两种情况下的管道转储(这些情况下我们确实可以玩):

这些是由
playbin
构建的管道转储

尝试解决方案 我一直在尝试测试如果我从头开始手动构建管道(与上面第三幅图像中的playbin构建的管道相同),并强制使用该管道处理所有摄影机的视频,会发生什么情况。由于所有的摄像机都能正常工作,我的猜测是,不知何故,一些摄像机的谈判现在失败了,以至于playbin无法为这些摄像机正确地构建管道,但如果我自己组装,最终一切都会正常工作(我假设,
rtspsrc
glimagesink
组合也是playbin选择的播放这些摄像机视频的管道)

这就是我自己试图构建这条管道的方式:

priv->pipeline = gst_pipeline_new("rtspstreamer");

source = gst_element_factory_make("rtspsrc", NULL);
if (!source) {
  GST_DEBUG("Source could not be created");
}

sink = gst_element_factory_make("glimagesink", NULL);
if (!sink) {
  GST_DEBUG("Sink could not be created");
}

if (!gst_bin_add(GST_BIN(priv->pipeline), source)) {
  GST_DEBUG("Could not add source to pipeline");
}
if (!gst_bin_add(GST_BIN(priv->pipeline), sink)) {
  GST_DEBUG("Could not add sink to pipeline");
}
if (!gst_element_link(source, sink)) {
  GST_DEBUG("Source and sink could not be linked");
}

g_object_set(source, "location", uri, NULL);
因此,运行上面的代码,我得到以下错误:

Source and sink could not be linked
这就是我被卡住的地方。我如何进一步调查这些组件无法相互链接的原因?我认为可能在管道中它们之间应该有其他组件,但我认为通过查看上面成功管道的转储(第三幅图),情况并非如此


提前感谢您的帮助。

您可以使用或其他组合运行,并查看输出结果。我还将在PC上测试它(如果可能)比如说Ubuntu和更新的gstreamer,或者其他一些非gstreamer客户端,看看它是否一直正常工作。你使用的是什么版本的gstreamer?是的,你是对的,我也应该在PC上尝试一下,至少整个过程应该快一点,我会尝试启用尽可能多的调试输出。还有,我是我们使用最新的gstreamer-1.0版本的确是1.6.1。谢谢你的帮助!你也可以尝试使用uridecodebin来代替rtspsrc-我认为它应该可以工作。现在我意识到,仅仅添加rtspsrc和一些接收器并不容易。你还必须添加解码器等。uridecodebin应该像我说的那样工作,你可以检查创建的管道图。在那里是您可以尝试的测试流:
gst-launch-1.0 uridecodebin uri=rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov !glimagesink
您可以使用或其他组合运行,并查看输出结果。我还将在PC上测试它(如果可能)比如说Ubuntu和更新的gstreamer,或者其他一些非gstreamer客户端,看看它是否一直正常工作。你使用的是什么版本的gstreamer?是的,你是对的,我也应该在PC上尝试一下,至少整个过程应该快一点,我会尝试启用尽可能多的调试输出。还有,我是我们使用最新的gstreamer-1.0版本的确是1.6.1。谢谢你的帮助!你也可以尝试使用uridecodebin来代替rtspsrc-我认为它应该可以工作。现在我意识到,仅仅添加rtspsrc和一些接收器并不容易。你还必须添加解码器等。uridecodebin应该像我说的那样工作,你可以检查创建的管道图。在那里是您可以尝试的测试流:
gst-launch-1.0 uridecodebin uri=rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov !glimagesink