Cómo crear tu propio servidor de streaming de video con Linux

Introducción

La transmisión (streaming) de video en vivo es increíblemente popular, y sigue creciendo.

Plataformas como Twitch de Amazon y YouTube cuentan con millones de usuarios que transmiten y consumen innumerables horas multimedia en vivo y grabados.

Estos servicios a menudo son de uso gratuito, pero requieren que tengas una cuenta y, en general, mantengas tu contenido detrás de anuncios.

Algunas personas no necesitan que sus videos estén disponibles para las masas o simplemente quieren más control sobre su contenido. Afortunadamente, con el poder del software de código abierto, cualquiera puede configurar un servidor de streaming en vivo.

Iniciando

En este tutorial, explicaremos cómo configurar un servidor básico de transmisión en vivo con un sistema operativo Linux o BSD.

Esto lleva a la inevitable pregunta de los requisitos del sistema. Estos pueden variar, ya que hay muchas variables involucradas con la transmisión en vivo, como:

  • Calidad de transmisión: ¿Deseas transmitir en alta definición o la definición estándar se ajustará a tus necesidades?
  • Audiencia: ¿Cuántos espectadores esperas para tus videos?
  • Almacenamiento: ¿Planeas mantener copias guardadas de tu transmisión de video?
  • Acceso: ¿Tu transmisión será privada o abierta al mundo?

No hay reglas establecidas cuando se trata de requisitos del sistema, por lo que te recomiendo que experimentes y encuentres lo que funciona mejor para tus necesidades. Instalé mi servidor en una máquina virtual con 4 GB de RAM, un disco duro de 20 GB y un único núcleo de procesador Intel i7.

Este proyecto utiliza el Protocolo de mensajería en tiempo real (RTMP) para manejar la transmisión de audio y video. Hay otros protocolos disponibles, pero elegí RTMP porque tiene un amplio soporte. A medida que los estándares abiertos como WebRTC se vuelven más compatibles, recomendaría esa ruta.

También es muy importante saber que “en vivo” no siempre significa instantáneo. Una transmisión de video debe codificarse, transferirse, almacenarse en búfer y mostrarse, lo que a menudo agrega demoras. El retraso puede acortarse o alargarse según el tipo de transmisión que estés creando y sus atributos.

Configurar un servidor Linux

Puedes usar muchas distribuciones diferentes de Linux, pero prefiero Ubuntu, así que descargué la  edición Ubuntu Server para mi sistema operativo. Si prefieres que tu servidor tenga una interfaz gráfica de usuario (GUI), siéntete libre de usar Ubuntu Desktop o uno de sus muchas opciones.

Luego, inicié el instalador de Ubuntu en mi computadora o máquina virtual y elegí la configuración que mejor se adaptaba a mi entorno. A continuación, se detallan los pasos que tomé.

Nota: Debido a que este es un servidor, probablemente desees establecer algunas configuraciones de red estáticas.

Después de que el instalador finalice y tu sistema se reinicie, serás recibido con un nuevo y encantador sistema Ubuntu. Al igual que con cualquier sistema operativo recién instalado, debes instalar las actualizaciones disponibles:

Este servidor de transmisión utilizará el servidor web Nginx muy potente y versátil, por lo que deberás instalarlo:

También necesitarás obtener el módulo RTMP para que Nginx pueda manejar tu transmisión de videos:

Debes ajustar la configuración de tu servidor web para que pueda aceptar y enviar tu transmisión multimedia.

Desplázate hasta la parte inferior del archivo de configuración y agrega el siguiente código:

Guarda la configuración. Como soy un hereje, uso Nano para editar archivos de configuración. En Nano, puedes guardar tu configuración presionando Ctrl+XY y luego Enter.

Esta es una configuración muy mínima que creará un servidor de transmisión en funcionamiento. Agregarás a esta configuración más tarde, pero este es un excelente punto de partida.

Sin embargo, antes de que puedas comenzar tu primera transmisión, deberás reiniciar Nginx con su nueva configuración:

Configurar un servidor BSD

Si eres de la persuasión “Beastie”, poner en marcha un servidor de transmisión también es endiabladamente fácil.

Dirígete al sitio web de FreeBSD y descarga la última versión. Inicia el instalador de FreeBSD en tu computadora o máquina virtual y sigue los pasos iniciales y elige la configuración que mejor se adapte a tu entorno. Como se trata de un servidor, es probable que desee establecer algunas configuraciones de red estáticas.

Después de que el instalador finalice y tu sistema se reinicie, deberías tener un nuevo y brillante sistema FreeBSD. Al igual que cualquier otro sistema recién instalado, es probable que desees actualizar todo. A partir de este paso, asegúrate de haber iniciado sesión como root:

Instala Nano para editar archivos de configuración:

Este servidor de transmisión utilizará el servidor web Nginx muy potente y versátil. Puedes compilar Nginx utilizando el excelente sistema de puertos que presume FreeBSD.

Primero, actualiza tu árbol de puertos:

Ve al directorio de puertos Nginx:

Y comienza a compilar Nginx ejecutando:

Módulos 

Verás una pantalla preguntando qué módulos incluir en tu compilación Nginx. Para este proyecto, deberás agregar el módulo RTMP. Desplázate hacia abajo hasta que se seleccione el módulo RTMP y pulsa Espacio. Luego, presiona Enter para continuar con el resto de la compilación y la instalación.

Una vez que Nginx haya terminado de instalar, es hora de configurarlo para fines de transmisión.

Primero, agrega una entrada en /etc/rc.conf para asegurarte de que el servidor Nginx se inicia cuando tu sistema arranca:

Agrega este texto al archivo:

A continuación, crea un directorio webroot desde donde Nginx enviará tu contenido. Yo llamé stream al mío:

Ahora que has creado tu directorio stream, debes ajustar Nginx editando su archivo de configuración:

Debes cargar tus módulos de transmisión en la parte superior del archivo:

En la sección Server, cambia la ubicación de webroot para que coincida con la que creaste anteriormente:

Y finalmente, agrega tu configuración RTMP para que Nginx sepa cómo manejar tus transmisiones multimedia:

Debes guardar la configuración. En Nano, puedes hacer esto presionando Ctrl + XY y luego Enter.

Como puedes ver, esta es una configuración muy mínima que creará un servidor de transmisión en funcionamiento. Más adelante, agregarás a esta configuración, pero esto te proporcionará un excelente punto de partida.

Sin embargo, antes de que puedas comenzar tu primera transmisión, deberás reiniciar Nginx con tu nueva configuración:

Configurar tu software de transmisión

Transmitiendo con OBS

Ahora que tu servidor está listo para aceptar tus transmisiones de video, es hora de configurar tu software de transmisión. Este tutorial utiliza el potente y de código abierto Open Broadcast Studio (OBS).

Dirígete al sitio web de OBS y busca la compilación para tu sistema operativo e instálalo. Una vez que se inicia OBS, deberías ver un asistente de primera ejecución que te ayudará a configurar OBS. Debes hacerlo con la configuración que mejor se adapte a tu hardware.

OBS no está capturando nada porque no le has proporcionado una fuente. Para este tutorial, simplemente capturarás tu escritorio para la transmisión. Simplemente haz clic en el botón + debajo de Source, elige Screen Capture y selecciona el escritorio que deseas capturar.

Haz clic en Aceptar, y deberías ver que OBS refleja tu escritorio.

Ahora es el momento de enviar tu transmisión de video recién configurada a tu servidor. En OBS, haz clic en Archivo > Configuración. Haz clic en la stream, y establece Stream Type de en Custom Streaming Server.

En el cuadro URL, ingresa el prefijo rtmp:// seguido de la dirección IP de tu servidor de transmisión seguido de /live. Por ejemplo, rtmp://DIRECCION-IP/live.

A continuación, probablemente desees ingresar una clave de Stream, un identificador especial requerido para ver tu stream. Ingresa la clave que desees (y puedas recordar) en el cuadro Clave de transmisión.

Haz clic en Aplicar y luego en Aceptar.

Iniciar transmisión

Ahora que OBS está configurado para enviar tu transmisión a tu servidor, puedes comenzar tu primera transmisión. Haz clic en Iniciar transmisión.

Si todo funcionó, deberías ver que el botón cambia a Detener transmisión y aparecerán algunas métricas de ancho de banda en la parte inferior de OBS.

En caso de ver un error, verifica nuevamente la configuración de transmisión en OBS para errores ortográficos. Si todo se ve bien, podría haber otro problema que impida que funcione.

Ver tu transmisión

Un video en vivo no es muy bueno si nadie lo está viendo, ¡así que sé tú primer espectador!

Hay una multitud de reproductores multimedia de código abierto que admiten RTMP, pero el más conocido es probablemente el reproductor multimedia VLC.

Después de instalar e iniciar VLC, abre tu transmisión haciendo clic en Medios > Abrir ubicación de red. Ingresa la ruta a tu transmisión, agrega la clave de transmisión que configuraste en OBS, luego haz clic en Reproducir. Por ejemplo, rtmp://DIRECCION-IP/live-clave-secreta.

¡Ahora deberías estar viendo tu propia transmisión de video en vivo!

¿Qué hacer después?

Esta es una configuración muy simple que te llevará a despegar. Aquí hay otras dos características que probablemente querrás usar.

  • Limitar el acceso: el siguiente paso que puedes tomar es limitar el acceso a tu servidor. Esto porque la configuración predeterminada permite que cualquiera pueda transmitir desde y hacia el servidor. Hay una variedad de formas de configurar esto. Por ejemplo, un firewall del sistema operativo, un archivo .htaccess o incluso usando los controles de acceso integrados en el módulo RTMP.
  • Grabar transmisiones: esta configuración simple de Nginx solo transmitirá y no guardará tus videos, pero es fácil de agregar. En la configuración de Nginx, en la sección RTMP, configura las opciones de grabación y la ubicación donde desea guardar tus videos. Asegúrate de que la ruta que establezcas exista y que Nginx pueda escribir en ella.

El mundo de la transmisión en vivo está en constante evolución. Si estás interesado en usos más avanzados, hay muchos otros recursos excelentes que puedes encontrar en Internet. ¡Buena suerte y feliz transmisión!