Streaming Monitoring


3 min de lectura
Streaming Monitoring

En mi trabajo se presento la necesidad de tener una herramienta que indique si la señal de streaming no tiene audio (silencio absoluto o similar), esto se debe a problemas respecto a las coberturas de algunos eventos.

Desde ese momento comencé a revisar como es usual en Google si existía alguna herramienta especifica para este tipo de necesidad. Y me llevo la sorpresa de que no existe herramienta o servicio que cubra especificamente esa necesidad. Pero si encontré el siguiente artículo en Medium de Steve Barbera (Obviamente debemos leer tal artículo) y me quedo mas claro el camino que tenia que seguir para cubrir esa necesidad.

Enjoy the Silence
Fuente: https://www.teepublic.com/tote/1825360-enjoy-the-silence

En primer lugar, cuando se habla de temas de sonido en general encontramos el siguiente termino decibel (dB). Entre sus tantos usos, uno de ellos es el usar tal termino como unidad para medir la intensidad del sonido.

Si se revisa la medida de dB en algun streaming de radio por internet con la herramienta que se pueda encontraremos valores que van desde 0(en ocasiones mayores a 0) a -20 dB. Se podría pensar que el valor negativo significa que algo esta mal. Pero ese no es el caso.


Entonces, ¿en que punto se puede considerar que no se tiene audio, todo es silencio?

Esa es una buena pregunta, si los valores que se reflejan en dB son igual o menores a -50 dB (puede ser -40 dB o mayor) ya se puede considerar que no se tiene audio. Por ultimo, los invito a revisar mas información respecto a los decibeles, es muy entretenido como opinion personal.

Si ya sabemos que tenemos que identificar, el segundo punto a tratar es ¿cómo puedo automatizar tal actividad?. Para este punto se me ocurrio el siguiente flujo:

  • Proceso A: Se encarga de evaluar periódicamente la señal de streaming que se desea en base a las condiciones que se estableció. Buscar que algún valor mayor menor a -50 dB.
  • Proceso B: Se encarga de enviar una alerta en el caso se en el caso la condición anterior se cumpla.
  • Proceso C: Almacenar en una base de datos el resultado de cada evaluación.

Tenemos el flujo necesario. ¿Cómo llevamos eso a la practica?. En la solución que se plantea se usara lo siguiente para una etapa inicial.

  • FFmpeg, software para trabajar con elementos de audio y video en términos generales.
  • DynamoDB, base de datos no relacional de AWS (en la primera versión se usa esto, pero en este momento estoy pensando en usar algo como RethinkDB o MongoDB).
  • AWS SES, servicio de correo de AWS.
  • Redis, base de datos para guardar el estado de actual de la señal de streaming (Up — Down).
  • Python, considere usar Node.js siguiendo el ejemplo de Steve pero estoy un poco mas familiarizado con Python.

Todo eso se plasma en monitor-streaming-proc. Es el proceso que se encarga de monitorear la señal de streaming que se desea y enviar una alerta cuando se presenten los problemas.

Todo el core de monitor-streaming-proc se basa en lo siguiente:

https://gist.github.com/martip07/f5bcbaad950a531a9ab7c2adb5094d97

  • ffmpeg_checkaudio: Se encarga de realizar hacer la evaluación de la señal de streaming. Esa evaluación se almacena en monitor_exec.
  • check_regexVolume: Se encarga de encontrar “mean_volume”. En esta sección de todo lo que contiene monitor_exec se extrae el punto de coincidencia y se devuelve el valor.

Unas notas finales:

  • Todo funcionada a nivel de AWS.
  • Esta es una fase inicial que se desarrollo en un fin de semana. Ya encontré que temas se pueden mejorar y mucho.
  • Deben de tener las siguiente ruta de configuración config/config.json y config/streamConfig.json. En el primer archivo esta la configuración de AWS, REDIS, SES. Y en el segundo la configuración de las señales de streaming a utilizar.
  • Todo se maneja con variables de entorno, de esta forma se separa los entorno de desarrollo, pruebas y producción. Ya qued a criterio de cada uno cuantos ambientes va a tener.
  • Se usa Python en la versión 3.6.
  • Deben de tener muy claro de que en algunos momentos se van a presentar valores de silencio por pausas prolongadas por parte del locutor o similar. Asi que no nos debemos de preocupar mucho si detecta una vez y manda la alerta. Yo considero eso como estar atentos pero no como para estar revisando donde esta el error con la señal de streaming.
  • Se tiene un servicio rest para consultar la data generada en el caso se quiera crear una interfaz web.

Espero que les sea útil.

Artículos Relacionados

Minecraft Perú …… Sysadmin?
2 min de lectura
Video Servidor web NGINX Centos 6
1 min de lectura

SUBIR