我有一个Delphi 6程序,它通过套接字从外部程序接收音频。现在我想将该音频提供给我创建的DirectShow过滤器图形,该图形将音频路由到PC上的不同输出过滤器。我正在使用DSPACK进行DirectShow过滤器图形工作。我将使用其中一个DSPACK示例来说明如何创建推送源过滤器作为我的起点。
是否可以将DirectShow过滤器直接嵌入到我的主EXE中,还是必须创建外部DLL或AX文件并在其上运行regsvr32?我想避免创建一个外部模块,否则我将不得不在它和我的主程序之间创建一个参数和数据传递桥梁,我宁愿消除这项工作。我想知道是否有一种方法可以简单地在我的主程序中包含推送源过滤器代码,并巧妙地将Windows作为DirectShow过滤器使用,如果可能的话。
答案 0 :(得分:5)
过滤器不必放入库(DLL),它们不必是注册的COM对象,不是。如上所述,实现此目的的唯一原因是通过CoCreateInstance和/或通过枚举DirectShow类别使应用程序可用于应用程序。
直接放入您的应用程序,它必须实现IBaseFilter
,您将IFilterGraph::AddFilter
放入图表中。私有过滤器的一个优点是,您不需要通过COM接口实现应用程序和过滤器之间的通信,并且您可以使用本机/直接指针。
另见Geraint的帖子Using Filters Without Registration。
答案 1 :(得分:3)
我认为将过滤器放入DLL的唯一原因是能够在多个程序中使用它们。另一方面,如果你要将你的过滤器放入一个DLL中,你总是可以让它们实现一个你需要的QI表面。
在我的作品中,我不得不播放存储在专有档案文件中的电影。我做了一个有一个输出引脚的源,它正确地描述了它的媒体格式,其余部分自动工作,如果我想要的话。我还需要为视频使用专有渲染器。所有这些东西都内置在用C ++编写的.exe中