自定义文件格式和编解码器?

时间:2009-10-21 00:42:36

标签: video audio directshow windows-media-player codec

我已经搞乱了几天的编解码器问题,但仍然看不到大局。这是我第一次处理音频/视频格式和编解码器。所以我真的需要一些帮助。 这是工作。

我正在编写几个负责编码和解码自定义mpeg文件的组件。除了标准化/压缩过程(对于音频和视频),我将实现一些自定义de /加密。为此编写编解码器和软件库。列出了我无法弄清楚的事情。

  • 对于WMP,编解码器定位策略是什么。
  • 例如,如何将我的自定义文件格式与mpeg-3格式区分开来。什么是标准和编程结构。 (我搞砸的真实部分是容器格式,视频格式,四位密码等,让我死定)
  • 对于Windows上的这项工作,您建议使用哪种方法编写编解码器(DMO或过滤器)

我希望通过你的帮助解决列出的问题。信息和一些有用的链接将不胜感激。除了MSDN :)因为我无法找到我正在搜索的内容。

2 个答案:

答案 0 :(得分:2)

  

对于WMP,编解码器定位是什么   政策。

在Windows Media Player 7.0之前,它只是一个纯粹的DirectShow播放器。自7.0以来,Microsoft已开始以不同方式处理不同的文件类型。这主要是WMV文件的情况。 WMP现在将在Vista和7中使用MediaFoundation媒体管道来处理某些文件类型。

  

如何区分我的自定义文件   例如,来自mpeg-3格式的格式。   什么是标准和编程   结构为此。 (真实的我是   这搞砸了。容器格式,   视频格式,fourcc代码......等   把我赶死了)

could do this(大声笑,对不起MSDN链接),如果你要创建自己的自定义容器格式,但如果你想让自己的生活更轻松,我会选择现有的和/或开放的-source容器,例如AVI或MKV。当您使用这些格式之一创建流时,您将提供编解码器代码,例如视频的fourcc或音频的格式标签。由于您正在使用自己的自定义格式,因此您应该只编制自己的fourcc或格式标记值,但请注意不要选择已经使用过的人。

假设您使用的是AVI。内置的avi demux将读取AVI标头并查看文件中每个流的元数据。它可能会找到包含fourcc DX50的视频流和格式为WAVE_FORMAT_PCM的音频流。 DirectShow将枚举已注册的过滤器并查询其引脚,以查看它们是否支持拍摄DX50视频或WAVE_FORMAT_PCM音频。因此,如果你AVI有一个4万的XXXX,DirectShow将枚举过滤器寻找采用XXXX的类型。然后,您将创建一个接受fourcc XXXX的转换过滤器。您的转换过滤器将解码视频并输出未压缩的格式。也许是RGB24。 DirectShow将检测到您的输出引脚输出该媒体类型,并可能将其直接连接到渲染器。音频的过程是相同的,除了我们处理格式标签而不是fourccs(你处理WAVEFORMATEX和VIDEOINFOHEADER)。

For this work on Windows what method do you suggest to write codec(DMO or Filter)

我从未亲自编写过DMO,但我强烈建议您进行调查。我听说有更少的锅炉板COM东西和IIRC,MediaFoundation有一个DMO包装器,所以你可以获得自动MediaFoundation支持。

除DShow SDK示例外,您可能还想查看out this。可以帮助您入门。 this website也有很好的样本,但可能不是你想要的。

答案 1 :(得分:0)

我认为没有足够的评论空间:)

我最后通过你的答案和graphedit程序对过滤器和directshow有了一些了解。我会将AVI容器用于音频和视频。在内部我将使用mpeg格式,它将由我的算法加密。我将实现变换滤波器或DMO。 (很可能是DMO)

我想知道AVI Splitter如何将数据传送到我注册的编解码器。我的意思是数据的格式。我认为必须有一些标准。我在研究中与MSDN达成了和平,但是在单个格式的数据流中无法找到有关实际缓冲区格式的信息。 (在我的情况下AVI)