【发布时间】:2020-10-29 08:58:57
【问题描述】:
WinRT 的 Windows::Media::Playback::MediaPlayer 支持添加视频和音频效果(很像 IMFMediaEngine),但是我找不到在 MediaPlayer::AddVideoEffect() 中使用已与 IMFMediaEngineEx::InsertVideoEffect() 一起使用的现有 IMFTransform 的方法
MediaPlayer::AddVideoEffect() 只接受一个字符串作为“activatableClassId”,而 IMFMediaEngineEx::InsertVideoEffect() 允许我直接传递一个指向本地 IMFTransform 的指针。我不想在系统中注册一个 DLL 以使该类可激活,我只想在本地进程中注册 IMFTransform,以便它可以被 classId 发现。
我在网上搜索过,但信息很少。我只找到了这个Microsoft thread,一篇显示CGreyScale MFT 使用WRL 的旧文章,以及这个使用appxmanifest 注册类的useful repository(不是我想做的)。
这些示例看起来很有用,我在现有 MFT 周围实现了装饰,但是该示例依赖于在外部注册 activatableClassId,因此我仍然不知道如何在进程中进行。我唯一能找到的是RoRegisterActivationFactories(),但关于这方面的信息很少,所以我不确定。
有人知道怎么做吗?
谢谢,
【问题讨论】:
-
您的意思是要使用 MediaPlayer::AddVideoEffect() 方法中的 IMFTransform 来添加视频效果?
-
没错,但重要的是我希望它可以在本地发现,而不必在 appxmanifest 中指定
-
这里是使用 WRL 的 CGreyScale MFT 的 example,即使样本已过时并且针对 Windows 8,但文档确实提供了一种能够在本地引用和利用MFTransform 通过设置,然后通过以下格式(“Namespace.ActivatableClass”)调用转换,因此对于本文档,它被声明为“GrayscaleTransform.GrayScaleEffect”。
-
如果这不起作用,建议的过程是在您的 appxmanifest 中将 .dll 声明为扩展。这类似于提供的示例中显示的内容。将 C++ MFTransform 与 UWP 应用程序一起使用的过程可以:通过 .Midl 文件在代码中声明它,并将 ActivatableClass 规范添加到转换源文件(在上面的链接中的教程代码中显示)。通过使用 InProcessServer 标记声明将 MFTransform .dll 用作扩展。
-
感谢@Faywang-MSFT,我的应用程序不一定有 appxmanifest。我正在为 Unity 构建一个插件,所以基本上我正在构建一个独立的 DLL 视频播放器插件。这适用于 Windows 桌面平台(使用 WinRT 库)而不是 UWP。有没有我没有看到的路径?
标签: windows-runtime ms-media-foundation c++-winrt