# Video

Este bloque de función reproduce un archivo de video y entrega fotogramas individuales para su procesamiento. Te permite elegir un archivo, controlar el modo de reproducción y proporciona una `Timestamp` y la información de loop/restart junto con cada fotograma.

## 📥 Entradas

`Restart`\
Este socket de entrada acepta un booleano que, cuando es verdadero, reinicia la reproducción del video desde el principio. (Input socket)

## 📤 Salidas

`Image Any`\
Imagen del fotograma leída del video. (Output socket)

`Timestamp`\
Marca de tiempo legible para el fotograma actual dentro del video. (Output socket)

`Restarted`\
Bandera booleana que se vuelve verdadera cuando el video llega al final y se reinicia. (Output socket)

## 🕹️ Controles

`Select video file`\
Botón para elegir el archivo de video a reproducir. (Control)

`Real-time`\
Interruptor para habilitar o deshabilitar la reproducción en tiempo real. Si está activo, los fotogramas avanzan para coincidir con la tasa de frames original del video. (Control)

## 🎨 Características

* Reproducción fluida con sincronización opcional en tiempo real para que los fotogramas sigan la temporización original del video.
* Salida a nivel de fotograma con una cadena de `Timestamp` conveniente para cada frame.
* Comportamiento de bucle (loop) y control de reinicio para volver a iniciar la reproducción.
* Posibilidad de previsualizar o enviar fotogramas a bloques de procesamiento posteriores (por ejemplo detecciones, registro o guardado).
* Manejo opcional de fotogramas en segundo plano para integraciones que suben o registran fotogramas externamente.

## ⚙️ Mecanismo de ejecución

* Cuando se selecciona un archivo de video, el bloque lo abre y prepara la reproducción.
* Si el interruptor `Real-time` está activado, el bloque avanza los fotogramas para que la velocidad de reproducción coincida con los fps del video. Si está desactivado, los fotogramas avanzan tan rápido como el sistema evalúe el grafo.
* Enviar un valor true a la entrada `Restart` reiniciará la reproducción al primer fotograma.
* En cada evaluación se emite el fotograma más reciente, una `Timestamp` legible que indica la posición del fotograma en el video y un booleano que indica si el video hizo loop o se reinició.

## 📝 Instrucciones de uso

1. Haz clic en el botón `Select video file` y elige un archivo de video compatible.
2. Activa `Real-time` si quieres que la reproducción coincida con la velocidad original; desactívalo para avanzar fotogramas tan rápido como permita el procesamiento.
3. Opcionalmente, envía un valor true a la entrada `Restart` para reiniciar la reproducción.
4. Conecta la salida `Image Any` a bloques de visualización o análisis para procesar cada fotograma.

## 💡 Consejos y trucos

* Previsualiza fotogramas mientras desarrollas: conecta `Image Any` a `Show Image` para inspeccionar rápidamente los frames.
* Guarda fotogramas o grabaciones importantes: enruta `Image Any` a `Image Logger` o `Record Video` para almacenar fotogramas o crear un archivo de video.
* Reduce la carga de procesamiento: añade un `Image Resizer` o `Image Resize` antes de bloques costosos (por ejemplo `Object Detection` o `Pose Estimation`) para bajar la resolución y aumentar el rendimiento.
* Mejora la calidad de detección: aplica `Denoising` antes de modelos de detección u estimación para reducir ruido.
* Flujos con sustracción de fondo: combina con `Background Subtractor` para detectar objetos en movimiento antes de enviar resultados a `Object Detection` o `Blob Detector`.
* Procesamiento limitado por región: usa `Image ROI Select` o `Image ROI` para recortar áreas de interés y luego ejecuta `Find Object`, `Mask Detection` u OCR en esa región.
* Seguimiento y análisis: empareja `Object Detection` (o `Object Detection - Custom`) con `Object_Detection_Tracker` para rastrear detecciones entre fotogramas y envía la salida del tracker a bloques de análisis como `Traffic Intersection Analysis`.
* Extracción de texto: usa `OCR` o `OCR (EasyOCR)` en los fotogramas (opcionalmente tras recortar con `Image ROI Select`) para leer etiquetas o timestamps impresos.

Sugerencia: para trabajar con videos largos, considera desactivar `Real-time` durante la configuración y las pruebas para iterar más rápido; actívalo en la ejecución final para reproducción sincronizada.

## 🛠️ Solución de problemas

* No aparecen fotogramas: verifica que seleccionaste un archivo válido con `Select video file` y que el archivo es accesible.
* Reproducción demasiado lenta: si `Real-time` está activado pero el sistema no puede seguir, prueba desactivar `Real-time` o reducir el tamaño de los fotogramas con `Image Resizer`.
* El video se reinicia inesperadamente: el fin de archivo activa la bandera de reinicio en la salida; usa la entrada `Restart` para controlar explícitamente la posición de reproducción.
* Las `Timestamp` parecen incorrectas: las marcas de tiempo se calculan en relación con la duración del video; verifica los metadatos del archivo y prueba con otro archivo si los valores no coinciden.

Si planeas transmitir fotogramas a servicios en la nube o de registro, combina este bloque con `Image Logger`, `Record Video` u otros bloques de exportación para persistir los resultados.
