0

我希望能够使用 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 做到这一点?

4

2 回答 2

0

首先使用MFCreateSinkWriterFromURL创建文件写入器。然后,使用MFCreateMediaType创建一个 IMFMediaType。设置其属性,其中之一将是输出格式:对具有 MF_MT_SUBTYPE guid 的媒体类型使用SetGUID方法,并指定 MFVideoFormat_H264 作为参数。最后,在接收器写入器上使用AddStream方法将媒体类型设置为它。

这里有一个例子(你需要在设置 MF_MT_SUBTYPE 时稍微修改一下)。

于 2017-03-12T22:41:50.600 回答
-1

您不能通过 CMSH264EncoderMFT 实例化对象,因为它没有某些在 WinRT 中必须具有对象的接口,例如IInspectable - Provides functionality required for all Windows Runtime classes。CMSH264EncoderMFT 不是 WinRT 类。您可以尝试通过函数MFCreateSinkWriterFromMediaSink解决您的任务- 此函数采用接口IMFMediaSink的对象。可以为具有接口的对象编写代码IMFMediaSink并从IMFTransform::ProcessOutput. 我只是指出您的注意 - 您不能在不是 Windows 运行时类的 WindowsStore 代码对象中实例化。

问候, Evgeny Pereguda

于 2017-03-11T00:28:17.227 回答