Iniciar la cámara Raspi es bastante trivial:
raspivid -t 10000 -o test.h264
Problema:
No hay forma de detener esto. Esto me parece realmente estúpido ya que, a mi leal saber y entender, no hay una cámara disponible para la venta minorista que requiera que el usuario especifique cuántos segundos debe correr, y luego corre durante esos segundos antes de detenerse.
Antecedentes:
Esto presenta un gran problema en la vigilancia. Estoy creando un programa donde la vigilancia en el hogar se activa cuando el usuario se va, y luego se apaga nuevamente cuando regresa. Si se detecta movimiento justo antes de que el usuario regrese, la cámara comienza a grabar durante un período de tiempo predeterminado (es decir, 10 minutos), pero dado que el raspivid
comando está bloqueando, obtengo una situación en la que el usuario está físicamente en la casa, pero el programa Está en el surveillance
estado. Para evitar esto, lanzo un hilo para ejecutar el raspivid
comando, por lo que ahora los estados se actualizan correctamente en función de cuándo va y viene el usuario. Sin embargo, ahora otros estados no funcionan. Por ejemplo, no puedo cambiar al TV
estado ya que no puedo grabar imágenes en HD y verlas al mismo tiempo. Del mismo modo, no puedo cambiar alParty
estado (grabación de video constante de fiestas) ya que la cámara ya está grabando.
Solucion potencial:
Usando el código que encontré en la web (pero ya no puedo encontrar el enlace), encontré un truco mediante el cual elimino el hilo que lanzó el raspivid
comando. Desafortunadamente, esto es considerado una blasfemia por SO (ver aquí y aquí ), con lo que estoy de acuerdo no solo porque podría corromper los .h264
archivos y provocar pérdidas de memoria, sino también porque es una pesadilla para mí codificar (tengo que tener bloqueos y semáforos en todas partes ya que estoy lanzando otros hilos para la detección de movimiento también).
Pregunta:
¿Hay alguna manera de detener una cámara raspi de grabación? ¿Si no, porque no?
popen = subprocess.Popen ( cmd )
ypopen.send_signal ( signal.SIGINT )