1

我今天使用我组装的 DirectShow 图表进行了测试,该图表在图表的顶部为我的 VOIP 电话分配了一个捕获过滤器。该应用程序从捕获过滤器中获取音频并写入 WAV 文件,作为过滤器图操作的一部分。出于好奇,我运行了该程序的两个副本,完全期望其中一个会抛出一个错误,抱怨捕获设备“正在使用”。令我惊讶的是,该程序的两个副本都运行良好,并且每个副本都创建了自己的录制音频的 WAV 文件。两个文件中的音频都很流畅,没有问题,并且在包含的音频数据方面相互成对。

我可以依靠所有 DirectShow 捕获过滤器来展示在多个过滤器图之间共享的能力吗?还是每个设备/驱动程序都不同?

4

1 回答 1

2

如果过滤器实例在内部不共享任何独占访问资源(例如硬件、特定 TCP 端口等),您可以在一个进程或多个进程中自由复制它们。对于特定过滤器仅在整个系统中的单个实例中处于活动状态没有任何影响。

重要的例子包括:

  • USB 视频捕获:视频捕获设备通常仅供一个应用程序使用,因此一旦它处于活动状态,它就会被锁定,没有其他应用程序或过滤器实例可以从中捕获

  • 音频播放:流行的音频用户模式 ​​API 是实际播放实现之上的一层,内部驱动程序混合来自多个启用音频的应用程序的音频;因此,当您播放音频时,不会涉及排他锁,因为实际上设备是在应用程序之间共享的,并且运行的代码可以透明地组合来自应用程序的音频。

于 2011-11-20T08:10:25.513 回答