Hostwinds Tutoriales

Resultados de búsqueda para:


Tabla de contenido


¿Qué es RTMP?
Instalación
Instalar dependencias
Descargar software
Compilar software
Configuración
Múltiples aplicaciones
Permisos
Re-codificación
Empujar a otros servicios
HLS
Reproducción HLS
SSL
Otras configuraciones
Transmisión

Transmisión en vivo desde un VPS con Nginx + RTMP

Etiquetas: VPS 

¿Qué es RTMP?
Instalación
Instalar dependencias
Descargar software
Compilar software
Configuración
Múltiples aplicaciones
Permisos
Re-codificación
Empujar a otros servicios
HLS
Reproducción HLS
SSL
Otras configuraciones
Transmisión

Ya sea que desee que un servidor actúe como un relé que pueda transmitir a múltiples servicios a la vez, vuelva a codificar su transmisión de video en diferentes formatos, resoluciones o bittles, o para transmitir desde videos pregrabados, un buen método para hacerlo es con un servidor que ejecuta NGINX compilado con el Módulo RTMP.

La transmisión en vivo usa un montón de ancho de banda. El ancho de banda exacto utiliza en el número de flujos, así como su tasa de bits.

Reducir la tasa de bits de la codificación de video puede reducir su uso de ancho de banda al costo de la calidad del video.

¿Qué es RTMP?

RTMP significa Protocolo de mensajería en tiempo real y es una forma común y estandarizada que muchos servicios (como YouTube, Twitch, etc.) usan, o al menos ofrecen, para transmitir videos en línea.

Instalación

Esta guía utiliza CentOS 7 como sistema operativo del servidor.

NGINX + RTMP se puede configurar en otras distribuciones de Linux y sigue las mismas instrucciones, utilizando el Administrador de paquetes de otras distribuciones y las rutas de archivo predeterminadas.

Instalar dependencias

Actualiza tu sistema

yum update -y

Instalar herramientas de desarrollo CentOS

yum groupinstall -y 'Development Tools

Instalar el repositorio de EPEL

yum install -y epel-release

Instalar dependencias

yum install -y wget git unzip perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel PCRE-devel GeoIP GeoIP-devel

Agregue la clave GPG de ffmpeg e instale ffmpeg

rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum install -y ffmpeg ffmpeg-devel

Descargar software

Cree o vaya a un directorio de trabajo

cd /usr/local/src/

Obtenga la última versión de Nginx de aquí

wget https://nginx.org/download/nginx-1.17.0.tar.gz
tar -xzvf nginx-1.17.0.tar.gz

Clone el módulo Nginx RTMP de aquí

git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git

Eliminar archivos tar innecesarios

rm -f *.tar.gz

Compilar software

Muévase a su carpeta Nginx descargada

cd nginx-1.17.0/

Ejecute el script de configuración para agregar SSL y el módulo RTMP
Actualice la ruta del archivo de --add-módulo según sea necesario para señalar dónde clonó el módulo Nginx-RTMP

./configure --with-http_ssl_module --add-module=../nginx-rtmp-module

Compilar Nginx

make

Instalar Nginx

make install

Iniciar y habilitar Nginx

systemctl start nginx
systemctl enable nginx

Configuración

Para configurar el servicio RTMP, debe agregar una sección RTMP a su archivo de configuración de Nginx, que debe ser /etc/nginx/nginx.conf de forma predeterminada.

Agregue una sección RTMP al archivo conf de la siguiente manera:

rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4096;
    # Sample RTMP Application
    application live {
        live on;    # Enable listening for live streams to this application
        record off; # Do not record the stream
        meta copy;  # Copy the incoming metadata for the outgoing metadata
    }
}
}

En esa configuración, le dijimos al servidor que escuche las solicitudes de Puerto 1935 (el puerto predeterminado para RTMP) y especificamos una aplicación llamada "Live" para aceptar nuestros flujos.

Esta configuración es suficiente para que el servidor acepte una transmisión, pero hay más configuraciones que puede establecer para una funcionalidad adicional.

Luego, cuando se transmita, establecerá su destino como RTMP: // Server_Address / Application, donde Server_Address es la dirección IP o Dominio de su servidor, y la aplicación es el nombre de la aplicación que configuró en la configuración de NGGINX ("Live" en este ejemplo.).

Ejemplo: rtmp: //127.0.0.1/live

Múltiples aplicaciones

Dentro del bloque del servidor {}, puede configurar tantas aplicaciones como desee. La única restricción en su lugar es que cada aplicación debe tener un nombre único.

Permisos

Puede especificar permisos para lo que IPS puede transmitir al servidor y qué IPS puede reproducir el flujo de este servidor.

Para agregar una regla de permisos, agregue una línea dentro del servidor {} o una aplicación {} bloque en el siguiente formato:

El uso de "Permitir" o "Deny" especifica si la regla permite o niega la conexión de la fuente especificada.

El uso de "Publish" especifica que la ubicación de la fuente puede transmitir a este servidor.El uso de "PLAY" especifica que la ubicación de la fuente puede reproducir un flujo de este servidor.

Usando "todos", ya que la ubicación actúa como una captura de captura para cualquier dirección que se conecta a este servidor.De lo contrario, puede establecer una dirección IP específica.

Poner la regla del permiso en el bloque del servidor {} hace que el gobierno gobernante sea global en todas las aplicaciones. Poner la regla de permiso en una aplicación {} Block aplica la regla a solo esa aplicación.

Ejemplos:

Permita que 127.0.0.1 se transmita a este servidor, pero niegue cualquier otra fuente:

allow publish 127.0.0.1;
deny publish all;

Permitir la reproducción en todas las fuentes excepto 127.0.0.1:

allow play all;
deny play 127.0.0.1;

Re-codificación

Puede usar una declaración EXEC desde dentro de una aplicación {} bloque para ejecutar un comando. Usando este método, puede pasar la transmisión RTMP recibida a un procesador de video, como FFMPEG, para la codificación.

Ejemplo: Codifique la transmisión recibida en formato mp4 y guárdelo como un archivo

exec ffmpeg -i rtmp://localhost/$app/$name -c copy -f mp4 /path/to/file/$name.mp4;

Empujar a otros servicios

Puede presionar la corriente desde una aplicación a otro receptor simplemente usando la instrucción PUSH.

Por ejemplo, puede agregar la siguiente declaración a cualquier aplicación {} para empujar el flujo recibido a Twitch, usando uno de sus ingesta direcciones (En este caso, la dirección de Seattle). Simplemente reemplace {Stream_Key} con su tecla Stream de Twitch.

push rtmp://live-sea.twitch.tv/app/{stream_key};

Puede hacer lo mismo para cualquier otra plataforma que ofrezca las direcciones de Ingestte de RTMP, puede transmitir y incluso puede enumerar múltiples declaraciones de empuje para permitir que la transmisión de múltiples plataformas a la vez seaencialmente.

HLS

HLS, o Transmisión en directo HTTP, es un formato bastante popular para transmitir el video a través de los protocolos HTTP y HTTPS, lo que facilita significativamente la transmisión en una página web.

Para habilitar HLS, simplemente agregue las siguientes declaraciones a cualquiera de los bloques {} de su aplicación.

hls on;
hls_path /mnt/hls/$app;
hls_fragment 2s;
hls_playlist_length 4s;

Luego, asegúrese de que el directorio HLS_PATH exista ejecutando el comando:

mkdir -p /mnt/has/live

Puede cambiar / MNT / HLS / $ APP a cualquier ruta de carpeta que desee.La aplicación $ se reemplazará con el nombre de la aplicación (en este caso, "Live").
Esta será la ubicación en la que se guardarán los archivos HLS .m3u8.

También puede ajustar los valores hls_fraged y hls_playlist_length para satisfacer sus necesidades.
2s y 4s son los valores que encontramos para funcionar mejor cuando se transmite con un intervalo de fotograma clave de 2 segundos.

Luego, también debe agregar un bloque http {} a su configuración de Nginx. Este bloque debe ser un bloque de nivel superior, en el mismo nivel que el bloque RTMP {} existente. Este nuevo bloque debe ser el siguiente:

HTTP {
# Disable server tokens
server_tokens off;
# Include MIME types
include mime.types;

# Set timeout limit
keepalive\_timeout 65;

server {
    listen 80;      # HTTP IPv4
    listen \[::\]:80; # HTTP IPv6
    server\_name example.com www.example.com # Your domain (RECOMMENDED BUT OPTIONAL)

    location / {
        # Disable cache
        add\_header Cache-Control no-cache;

        # Enable CORS
        add\_header 'Access-Control-Allow-Origin' '\*' always;
        add\_header 'Access-Control-Expose-Headers' 'Content-Length';

        # Allow CORS preflight requests
        if ($request\_method = 'OPTIONS') {
            add\_header 'Access-Control-Allow-Origin' '\*';
            add\_header 'Access-Control-Max-Age' 1728000;
            add\_header 'Content-Type' 'text/plain charset=UTF-8';
            add\_header 'Content-Length' 0;
            return 204;
        }

        # Specify file type to be served (.m3u8)
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t;
        }

        # File location
        # Set to the same hls\_path specified in the rtmp application
        root /mnt/hls;
    }
}
}

Puede cambiar los puertos enumerados en la escucha de las declaraciones a cualquier puerto de la que desee servir el video. Si cambia el puerto lejos de los puertos estándar HTTP / S (80 y 443), deberá especificar el puerto después de la dirección del servidor en el siguiente formato: http: // {server_address}: {Port}.

Ejemplo: http://example.com:8080/

Después, ahorrando esos cambios en su archivo de configuración de Nginx, reinicie NGINX ejecutando el comando:

systemctl restart nginx

Reproducción HLS

Con HLS habilitado, ahora puede incrustar la transmisión en sus páginas web utilizando cualquier reproductor de video que admita la reproducción de HLS, como Video.JS o PlayerJS.

Le proporcionará a su jugador la dirección de origen en el siguiente formato:

HTTP://{server_address}/{app_name}/{secret_key}.m3u8

{server_address} será su IP o dominio de su servidor, {App_Name} será el nombre de la aplicación {} Bloque en la que está transmitiendo, y {Secret_Key} será la clave secreta que establece en su software de transmisión (como OBS ).

Ejemplo:

http://example.com/live/secret_key.m3u8

SSL

También puede servir a HLS a través de HTTPS. Para hacerlo, debe proporcionar un certificado SSL y una clave privada dentro del bloque del servidor {} con las siguientes afirmaciones:

ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/privkey.pem;

El certificado debe ser para el dominio que ha especificado en la declaración Server_name.

Luego, también deberá editar / agregar la escucha a las declaraciones para escuchar el puerto 443 (el puerto HTTPS) y opcionalmente la fuerza de uso de SSL. Las afirmaciones de escucha para eso deben ser las siguientes:

listen 80 SSL; # HTTP IPv4; force SSL
listen [::]:80 SSL; # HTTP IPv6; force SSL
listen 443 SSL; # HTTPS IPv4; force SSL
listen [::]:443 SSL; # HTTPS IPv6; force SSL

Si no tiene un certificado SSL para su dominio, puede usar Vamos a cifrar para recibir un certificado gratuito.

Otras configuraciones

Hay muchas otras declaraciones de configuración que puede agregar para expandir la funcionalidad del módulo RTMP de la configuración de Nginx.

Puede encontrar la documentación completa de lo que puede agregar y configurar aquí.

Transmisión

Después de que haya configurado su servidor, puede transmitir desde cualquier software de transmisión de video que admite transmisión a una dirección RTMP.Usted puede considerar usar OBS Como muy poderoso, tiene soporte de complemento, es popular entre una comunidad grande, y está abierta.

Para transmitir a su servidor, todo lo que tiene que hacer es configurar el destino de la secuencia como la dirección de su servidor, con el nombre de la aplicación y establecer una clave privada.El formato para la dirección del servidor debe ser de la siguiente manera:

RTMP://{server_address}/{app_name}

{server_address} es su IP o un dominio que ha configurado para que apunte a este servidor.{app_name} es el nombre de la aplicación {} bloque que configuró en la configuración de Nginx.Después de nuestra configuración de ejemplo desde arriba, ese nombre de la aplicación estaría "en vivo".

Proporcionar una clave secreta única garantizará que la corriente sea única, incluso si otras fuentes se estén transmitiendo a la misma aplicación.

Siguiendo el ejemplo anterior, la secuencia estará en vivo en RTMP: //example.com/live/secret_key, que puede recoger usando cualquier reproducción de video que pueda abrir una secuencia RTMP, como VLC.

Escrito por Hostwinds Team  /  junio 18, 2019