2011-08-12 53 views
1

我有两个IP地址链接到两个摄像头。我可以流一个IP地址。我需要从一台摄像机切换到另一台摄像机,所以我的流水线源应该从一个IP地址切换到另一个。有没有办法使用gstreamer插件来实现这一点?或通过命令行?有没有可以做到这一点的应用程序?我应该创建自定义应用程序吗?实时更改IP源到gstreamer管道

回答

1

您应该创建一个自定义应用程序。

目前还不清楚你对来自任一相机的数据流做了什么;现在让我们假设你只是显示它。

为相机创建一个带有源元素的bin,并为解码创建一个decodebin元素。

当您想要切换时,暂停管道,renmove源和decodebin,并添加两个新的(使用新的ip)并将它们设置为暂停。

然后设置整个管道播放。

如果相机的类型相同,则可能会重新使用一个源元素(首先进入NULL或READY),但很有可能您应该丢弃并重新创建解码器。

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(请参阅网页上的最后一个职位)