2

几天前,我想试试媒体基金会。

我注意到的第一件事是它不播放 MPEG2 文件(至少在 Windows 7 上不播放),但是,Windows Media Player 12 可以。因此,我已经运行mftrace wmplayer.exe并检查了输出。

9052,2BF4 14:06:36.00364 COle32ExportDetours::CoCreateInstance @ Created {14D7A407-396B-44B3-BE85-5199A0F0F80A} Media Foundation DShow Source Resolver (C:\Windows\SysWOW64\mfds.dll) @0984E950 - traced interfaces: 
9052,1BEC 14:06:36.00450 COle32ExportDetours::CoCreateInstance @ Created {CDA42200-BD88-11D0-BD4E-00A0C911CE86} Filter Mapper2 (C:\Windows\SysWOW64\quartz.dll) @0821B894 - traced interfaces: 
9052,2BF4 14:06:36.00723 COle32ExportDetours::CoCreateInstance @ Created {E436EBB3-524F-11CE-9F53-0020AF0BA770} Filter Graph (C:\Windows\SysWOW64\quartz.dll) @081C7DD0 - traced interfaces: IGraphBuilder @081C7DD0, IMediaControl @04E6D66C, 
9052,2BF4 14:06:36.00741 COle32ExportDetours::CoCreateInstance @ Created {0344EC28-5339-4124-A186-2E8EEF168785} MFSourceFilter (C:\Windows\SysWOW64\mfds.dll) @09934228 - traced interfaces: 
9052,2BF4 14:06:36.00742 CMFPlatExportDetours::MFStartup @ Version=0x00020070, dwFlags=0x00000000
9052,2BF4 14:06:36.01176 CGraphBuilderDetours::AddFilter @081C7DD0 filter: 'MF Source Filter'
9052,2BF4 14:06:36.01194 COle32ExportDetours::CoCreateInstance @ Created {336475D0-942A-11CE-A870-00AA002FEAB5} MPEG-I Stream Splitter (C:\Windows\SysWOW64\quartz.dll) @08084574 - traced interfaces: 
9052,2BF4 14:06:36.01238 COle32ExportDetours::CoCreateInstance @ Created {AFB6C280-2C41-11D3-8A60-0000F81E0E4A} MPEG-2 Demultiplexer (C:\Windows\SysWOW64\mpg2splt.ax) @082003E4 - traced interfaces: 
9052,2BF4 14:06:36.01328 COle32ExportDetours::CoCreateInstance @ Created {E1F1A0B8-BEEE-490D-BA7C-066C40B5E2B9} Microsoft DTV-DVD Audio Decoder (C:\Windows\SysWOW64\msmpeg2adec.dll) @0829C77C - traced interfaces: 
9052,2BF4 14:06:36.04667 COle32ExportDetours::CoCreateInstance @ Created {212690FB-83E5-4526-8FD7-74478B7939CD} Microsoft DTV-DVD Video Decoder (C:\Windows\SysWOW64\msmpeg2vdec.dll) @082C04BC - traced interfaces: 
9052,2BF4 14:06:36.04668 CGraphBuilderDetours::AddFilter @081C7DD0 filter: ''

似乎他们正在创建一个使用 DirectShow的媒体源。他们正在构建一个 DirectShow 图表MFSourceFilter,我猜它正在将解码的音频/视频信息传递给 Media Foundation。因为在网上搜索MFSourceFilter根本没有帮助,我想知道是否有人以前使用MFSourceFilter过它以及我应该从哪里开始。

(我已经阅读了使用 Media Foundation 解码 MPEG1/2 视频的问题,但它不包含我要查找的内容。)

4

1 回答 1

1

WMP 使用 Media Foundation,如果运气不好,会通过 DirectShow 绕道而行。

以下是 Windows 7 中 MPEG-2 文件的 WMP 播放示例。Windows Media Player 在内部构建了一个 DirectShow 图形并选择了可用的 MPEG-2 解码器。

在此处输入图像描述

此实际播放完全由 DirectShow 支持,此播放的源是常规File Source (Async) Filter。WMP 可能正在使用有问题的过滤器来获取播放中涉及的信息(尤其是媒体类型)或出于其他特定于其内部实现的原因。甚至可能尝试替换要播放的媒体源,但是我看到的是该过滤器已被删除,并且常规的 DirectShow 播放仍然存在。

底线是 Media Foundation DirectShow Wrapper 和 Source Resolver 存在,但它们没有记录,WMP 临时使用(可能由 MF 透明使用)并且未在实际播放中使用。因此,目前没有可重用的东西。

我能想到的此过滤器的一种可能方案是构建内部 DirectShow 拓扑以为 MF 客户端提供元数据信息。

于 2013-07-22T07:48:54.210 回答