Видеозапись с Media Foundation

Я пытаюсь объединить 2 видео в одно (аудио тоже) и сохранить в виде файла. Скажем, покажите исходное видео в левой половине финального видео, а другой источник справа. Любая кодировка в порядке. Не с DirectShow.

Я подозревал, что IMFVideoMixerControl может быть связан с этим, но, к сожалению, я слишком новичок в MF, чтобы определить правильный шаг для достижения этой цели. Если вы могли бы дать мне некоторое руководство или если какой-либо пример доступен в Интернете, пожалуйста, дайте мне знать. Спасибо за помощь.

4

Решение

IMFVideoMixerControl используется для рендеринга видео. Вы на правильном пути, глядя на SourceReader.

Вот что я бы сделал:

  1. Создай IMFSourceReader для каждого источника видео.
  2. Создать IMFSinkWriter и сконфигурируйте его с шириной кадра, равной сумме ширины кадра исходного считывателя.
    1. использование IMFSourceReader::GetCurrentMediaType чтобы получить исходные типы медиа.
    2. использование MFGetAttributeSize с GUID MF_MT_FRAME_SIZE чтобы получить размеры кадра для каждого типа источника.
    3. Создайте тип носителя для SinkWriter с MFCreateMediaType и использовать IMFMediaType::CopyAllItems скопировать атрибуты из источника в типы носителей.
    4. использование MFSetAttributeSize с GUID MF_MT_FRAME_SIZE установить увеличенные размеры рамы типа мойки.
    5. использование IMFSinkWriter::AddStream создать видеопоток, идентичный типу источника, кроме атрибута width
  3. Вызовите IMFSourceReader :: ReadSample для каждого источника, предоставив вам один IMFSample для каждого источника.
  4. Выделить новый IMFSampleприкрепляя новый IMFMediaBuffer с увеличенной шириной рамы.
  5. использование MFCopyImage скопировать каждый из исходных буферов на соответствующую сторону выделенного медиа-буфера.
  6. использование IMFSinkWriter::WriteSample написать свой IMFSample в файл приемник.

Увидеть этот образец для некоторой базовой обработки SourceReader / SinkWriter, хотя в этом примере вместо файла используется источник захвата видео. Вы можете создать файл SourceReader, используя MFCreateSourceReaderFromURL вместо MFCreateSourceReaderFromMediaSource,

Редактировать: Я понял, что вы спросили об аудио тоже. Мой ответ касается только композитинга видео потоков.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]