Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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
Dynamic 将ip源实时更改为gstreamer管道_Dynamic_Gstreamer_Pipeline - Fatal编程技术网

Dynamic 将ip源实时更改为gstreamer管道

Dynamic 将ip源实时更改为gstreamer管道,dynamic,gstreamer,pipeline,Dynamic,Gstreamer,Pipeline,我有两个ip地址链接到两个摄像头。我可以流一个ip地址。我需要从一个摄像头切换到另一个摄像头,以便管道中的源应该从一个ip地址切换到另一个ip地址。有没有一种方法可以使用gstreamer插件来实现这一点?还是通过命令行?有没有可以这样做的应用程序?我应该创建自定义应用程序吗?您应该创建自定义应用程序 不清楚你如何处理来自两个摄像头的流;现在我们假设您只是在显示它 创建一个包含相机源元素和解码元素的箱子 如果要切换,请暂停管道,重新移动source和decodebin,然后添加两个新的管道(使用

我有两个ip地址链接到两个摄像头。我可以流一个ip地址。我需要从一个摄像头切换到另一个摄像头,以便管道中的源应该从一个ip地址切换到另一个ip地址。有没有一种方法可以使用gstreamer插件来实现这一点?还是通过命令行?有没有可以这样做的应用程序?我应该创建自定义应用程序吗?

您应该创建自定义应用程序

不清楚你如何处理来自两个摄像头的流;现在我们假设您只是在显示它

创建一个包含相机源元素和解码元素的箱子

如果要切换,请暂停管道,重新移动source和decodebin,然后添加两个新的管道(使用新ip),并将其设置为暂停

然后将整个管道设置为播放


如果摄像机是同一类型的,您可以不使用一个源元素(先为NULL或READY),但很可能您应该扔掉并重新创建解码器。

这里是我列出的函数,假设您使用的是gstreamer java。您可能需要根据自己的需求修改此选项。在您的情况下,您需要src_bin_new,src_bin_old而不是dest_bin_new,dest_bin_old。下面的函数将改变,但这给了您一个想法

private static void dynamic_bin_replacement(Pipeline pipe, Element src_bin, Element dst_bin_new, Element dst_bin_old) {
    pipe.pause();
    src_bin.unlink(dst_bin_old);                     
    pipe.remove(dst_bin_old);
    pipe.add(dst_bin_new);
    dst_bin_new.syncStateWithParent();
    src_bin.link(dst_bin_new);
    pipe.ready();                    
    pipe.play();
}
另外请看下面的文章(参见该页的最后一篇文章)