Restream
RTSP​
SecureVu puede retransmitir tu flujo de video como un flujo RTSP para otras aplicaciones como Home Assistant en rtsp://<securevu_host>:8554/<camera_name>. El puerto 8554 debe estar abierto. Esto te permite usar un flujo de video para detección en SecureVu y vista en vivo de Home Assistant al mismo tiempo sin tener que hacer dos conexiones separadas a la cámara. El flujo de video se copia directamente del flujo de video original para evitar recodificación. Este flujo no incluye ninguna anotación de SecureVu.
SecureVu usa go2rtc para proporcionar sus capacidades de restream y MSE/WebRTC. La configuración de go2rtc está alojada en go2rtc en la configuración; consulta la documentación de go2rtc para configuraciones y funciones más avanzadas.
Puedes acceder a la información del flujo de go2rtc en /api/go2rtc/streams, lo que puede ser útil para depurar y proporcionar información útil sobre los flujos de tus cámaras.
Restream de Birdseye​
Se puede acceder al restream RTSP de Birdseye en rtsp://<securevu_host>:8554/birdseye. Habilitar el restream de Birdseye hará que Birdseye se ejecute 24/7, lo que puede aumentar el uso de CPU en cierta medida.
birdseye:
restream: True
Para mejorar la velocidad de conexión cuando se usa Birdseye a través de restream, puedes habilitar un pequeño latido inactivo configurando birdseye.idle_heartbeat_fps en un valor bajo (p. ej. 1–2). Esto hace que SecureVu empuje periódicamente el último fotograma incluso cuando no se detecta movimiento, reduciendo la latencia de conexión inicial.
Protección del Restream con Autenticación​
El restream de go2rtc puede protegerse con autenticación de nombre de usuario/contraseña basada en RTSP. Por ejemplo:
go2rtc:
rtsp:
username: "admin"
password: "pass"
streams: ...
NOTA: Esto no aplica a las solicitudes desde localhost; no es necesario proporcionar credenciales al usar el restream como fuente para las cámaras de SecureVu.
Reducir las Conexiones a la Cámara​
Algunas cámaras solo soportan una conexión activa o simplemente puede que quieras tener una sola conexión abierta a la cámara. El restream RTSP hace posible esto.
Con un Solo Flujo​
Se realiza una conexión a la cámara. Una para el restream; detect y record se conectan al restream.
go2rtc:
streams:
name_your_rtsp_cam: # <- para flujos RTSP
- rtsp://192.168.1.5:554/live0 # <- flujo que soporta video y audio aac
- "ffmpeg:name_your_rtsp_cam#audio=opus" # <- copia del flujo que transcodifica el audio al códec faltante (normalmente será opus)
name_your_http_cam: # <- para otros flujos
- http://192.168.50.155/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=user&password=password # <- flujo que soporta video y audio aac
- "ffmpeg:name_your_http_cam#audio=opus" # <- copia del flujo que transcodifica el audio al códec faltante (normalmente será opus)
cameras:
name_your_rtsp_cam:
ffmpeg:
output_args:
record: preset-record-generic-audio-copy
inputs:
- path: rtsp://127.0.0.1:8554/name_your_rtsp_cam # <--- el nombre aquà debe coincidir con el nombre de la cámara en restream
input_args: preset-rtsp-restream
roles:
- record
- detect
- audio # <- solo necesario si la detección de audio está habilitada
name_your_http_cam:
ffmpeg:
output_args:
record: preset-record-generic-audio-copy
inputs:
- path: rtsp://127.0.0.1:8554/name_your_http_cam # <--- el nombre aquà debe coincidir con el nombre de la cámara en restream
input_args: preset-rtsp-restream
roles:
- record
- detect
- audio # <- solo necesario si la detección de audio está habilitada
Con Subflujo​
Se realizan dos conexiones a la cámara. Una para el subflujo, una para el restream; record se conecta al restream.
go2rtc:
streams:
name_your_rtsp_cam:
- rtsp://192.168.1.5:554/live0 # <- flujo que soporta video y audio aac. Esto solo es soportado para flujos rtsp; http debe usar ffmpeg
- "ffmpeg:name_your_rtsp_cam#audio=opus" # <- copia del flujo que transcodifica el audio a opus
name_your_rtsp_cam_sub:
- rtsp://192.168.1.5:554/substream # <- flujo que soporta video y audio aac. Esto solo es soportado para flujos rtsp; http debe usar ffmpeg
- "ffmpeg:name_your_rtsp_cam_sub#audio=opus" # <- copia del flujo que transcodifica el audio a opus
name_your_http_cam:
- http://192.168.50.155/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=user&password=password # <- flujo que soporta video y audio aac. Esto solo es soportado para flujos rtsp; http debe usar ffmpeg
- "ffmpeg:name_your_http_cam#audio=opus" # <- copia del flujo que transcodifica el audio a opus
name_your_http_cam_sub:
- http://192.168.50.155/flv?port=1935&app=bcs&stream=channel0_ext.bcs&user=user&password=password # <- flujo que soporta video y audio aac. Esto solo es soportado para flujos rtsp; http debe usar ffmpeg
- "ffmpeg:name_your_http_cam_sub#audio=opus" # <- copia del flujo que transcodifica el audio a opus
cameras:
name_your_rtsp_cam:
ffmpeg:
output_args:
record: preset-record-generic-audio-copy
inputs:
- path: rtsp://127.0.0.1:8554/name_your_rtsp_cam # <--- el nombre aquà debe coincidir con el nombre de la cámara en restream
input_args: preset-rtsp-restream
roles:
- record
- path: rtsp://127.0.0.1:8554/name_your_rtsp_cam_sub # <--- el nombre aquà debe coincidir con el nombre de camera_sub en restream
input_args: preset-rtsp-restream
roles:
- audio # <- solo necesario si la detección de audio está habilitada
- detect
name_your_http_cam:
ffmpeg:
output_args:
record: preset-record-generic-audio-copy
inputs:
- path: rtsp://127.0.0.1:8554/name_your_http_cam # <--- el nombre aquà debe coincidir con el nombre de la cámara en restream
input_args: preset-rtsp-restream
roles:
- record
- path: rtsp://127.0.0.1:8554/name_your_http_cam_sub # <--- el nombre aquà debe coincidir con el nombre de camera_sub en restream
input_args: preset-rtsp-restream
roles:
- audio # <- solo necesario si la detección de audio está habilitada
- detect
Manejo de Contraseñas Complejas​
go2rtc espera contraseñas codificadas en URL en la configuración; se puede usar urlencoder.org para este propósito.
Por ejemplo:
go2rtc:
streams:
my_camera: rtsp://username:$@foo%@192.168.1.100
se convierte en
go2rtc:
streams:
my_camera: rtsp://username:$%40foo%25@192.168.1.100
Consulta este comentario para obtener más información.
Cómo evitar que go2rtc bloquee el audio bidireccional​
Para cámaras que soportan audio bidireccional, go2rtc establecerá automáticamente un canal de retorno de audio al conectarse a un flujo RTSP. Este canal de retorno bloquea el acceso a la salida de audio de la cámara para la funcionalidad de audio bidireccional, impidiendo tanto a SecureVu como a otras aplicaciones usarlo.
Para evitar esto, debes configurar dos instancias de flujo separadas:
- Una instancia de flujo con
#backchannel=0para la visualización, grabación y detección de SecureVu (evita que go2rtc establezca el canal de retorno bloqueante) - Una segunda instancia de flujo sin
#backchannel=0para la funcionalidad de audio bidireccional (puede ser usada por el visor WebRTC de SecureVu u otras aplicaciones)
Ejemplo de configuración:
go2rtc:
streams:
front_door:
- rtsp://user:password@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2#backchannel=0
front_door_twoway:
- rtsp://user:password@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2
En esta configuración:
- El flujo
front_doores usado por SecureVu para visualización, grabación y detección. El parámetro#backchannel=0evita que go2rtc establezca el canal de retorno de audio, por lo que no bloqueará el acceso al audio bidireccional. - El flujo
front_door_twowayes usado para la funcionalidad de audio bidireccional. Este flujo puede ser usado por el visor WebRTC de SecureVu cuando el audio bidireccional está habilitado, o por otras aplicaciones (como la Tarjeta de Cámara Avanzada de Home Assistant) que necesiten acceso al canal de salida de audio de la cámara.
Seguridad: Fuentes de Flujo Restringidas​
Por razones de seguridad, las fuentes de flujo echo:, expr: y exec: están deshabilitadas por defecto en go2rtc. Estas fuentes permiten la ejecución arbitraria de comandos y pueden representar riesgos de seguridad si se configuran incorrectamente.
Si intentas usar estas fuentes en tu configuración, los flujos serán eliminados y se imprimirá un mensaje de error en los logs.
Para habilitar estas fuentes, debes configurar la variable de entorno GO2RTC_ALLOW_ARBITRARY_EXEC=true. Esto puede hacerse en tu archivo Docker Compose o en el entorno del contenedor:
environment:
- GO2RTC_ALLOW_ARBITRARY_EXEC=true
Habilitar fuentes de ejecución arbitraria permite la ejecución de comandos arbitrarios a través de las configuraciones de flujo de go2rtc. Solo habilita esto si entiendes las implicaciones de seguridad y confÃas en todas las fuentes de tu configuración.
Configuraciones avanzadas de Restream​
La fuente exec en go2rtc puede usarse para comandos FFmpeg personalizados. A continuación se muestra un ejemplo:
Las fuentes exec:, echo: y expr: están deshabilitadas por defecto por seguridad. Debes configurar GO2RTC_ALLOW_ARBITRARY_EXEC=true para usarlas. Consulta Seguridad: Fuentes de Flujo Restringidas para más información.
Las fuentes exec:, echo: y expr: están deshabilitadas por defecto por seguridad. Debes configurar GO2RTC_ALLOW_ARBITRARY_EXEC=true para usarlas. Consulta Seguridad: Fuentes de Flujo Restringidas para más información.
NOTA: La salida deberá pasarse con dos llaves {{output}}
go2rtc:
streams:
stream1: exec:ffmpeg -hide_banner -re -stream_loop -1 -i /media/BigBuckBunny.mp4 -c copy -rtsp_transport tcp -f rtsp {{output}}