Я пытаюсь использовать MediaFoundation API для кодирования видео, но у меня возникают проблемы с нажатием образцов на SinkWriter.Использование Media Foundation для кодирования поверхностей Direct X
Я получаю кадры для кодирования через API дублирования рабочего стола. В итоге я получил ID3D11Texture2D с изображением рабочего стола.
Я пытаюсь создать IMFVideoSample, содержащий эту поверхность, а затем нажимать этот образец видео на SinkWriter.
Я пытался идти об этом по-разному:
Я назвал
MFCreateVideoSampleFromSurface(texture, &pSample)
где текстура является ID3D11Texture2D, заполненный в SampleTime и SampleDuration, а затем передает созданный образец в SinkWriter.
SinkWriter вернулся E_INVALIDARG.Я попытался создать образец, передав nullptr в качестве первого аргумента и создав сам буфер, используя MFCreateDXGISurfaceBuffer, а затем передав результирующий буфер в Sample.
Это тоже не сработало.Я прочитал документацию MediaFoundation и не смог найти подробную информацию о том, как создать образец из текстуры DirectX.
У меня кончились вещи, чтобы попробовать.
Кто-нибудь там использовал этот API раньше и может думать о вещах, которые я должен проверить, или о том, как я могу отлаживать это?
Я думаю, что вы допустили ошибку при использовании 'MFCreateVideoSampleFromSurface' и' MFCreateDXGISurfaceBuffer'.Эти функции создают буферы для записи на поверхность DirectX и визуализации, и они создают объекты с интерфейсом 'IMF2DBuffer', но кодеры и писатели нуждаются в объектах с' IMFMediaBuffer'. Они не могут понять 'IMF2DBuffer'. Попробуйте использовать функцию «MFCreateSampleCopierMFT» - он создал объект MFT для копирования из 'IMFMediaBuffer' в' IMF2DBuffer' на [MSDN] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd388101 (v = vs.85) .aspx). Может быть, это может сделать вспять работу!?! –
Вы уверены? Рассматривая документацию для 'MFCreateDXGISurfaceBuffer', она заявляет, что возвращает указатель на IMFMediaBuffer. –
Вы можете попробовать получить данные через буфер 'IMFMediaBuffer' из' MFCreateDXGISurfaceBuffer'. –