WebRTC y videovigilancia: cómo superamos la latencia de video de la cámara

WebRTC y videovigilancia: cómo superamos la latencia de video de la cámara

Desde los primeros días de trabajo en un sistema de videovigilancia en la nube, nos enfrentamos a un problema, sin resolverlo, era posible acabar con Ivideon: era nuestro Everest, escalar lo que requirió mucha fuerza, pero ahora finalmente lo hemos logrado. un piolet en la parte superior del acertijo de plataforma cruzada.

El sistema de transmisión de audio y video a través de Internet no debe depender del equipo, los clientes web y los estándares que soportan, y también debe funcionar correctamente en presencia de traductores de direcciones de red y firewalls. Un usuario de videovigilancia en la nube quiere acceder al servicio, aunque utilice 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 el video con un retraso mínimo. Prácticamente, la única forma de mostrar video de baja latencia en un navegador es usar WebRTC (comunicaciones web en tiempo real). WebRTC es un conjunto de tecnologías para la transmisión de video y audio punto a punto en navegadores, diseñado originalmente para la transmisión y reproducción de un flujo de video con baja latencia. Para ello, entre otras cosas, se utiliza el protocolo UDP.

Antes de decirle lo que el nuevo motor le brinda al usuario, le recordaremos por qué y por qué admitimos las tecnologías HLS, y por qué decidimos seguir adelante.

Motor HLS: pros y contras

WebRTC y videovigilancia: cómo superamos la latencia de video de la cámara
(c)

La tecnología HLS (HTTP Live Streaming) fue desarrollada por Apple, por lo que no sorprende que inicialmente fuera compatible con dispositivos Apple. Hoy en día, el vídeo HLS también es compatible con prácticamente todos los decodificadores y muchos dispositivos que ejecutan el sistema operativo. Android.

El motor HLS utiliza el conocido códec de video H264 en combinación con secuencias de audio AAC o MP3 para transmitir datos de video. Todo el flujo de datos de audio y video se empaqueta en un 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 las listas de reproducción m3u8. Y solo entonces estos fragmentos, junto con las listas de reproducción, se transmiten a través de HTTP. La división en fragmentos significa automáticamente un retraso en segundos. Tal característica del contenedor MPEG-TS.

El motor HLS también es compatible con flujos multibitrate, Live/VOD.

Las principales ventajas de HLS:

  • soporte incorporado en todos los principales navegadores;
  • facilidad de implementación (en comparación con WebRTC);
  • es muy conveniente y eficiente organizar todo tipo de transmisiones para una gran audiencia debido al hecho de que los segmentos se pueden cargar en un CDN una vez.

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 cuanto a los formatos de audio compatibles. En particular, muchos desarrolladores comenzaron a agregar la capacidad de trabajar con flujos de audio populares: video mpeg2, audio mpeg2, etc. Como resultado, tuvimos 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 transferencia de datos.

Los orígenes de los "frenos"

La razón principal de la alta latencia de HLS radica en el hecho de que los programadores crearon el motor para obtener imágenes de la más alta calidad. Por lo tanto, los parámetros del intervalo de fotogramas utilizados y el tamaño del búfer de reproducción simplemente no son adecuados para transmisiones de video en vivo. Debido a esto, hay un retraso bastante alto en la transmisión de la secuencia de video, que puede ser de 5 a 7 segundos.

Por un lado, esto no es mucho, por ejemplo, para aquellos que ven una película desde un servidor de alojamiento de videos. Pero para los sistemas de videovigilancia, el retraso en la transmisión de la secuencia de vídeo puede ser muy importante.

Si está viendo una oficina donde los empleados quitan la vista de los monitores una vez por hora, entonces un retraso de 5 segundos no importa. Pero la gente comenzó a quejarse de que, por ejemplo, durante la transmisión de un partido de fútbol, ​​ya escribieron GOOOOL en el chat, pero esto aún no está en el video :). Ya tenemos una serie de casos de usuarios en los que Ivideon prácticamente debería reemplazar a Skype.

¿Es posible vencer la latencia en HLS? La respuesta a esta pregunta suena como un discurso de un exterminador de ratas experimentado en una conferencia para exterminadores novatos: "Las ratas no pueden exterminarse, pero su población puede reducirse a un mínimo razonable". Entonces, con el retraso en HLS, no funcionará quitarlo a cero, pero hay soluciones en el mercado que pueden reducir significativamente el retraso.

corte fino

Otra desventaja del motor es el uso de archivos pequeños para la transferencia de datos. Parecería que esto es malo?

Cualquiera que haya intentado copiar una gran cantidad de archivos pequeños de un medio a otro debe haber notado que la velocidad de escritura de dicho conjunto es mucho menor que la de un archivo grande del mismo tamaño. Sí, y la intensidad del acceso al disco duro aumenta significativamente, lo que generalmente 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 al aumento del retraso del motor.

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

Ventajas de HLS:

  1. Capacidad para trabajar con cualquier dispositivo. Puede ver videos en cualquier dispositivo moderno, ya sea un teléfono inteligente, una tableta, una computadora portátil o una computadora de escritorio. Lo principal es que el navegador web esté actualizado y sea compatible con HTML5 y Media Source Extensions.
  2. Excelente calidad de imagen. La función de transmisión de datos adaptativa utilizada le permite cambiar dinámicamente la calidad de la secuencia de video transmitida según el ancho de banda de la conexión a Internet, mientras que el algoritmo se esfuerza por mantener la calidad lo más alta posible.
  3. No hay necesidad de una configuración compleja del equipo del usuario.

desventajas:

  1. Soporte limitado para trabajar con el motor en algunos dispositivos.
  2. Alta latencia en la transmisión de imágenes.
  3. Fuerte aumento de los gastos generales y complejidad de la optimización debido al uso de archivos pequeños. Debido a la naturaleza del contenedor, nunca podremos obtener un retraso menor que el tamaño del segmento.

Las desventajas de HLS superaron sus ventajas para nosotros y nos obligaron a buscar alternativas.

¿Qué es WebRTC?

WebRTC y videovigilancia: cómo superamos la latencia de video de la cámara
(c)

La plataforma WebRTC fue desarrollada por Google en 2011 para transferir transmisión de datos de audio y video entre navegadores y aplicaciones móviles con un retraso mínimo. Para ello, se utilizan el protocolo UDP estándar y algoritmos especiales de control de flujo. Hoy es un proyecto de código abierto, apoyado activamente por Google y desarrollado.

WebRTC es un conjunto de tecnologías para la transmisión de video y audio punto a punto. Es decir, por ejemplo, los navegadores de los usuarios que utilizan WebRTC pueden transferir datos directamente entre sí, 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.

La comodidad y las amplias capacidades de esta tecnología han sido apreciadas por los desarrolladores de todos los navegadores populares. El soporte para WebRTC está disponible actualmente en Mozilla Firefox, Opera, Google Chrome (y todos los navegadores basados ​​en Chromium), así como en aplicaciones móviles que se ejecutan Android y iOS.

Con todas sus ventajas innegables, WebRTC tiene varias desventajas importantes.

Dificultades para elegir

La tecnología WebRTC es mucho más compleja en términos de interacciones de red debido al hecho de que se trata de P2P. Es difícil de depurar, probar, puede comportarse de manera impredecible. Al mismo tiempo, debemos superar NAT y firewall, debemos garantizar el trabajo en redes donde UDP está bloqueado.

La implementación de WebRTC de Google es muy difícil de usar. Incluso hay una empresa completa que brinda servicios de construcción de SDK. Además, la implementación de Google fue muy difícil de integrar con nuestro sistema sin volver a codificar todo el video.

Sin embargo, hace tiempo que queríamos brindarles a los usuarios la oportunidad de trabajar con una secuencia de video "en vivo" completa y minimizar el retraso de la imagen en la pantalla de los eventos mismos. Además, teníamos el deseo de hacer más cómodo el uso de las cámaras PTZ, donde los retrasos son críticos.

Teniendo en cuenta que otras implementaciones anti-lag aún tienen una funcionalidad limitada y funcionan notablemente peor, decidimos usar WebRTC.

Qué hemos hecho

WebRTC y videovigilancia: cómo superamos la latencia de video de la cámara

Implementar correctamente la plataforma WebRTC no es tarea fácil. Cualquier error de cálculo o imprecisión puede hacer que los retrasos en la transmisión de la secuencia de vídeo no solo no disminuyan en comparación con otras plataformas, sino que incluso aumenten.

Para que WebRTC funcione correctamente, en primer lugar, es necesario realizar una actualización tecnológica de la pila para trabajar con video web. Qué es lo que hicimos.

Primero, implementamos un servidor de protocolo de señalización WebRTC sobre Websocket, y también implementamos un servidor par WebRTC en la nube basado en el SDK de webrtc.org. Su tarea es distribuir secuencias de video a los pares WebRTC del cliente en formato H.264 + Opus/G.711 sin transcodificación de video.

Elegimos Websocket como protocolo de señalización porque ya tiene un buen soporte en todos los navegadores web populares. Debido a esto, puede reducir significativamente no solo la sobrecarga de desarrollo, sino también no perder tiempo y recursos en protocolos de enlace TCP y TLS repetidos en comparación con AJAX.

El punto es que, de forma predeterminada, WebRTC no proporciona el protocolo de señalización necesario para configurar, mantener y finalizar correctamente las comunicaciones de video en tiempo real entre las aplicaciones de origen y cliente.

Y para implementar de forma independiente la tecnología de señalización, necesitábamos desarrollar nuestro propio servidor de señalización compatible con varios protocolos web (Websocet, WebRTC). Y con la capacidad de administrar de forma segura sesiones y notificaciones en tiempo real, administrar videos y más.

Superamos las limitaciones de P2P al reducir la latencia no a través de P2P, sino a través de UDP y control de flujo para reducir la latencia. Esto también está integrado en WebRTC, ya que el caso de uso principal son las conversaciones p2p a través del navegador.

En el cliente móvil, implementamos el reproductor utilizando el SDK de webrtc.org, ya que es el único que implementa correctamente el control de flujo, tiene todos los esquemas de corrección de errores de reenvío (FEC) conocidos e implementa correctamente el mecanismo de reenvío de paquetes para todos los navegadores. . También es importante que Google desarrolle activamente el SDK de webrtc.org.

¿Cuál es el resultado de implementar WebRTC?


Para ver videos en vivo de las cámaras, hemos agregado un nuevo reproductor optimizado basado en WebRTC a su cuenta personal. Proporciona carga de video de alta velocidad y elimina por completo el problema de la acumulación de latencia a medida que aumenta el tiempo de visualización.

Después de implementar la compatibilidad con WebRTC en el servicio en la nube de Ivideon, podemos decir con plena confianza que ahora nuestros clientes pueden ver videos en vivo completos. ¡Ahora el retraso en la transmisión de la secuencia de video no supera un segundo! A modo de comparación, el motor HLS anterior proporcionó la entrega de video con un retraso de 5 a 7 segundos. La diferencia en la velocidad de demostración del video es muy significativa, y el usuario lo notará inmediatamente después de comenzar a trabajar con nuestro servicio de video.

Como esperábamos, la implementación del nuevo reproductor hizo posible aumentar la capacidad de respuesta de PTZ y la comunicación de voz con la cámara.

WebRTC y videovigilancia: cómo superamos la latencia de video de la cámara

Solo hay un punto sutil sobre el que queremos llamar la atención. El nuevo reproductor WebRTC todavía funciona en modo de prueba. Y es por eso que no lo habilitamos para todos nuestros clientes de forma predeterminada. Pero puede activarlo usted mismo habilitando el elemento correspondiente en la configuración de la cámara (para hacer esto, vaya a oficina privada).

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

WebRTC y videovigilancia: cómo superamos la latencia de video de la cámara

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

Esto es precisamente lo que explica el hecho de que aún no hayamos convertido al reproductor WebRTC en el principal 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 lamentablemente aún no es estable.

Todavía no hemos implementado la compatibilidad con WebRTC para navegadores en dispositivos móviles. Ahora bien, si inicias sesión desde un dispositivo móvil y activas WebRTC, este modo no funcionará. Sin embargo, WebRTC está disponible en nuestras aplicaciones móviles para Android и iOS.

Y completando la historia sobre las características de la implementación de WebRTC en nuestro servicio, notamos dos puntos más sutiles.

En primer lugar, la tecnología está enfocada a la transmisión de video en vivo en tiempo real. Por lo tanto, si su ancho de banda no es suficiente para transmitir la secuencia de video, notará caídas de cuadros (con HLS notará que el video se desvanece y aumenta la latencia, mientras que no se perderán cuadros), pero el video aún se transmitirá en tiempo real. tiempo.

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

Otros cambios en el servicio

Por el momento, Flash ya no participa en el mecanismo de selección automática del motor. Todavía puede usar dicho reproductor, pero para esto debe seleccionarlo manualmente en la configuración de la cuenta o la cámara. Esto no es un homenaje a la moda, solo según las estadísticas de nuestro servicio, prácticamente no hay usuarios trabajando con Flash. Y tratando de determinar si el navegador del usuario lo admite, perdemos alrededor de 2 segundos de un tiempo precioso.

Aquí hay un breve resumen de los cambios que le esperan en nuestro sistema de videovigilancia basado en la nube y cuenta personal. ¡Quédate con nosotros y sigue las noticias!

Fuente: habr.com

Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster