实时将ip源更改为gstreamer管道

时间:2011-08-12 12:38:46

标签: dynamic gstreamer pipeline

我有两个ip地址链接到两个摄像头。我可以流一个IP地址。我需要从一个摄像头切换到另一个摄像头,所以我的管道中的源应该从一个IP地址变为另一个IP地址。有没有办法使用gstreamer插件实现这一目标?还是通过命令行?是否有可以执行此操作的应用程序?我应该创建自定义应用程序吗?

2 个答案:

答案 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(请参阅该页面的最后一篇文章)