Herramientas utilizadas
Sistema Operativo: Ubuntu Server 22.04 LTS (VM en VirtualBox).
Software de streaming: MediaMTX (anteriormente rtsp-simple-server).
Fuente de video: Cliente RTMP (OBS Studio simulando el envío de video desde el dron).
Cliente de salida: Grabador o reproductor RTSP (VLC simulando un NVR).
1. Instalación y configuración de VirtualBox.
El proceso de instalación de una máquina virtual es esencialmente igual a la configuración de un servidor convencional
Lo primero que se necesita para crear un servidor receptor de video es precisamente crear el servidor, desde una computadora convencional lo primero que tenemos que hacer es crear el medio de instalación, siendo esta es la diferencia principal entre un servidor real y una máquina virtual para instalar el sistema operativo después de seleccionar cual sistema operativo usaremos y obtener su imagen ISO en caso de querer crear un servidor físico, se necesitaría hacer un medio de instalación como un disco o una usb, por otro lado si buscamos crear una máquina virtual simplemente nos dirigimos a la aplicación en la que estemos trabajando como VirtualBox, abrimos el archivo iso e iniciamos una instalación convencional de un servidor Linux.
Es importante configurar la información de red, entrando a :
Máquina > Configuración > Red
Y modificando el valor de "conectar a NAT" a "Adaptador puente", dándole la capacidad a nuestra máquina virtual de utilizar la red del dispositivo en el que se almacena volviéndose accesible para el resto de dispositivos en la red.
2. Instalación de MediaMTX
Descarga del binario:
wget https://github.com/bluenviron/mediamtx/releases/download/v1.12.3/mediamtx_v1.12.3_linux_amd64.tar.gz
tar -xvzf mediamtx_v1.12.3_linux_amd64.tar.gz
cd mediamtx
Ejecución inicial:
./mediamtx
El servidor inicia y muestra en la terminal los eventos de conexiones y streams.
3. Configuración básica (mediamtx.yml)
El archivo mediamtx.yml es el archivo principal de configuración de MediaMTX, contiene todos los parámetros que controlan cómo funciona el servidor como puertos, protocolos habilitados, rutas de video, seguridad, grabación, etc.
Por defecto, si ejecutas ./mediamtx sin modificar nada, el servidor ya funciona escuchando RTMP en el puerto 1935, RTSP en el puerto 8554 y permite publicar y reproducir streams sin necesidad de configuración extra ya que por defecto utiliza rutas dinámicas.
Aunque con la configuración de fábrica ya se puede publicar y consumir video, modificar el mediamtx.yml te da control sobre varios aspectos importantes:
Definir rutas fijas para los streams (paths:)
Por defecto, MediaMTX genera rutas dinámicamente.
Si quieres asegurarte de que tu dron siempre publique en una ruta llamada dron1, se hace así:
paths:
dron1:
source: publisher
Cambiar puertos o direcciones IP
Si hay conflicto con otros servicios, puedes modificar en mediamtx.yml los puertos de escucha
Autenticación y seguridad
Puedes exigir usuario y contraseña para publicar o ver streams.
Ejemplo:
paths:
dron1:
publishUser: admin
publishPass: 1234
readUser: viewer
readPass: 5678
Reenvío y salidas múltiples
MediaMTX puede reenviar lo que recibe a otros servidores (por ejemplo, a un NVR o a la nube).
Ejemplo:
paths:
dron1:
source: publisher
runOnPublish: ffmpeg -i rtsp://localhost:8554/dron1 -c copy rtsp://192.168.1.50:554/dron1
Opciones avanzadas
Por último en la configuración de este archivo podemos encontrar parámetros a modificar para grabar streams en disco, Limitar bitrate o resolución, Integrar WebRTC, HLS o SRT.
5. Flujo de transmisión
Si ya configuramos todo correctamente tendremos nuestro servidor activo y listo para trabajar, pero para utilizarlo, después de encenderlo tenemos que dirigirnos a nuestro dispositivo emisor de video y configurar la dirección por la cual nuestro servidor escucha, dándole la ip de este, el puerto por el que puede escuchar RTMP seguido de una clave de transmisión custom que en este ejemplo encontramos como “dron1”.
Entrada (RTMP):
El dron o software de transmisión envía al servidor:
rtmp://<IP_servidor>:1935/dron1
Teniendo nuestro dispositivo apuntando a nuestro servidor ahora solo queda apuntar nuestro grabador o dispositivo receptor a la dirección la cual envía el video ya transformado a RTSP.
Salida (RTSP):
El servidor redistribuye ese mismo stream en:
rtsp://<IP_servidor>:8554/dron1
De esta forma, un grabador o VLC puede suscribirse al stream RTSP mientras la fuente lo empuja por RTMP.
6. Resultados
Podemos observar los resultados de la ejecución de la aplicación en los logs en tiempo real que esta misma nos arroja en la terminal cuando lo ejecutamos dándonos ademas información de en que puertos podemos tanto enviar como obtener la información del video y de los eventos que pasan por el servidor.
En la imagen anterior no solo se ve la inicialización del servidor a su vez se ven las conexiones a este mismo desde dispositivos externos indicando el momento en le que inicia la transmisión desde obs hasta cuando se conecta vlc.
Nota:
Si se desconoce la ip en la cual esta recibiendo el video o en otras palabras la ip del servidor esta puede ser obtenida dentro de la terminal del servidor usando el comando:
hostname -I
Obteniendo la ip del servidor ya que MediaMTX solamente habilita los puertos dentro de esta.