几天前,我想尝试Media Foundation。
我注意到的第一件事是没有播放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的Media Source。他们正在构建一个带有MFSourceFilter
的DirectShow图表,我想这是将解码的音频/视频信息传递给Media Foundation。因为在网上搜索MFSourceFilter
根本没有帮助,所以我想知道是否有人在我开始之前和之后使用过MFSourceFilter
。
(我已经阅读了问题decode MPEG1/2 video with Media Foundation,但它不包含我正在寻找的内容。)
答案 0 :(得分: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客户端提供元数据信息。