我今天用我组装的DirectShow图表运行了一个测试,该图表顶部分配了一个捕获过滤器给我的VOIP电话。该应用程序从捕获过滤器中获取音频并写入WAV文件,作为过滤器图形操作的一部分。出于好奇,我运行了两个程序副本,完全期望其中一个会抛出一个错误,抱怨捕获设备"正在使用"。令我惊讶的是,两个版本的程序都运行得很好,每个版本都创建了自己的WAV文件。两个文件中的音频都很流畅,没有问题,并且就所包含的音频数据而言彼此是双胞胎。
我能指望所有的DirectShow捕获过滤器展示在多个过滤器图之间共享的能力吗?还是每个设备/驱动程序都不同?
如果过滤器实例没有在内部共享任何独占访问资源(如硬件、特定TCP端口等),则可以在一个进程或多个进程中自由地复制它们。对于只在整个系统的单个实例中活动的特定过滤器,没有任何含义。
重要示例包括:
-
USB视频捕获:一个视频捕获设备通常只被一个应用程序使用,所以一旦它被激活,它就被锁定,没有其他应用程序或过滤器实例可以从它捕获
-
音频播放:流行的用户模式音频API是在实际播放实现之上的一层,内部驱动程序混合来自多个音频启用应用程序的音频;所以当你播放音频时,没有涉及到排他锁,因为实际上设备是在应用程序之间共享的,并且有代码在运行,这些代码透明地组合了来自应用程序的音频。