如何使用directshow执行进程间(非线程)流共享?

时间:2010-08-17 15:35:42

标签: c++ ipc directshow

我已成功使用directshow从我的相机捕捉实时视频流。

但是,如何将流分享到另一个流程,任何想法?

RGS!

更新

可以用一些代码示例说明吗?

4 个答案:

答案 0 :(得分:1)

您可以将流捕获到多个共享内存区域。这样你就可以在其他进程中看到这个内存的内容。

您必须实现某种进程间通信,以便通知您的其他进程应显示哪个缓冲区。

当您编写自己的样本采集器时,这可能相对容易,甚至可能使用自己的内存分配器。这样你甚至不会受到少量副本的影响。也许Boost.Interprocess可以帮助您实现此系统,否则请参阅win32中的内存映射函数。

答案 1 :(得分:0)

通过文件?

答案 2 :(得分:0)

从信息流的角度来看,似乎你有两个主要选择:

  1. 应用程序将流广播到多个客户端。
  2. 每个应用程序在链中形成一个链接,并且读取并传递流。
  3. 选项1编写起来更复杂但更强大 - 您可以有效地编写视频服务器,选项2很容易实现,但如果链中的一个链接崩溃,那么之后的所有客户端都将丢失视频。

    不幸的是,我不太了解Directshow格式给你一个例子,但最基本的,你需要阅读和重新传输流。

    进程间通信可以通过多种方式完成,但这取决于您使用的编程语言 - 如果是.Net,我建议使用WCF。较低级别的东西只是通过环回TCP / IP连接进行通信。

    我会避免使用硬盘来传输数据,因为a)会失去相当大的性能,而b)使硬盘瘫痪无利可图

答案 3 :(得分:0)

使用VLC通过HTTP流式传输。