创建自定义视频DShow编解码器

时间:2011-12-29 20:27:49

标签: video directshow codec

我搜索过(谷歌和论坛),我仍然无法找到答案。我用这个帖子关闭了这个网站,

Custom File Format And Codec?

但这并没有直接回答我的问题。

基本上,我想创建一个自定义视频编解码器,作为DShow过滤器。我不是在询问如何编码和解码视频,我需要/想知道如何设置我的过滤器以正确地与媒体播放器(如WMP)接口。

平台:Windows 7 64位

媒体播放器:任何。如果将自定义编解码器与其他播放器连接起来更容易,那么无论如何都要推荐该播放器。

语言:C ++

我的理解是,如果我以.ax或.dll的形式创建DShow过滤器,我只需要使用regsvr32将其注册到Windows,然后WMP就可以使用该编解码器打开文件。在这种情况下,我只会使用AVI容器来存放我的编解码器。

我之前为DAW制作了VST插件,并且对程序的结构有要求。它需要包含主机程序(逻辑,专业工具等)用于处理音频数据的某些功能(具有特定名称)。例如,有必要的process和processReplacing方法。

我一直试图找出视频编解码器的结构,这样我就可以与标准播放器正常连接,但无济于事。

任何帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:1)

在DirectShow中,您选择新的/唯一的视频子类型标识符(GUID,因此您可以真正获得一个独特的),您创建编码器和解码器过滤器,您使用DirectShow Intelligent Connect正确注册它们并且您很好去吧。

编码器和解码器过滤器是注册的COM对象,用于对视频数据进行某些转换。 MSDN在Writing Transform Filters中描述了它们,它假设您熟悉DirectShow概念。

如果您希望能够将数据存储到AVI容器中,则您的子类型标识符限制为32位“四字符代码”(FourCC),使用预定义的映射将其转换为子类型GUID

由于DirectShow的智能连接,启用DriectShow的应用程序将能够自动定位和安装解码器,以便回放数据。在播放文件时,WMP使用DirectShow作为第二个更改API,因此WMP也能够接受内部使用您的编解码器的文件。

另外,直接编写DirectShow过滤器可能是一件复杂的事情。由于您只对视频编码器/解码器适配器感兴趣,因此您可能希望改为编写DirectX Media ObjectDMO)。标准DMO Wrapper Filter会将您的DMO打包到DirectShow过滤器中。编写DMO肯定更容易,包括可以使用ATL作为COM基础。