我有两个ip地址链接到两个摄像头。我可以流一个IP地址。我需要从一个摄像头切换到另一个摄像头,所以我的管道中的源应该从一个IP地址变为另一个IP地址。有没有办法使用gstreamer插件实现这一目标?还是通过命令行?是否有可以执行此操作的应用程序?我应该创建自定义应用程序吗?
答案 0 :(得分:1)
您应该创建自定义应用程序。
目前尚不清楚你对来自任何一台相机的流做了什么;让我们假设你现在只是在显示它。
创建一个包含摄像头源元素的bin,以及一个用于解码的decodebin元素。
当您想要切换时,暂停管道,移除源和解码器,然后添加两个新的(使用新的IP)并将它们设置为暂停。
然后将整个管道设置为播放。
如果相机的类型相同,你可能会重复使用一个源元素(首先是NULL或READY),但你很可能会扔掉并重新创建解码器。
答案 1 :(得分:1)
这是我列出的函数,假设您使用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();
}
另请查看以下帖子http://gstreamer-devel.966125.n4.nabble.com/Adding-new-tee-src-d-to-a-running-pipeline-td2304488.html(请参阅该页面的最后一篇文章)