MediaFoundation API를 사용하여 비디오를 인코딩하려고하지만 샘플을 SinkWriter로 푸는 데 문제가 있습니다.Media Foundation을 사용하여 Direct X 서페이스 인코딩
데스크톱 복제 API를 통해 프레임을 인코딩하려고합니다. 필자가 끝내는 것은 데스크탑 이미지가있는 ID3D11Texture2D입니다.
이 표면을 포함하는 IMFVideoSample을 만든 다음 해당 비디오 샘플을 SinkWriter로 푸시하려고합니다.
나는 다른 방법으로 이것에 대해려고 시도했습니다- 나는 질감이 SampleTime 및 SampleDuration에 가득 ID3D11Texture2D이다
MFCreateVideoSampleFromSurface(texture, &pSample)
라고하고 SinkWriter에 생성 된 샘플을 통과시켰다.
SinkWriter가 E_INVALIDARG를 반환했습니다. nullptr을 첫 번째 인수로 전달하고 MFCreateDXGISurfaceBuffer를 사용하여 직접 버퍼를 만든 다음 샘플에 결과 버퍼를 전달하여 샘플을 만들려고했습니다.
그 중 하나가 작동하지 않았다.MediaFoundation 설명서를 읽었으며 DirectX 텍스처에서 샘플을 만드는 방법에 대한 자세한 정보를 찾을 수 없습니다.
나는 밖으로 시도하는 것을 다했다.
이전에이 API를 사용하는 사람이 있었는지, 내가 확인해야 할 사항을 생각해 볼 수 있습니까? 아니면 어떻게 디버깅을 할 수 있습니까?
'MFCreateVideoSampleFromSurface'와'MFCreateDXGISurfaceBuffer'를 사용하여 실수 한 것으로 생각합니다.이 함수는 DirectX 및 시각화 표면에 쓰기위한 버퍼를 만들고 인터페이스 'IMF2DBuffer'를 사용하여 객체를 만들지 만 인코더와 작성기에는 IMFMediaBuffer가있는 객체가 필요합니다. 그들은'IMF2DBuffer'를 이해할 수 없습니다. 'MFCreateSampleCopierMFT'함수를 사용해보십시오 - MFT 객체를 생성하여 [MSDN]의 IMFMediaBuffer에서 IMF2DBuffer로 복사합니다 (https://msdn.microsoft.com/en-us/library/windows/desktop/dd388101 (v = vs.85) .aspx). 그것은 역 작업을 할 수 있습니다!?! –
정말 확실하니? 'MFCreateDXGISurfaceBuffer'에 대한 문서를 보면 IMFMediaBuffer에 대한 포인터를 반환한다고 나와 있습니다. –
'MFCreateDXGISurfaceBuffer'에서 버퍼의 IMFMediaBuffer를 통해 데이터를 가져올 수 있습니다. –