我有一个应用程序,它通过DirectShow从一个帧抓取卡中获取视频样本。然后应用程序进行一些处理,并通过网络发送视频信号。我现在想复制这个视频信号,以便另一个支持DirectShow的软件(如Skype)也可以使用原始的输入信号。
我知道您可以在DirectShow中创建Tee过滤器,就像用于分割视频信号以进行记录和预览的过滤器一样。但是,据我所知,这个过滤器只在一个图形中有用(我不能用它将视频从我的过程转发到Skype )。
我也知道我可以编写自己的视频源,但这将在消费应用程序的过程中运行。问题是,我不能将我原来的应用程序的逻辑放在这样的视频源过滤器中。
我能想到的唯一解决方案是我的应用程序将帧写入共享内存块,并在其中读取视频源过滤器。同步将使用一个共享互斥对象来完成。那能行吗?我特别不喜欢同步部分?
更重要的是,是否有更好的解决办法来解决这个问题?
发布于 2015-09-18 06:22:57
API按照您的标识工作:视频捕获应用程序(如Skype )请求视频流而不考虑进程间通信,不需要IPC来使用在另一个进程中生成的输出。这里的挑战是自己提供这个IPC,以便一个应用程序生成数据,然后另一个应用程序扩展现有的API (虚拟视频源设备)并选择现有数据,然后按生成的方式交付。
对于视频,你有一个相对大的数据流,你有兴趣避免它的过度复制。文件映射(AKA共享内存)是正确的做法:将字节放在一个进程中,它们在另一个进程中立即可见。您可以使用两个进程协同使用的名称、事件和互斥来同步对数据的访问--以指示已使用的缓冲区不再使用等来表示新的数据缓冲区的可用性。
https://stackoverflow.com/questions/32615892
复制相似问题