WebRTC y videovigilancia: cómo superamos la latencia del video de las cámaras

WebRTC y videovigilancia: cómo superamos la latencia del video de las cámaras

Desde los primeros días de trabajo en el sistema de videovigilancia en la nube, nos enfrentamos a un problema cuya solución era crucial para Ivideon; era nuestro Everest, una escalada que consumió una gran cantidad de esfuerzo, pero ahora, finalmente, hemos clavado el piolet en la cima del rompecabezas multiplataforma.

El sistema de transmisión de audio y video a través de Internet no debe depender del hardware, los clientes web y los estándares que estos admiten, y además debe funcionar correctamente en presencia de traductores de direcciones de red y cortafuegos. Un usuario de videovigilancia en la nube desea acceder al servicio, incluso si utiliza cámaras analógicas, y prefiere ver la transmisión de video en vivo en el dispositivo más moderno.

Es muy significativo que el usuario quiera ver video con la mínima latencia. Prácticamente la única manera de mostrar video con baja latencia en un navegador es utilizar WebRTC (comunicaciones en tiempo real web). WebRTC es un conjunto de tecnologías para la transmisión peer-to-peer de video y audio en navegadores, diseñado originalmente para la transmisión y reproducción de flujos de video con baja latencia. Para esto, entre otras cosas, se utiliza el protocolo UDP.

Antes de contarles qué ofrece al usuario el nuevo motor, recordemos por qué y para qué soportamos las tecnologías HLS, y por qué decidimos avanzar.

Motor HLS: pros y contras

WebRTC y videovigilancia: cómo superamos la latencia del video de las cámaras
(c)

La tecnología HLS (HTTP Live Streaming) fue desarrollada por Apple, por lo que no es sorprendente que su soporte apareciera por primera vez en dispositivos de esta marca. Hoy en día, casi todos los decodificadores de televisión y muchos dispositivos que funcionan con el sistema operativo Android también pueden reproducir video en formato HLS.

El motor HLS utiliza el conocido códec de video H264 combinado con flujos de audio AAC o MP3 para la transmisión de video. Todo el flujo de datos de audio y video se empaqueta en el contenedor de transporte MPEG-TS. Para la transmisión a través del protocolo HTTP, la información contenida en el flujo se divide en fragmentos, descritos en listas de reproducción m3u8. Solo entonces estos fragmentos, junto con las listas de reproducción, se transmiten a través de HTTP. La división en fragmentos implica automáticamente un retardo en segundos. Esta es una característica del contenedor MPEG-TS.

El motor HLS también admite flujos de múltiples tasas de bits, Live/VOD.

Las principales ventajas de HLS:

  • soporte integrado en todos los navegadores principales;
  • facilidad de implementación (en comparación con WebRTC);
  • es muy conveniente y efectivo organizar todo tipo de transmisiones para una gran audiencia gracias a la posibilidad de cargar segmentos una vez en el CDN.

A pesar de la sencillez del motor, no todo es tan fluido como parece. El principal problema es que los desarrolladores de reproductores de terceros se han desviado de las recomendaciones de Apple, por ejemplo, en lo que respecta a los formatos de audio admitidos. En particular, muchos desarrolladores han comenzado a agregar la capacidad de trabajar con flujos de audio populares: mpeg2 video, mpeg2 audio, etc. Como resultado, se tuvieron que crear diferentes formatos de listas de reproducción para diferentes reproductores.

Pero uno de los mayores problemas del motor HLS es la alta latencia en la transmisión de datos.

Orígenes de los "retardos"

La principal razón de la alta latencia de HLS radica en que los programadores diseñaron el motor para obtener la mejor calidad de imagen posible. Por lo tanto, los parámetros del intervalo de fotogramas y el tamaño del búfer de reproducción simplemente no son adecuados para la transmisión de video en vivo. Debido a esto, se produce una latencia considerable en la transmisión del video, que puede ser de 5 a 7 segundos.

Por un lado, esto es poco, por ejemplo, para quienes ven una película desde un servidor de videohospedaje. Pero para los sistemas de videovigilancia, la latencia en la transmisión del video puede tener una gran importancia.

Si está observando una oficina donde los empleados se distraen cada hora de las pantallas, entonces una latencia de 5 segundos no tiene importancia. Pero la gente ha comenzado a quejarse de que, por ejemplo, durante la transmisión de un partido de fútbol, en el chat ya han escrito GOOOOL, pero en el video aún no se ha visto :). Ya tenemos varios casos de usuarios donde Ivideon prácticamente debe reemplazar a Skype.

¿Se puede eliminar la latencia en HLS? La respuesta a esta pregunta suena como la declaración de un experimentado exterminador de ratas en una conferencia ante jóvenes desratizadores: «No se pueden eliminar las ratas, pero se puede reducir su población a un mínimo razonable». Así es con la latencia en HLS, no se puede eliminar por completo, pero en el mercado hay soluciones que permiten reducirla considerablemente.

Segmentación pequeña

Otro inconveniente del motor es el uso de archivos pequeños para la transmisión de datos. A primera vista, ¿qué hay de malo en eso?

Cualquiera que haya intentado copiar una gran cantidad de archivos pequeños de un dispositivo a otro seguramente habrá notado que la velocidad de escritura de un conjunto así es mucho más baja que la de un solo archivo grande del mismo tamaño. Además, la intensidad de las solicitudes al disco duro aumenta significativamente, lo que afecta negativamente el rendimiento de toda la computadora. Por lo tanto, la transmisión de datos de video en forma de pequeños fragmentos de 10 segundos también contribuye a un aumento en la latencia del motor.

Resumamos brevemente todos los pros y contras de la tecnología HLS.

Ventajas de HLS:

  1. Posibilidad de funcionar en cualquier dispositivo. Puedes ver videos en cualquier dispositivo moderno, ya sea un teléfono inteligente, una tableta, una laptop o una PC de escritorio. Lo principal es que el navegador web sea una versión moderna y sea compatible con HTML5 y Media Source Extensions.
  2. Excelente calidad de imagen. La función de transmisión adaptativa utilizada permite cambiar dinámicamente la calidad del video transmitido según el ancho de banda de la conexión a Internet, mientras que el algoritmo se esfuerza por mantener la calidad en su nivel máximo.
  3. No es necesario configurar complicadamente el hardware del usuario.

Desventajas:

  1. Soporte limitado para funcionar con el motor en algunos dispositivos.
  2. Altas latencias en la transmisión de la imagen.
  3. Aumento significativo de la sobrecarga y complejidad de optimización debido al uso de archivos de pequeño tamaño. Debido a las características del contenedor, nunca podremos obtener una latencia menor que el tamaño del segmento.

Las desventajas de HLS han superado sus ventajas para nosotros y nos han llevado a buscar alternativas.

¿Qué es WebRTC?

WebRTC y videovigilancia: cómo superamos la latencia del video de las cámaras
(c)

La plataforma WebRTC fue desarrollada por Google en 2011 para transmitir datos de video y audio en tiempo real entre navegadores y aplicaciones móviles con mínima latencia. Para ello se utiliza el protocolo estándar UDP y algoritmos especiales de control de flujo. Hoy en día es un proyecto de código abierto, que es activamente soportado y desarrollado por Google.

WebRTC es un conjunto de tecnologías para la transmisión de video y audio de peer a peer. Es decir, por ejemplo, los navegadores de los usuarios pueden transmitir datos entre sí directamente mediante WebRTC, sin utilizar servidores remotos para almacenar y procesar datos. Toda la información también es procesada por los navegadores y aplicaciones móviles de los usuarios finales.

Los desarrolladores de todos los navegadores populares han valorado las comodidades y grandes capacidades de esta tecnología. Hoy en día, el soporte para WebRTC está implementado en Mozilla Firefox, Opera, Google Chrome (y todos los navegadores basados en Chromium), así como en aplicaciones móviles para Android e iOS.

A pesar de sus indudables ventajas, WebRTC tiene algunas desventajas importantes.

Dificultades de elección

La tecnología WebRTC es mucho más compleja en términos de interacciones de red debido a que se basa en P2P. Es difícil de depurar y probar, y puede comportarse de manera impredecible. Además, necesitamos superar NAT y firewalls, y asegurar su funcionamiento en redes donde se bloquea UDP.

La implementación de WebRTC de Google es muy difícil de utilizar. Incluso hay una empresa que ofrece servicios para compilar SDKs. Además, fue muy complicado integrar la implementación de Google en nuestro sistema sin tener que recodificar todo el video.

Sin embargo, siempre hemos querido dar a los usuarios la posibilidad de trabajar con un video 'en vivo' completo y minimizar la latencia de la imagen en pantalla respecto a los propios eventos. Además, teníamos el deseo de hacer más cómodo el uso de cámaras PTZ, donde las retardos son de vital importancia.

Dado que otras implementaciones para combatir el lag aún tienen funcionalidad limitada y funcionan notablemente peor, decidimos utilizar WebRTC.

Lo que hicimos

WebRTC y videovigilancia: cómo superamos la latencia del video de las cámaras

Integrar correctamente la plataforma WebRTC es una tarea difícil. Cualquier error o inexactitud puede resultar en que las latencias en la transmisión de video no solo no disminuyan comparadas con otras plataformas, sino que incluso aumenten.

Para el correcto funcionamiento de WebRTC, primero es necesario llevar a cabo una modernización tecnológica del stack para trabajar con video web. Lo que hemos hecho.

Primero implementamos un servidor de protocolo de señalización WebRTC sobre Websocket, y también desplegamos un servidor peer de WebRTC en la nube basado en el SDK webrtc.org. Su función es distribuir flujos de video a los peers clientes de WebRTC en formato H.264 + Opus/G.711 sin recodificar el video.

Elegimos Websocket como protocolo de señalización porque ya cuenta con un buen soporte en todos los navegadores web populares. Esto permite reducir significativamente no solo los costos de desarrollo, sino también evitar la pérdida de tiempo y recursos en rehandshakes de TCP y TLS en comparación con AJAX.

El hecho es que por defecto WebRTC no proporciona un protocolo de señalización necesario para la correcta configuración, mantenimiento y ruptura de la videoconferencia en tiempo real entre las aplicaciones de origen y cliente.

Y para implementar la tecnología de señalización por nuestra cuenta, necesitamos desarrollar nuestro propio servidor de señalización con soporte para varios protocolos web (Websocket, WebRTC). También debe tener la capacidad de gestionar sesiones y notificaciones de manera segura en tiempo real, así como la gestión de video y muchos otros parámetros.

Superamos las limitaciones de P2P reduciendo la latencia no a través de P2P, sino mediante UDP y un control de flujo orientado a disminuir la latencia. Esto también está incorporado en WebRTC, ya que el caso de uso principal son las conversaciones P2P a través del navegador.

En el cliente móvil implementamos un reproductor utilizando el SDK webrtc.org, ya que solo este ofrece un correcto control de flujo, incluye todos los esquemas conocidos de Corrección de Errores Adelantados (FEC) y su mecanismo de retransmisión de paquetes está bien implementado para todos los navegadores. También es importante destacar que el SDK webrtc.org es activamente desarrollado por Google.

¿Cuál es el resultado de implementar WebRTC?


Para ver video en vivo desde las cámaras, hemos agregado un nuevo reproductor optimizado basado en WebRTC en el área personal. Este proporciona una alta velocidad de carga de video y elimina completamente el problema de acumulación de latencia a medida que aumenta el tiempo de visualización.

Tras la implementación del soporte de WebRTC en el servicio en la nube Ivideon, podemos afirmar con total seguridad que ahora nuestros clientes pueden disfrutar de una transmisión de video en vivo completa. Actualmente, la latencia en la transmisión de video no supera un segundo. En comparación, el antiguo motor HLS proporcionaba la entrega de video con una latencia de 5 a 7 segundos. La diferencia en la velocidad de visualización del video es muy significativa y el usuario la notará inmediatamente al comenzar a utilizar nuestro servicio de video.

Como esperábamos, la implementación del nuevo reproductor ha permitido mejorar la capacidad de respuesta del PTZ y la comunicación de voz con la cámara.

WebRTC y videovigilancia: cómo superamos la latencia del video de las cámaras

Hay solo un pequeño detalle al que queremos llamar su atención. El nuevo reproductor WebRTC actualmente funciona en modo de prueba. Por esta razón, no lo activamos de manera predeterminada para todos nuestros clientes. Pero usted puede activarlo manualmente, habilitando la opción correspondiente en la configuración de la cámara (para esto debe entrar en su cuenta personal).

Características de la implementación de WebRTC en el servicio Ivideon

WebRTC y videovigilancia: cómo superamos la latencia del video de las cámaras

WebRTC sigue siendo una tecnología experimental en este momento. Su soporte no está completamente implementado en todos los navegadores y dispositivos de usuario, ni en todas las cámaras.

Esto explica por qué aún no hemos hecho del reproductor WebRTC el predeterminado para todos los usuarios.

Por ahora, recomendamos usar WebRTC solo en los navegadores Google Chrome. Las últimas versiones de Firefox y Safari también admiten esta tecnología, pero, desafortunadamente, aún son inestables.

Aún no hemos implementado el soporte de WebRTC para navegadores en dispositivos móviles. Actualmente, si accede desde un dispositivo móvil y activa WebRTC, este modo no funcionará. Sin embargo, WebRTC está disponible en nuestras aplicaciones móviles para Android y iOS.

Y finalizando nuestro relato sobre las características de la implementación de WebRTC en nuestro servicio, mencionemos otros dos detalles finos.

En primer lugar, la tecnología está orientada a la transmisión de video en vivo en tiempo real. Por lo tanto, si el ancho de banda de su conexión no es suficiente para transmitir el video, notará la pérdida de cuadros (con HLS notará congelaciones del video y un aumento en la latencia, aunque no habrá pérdida de cuadros), pero el video seguirá siendo transmitido en tiempo real.

En segundo lugar, dado que la tecnología está destinada a trabajar específicamente con video en vivo en tiempo real, no la usamos para trabajar con datos de video archivados.

Otros cambios en el servicio

En este momento, Flash ya no participa en el mecanismo de selección automática del motor. Aún se puede utilizar dicho reproductor, pero es necesario seleccionar manualmente en la configuración de la cuenta o de la cámara. No es una cuestión de moda, simplemente, según las estadísticas de nuestro servicio, prácticamente no quedan usuarios trabajando con Flash. Además, al intentar determinar si el navegador del usuario lo soporta, perdemos alrededor de 2 segundos de tiempo valioso.

Aquí un breve resumen de los cambios que te esperan en nuestro sistema de videovigilancia en la nube y en tu cuenta personal. ¡Mantente con nosotros y sigue nuestras noticias!

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster