
Como un ávido tecnólogo mantení mis propias cámaras de seguridad en el hogar. Estos flujo de cámara H.264 codificado vídeo 1080P a través de mi LAN gigabit a mi servidor doméstico, grabando material de archivo 24/7 para futuras referencias. Estos clips no solo se almacenan en mi servidor principal, sino que también se procesan a través de una secuencia de comandos de Python personalizada para el movimiento, cuyos resultados se registran en un archivo. Puedo ver fácilmente qué clips de vídeo contienen movimiento, y hacer que sea más fácil localizar algo de interés.
Cada registro contiene el movimiento del fotograma detectado por primera vez, el número total de fotogramas en el clip (mantengo mi grabación fragmentada en clips de 1 hora) y finalmente el nombre de archivo del clip en sí. Por ejemplo, una entrada de registro podría tener el siguiente aspecto:
Motion at frame 6571 of 33735 in /mnt/simple-storage/cameras/garage/video/20201020/20201020213546.m4v
Este es un buen primer paso, pero prefiero no inspeccionar los archivos de registro, dividir 6,571 por 33,735 (en el ejemplo anterior) para saber que necesito omitir el 19% del camino a través de un determinado archivo de vídeo. Prefiero ser perezoso, hacer clic en un enlace.
Afortunadamente, con el soporte nativo H.264 de HTML5, todo esto fue bastante sencillo. Viendo esto más como un ejercicio de aprendizaje (y una distracción divertida) Opté por escribir esto en JavaScript 100% puro – no hay bibliotecas de terceros aquí.
El archivo HTML anterior se puede servir directamente a través de Nginx (o cualquier otro servidor web) y solo acepta dos parámetros de cadena de consulta:
- src – la ruta relativa al clip de vídeo
- offset – una cadena codificada que contiene el fotograma de destino, dos puntos y el número total de fotogramas en el clip de vídeo (por ejemplo, 66056:72026 le saltaría casi el 92% del camino a través de un clip)
Una URL de ejemplo, en su totalidad, tendría el siguiente aspecto:
https://saturn.lan.whitehorn.us/~camera/player.html?src=garage/20201020/20201020211153.m4v&offset=66056:72026
El script en sí es bastante simplista. Inspecciona la cadena de consulta, carga el archivo al que se hace referencia y, si se especifica un parámetro offset, lo usa para calcular la distancia en el vídeo que debe omitir.
Esto me ha permitido actualizar mi registro para generar HTML con enlaces al archivo .html reproductor anterior (a diferencia de los registros basados en texto anteriores). Ahora puedo estar más perezoso cuando se trata de monitorear mis cámaras de seguridad domésticas 🙂