我正在尝试使用MediaFoundation API来对视频进行编码,但是我在将样本推送到SinkWriter时遇到了问题。
通过Desktop Duplication API获取要编码的帧。最终我得到了一个包含桌面图像的ID3D11Texture2D。
我试图创建一个包含此表面的IMFVideoSample,然后将该视频样本推送到SinkWriter。
我已经尝试了不同的方法:
1. 我调用了MFCreateVideoSampleFromSurface(texture, &pSample),其中texture是ID3D11Texture2D,填写了SampleTime和SampleDuration,然后将创建的样本传递给SinkWriter。 SinkWriter返回E_INVALIDARG。
2. 我尝试通过将第一个参数设置为nullptr并自己使用MFCreateDXGISurfaceBuffer创建缓冲区来创建样本,然后将生成的缓冲区传递到Sample中。 也无法正常工作。
3. 我阅读了MediaFoundation文档,但未找到有关如何从DirectX纹理创建样本的详细信息。
我已经没有可以尝试的事情了。是否有使用过这个API并且可以想出我应该检查的问题或者调试方式的人呢?
通过Desktop Duplication API获取要编码的帧。最终我得到了一个包含桌面图像的ID3D11Texture2D。
我试图创建一个包含此表面的IMFVideoSample,然后将该视频样本推送到SinkWriter。
我已经尝试了不同的方法:
1. 我调用了MFCreateVideoSampleFromSurface(texture, &pSample),其中texture是ID3D11Texture2D,填写了SampleTime和SampleDuration,然后将创建的样本传递给SinkWriter。 SinkWriter返回E_INVALIDARG。
2. 我尝试通过将第一个参数设置为nullptr并自己使用MFCreateDXGISurfaceBuffer创建缓冲区来创建样本,然后将生成的缓冲区传递到Sample中。 也无法正常工作。
3. 我阅读了MediaFoundation文档,但未找到有关如何从DirectX纹理创建样本的详细信息。
我已经没有可以尝试的事情了。是否有使用过这个API并且可以想出我应该检查的问题或者调试方式的人呢?
MFCreateDXGISurfaceBuffer
的文档,它说明返回一个指向IMFMediaBuffer
的指针。 - Tiago Magalhães