Таинственный MFSourceFilter
Несколько дней назад я хотел попробовать Media Foundation.
Первое, что я заметил, это то, что он не воспроизводит файл MPEG2 (по крайней мере, в Windows 7), однако, проигрыватель Windows Media 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
до и где я должен начать.
(Я уже читал вопрос о декодировании видео MPEG1/2 с помощью Media Foundation, но он не содержит того, что я ищу.)
1 ответ
WMP использует Media Foundation и, если не повезло, объезжает через DirectShow.
Ниже приведен пример воспроизведения WMP для файла MPEG-2 в Windows 7. Проигрыватель Windows Media построил график DirectShow внутри и выбрал доступные декодеры MPEG-2.
Это фактическое воспроизведение полностью поддерживается DirectShow, источником этого воспроизведения является обычный File Source (Async) Filter. WMP может использовать рассматриваемый фильтр для получения информации (особенно типов мультимедиа), связанной с воспроизведением, или по другим причинам, специфичным для его внутренней реализации. Возможно, даже пытаясь заменить источник мультимедиа для воспроизведения, однако я вижу, что этот фильтр удален, и обычное воспроизведение DirectShow остается.
Суть в том, что Media Foundation DirectShow Wrapper и Source Resolver существуют, но они не документированы, временно используются WMP (возможно, прозрачно используются MF) и не используются при реальном воспроизведении. Следовательно, нечего использовать в данный момент.
Один из возможных сценариев для этого фильтра, о котором я могу подумать, - это создать внутреннюю топологию DirectShow для предоставления информации метаданных для клиента MF.