Запуск камеры Raspi довольно тривиален:
raspivid -t 10000 -o test.h264
Проблема:
Нет способа остановить это. Это кажется мне действительно глупым, поскольку, насколько мне известно, нет камеры, доступной для розничной торговли, которая требует, чтобы пользователь указал, сколько секунд будет работать, а затем работает в течение этих многих секунд, прежде чем остановиться.
Фон:
Это представляет огромную проблему в наблюдении. Я создаю программу, в которой домашнее наблюдение включается, когда пользователь уходит, а затем снова выключается, когда он возвращается. Если движение обнаруживается непосредственно перед тем, как пользователь возвращается, камера начинает запись в течение заранее определенного периода времени (т. Е. 10 минут), но поскольку raspivid
команда блокируется, я получаю ситуацию, когда пользователь физически находится в доме, но программа находится в surveillance
состоянии. Чтобы обойти это, я запускаю поток для запуска raspivid
команды, поэтому теперь состояния корректно обновляются в зависимости от того, когда пользователь приходит и уходит. Однако сейчас другие штаты не работают. Например, я не могу переключиться в TV
состояние, так как я не могу записывать HD-видео и одновременно смотреть его. Точно так же я не могу переключиться наParty
состояние (постоянная видеозапись участников), так как камера уже записывает.
Потенциальное решение:
Используя код, который я нашел в сети (но больше не могу найти ссылку на него), я нашел хак, в результате которого я убил поток, запустивший raspivid
команду. К сожалению, SO считает это богохульством (см. Здесь и здесь ), с чем я согласен не только потому, что это может повредить .h264
файлы и привести к утечке памяти, но также и потому, что для меня это кошмарный код (у меня должны быть блокировки и везде семафоры, так как я запускаю и другие потоки для обнаружения движения).
Вопрос:
Есть ли способ остановить запись распи камеры? Если нет, то почему?
popen = subprocess.Popen ( cmd )
иpopen.send_signal ( signal.SIGINT )