Windows runtime 如何在WinRT应用商店应用程序上实例化H264编码器 我希望能够使用媒体基础IMF变换对H264视频编码进行视频帧编码。这在Win32中很容易实现,您可以使用MFTEnumEx枚举转换并找到H264编码器

Windows runtime 如何在WinRT应用商店应用程序上实例化H264编码器 我希望能够使用媒体基础IMF变换对H264视频编码进行视频帧编码。这在Win32中很容易实现,您可以使用MFTEnumEx枚举转换并找到H264编码器,windows-runtime,h.264,video-encoding,wrl,Windows Runtime,H.264,Video Encoding,Wrl,然而,在WinRT(商店应用程序)上,我找不到实例化的方法。 我注意到有一个类CMSH264EncoderMFT,但是没有定义在CoCreateInstance上使用CLSID 与: WinRT应用程序的CLSID_CMSH264EncoderMFT未定义 并尝试: ComPtr<CMSH264EncoderMFT> encoder = Make<CMSH264EncoderMFT>(); ComPtr编码器=Make(); 它表示CMSH264EncoderMFT类

然而,在WinRT(商店应用程序)上,我找不到实例化的方法。 我注意到有一个类CMSH264EncoderMFT,但是没有定义在CoCreateInstance上使用CLSID

与:

WinRT应用程序的CLSID_CMSH264EncoderMFT未定义

并尝试:

ComPtr<CMSH264EncoderMFT> encoder = Make<CMSH264EncoderMFT>();
ComPtr编码器=Make();
它表示CMSH264EncoderMFT类不完整,并表示“使用未定义的类型‘CMSH264EncoderMFT’”。甚至不知道Make的语法是否正确或合适


有人知道如何为WinRT执行此操作吗?

您不能通过CMSH264EncoderMFT实例化对象,因为它没有一些必须在WinRT中包含对象的接口。例如,
提供所有Windows运行时类所需的功能。CMSH264EncoderMFT不是WinRT类。您可以尝试按函数解决任务-此函数接受具有接口的对象。可以使用
IMFMediaSink
接口为对象编写代码,并从
IMFTransform::ProcessOutput
接收样本。我只是提醒您注意——您不能在WindowsStore中实例化非Windows运行时类的代码对象

问候,, Evgeny Pereguda

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


有一个例子(当它设置MF\u MT\u子类型时,您需要对其进行一些修改)。

您好,我不能给您正确的建议,但当我面临类似问题时,我决定使用下一个技巧。想法是从WindowsStore应用程序的代码中为桌面版的Windows调用一些COM DLL。它不适用于Windows WinRT,但具有此类Windows版本的设备数量非常少。此解决方案不适用于仅适用于通用应用程序的桌面。您好@EvgenyPereguda,谢谢。知道我可以免费下载COM很有趣。但我真的需要这个手机。我知道我可以为手机编码的唯一方法是使用接收器写入器,但这会增加文件格式的开销(比如mp4)。。我真的很想从
imfttransform::ProcessOutput
中获取示例,以便使用…这个答案毫无意义。CoCreateInstance是一个创建COM对象而不是Windows运行时对象的函数。它失败的实际原因是该类不可用于Windows应用商店应用程序。虽然有许多COM类可用,但不实现IInspectable。我已经写过,可以在Windows Store C++项目中使用免费COM DLL通过<代码>创建COM对象。< /Cord>但是,<代码> Joao Carrion < />代码尝试从像可访问的GUID的窗口存储库上下文中使用CMSH264EnCODEMFT。我指出,在WinRT环境中使用免费COM是不可能的,因为WinRT环境是特定平台的抽象级别。您好@EvgenyPereguda,您是说我需要实现一个IMFMediaSink,并且,我假设,可能还需要一个IMFStreamink,以便能够从H264编解码器获取输出帧?我现在正在研究这个问题,但是如果你不想对文件进行标准的写入,从文件路由播放,文档是相当混乱的。嗨,我可以说媒体基础是一个复杂的框架,但是它只是在代码> WiNoWorsSturt应用程序中使用视频的一种方式。关于
IMSMediaSink的实现
-我可以建议进行研究-它包括
WavSink示例
示例代码。这是Windows 7的示例,但它可以适用于
WiindowStore
应用程序,并且它只包含3个文件-这更容易研究。谢谢!实际上我现在正在这样做,但问题是我没有得到编解码器输出样本,它只是保存到一个已经格式化为文件的流中(如mp4)。我需要的是通过实例化编解码器的imfttransform在桌面上获得的视频样本。
ComPtr<CMSH264EncoderMFT> encoder = Make<CMSH264EncoderMFT>();