0

我正在寻找一种可行的替代方案来完成这项工作

我的目标是一台通用计算机(因此它暂时可以在每个客户端计算机上运行),我已经尝试了几个月的 IMFTransform 库,但是在我的计算机上(即使在 MFTEnumEx 上有不同的过滤器),我无法获得一个 IMFTransform是 d3d11_aware [我已经在此页面上询问并尝试了所有这些答案:如何获得 d3d_aware 的 IMFTransform(将来自 Windows Duplication API 的输入编码到 H264)?]

由于这个库不适合我,我正在寻找替代方案。我听说有 FFMPEG 用于编码,但到目前为止我找不到证据它可以将 DXGI_FORMAT_B8G8R8A8_UNORM 作为输入。如果有办法,我会全力以赴研究它,我只需要方向

edit1(在edit2上我会留下这个修复,以防它可以帮助某人):

问题显然是在检索 imfAttributes 时,它是空的ppActivates[] 如果 MF_SA_D3D_AWARE,显然 IMFTransform 工作正常

IMFAttributes* imfAttributes;
CatchError(pTransform->GetAttributes(&imfAttributes), (LPSTR)"Error getAttributes from pTransform");
CatchError(imfAttributes->GetUINT32(MF_SA_D3D_AWARE,0), (LPSTR)"Error pTransform not D3D_AWARE"); 

运行时,在最后一行我在 VRscreenStreamer.exe 中的 0x00007FFC7EEED4CB (mfplat.dll) 处抛出异常:0xC0000005:访问冲突写入位置 0x0000000000000000

edit2:为了解决这个问题,我使用了 MFGetAttributeUINT32 而不是 GetUINT32:

BOOL bD3DAware = FALSE;
bD3DAware = MFGetAttributeUINT32(imfAttributes, MF_SA_D3D11_AWARE, FALSE);
4

0 回答 0