Windows runtime 如何通过activatableClassId使用WinRT MediaPlayer::AddVideoEffect的进程内IMFTTransform

Windows runtime 如何通过activatableClassId使用WinRT MediaPlayer::AddVideoEffect的进程内IMFTTransform,windows-runtime,ms-media-foundation,c++-winrt,Windows Runtime,Ms Media Foundation,C++ Winrt,WinRT支持添加视频和音频效果(很像),但是我找不到一种方法来使用我在中已经使用的现有IMFTTransform MediaPlayer::AddVideoEffect()只接受“ActivateableClassID”的字符串,而IMFMediaEngineEx::InsertVideoEffect()允许我直接传入指向本地IMFTTransform的指针。我不想在系统中注册DLL以激活类,我只想在进程中本地注册IMFTTransform,以便classId可以发现它 我在网上搜索过,但信息

WinRT支持添加视频和音频效果(很像),但是我找不到一种方法来使用我在中已经使用的现有IMFTTransform

MediaPlayer::AddVideoEffect()只接受“ActivateableClassID”的字符串,而IMFMediaEngineEx::InsertVideoEffect()允许我直接传入指向本地IMFTTransform的指针。我不想在系统中注册DLL以激活类,我只想在进程中本地注册IMFTTransform,以便classId可以发现它

我在网上搜索过,但信息很少。我只找到了这篇文章,一篇展示了如何使用WRL的老文章,还有一篇使用appxmanifest注册类的文章(我不想这么做)

这些例子看起来很有用,我围绕我现有的MFT实现了装饰,但是这个例子依赖于在外部注册activatableClassId,所以我仍然不知道如何在过程中完成它。我唯一能找到的是()但是关于这方面的信息很少,所以我不确定

有人知道怎么做吗


谢谢,

因为MediaPlayer API是WinRT,它希望使用WinRT激活的对象来实现效果。或者,较低级别的win32 MF媒体引擎允许您为任何自定义激活传入IMFActivate

使用WinRT激活MFT有两种方法:

  • 将MFT注册到注册表并引用CLSID,您可以引用以下内容

  • 无注册WinRT(需要使用应用程序清单),您可以参考以下内容


  • 不幸的是,这意味着如果您希望在进程中注册MFT,则需要appmanifest。

    由于MediaPlayer API是WinRT,因此它希望使用WinRT激活的对象来实现效果。或者,较低级别的win32 MF媒体引擎允许您为任何自定义激活传入IMFActivate

    使用WinRT激活MFT有两种方法:

  • 将MFT注册到注册表并引用CLSID,您可以引用以下内容

  • 无注册WinRT(需要使用应用程序清单),您可以参考以下内容


  • 不幸的是,这意味着如果您希望在进程中注册MFT,则需要appmanifest要求。

    您的意思是要在MediaPlayer::AddVideoEffect()方法中使用IMFTTransform来添加视频效果吗?是的,但重要的是,我希望它能够在本地被发现,而不必在appxmanifestHere中指定它。这是一个使用WRL的CGreyScale MFT的示例,即使这些示例已注明日期并且针对Windows 8,但是文档确实提供了一种方法,可以通过设置本地引用和利用MFTransform,然后通过以下格式(“Namespace.ActivatableClass”)调用转换,因此对于此文档,它被声明为“GrayscaleTransform.GrayScaleEffect”。如果这不起作用,建议的过程是在appxmanifest中将.dll声明为扩展名。这与所提供的样本中显示的内容类似。使用UWP应用程序使用C++ MF变换的过程可以是:在.MIDL文件中声明代码,并将ActudiababLelas规范添加到转换源文件中(在上面的链接中显示教程代码里面)。通过使用InProcessServer标记声明使用MFTransform.dll作为扩展。谢谢@Faywang MSFT我的应用程序不一定有appxmanifest。我正在为Unity构建一个插件,所以基本上我正在构建一个自包含的DLL视频播放器插件。这适用于Windows桌面平台(使用WinRT库),而不是UWP。有没有我没有看到的路径?你的意思是想使用MediaPlayer::AddVideoEffect()方法中的imftTransform来添加视频效果吗?是的,没错,但重要的是,我希望它可以在本地发现,而不必在AppxManifest中指定。这里有一个使用WRL的CGreyScale MFT的示例,即使这些示例已注明日期,并且是针对Windows 8的,但文档确实提供了一种方法,可以通过设置本地引用和利用MFTransform,然后通过以下格式(“Namespace.ActivatableClass”)调用转换,因此对于此文档,它被声明为“GrayscaleTransform.GrayScaleEffect”。如果这不起作用,建议您在appxmanifest中将.dll声明为扩展名。这与所提供的样本中显示的内容类似。使用UWP应用程序使用C++ MF变换的过程可以是:在.MIDL文件中声明代码,并将ActudiababLelas规范添加到转换源文件中(在上面的链接中显示教程代码里面)。通过使用InProcessServer标记声明使用MFTransform.dll作为扩展。谢谢@Faywang MSFT我的应用程序不一定有appxmanifest。我正在为Unity构建一个插件,所以基本上我正在构建一个自包含的DLL视频播放器插件。这适用于Windows桌面平台(使用WinRT库),而不是UWP。有没有一条我看不到的路?