我正在尝试使用 MediaFoundation API 对视频进行编码,但在将样本推送到 SinkWriter 时遇到问题。
我正在通过 Desktop Duplication API 获取要编码的帧。我最终得到的是一个带有桌面图像的 ID3D11Texture2D。
我正在尝试创建一个包含此表面的 IMFVideoSample,然后将该视频样本推送到 SinkWriter。
我尝试过以不同的方式解决这个问题:
我调用
MFCreateVideoSampleFromSurface(texture, &pSample)
其中纹理为 ID3D11Texture2D,填写了 SampleTime 和 SampleDuration,然后将创建的样本传递给 SinkWriter。
SinkWriter 返回 E_INVALIDARG。我尝试通过将 nullptr 作为第一个参数传递并自己使用 MFCreateDXGISurfaceBuffer 创建缓冲区来创建示例,然后将生成的缓冲区传递给示例。
那也没有用。我通读了 MediaFoundation 文档,但找不到有关如何使用 DirectX 纹理创建样本的详细信息。
我没有东西可以尝试了。
有没有人以前使用过这个 API 并且可以想到我应该检查的东西,或者我可以如何去调试它?