Hostwinds Tutorial
Cerca risultati per:
Sommario
Tag: VPS
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.
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.
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.
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
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
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
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
All'interno del blocco server {}, è possibile configurare quante più applicazioni desiderate. L'unica restrizione in atto è che ogni applicazione deve avere un nome univoco.
È 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;
È 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;
È 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, 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
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
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.
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.
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