【问题标题】:How to use an in-process IMFTransform with WinRT MediaPlayer::AddVideoEffect via activatableClassId如何通过 activatableClassId 将进程内 IMFTransform 与 WinRT MediaPlayer::AddVideoEffect 一起使用
【发布时间】: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


【解决方案1】:

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

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

  1. 将MFT注册到注册表并引用CLSID,可以参考这个document

  2. 免注册WinRT(需要使用应用程序清单),可以参考这个blog

很遗憾,这意味着如果您希望在进程中注册 MFT,则需要应用清单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 2019-06-18
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多