我必须手动构建视频拓扑,其中包括使用加载和配置mpeg2videoextension (解码器)。否则默认的topoloader无法自动解析视频流。我使用默认的拓扑加载器来解析拓扑的其余部分。
由于我是手动加载解码器,文档上说我负责获取解码器和硬件加速管理器。(这个解码器是D3D11感知的)。如果我创建一个DXGI设备,然后在代码中创建管理器,我可以将管理器传递给解码器,它似乎可以工作。
然而,文档还说,“在媒体会话场景中,视频渲染器创建Direct3D 11设备。”
如果是这种情况,我如何获得该设备的句柄?我假设我应该在设备管理器中使用该设备来传递到解码器。
我在绕圈子。所有示例代码都使用IDirect3DDeviceManager9。我无法让这些样本正常工作。所以我决定使用11,但是我找不到任何使用11的示例代码。
谁能给我指个方向?
发布于 2020-12-30 16:07:55
微软没有为这一挑战提供一个很好的解决方案。事实上,媒体基金会的标准视频渲染器是EVR,它只“知道”Direct3D 9。所以你不能用普通的DXGI设备管理器把它和解码器结合起来。较新的微软应用程序使用不同的API 11感知渲染器,该渲染器不作为Direct3D发布:您可以利用这些渲染服务作为包装API的一部分,例如播放视频的UWP或HTML5媒体元素。MPEG-2解码器扩展主要针对这些扫描器,如果您将其插入到较旧的Media Foundation拓扑中,则会给您留下一个问题。
我可以想出一些解决这个问题的方法,但没有一个听起来是完全完美的:
DX11VideoRenderer:微软在此示例中提供了一个起点,您可以自己建立所需的布线来共享DXGI设备管理器。https://stackoverflow.com/questions/65501767
复制相似问题