对于 WMP,编解码器定位策略是什么。
在 Windows Media Player 7.0 之前,它只是一个纯粹的 DirectShow 播放器。从 7.0 开始,Microsoft 开始以不同的方式处理不同的文件类型。这主要是 WMV 文件的情况。WMP 现在将在 Vista 和 7 中对某些文件类型使用 MediaFoundation 媒体管道。
例如,我如何区分我的自定义文件格式和 mpeg-3 格式。什么是标准和编程结构。(我搞砸的真正部分是这个。容器格式,视频格式,fourcc代码......等等让我死去)
如果您正在创建自己的自定义容器格式,您可以这样做(大声笑,对不起 MSDN 链接),但如果您想让自己的生活更轻松,我会选择现有和/或开源容器,例如作为 AVI 或 MKV。当您以其中任何一种格式创建流时,您需要提供编解码器代码,例如用于视频的fourcc 或用于音频的格式标记。由于您正在做自己的自定义格式,您应该只制作自己的fourcc 或格式标签值,但注意不要选择一个已经使用的人。
假设您使用的是 AVI。内置的 avi demux 将读取 AVI 标头并查看文件中每个流的元数据。它可能会找到一个带有fourcc DX50 的视频流和一个带有WAVE_FORMAT_PCM 格式标签的音频流。DirectShow 将枚举已注册的过滤器并查询它们的引脚以查看它们是否支持获取 DX50 视频或 WAVE_FORMAT_PCM 音频。因此,如果您的 AVI 有一个 4cc 的 XXXX,DirectShow 将枚举过滤器以查找采用 XXXX 的类型。然后,您将制作一个将接受fourcc XXXX 的转换过滤器。您的转换过滤器将解码视频并输出未压缩的格式。也许RGB24。DirectShow 将检测到您的输出引脚输出该媒体类型,并可能将其直接连接到渲染器。音频的过程是相同的,
For this work on Windows what method do you suggest to write codec(DMO or Filter)
我从未亲自编写过 DMO,但我强烈建议您研究一下。我听说样板 COM 的东西和 IIRC 更少,MediaFoundation 有一个 DMO 包装器,所以你可能会得到自动的 MediaFoundation 支持。
除了 DShow SDK 示例,您可能还想查看这个. 可以帮助您入门。这个网站也有很好的样本,但可能不是你想要的。