Video 将MPEG4源筛选器扩展到其他媒体类型 我正在创建一个MFT视频解码器,以添加对媒体基础不支持我的应用程序的编解码器的支持。在这种情况下,它是Hap编解码器。这对AVI文件非常有效,但对MOV文件无效

Video 将MPEG4源筛选器扩展到其他媒体类型 我正在创建一个MFT视频解码器,以添加对媒体基础不支持我的应用程序的编解码器的支持。在这种情况下,它是Hap编解码器。这对AVI文件非常有效,但对MOV文件无效,video,ms-media-foundation,Video,Ms Media Foundation,我在MS文档中读到,MPEG4源过滤器(我相信是处理MOV文件的过滤器)通过此处记录的MFMPEG4Format_基本机制支持其他未知媒体类型: 所以,我使用fourCC代码通过MFMPEG4Format_库向MFT工厂添加了新的子类型,并像往常一样使用MFTRegisterLocal()注册了它 问题是媒体基金会似乎没有考虑使用我的MFT。它甚至不使用工厂来创建MFT的实例,以查看它是否可以连接它 我不确定这是否相关,但我正在使用IMFMediaEngine进行播放,并在更早的时候在本地注册

我在MS文档中读到,MPEG4源过滤器(我相信是处理MOV文件的过滤器)通过此处记录的MFMPEG4Format_基本机制支持其他未知媒体类型:

所以,我使用fourCC代码通过MFMPEG4Format_库向MFT工厂添加了新的子类型,并像往常一样使用MFTRegisterLocal()注册了它

问题是媒体基金会似乎没有考虑使用我的MFT。它甚至不使用工厂来创建MFT的实例,以查看它是否可以连接它

我不确定这是否相关,但我正在使用IMFMediaEngine进行播放,并在更早的时候在本地注册此MFT。它适用于AVI文件,但不适用于MOV

网上关于MFMPEG4Format_Base的信息很少,所以我希望这里有人有这方面的经验,可以就我做错了什么提出建议,或者提供另一种方法来实现这一点

谢谢,微软的股票可以阅读

MSDN文档通常是准确的,但存在细微差别

曲目显示为FourCC“Hap1”视频,而不是您建议的MFMPEG4Format_Base。您无法扩展源代码,因为一般来说,它已经完成了预期的功能:它能够读取此文件


媒体基础管道中的这种类型的内容的进一步扩展性和支持假设,对于这种类型的内容,存在一个解码器MFT。如果可以的话,您需要安装这样的MFT,或者自己开发。

如果正确,MPEG-4媒体源可以支持其他子类型。我设法让它在我的用例中工作,但我不得不颠倒FOURCC顺序

对于AVI文件,我可以为Hap子类型声明并使用以下GUID:

DEFINE_MEDIATYPE_GUID(MFVideoFormat_Hap, FCC('Hap1'));
然后将我的MFT注册到MFTRegisterLocal(_实例,MFT类别,视频解码器

但是,这对MOV容器不起作用。我必须使用MFMPEG4Format_基类型并添加编解码器FOURCC,但它只有在我颠倒顺序时才起作用:

//
// this macro creates a media type GUID from a FourCC, D3DFMT, or WAVE_FORMAT
// based on MFMPEG4Format_Base which defines GUIDS for unknown mediaTypes
// when using the MF MPEG-4 Source
//
#ifndef DEFINE_MPEG4_MEDIATYPE_GUID
#define DEFINE_MPEG4_MEDIATYPE_GUID(name, format) \
    DEFINE_GUID(name,                               \
    format, 0x767a, 0x494d, 0xb4, 0x78, 0xf2, 0x9d, 0x25, 0xdc, 0x90, 0x37);
#endif

DEFINE_MPEG4_MEDIATYPE_GUID(MFVideoFormat_MPEG4_Hap, FCC('1paH'));

我不知道为什么会颠倒顺序,但它对我有效。

你有任何Hap MOV样本吗?是的,这里有一个:我已经创建了用于解码这些帧的自定义MFT,并且在使用AVI容器(而不是MOV容器)时可以正常工作。我已经使用MFTRegisterLocal()注册了MFT具有许多具有Hap子类型的视频主要类型,例如:DEFINE_MEDIATYPE_GUID(MFVideoFormat_Hap,FCC('Hap1'));我想可能是因为某种原因,当使用MPEG4源过滤器时,IMFMediaEngine对MediaSession的解析不考虑我的MFT,但是如果我手动连接它们,它可能会工作……hmm解决了它!出于某种原因,我必须向后定义FourCC。我将在下面发布我的解决方案。欢迎评论。