Hostwinds Tutorial

Cerca risultati per:


Sommario


Cos'è RTMP?
Installazione
Installa dipendenze
Scarica il software
Compilare il software
Configurazione
Applicazioni multiple
Autorizzazioni
Ricodifica
Spingere verso altri servizi
HLS
Riproduzione HLS
SSL
Altre configurazioni
Streaming

Streaming live da un VPS con Nginx + RTMP

Tag: VPS 

Cos'è RTMP?
Installazione
Installa dipendenze
Scarica il software
Compilare il software
Configurazione
Applicazioni multiple
Autorizzazioni
Ricodifica
Spingere verso altri servizi
HLS
Riproduzione HLS
SSL
Altre configurazioni
Streaming

Se si desidera che un server funzioni come un relè per poter essere in grado di trasmettere più servizi contemporaneamente, ri-codificare il flusso video in diversi formati, risoluzioni o bitrate o in streaming da video pre-registrati, un buon metodo Per fare ciò è con un server che esegue Nginx compilato con il Modulo RTMP.

Live Streaming utilizza molta larghezza di banda. La larghezza di banda esatta utilizza sul numero di flussi, così come il loro bitrate.

Ridurre il bitrate della codifica video può ridurre il tuo utilizzo della larghezza di banda al costo della qualità del video.

Cos'è RTMP?

RTMP sta per Protocollo di messaggistica in tempo reale ed è un modo comune e standardizzato con cui molti servizi (come YouTube, Twitch, ecc.) utilizzano, o almeno offrono, per trasmettere video online.

Installazione

Questa guida utilizza CentOS 7 come sistema operativo del server.

Nginx + RTMP può essere configurato su altre distribuzioni Linux e segue le stesse istruzioni, utilizzando il gestore dei pacchetti di distribuzione e i percorsi dei file predefiniti.

Installa dipendenze

Aggiorna il tuo sistema

yum update -y

Installa gli strumenti di sviluppo CentOS

yum groupinstall -y 'Development Tools

Installa il repository EPEL

yum install -y epel-release

Installa le dipendenze

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

Aggiungi la chiave GPG ffmpeg e installa 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

Scarica il software

Crea o vai a una directory di lavoro

cd /usr/local/src/

Ottieni l'ultima versione di Nginx da Qui

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

Clona il modulo Nginx RTMP da Qui

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

Rimuovi i file tar non necessari

rm -f *.tar.gz

Compilare il software

Spostati nella cartella Nginx scaricata

cd nginx-1.17.0/

Eseguire lo script di configurazione per aggiungere SSL e il modulo RTMP
Aggiorna il percorso del file del modulo -add-modulo secondo necessità per puntare in cui si clonita il modulo NginX-RTMP

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

Compila Nginx

make

Installa Nginx

make install

Avvia e abilita Nginx

systemctl start nginx
systemctl enable nginx

Configurazione

Per configurare il servizio RTMP, è necessario aggiungere una sezione RTMP al file di configurazione NGINX, che dovrebbe essere /etc/nginx/nginx.conf per impostazione predefinita.

Aggiungi una sezione RTMP al file conf come segue:

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
    }
}
}

In tale configurazione, abbiamo detto al server di ascoltare qualsiasi richiesta sulla porta 1935 (la porta predefinita per RTMP) e ha specificato un'applicazione chiamata "Live" per accettare i nostri flussi.

Questa configurazione è sufficiente affinché il server accetti un flusso, ma ci sono ulteriori configurazioni che è possibile impostare per funzionalità aggiuntive.

Poi quando si esegue il flusso, si imposta la destinazione come RTMP: // Server_address / Application, in cui Server_address è l'indirizzo IP o il dominio del server e l'applicazione è il nome dell'applicazione configurata nella configurazione Nginx ("Live" in questo esempio).

Esempio: rtmp: //127.0.0.1/live

Applicazioni multiple

All'interno del blocco server {}, è possibile configurare quante più applicazioni desiderate. L'unica restrizione in atto è che ogni applicazione deve avere un nome univoco.

Autorizzazioni

È possibile specificare le autorizzazioni per ciò che IPS può fluire sul server e quale IPS può riprodurre il flusso da questo server.

Per aggiungere una regola delle autorizzazioni, aggiungere una linea all'interno del server {} o di un'applicazione {} blocco nel seguente formato:

L'utilizzo di "Consenti" o "Deny" specifica se la regola consente o nega la connessione dalla sorgente specificata.

L'utilizzo di "Pubblica" specifica che la posizione di origine può fluire su questo server.Usando "PLAY" specifica che la posizione di origine può riprodurre un flusso da questo server.

Usando "Tutto" come la posizione funge da catch-tutto per qualsiasi indirizzo che si connetta a questo server.In caso contrario, è possibile impostare un indirizzo IP specifico.

Mettere la regola di autorizzazione nel blocco server {} rende la sentenza globale su tutte le applicazioni. Mettere la regola di autorizzazione in un blocco dell'applicazione {} applica la regola a tale applicazione.

Esempi:

Consenti a 127.0.0.1 di trasmettere in streaming a questo server, ma nega qualsiasi altra fonte:

allow publish 127.0.0.1;
deny publish all;

Consenti la riproduzione su tutte le sorgenti tranne 127.0.0.1:

allow play all;
deny play 127.0.0.1;

Ricodifica

È possibile utilizzare un'istruzione Exec da un blocco dell'applicazione {} per eseguire un comando. Usando questo metodo, è possibile passare il flusso RTMP ricevuto a un processore video, come FFMPEG, per la codifica.

Esempio: Codifica il flusso ricevuto in un formato mp4 e salvalo come file

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

Spingere verso altri servizi

È possibile premere il flusso da un'applicazione a un altro ricevitore semplicemente utilizzando l'istruzione Push.

Ad esempio, è possibile aggiungere la seguente dichiarazione a qualsiasi applicazione {} blocco per spingere il flusso ricevuto da contrazione, utilizzando uno dei loro ingerire indirizzi (In questo caso, l'indirizzo di Seattle). Basta sostituire {stream_key} con il tasto Twitch Stream.

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

È possibile eseguire lo stesso per qualsiasi altra piattaforma che offre indirizzi di ingente RTMP è possibile eseguire il flusso e può anche elencare più dichiarazioni push per consentire lo streaming a più piattaforme contemporaneamente.

HLS

HLS, o Streaming live HTTP, è un formato abbastanza popolare per trasmettere video sui protocolli HTTP e HTTPS, rendendolo significativamente più facile incorporare il flusso in una pagina web.

Per abilitare HLS, aggiungi semplicemente le seguenti istruzioni a uno qualsiasi dei blocchi {} dell'applicazione.

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

Quindi assicurati che la directory hls_path esista eseguendo il comando:

mkdir -p /mnt/has/live

È possibile modificare / MNT / HLS / $ app a qualsiasi percorso di cartelle che desideri.$ app verrà sostituita con il nome dell'applicazione (in questo caso, "Live").
Questa sarà la posizione in cui verranno salvati i file HLS .m3u8.

È inoltre possibile regolare i valori HLS_FRAGGEMENT e HLS_PLAYLIST_LENZAL per soddisfare le tue esigenze.
2s e 4s sono i valori che abbiamo trovato per lavorare il meglio quando lo streaming con un intervallo di fotogrammi chiave di 2 secondi.

Quindi è inoltre necessario aggiungere un blocco HTTP {} alla configurazione Nginx. Questo blocco dovrebbe essere un blocco di alto livello, allo stesso livello del blocco RTMP {} esistente. Questo nuovo blocco dovrebbe essere il seguente:

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;
    }
}
}

È possibile modificare le porte elencate nell'ascolto delle dichiarazioni su qualsiasi porta da cui si desidera servire il video. Se si modifica la porta lontano dalle porte standard http / s (80 & 443), è necessario specificare la porta dopo l'indirizzo del server nel seguente formato: http: // {server_address}: {porto}.

Esempio: http://example.com:8080/

In seguito, salvando tali modifiche al file di configurazione Nginx, riavviare Nginx eseguendo il comando:

systemctl restart nginx

Riproduzione HLS

Con HLS abilitato, ora puoi incorporare lo stream nelle tue pagine web utilizzando qualsiasi lettore video che supporti la riproduzione HLS, come Video.JS o PlayerJS.

Fornite il tuo lettore con l'indirizzo di origine nel seguente formato:

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

{Server_address} sarà il tuo IP o dominio del tuo server, {app_name} sarà il nome del blocco dell'applicazione {} che si sta streaming su e {secret_key} sarà la chiave segreta che hai impostato nel software di streaming (come OBS ).

Esempio:

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

SSL

Puoi servire anche HLS su HTTPS. Per fare ciò, è necessario fornire un certificato SSL e una chiave privata all'interno del blocco server {} con le seguenti affermazioni:

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

Il certificato deve essere per il dominio che è stato specificato nell'istruzione Server_Name.

Dovrai anche modificare / aggiungere le dichiarazioni di ascolto per ascoltare la porta 443 (la porta HTTPS) e facoltativamente forza l'utilizzo di SSL. Le dichiarazioni di ascolto per questo dovrebbero essere le seguenti:

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

Se non hai un certificato SSL per il tuo dominio, puoi usare Crittiamo di ricevere un certificato gratuito.

Altre configurazioni

Ci sono molte altre istruzioni di configurazione che puoi aggiungere per espandere la funzionalità del modulo RTMP della configurazione Nginx.

È possibile trovare la documentazione completa per ciò che è possibile aggiungere e configurare Qui.

Streaming

Dopo aver configurato il tuo server, è possibile eseguire streaming da qualsiasi software di streaming video che supporta lo streaming su un indirizzo RTMP.Potresti prendere in considerazione l'utilizzo OBS Per molto potente, ha il supporto del plugin, è popolare con una grande comunità ed è aperto.

Per scorrere sul tuo server, tutto ciò che devi fare è impostare la destinazione del flusso come indirizzo del server, con il nome dell'applicazione e impostare una chiave privata.Il formato per l'indirizzo del server dovrebbe essere il seguente:

RTMP://{server_address}/{app_name}

{server_address} è il tuo IP o un dominio che hai impostato su questo server.{app_name} è il nome del blocco dell'applicazione {} che si imposta nella configurazione Nginx.Seguendo la nostra configurazione di esempio dall'alto, quel nome dell'applicazione sarebbe "live".

Fornire una chiave segreta unica garantirà che il flusso sia unico, anche se altre fonti sono streaming sulla stessa applicazione.

Seguendo l'esempio sopra, il flusso sarà in diretta in RTMP: //example.com/live/secret_key, che è possibile ritirare utilizzando qualsiasi video che può aprire un flusso RTMP, ad esempio VLC.

Scritto da Hostwinds Team  /  giugno 18, 2019