如何进一步研究gstreamer中的链接问题?

时间:2015-12-03 17:48:39

标签: gstreamer rtsp playbin2

首先,你应该知道这个问题的标题是那样的,因为在我解决问题很长一段时间后,我最终陷入困境。既然我的问题可能有更好的方法,我也会在下面解释我的问题以及我一直在尝试解决的问题。关于其他方法的建议非常受欢迎。

问题

我正在使用Android的 gstreamer 端口通过RTSP协议从远程摄像头渲染视频(UDP是传输方法)。

使用playbin一切都很好,直到他们不再使用这些相机的一部分。

不幸的是,由于它们属于我们公司的客户,因此我无法访问相机,但我想到的第一件事就是它们必须成为问题。

然后,我们正在使用另一个Android应用作为参考,仍然可以正常播放来自这些相机的视频,所以我现在正在努力进一步调查我的问题(我们的Android应用程序) )。

这个问题非常确定:有些相机总是失败,有些相机总是有效。当它们失败时,有时会以reason not-linked为原因。

当应用程序尝试播放来自这些摄像机的视频时,我设法转储与每个摄像机关联的管道图。然后我会注意到,对于每个失败的摄像机,相关的管道总是丢失一些东西。有些人错过了接收器元素,其他人错过了源和接收器:

仅限来源的管道转储: w/ source only

没有源或汇的管道转储: w/ neither

与两者的管道转储(这些是我们确实可以玩的情况): w/ source and sink

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

尝试解决方案

我一直在尝试测试如果我从头开始手动构建管道会发生什么情况(因此在上面的第三张图片中由playbin构建它是相同的)并强制所有相机的视频由此管道处理。由于所有相机都可以工作,我的猜测是现在某些相机的谈判失败了,所以playbin没有为这些相机正确构建管道但是如果我自己组装它,最终它会按预期工作(我是假设rtspsrcglimagesink组合也是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

这就是我被困住的地方。 我如何进一步调查为什么这些组件无法相互链接?我认为可能在它们之间应该有一些其他组件,但我认为通过查看不是这种情况上面成功的管道(第三张图片)的转储。

提前感谢您的帮助。

0 个答案:

没有答案