我希望能够使用Media Foundation IMFTransform对H264视频编码对视频帧进行编码。这在Win32中很容易实现,您可以使用MFTEnumEx枚举变换并找到H264编码器。
然而,在WinRT(商店应用程序)上,我找不到实例化的方法。 我注意到有一个类CMSH264EncoderMFT,但是没有在CoCreateInstance上使用的CLSID的定义。
使用:
CoCreateInstance(CLSID_CMSH264EncoderMFT, nullptr, CLSCTX_INPROC_SERVER, __uuidof(IUnknown), (void **)&pUnknown);
对于WinRT应用程序,未定义CLSID_CMSH264EncoderMFT。
并尝试过:
ComPtr<CMSH264EncoderMFT> encoder = Make<CMSH264EncoderMFT>();
它说类CMSH264EncoderMFT不完整,并说“使用未定义类型'CMSH264EncoderMFT'”。甚至不知道Make的语法是正确还是合适......
有没有人知道如何为WinRT做这个?
答案 0 :(得分:0)
首先使用MFCreateSinkWriterFromURL创建文件编写器。然后,使用MFCreateMediaType创建IMFMediaType。设置其属性,其中一个将是输出格式:使用MF_MT_SUBTYPE guid在媒体类型上使用SetGUID方法,并指定MFVideoFormat_H264作为参数。最后,在接收器编写器上使用AddStream方法将介质类型设置为它。
有一个例子here(当你设置MF_MT_SUBTYPE时,你需要稍微修改一下)。
答案 1 :(得分:-1)
你无法通过CMSH264EncoderMFT实例化对象,因为它没有一些必须在WinRT中具有对象的接口,例如IInspectable - Provides functionality required for all Windows Runtime classes
。 CMSH264EncoderMFT不是WinRT类。您可以尝试按功能MFCreateSinkWriterFromMediaSink解决您的任务 - 此函数接受带有接口IMFMediaSink的对象。可以使用IMFMediaSink
接口为对象编写代码,并从IMFTransform::ProcessOutput
接收样本。我只是提请你注意 - 你不能在不是Windows运行时类的WindowsStore代码对象中实例化。
此致 Evgeny Pereguda