Как я могу захватить веб-камеру и добавить в файл? - PullRequest
0 голосов
/ 26 ноября 2018

Мое приложение должно записывать видео-интервью с возможностью приостановки и возобновления, и эти несколько сегментов записываются в файл.

Я использую directshow.net для захвата камерыПоток в окно предварительного просмотра И AVI-файл, и это работает, за исключением того, что всякий раз, когда я начинаю запись нового сегмента, я перезаписываю AVI-файл вместо добавление .Соответствующий код:

captureGraphBuilder.SetOutputFileName( ref mediaSubType, Filename, out muxFilter, out fileWriterFilter )

Как создать граф захвата, чтобы захват добавлялся в файл, а не перезаписывал его?

1 Ответ

0 голосов
/ 27 ноября 2018

Большинство мультимедийных файлов / форматов и, в частности, AVI, не допускают и не допускают добавление.Когда вы записываете, вы заполняете файл мультимедиа И затем завершаете его по завершении.Как правило, у вас нет возможности «закрыть» и возобновить запись.

Симптом перезаписи, который вы видите, является побочным эффектом реализации фильтра записи.Нет режима добавления или перезаписи, на который вы легко можете переключиться.

В основном вы можете выбрать следующие варианты (в порядке разработки «все меньше»):

  1. Каждый раз записывайте новый медиа-файл, затем запускайте внешний инструмент (например, FFmpeg), который способен объединять медиа-файлы и создавать новый непрерывный файл из сегментов.

  2. Реализация фильтра DirectShow, вставленного вконвейер (особенно в двух случаях, для видео и для аудио), который способен реализовать поведение паузы / возобновления.После приостановки фильтр отбрасывает новые данные мультимедиа, а после возобновления он начинает снова передавать их, соответственно изменяя метки времени для имитации непрерывного потока.График захвата будет в рабочем состоянии через все сегменты и паузы.

  3. Реализация пользовательского фильтра мультиплексора и / или записи, который способен считывать существующий файл и добавлять новые носители, чтобы файлсам по себе снова завершается после завершения со старыми и новыми сегментами, непрерывными.

Технически возможно реализовать пункт # 3 выше, но я не думаю, что такая реализация вообще существует: обходные путивсегда легче сделать.# 2 является своего рода предполагаемым способом решения упомянутой задачи, но, поскольку вы занимаетесь разработкой C # с DirectShow.NET, я ожидаю, что с этой точки зрения будет немного трудно решить проблему с этой точки зрения.№ 1 сделать относительно легко, а связанные с этим затраты являются внешним инструментом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...