3

如何以编程方式更改过滤器属性?

我正在使用过滤器AAC encoder,我可以通过右键单击过滤器并输入值来手动更改它bitrategrapheditbitrate

是否可以通过代码做同样的事情?

请给我宝贵的建议,如果可能的话,请提供代码。

4

3 回答 3

3

You do this via private filter-specific interface. You need to refer to filter documentation or SDK to get details on this (VSS Tech Support). Sometimes you can obtain the necessary information from type library.

See:

于 2012-12-27T10:19:26.363 回答
1

与 Roman 的回答类似,过滤器的“特殊属性”通常有两种设置和/或保存的方式。

一种是显示其属性页面“对话框”(ISpecifyPropertyPages),然后允许用户更改内容并关闭它,然后获得其 IPersistStream 接口,并保存其“当前状态”,然后您可以稍后将其用于基本设置它的属性回到它们被保存到的位置(这就是graphedit的做法,参考:http ://microsoft.public.multimedia.directx.dshow.programming.narkive.com/ldOko8Js/ispecifypropertypages-saving-and-restoreing-settings ) 此外,您可以通过在图形对象本身上调用 IPersistStream 将“整个图形”序列化为文件。见https://stackoverflow.com/a/11781370/32453

另一种方法是知道“它到底是什么类型的特殊过滤器”并将其转换为您知道的一些特殊接口,来自第三方,这可能会暴露 getter 和 setter 等,例如来自的“avisynth”过滤器Windows SDK directshow 示例公开 ISynth接口

另请参阅此处,其中列出了更多方法显然......这里也似乎相关。IPersist 本身也有多个继承自它的接口,请参见此处的注释。到目前为止,根据我对 dshow 设备的经验,它们通常只实现 IPersist 和 IPersistStream(以及 IAMSpecificPropertyPages),尽管您也可以自己为其他常见接口(如 IAMVideoProcAmp)保存值,然后手动重新设置属性......

更新:不幸的是,尽管许多过滤器都实现了 IPersistStream,但似乎很少有人真正将它用于任何有用的事情......

于 2015-01-13T20:40:31.020 回答
1

您的 AAC 编码器将通过一些 IID 公开一些接口。确保您获得了该 IID 的接口,然后访问它的附加功能,如比特率、采样率等。

于 2012-12-27T06:45:42.880 回答