Hostwinds Tutorials

Zoekresultaten voor:


Inhoudsopgave


Wat is RTMP?
Installatie
Installeer afhankelijkheden
Download software
Software samenstellen
Configuratie
Meerdere applicaties
Rechten
Hercodering
Pushen naar andere services
HLS
HLS-weergave
SSL
Andere configuraties
Streamen

Live streamen vanaf een VPS met Nginx + RTMP

Trefwoorden: VPS 

Wat is RTMP?
Installatie
Installeer afhankelijkheden
Download software
Software samenstellen
Configuratie
Meerdere applicaties
Rechten
Hercodering
Pushen naar andere services
HLS
HLS-weergave
SSL
Andere configuraties
Streamen

Of u nu een server wilt om op te treden als een relais zodat u tegelijk naar meerdere services kunt streamen, uw videostream opnieuw coderen in verschillende indelingen, resoluties of bitrates of om te streamen van vooraf opgenomen video's, een goede methode Dit is met een server die NGINX wordt uitgevoerd, samengesteld met de RTMP-module.

Live streaming gebruikt veel bandbreedte. De exacte bandbreedte gebruikt op het aantal streams, evenals hun bitrate.

Het verminderen van de bitrate van de videocodering kan uw bandbreedtegebruik verminderen tegen de kosten van videokwaliteit.

Wat is RTMP?

RTMP staat voor Real-time berichtenprotocol en is een gebruikelijke, gestandaardiseerde manier waarop veel diensten (zoals YouTube, Twitch, enz.) gebruiken, of op zijn minst aanbieden, om video online uit te zenden.

Installatie

Deze handleiding gebruikt CentOS 7 als het besturingssysteem van de server.

NGINX + RTMP kan worden geconfigureerd op andere Linux-distributies en volgt dezelfde instructies, met behulp van de andere distributies 'Package Manager en de standaardbestandspaden.

Installeer afhankelijkheden

Update uw systeem

yum update -y

Installeer CentOS-ontwikkeltools

yum groupinstall -y 'Development Tools

Installeer de EPEL-repository

yum install -y epel-release

Installeer afhankelijkheden

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

Voeg ffmpeg GPG-sleutel toe en installeer 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

Download software

Maak of ga naar een werkmap

cd /usr/local/src/

Haal de nieuwste versie van Nginx op van hier

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

Kloon de Nginx RTMP-module van hier

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

Verwijder onnodige tar-bestanden

rm -f *.tar.gz

Software samenstellen

Ga naar je gedownloade Nginx-map

cd nginx-1.17.0/

Voer het configuratiescript uit om SSL en de RTMP-module toe te voegen
Werk het pad van --ADD-module bij indien nodig om op te wijzen naar waar u de NGINX-RTMP-module hebt gekloneerd

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

Compileer Nginx

make

Installeer Nginx

make install

Start en schakel Nginx in

systemctl start nginx
systemctl enable nginx

Configuratie

Om de RTMP-service te configureren, moet u een RTMP-sectie toevoegen aan uw NGGINX-configuratiebestand, dat standaard moet zijn /etc/nginx/nginx.conf.

Voeg als volgt een RTMP-sectie toe aan het conf-bestand:

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 die configuratie hebben we de server verteld om te luisteren naar eventuele aanvragen op PAP 1935 (de standaardpoort voor RTMP) en een toepassing heeft opgegeven die "Live" wordt genoemd om onze streams te accepteren.

Deze configuratie is voldoende om de server een stream te laten accepteren, maar er zijn nog meer configuraties die u kunt instellen voor extra functionaliteit.

Wanneer u dan stream, streelt u uw bestemming als RTMP: // Server_Address / -toepassing, waarbij Server_Address het IP- of -domein van uw server is, en de toepassing is de naam van de toepassing die u hebt geconfigureerd in de NGINX-configuratie ("Live" in dit voorbeeld).

Voorbeeld: rtmp: //127.0.0.1/live

Meerdere applicaties

Binnen het blok van de server {} kunt u zoveel mogelijk toepassingen configureren als u wilt. De enige beperking is dat elke aanvraag een unieke naam moet hebben.

Rechten

U kunt machtigingen opgeven voor wat IPS kan streamen naar de server en wat IPS de stroom van deze server kan afspelen.

Om een machtigingenregel toe te voegen, voegt u een regel toe binnen de server {} of een applicatie {} -blok in het volgende formaat:

Met "Toestaan" of "Deny" geeft aan of de regel de verbinding van de opgegeven bron mogelijk maakt of ontkent.

Het gebruik van "Publish" geeft aan dat de bronlocatie naar deze server kan streamen.Het gebruik van "PLAY" geeft aan dat de bronlocatie een stream van deze server kan afspelen.

Met "All" zoals de locatie werkt als een vangst-alles voor elk adres dat verbinding maakt met deze server.Anders kunt u een specifiek IP-adres instellen.

Het plaatsen van de toestemmingsregel in het Block van de server {} maakt de uitspraak wereldwijzer in alle toepassingen. Het plaatsen van de toestemmingregel in een toepassing {} blok is de regel toepast op alleen die toepassing.

Voorbeelden:

Sta 127.0.0.1 toe om naar deze server te streamen, maar weiger andere bronnen:

allow publish 127.0.0.1;
deny publish all;

Sta weergave toe aan alle bronnen behalve 127.0.0.1:

allow play all;
deny play 127.0.0.1;

Hercodering

U kunt een exec-instructie gebruiken vanuit een toepassing {} Blokkeer om een opdracht uit te voeren. Met behulp van deze methode kunt u de ontvangen RTMP-stream doorgeven aan een videoprocessor, zoals FFMPEG, voor codering.

Voorbeeld: Codeer de ontvangen stream naar een mp4-indeling en sla deze op als een bestand

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

Pushen naar andere services

U kunt de stream van een aanvraag naar een andere ontvanger duwen door eenvoudigweg het drukverklaring te gebruiken.

U kunt bijvoorbeeld de volgende verklaring toewijzen aan een toepassing {} Blokkeer om de ontvangen stroom naar Twitch te duwen, met behulp van een van hun adressen opnemen (In dit geval, het adres van Seattle). Vervang gewoon {Stream_key} met uw Twitch Stream-toets.

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

U kunt hetzelfde doen voor een ander platform dat RTMP-ingestadingen biedt die u kunt streamen naar en zelfs meerdere push-verklaringen kunt vermelden om streaming te laten streamen op meerdere platforms tegelijkertijd.

HLS

HLS of HTTP Live Streaming, is een vrij populair formaat om video over de HTTP- en HTTPS-protocollen te streamen, waardoor het aanzienlijk gemakkelijker wordt om de stroom in een webpagina in te sluiten.

Om HLS in te schakelen, voegt u simpelweg de volgende instructies toe aan een van uw applicatie {} blokken.

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

Zorg er vervolgens voor dat de HLS_PATH-map bestaat door de opdracht uit te voeren:

mkdir -p /mnt/has/live

U kunt wijzigen / MNT / HLS / $ -app naar een mappad dat u wilt.$ app wordt vervangen door de naam van de toepassing (in dit geval, "Live").
Dit is de locatie waar de HLS .m3u8-bestanden worden opgeslagen.

U kunt ook de HLS_FLATULLATULATLAATIVEREN en HLS_PlayList_Length-waarden aanpassen aan uw behoeften.
2S en 4S zijn de waarden die we vonden om het beste te werken bij het streamen met een 2-second keyframe-interval.

Dan moet u ook een HTTP {} -blok toevoegen aan uw NGINX-configuratie. Dit blok moet een blok op het hoogste niveau zijn, op hetzelfde niveau als het bestaande RTMP {} -blok. Dit nieuwe blok moet als volgt zijn:

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

U kunt de poorten in het luisteren naar uitspraken wijzigen in elke poort waarvan u de video van wilt bedienen. Als u de poort verwijdert van de standaard HTTP / S-poorten (80 en 443), moet u de poort opgeven na het serveradres in het volgende formaat: http: // {server_address}: {poort}.

Voorbeeld: http://example.com:8080/

Naast het opslaan van die wijzigingen in uw NGINX-configuratiebestand, herstart NGINX door de opdracht uit te voeren:

systemctl restart nginx

HLS-weergave

Met HLS ingeschakeld, kunt u de stream nu insluiten in uw webpagina's met behulp van elke videospeler die HLS-weergave ondersteunt, zoals Video.JS of PlayerJS.

U geeft uw speler het bronadres in het volgende formaat:

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

{Server_Address} is uw IP of domein van uw server, {APP_NAME} is de naam van de toepassing {} Blok waarop u streamt naar, en {Secret_key} wordt de geheime sleutel die u in uw streaming-software hebt ingesteld (zoals OBS ).

Voorbeeld:

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

SSL

U kunt HLS ook via HTTPS serveren. Om dit te doen, moet u een SSL-certificaat en een particuliere sleutel aanbieden binnen de server {} -blok met de volgende uitspraken:

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

Het certificaat moet voor het domein zijn dat u hebt opgegeven in de verklaring van de Server_Name.

U moet dan ook de luisteren naar uitspraken bekijken / toevoegen om te luisteren op poort 443 (de HTTPS-poort) en optioneel forceer gebruik van SSL. De luisterverklaringen voor dat zouden als volgt moeten zijn:

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

Als u geen SSL-certificaat voor uw domein heeft, kunt u Laten we coderen om een gratis certificaat te ontvangen.

Andere configuraties

Er zijn tal van andere configuratie-instructies die u kunt toevoegen om de functionaliteit van de RTMP-module van de Nginx-configuratie uit te breiden.

De volledige documentatie voor wat u kunt toevoegen en configureren, is te vinden hier.

Streamen

Nadat u uw server hebt geconfigureerd, kunt u streamen uit alle videostreaming-software die streaming naar een RTMP-adres ondersteunt.U kunt overwegen gebruiken OBS Zo erg krachtig, heeft plugin-ondersteuning, is populair bij een grote gemeenschap en is het open.

Om naar uw server te streamen, hoeft u alleen de bestemmingsbestemming te zetten als het adres van uw server, met de toepassingsnaam en een privésleutel instellen.Het formaat voor het serveradres moet als volgt zijn:

RTMP://{server_address}/{app_name}

{Server_Address} is uw IP of een domein die u hebt ingesteld op deze server.{app_name} is de naam van de toepassing {} Blokkering die u in de NGINX-configuratie hebt ingesteld.Na onze voorbeeldconfiguratie van bovenaf zou die toepassingsnaam "live" zijn.

Het bieden van een unieke geheime sleutel zorgt ervoor dat de stroom uniek is, zelfs als andere bronnen streamen naar dezelfde toepassing.

Na het bovenstaande voorbeeld, wordt de stroom live op RTMP: //example.com/Live/secret_key, die u kunt ophalen met behulp van een video-afspelen die een RTMP-stream kan openen, zoals VLC.

Geschreven door Hostwinds Team  /  juni- 18, 2019