Многопоточность захвата видео - PullRequest
1 голос
/ 19 декабря 2010

Мне нужно захватывать видео и сохранять его на жесткий диск каждые ххх минут.Это будет win-service, которая всегда захватывает и сохраняет.Там будет несколько камер, поэтому я думаю использовать поток обработки для каждой камеры.Поэтому, если я решу использовать Thread вместо таймера, я должен использовать Thread.Sleep перед сохранением операции.На мой взгляд, это не очень хорошая практика.

Итак, вопрос в том, подходит ли мой дизайн (поток на камеру) для моей ситуации?Как насчет таймеров?Спасибо, Андрей

Ответы [ 3 ]

0 голосов
/ 22 февраля 2011

Вы можете посмотреть код для проекта Media Portal с открытым исходным кодом по адресу http://www.team -mediaportal.com /

Посмотрите на их подпроект TvEngine3.

Вы можете заставить его отображать ваши камеры как устройство "Tuner" и настроить запись через API.

Дело в том, что они решили сотни проблем с DirectShow, и их было много .

0 голосов
/ 22 февраля 2011

Я бы определенно выбрал один поток для каждой камеры, так как есть вероятность, что вы будете использовать менее 20-30 камер.Но это, вероятно, не требуется, поскольку чтение камеры (обычно) - это неблокирующая операция.

Есть несколько вопросов по веб-камере и видео в C # на SO.Попробуйте посмотреть Как захватывать видео с веб-камеры?

Обратите внимание, что вы можете заранее выделить большие фрагменты данных, чтобы избежать фрагментации диска.Хранение нескольких потоковых видео на диск может действительно фрагментировать, а затем просмотр / копирование / изменение видео будет очень медленным.

0 голосов
/ 19 декабря 2010

Ваш код может периодически блокироваться из-за глобальных mutex'ов (например, в драйвере). Также, например, у вас есть открытый ввод в одном потоке, вы сбрасываете его в какой-то поток и хотите прочитать его из другого потока: происходит блокировка мьютекса. То же самое с таймерами. Считая управляемую событиями машину слишком сложной для реализации, вы все равно можете использовать несколько экземпляров.

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