Ställ in Nginx på Ubuntu för att strömma live HLS-video

Ställ in Nginx på Ubuntu för att strömma live HLS-video

HTTP Live Streaming (HLS) är ett mycket robust protokoll för strömmande video som implementerats av Apple Inc. HLS använder HTTP-transaktioner som passerar brandväggar, proxyservrar och kan distribueras via CDN:er med lätthet. Därför kan denna teknik nå en mycket större tittarpublik än RTP eller andra UDP-baserade protokoll. Mycket av den liveströmmande videon online idag är värd för dyra system som använder HLS, men de är i allmänhet dyra och kräver mycket serverresurser. Den här handledningen kommer att visa dig hur du ställer in en mycket prisvärd Ubuntu 14.04 VULTR VPS för att göra HLS livestreaming-evenemang med endast öppen källkod.

Det första steget är att läsa och ställa in din server enligt Vultr Doc " Setup Nginx-RTMP on Ubuntu 14.04 ". Instruktionerna i det dokumentet var i skrivande stund de mest omfattande för installationsstadiet. Jag skulle vilja nämna att du kanske vill ersätta "nginx-1.7.5" med "nginx-1.9.4" eller vad den senaste versionen av Nginx är tillgänglig. Det andra förslaget är att kompilera Nginx med HTTP-stubbstatusmodulen för att ge dig själv möjlighet att övervaka hur många live HLS-tittare du har senare.

Istället för att kompilera med:

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

Använd denna sträng i proceduren som beskrivs i förutsättningsdokumentet:

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

Exemplet i denna handledning kommer att skapa både "live" och "mobila" (optimerade) strömmar och kommer att använda ffmpeg (installerat i föregående handledning) för att generera den bithastighetsjusterade, mobiloptimerade HLS-strömmen. Exemplet visar också hur du får servern att spela in dina liveströmmar automatiskt och låter dig spela upp inspelningarna som en video on demand (VOD) replay-tjänst.

Skapa först de mappstrukturer som krävs för att hålla live och mobila HLS-manifester och videofragment:

sudo mkdir /HLS
sudo mkdir /HLS/live
sudo mkdir /HLS/mobile
sudo mkdir /video_recordings
sudo chmod -R 777 /video_recordings

Det är förmodligen en bra idé att ha din brandvägg påslagen om du inte redan har gjort det. Om så är fallet måste du tillåta trafik till portarna som används av Nginx och HLS. Om du vill köra utan brandväggen för tillfället, ignorera avsnittet ufw nedan.

sudo ufw limit ssh
sudo ufw allow 80
sudo ufw allow 1935
sudo ufw enable

HLS-strömning kräver en väsentligt annorlunda Nginx-konfiguration från RTMP-konfigurationen i den första artikeln. Redigera din nginx.conffil för att använda följande, ersätt "my-ip" och "my-stream-key" med din information. Du kan använda vad du vill för "my-stream-key", det är bara ett ord som är unikt och användbart för dig. Du kanske vill säkerhetskopiera din ursprungliga konfigurationsfil först, klistra sedan in min medföljande konfigurationsinformation i redigeraren och ersätta allt som fanns där:

sudo cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.original
sudo nano /usr/local/nginx/conf/nginx.conf

Nytt nginx.conf:

worker_processes  1;
error_log  logs/error.log debug;
events {
worker_connections  1024;
}
rtmp {
server {
listen 1935;
allow play all;

#creates our "live" full-resolution HLS videostream from our incoming encoder stream and tells where to put the HLS video manifest and video fragments
application live {
allow play all;
live on;
record all;
record_path /video_recordings;
record_unique on;
hls on;
hls_nested on;
hls_path /HLS/live;
hls_fragment 10s;

#creates the downsampled or "trans-rated" mobile video stream as a 400kbps, 480x360 sized video
exec ffmpeg -i rtmp://192.168.254.178:1935/$app/$name -acodec copy -c:v libx264 -preset veryfast -profile:v baseline -vsync cfr -s 480x360 -b:v 400k maxrate 400k -bufsize 400k -threads 0 -r 30 -f flv rtmp://192.168.254.178:1935/mobile/$;
}

#creates our "mobile" lower-resolution HLS videostream from the ffmpeg-created stream and tells where to put the HLS video manifest and video fragments
application mobile {
allow play all;
live on;
hls on;
hls_nested on;
hls_path /HLS/mobile;
hls_fragment 10s;
}

#allows you to play your recordings of your live streams using a URL like "rtmp://my-ip:1935/vod/filename.flv"
application vod {
play /video_recordings;
}
}
}


http {
include       mime.types;
default_type  application/octet-stream;

server {
listen 80;
server_name 192.168.254.178;

#creates the http-location for our full-resolution (desktop) HLS stream - "http://my-ip/live/my-stream-key/index.m3u8"      
location /live {
types {
application/vnd.apple.mpegurl m3u8;
}
alias /HLS/live;
add_header Cache-Control no-cache;
}

#creates the http-location for our mobile-device HLS stream - "http://my-ip/mobile/my-stream-key/index.m3u8"        
location /mobile {
types {
application/vnd.apple.mpegurl m3u8;
}
alias /HLS/mobile;
add_header Cache-Control no-cache;
}   

#allows us to see how stats on viewers on our Nginx site using a URL like: "http://my-ip/stats"     
location /stats {
stub_status;
}

#allows us to host some webpages which can show our videos: "http://my-ip/my-page.html"     
location / {
root   html;
index  index.html index.htm;
}   
}
}

Tryck på Ctrl + X för att avsluta. Säg "ja" för att spara ändringarna.

Du kan hitta tydliga instruktioner och exempel på möjliga variabler i den här nginx.conffilen om du frågar din favoritsökmotor efter "nginx-rtmp-direktiv". Jag har använt nginx-rtmp med HLS i några år nu, utan att använda direktiven "tillåt publicera" och "neka publicera" och jag har sett noll fall av personer som använder/invaderar mina videoservrar. Så jag tog inte med de direktiven här. Läs om och lägg till dessa direktiv om du vill.

Efter att ha ändrat nginx.conffilen måste du starta om Nginx för att använda den nya konfigurationen:

sudo service nginx restart

Se noga efter eventuella Nginx-felmeddelanden och åtgärda eventuella fel som kan ha orsakats av felstavning, mappägande eller behörighetsproblem. Om du inte har några felmeddelanden är du redo att skapa din kodningsström.

Du måste ha en videokodare för att kunna skapa streamen. Jag använder OBS (Open Broadcaster Software) - som är öppen källkod och fungerar bra för mig. Det finns andra lösningar att välja mellan, som ligger utanför ramen för denna handledning. Jag kommer inte att täcka allt om att konfigurera en RTMP-videokodare. De kräver alla ungefär samma indatavariabler dock. De viktigaste inställningarna du måste ange för att använda min exakta nginx.confkonfiguration och för att fungera bra på de flesta spelare/webbläsare/plattformar är följande:

  1. Encoder-x264
  2. Variabel bithastighet (inte CBR eller konstant bithastighet), högst kvalitet
  3. Max bithastighet - 600 kbps
  4. Audio-Codec-AAC
  5. Ljudformat-44,1khz
  6. Ljudbithastighet - 64 kbps
  7. FMS URL-"rtmp://my-ip:1935/live"
  8. Strömningsnyckel-"min-strömningsnyckel"
  9. Upplösning-640x480
  10. FPS (bilder per sekund)-30
  11. CFR (Constant Frame Rate) - Ja
  12. Nyckelbildsintervall - 2 sekunder (en nyckelbild varannan sekund)
  13. x264 Encoding Profile-baseline (kan fungera med main—beror på vilken spelare som används)
  14. x264 CPU Present-mycket snabb

Jag rekommenderar att du provar olika kodare och experimenterar med dem. Du kanske vill ha ett brett bildförhållande - eller så kan din kamera (eller andra sändningsmaterial) kräva det. Om så är fallet, se till att ändra denna information i din kodare och även bildförhållandet som anges i exec-ffmpeg-delen av nginx.conffilen som jag har tillhandahållit; annars får du några fåniga videoflöden.

När din kodare är konfigurerad kan du testa allt. Starta kodaren med din webbkamera eller något slags testfoder som körs på den. Du kan se din sändning vid denna tidpunkt med VLC-spelare med hjälp av URL:er som:

http://my-ip/live/my-stream-key/index.m3u8
http://my-ip/mobile/my-stream-key/index.m3u8

Dessa är för dina huvudsakliga respektive dina mobila videoströmmar. Byt ut din IP och strömnyckel i enlighet med detta.

Efter att du framgångsrikt har sänt din första stream kontrollera (via ssh eller ftp) att din livesändning spelades in i /video_recordingsmappen på din Vultr VPS. Du kan också prova att spela upp den här inspelade filen i VLC med en URL som:

rtmp://my-ip/vod/filename.flv

Nginx-statistik är också tillgänglig (med Nginx stub_status). För att se besöks-/tittarstatistik, gå till:

http://my-ip/stats

För att kunna se din video på en webbsida behöver du en inbäddningsbar spelare. Det finns många inbäddningsbara spelare tillgängliga som kommer att spela HLS-video. Jag har använt JW Player i några år nu, men gratisversionen kommer inte att spela HLS. Flowplayer och Bitdash av Bitmovin (bland andra lösningar) är generösa nog att erbjuda en icke-kommersiell version av sina spelare gratis som kommer att göra din HLS-ström inbäddad i en webbsida. För den här artikeln har jag provat dem båda och funnit att de båda fungerar ganska bra med min Vultr/Nginx-baserade videoserver. Jag kommer kort att visa hur jag fick igång Flowplayer med min testbäddsmaskin.

Om du ska använda live HLS-streaming på något regelbundet, ihållande eller kommersiellt sätt, skulle jag uppmuntra dig att köpa en licens från Flowplayer eller vilken spelare du än väljer att använda. Du kommer att få en spelare som har färre begränsningar, fler funktioner och som kan märkas till din organisation. Du får också stöd – vilket kan vara mycket viktigt. Förutom Vultr VPS är detta verkligen den enda kostnaden förknippad med projektet.

Innan du gör något annat är det viktigt att ta hand om det som kallas "cross-domain"-begränsningar, som annars skulle stänga av din möjlighet att streama till en webbsida/webbplats. Skapa en crossdomain.xmlfil i din nginx/htmlmapp och lägg instruktioner i den så att data kan flöda mellan domäner:

sudo nano /usr/local/nginx/html/crossdomain.xml

Kopiera först (från den här sidan) och klistra sedan in (högerklicka) i nanoredigeringsfältet följande XML-data:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>

Tryck på Ctrl + O för att skriva ut, sedan Ctrl + X för att spara filen på disken och avsluta.

Jag tog tag i HTML5 (version 6.0.3) av Flowplayer som gav mig ett antal filer och en mapp när jag packade upp. Jag laddade upp alla filer och mappen till en undermapp av Nginx/HTML rotmapp som jag döpte till "flowplayer". Den exakta vägen var /usr/local/nginx/html/flowplayer.

För att testa vår video när den är inbäddad på en webbsida, skapa ett par HTML-filer i roten av Nginx/HTML-mappen med nano och fyll i dem med följande innehåll.

Fil:

sudo nano /usr/local/nginx/html/hls.html

HTML-kod:

<!doctype html>
<head>
<link rel="stylesheet" href="#">
</head>

<body>
640x480 664kbps (live) Desktop Browsers<br>
<div style="width:640px;" class="flowplayer" data-swf="flowplayer/flowplayer.swf" data-ratio="0.75">
<video>
<source type="application/x-mpegurl" src="">
</video>
</div>
<br><br>
480x360 464kbps (mobile) Mobile Browsers <br>
<div style="width:480px;" class="flowplayer" data-swf="flowplayer/flowplayer.swf" data-ratio="0.75">
<video>
<source type="application/x-mpegurl" src="">
</video>
</div>
</body>

Fil:

sudo nano /usr/local/nginx/html/hls_progressive.html

HTML-kod:

<!doctype html>
<head>
<link rel="stylesheet" href="#">
<style> .flowplayer { width: 640px; } </style>
</head>

<body>
<div class="flowplayer" data-swf="flowplayer/flowplayer.swf" data-ratio="0.75">
<video>
<source type="application/x-mpegurl" src=""> 
<source type="application/x-mpegurl" src="">
</video>
</div>
<br>
</body>

Se till att ersätta "my-ip" och "my-stream-key" med dina data.

Du måste ersätta sökvägen flowplayer/skin/functional.cssför "#"-tecknet i stilmallen href="#". Handledningsprogramvaran tar bort vägen. Du måste fylla i en URL i src=""en del - det är borttaget av handledningen programvara, användning http://my-ip/live/my-stream-key/index.m3u8och http://my-ip/mobile/my-stream-key/index.m3u8, respektive. Du måste också lägga till srcskripttaggar i huvudet för både jquery-1.11.2.min.jsoch för flowplayer.min.js. Taggarna tas bort av handledningsprogramvaran. Du kan ta reda på hur du skapar dessa taggar genom att titta på example htmlfilen som medföljer Flowplayer-satsen.

Starta kodaren med din webbkamera eller något slags testfoder som körs på den. Du kan se din sändning i en webbläsare med hjälp av följande webbadresser:

http://my-ip/hls.html
http://my-ip/hls_progressive.html

Den första sidan visar helt enkelt var och en av dina strömmar - den huvudsakliga och den mobila plattformen. Du kommer att kunna starta dem båda och se dem. Du kommer att märka att den mobila plattformsströmmen är mindre i storlek. Dessa steg är bara för att se till att allt fungerar.

Den andra sidan visar en enda ström. Men det är upplagt på ett sätt som kallas "progressiv streaming". Vad detta betyder är att när en tittare spelar upp videon, försöker både servern och spelaren ge tittaren strömmen med hög bithastighet och hög kvalitet om tittarnas anslutning kan upprätthålla den. Om deras anslutning är dålig och den inte kan upprätthålla anslutningen, rullar den ner till att visa strömmen med lägre bithastighet (mobil) som är 200 kbps lägre i bandbredd. Om du ville kan du skapa mer graderade, progressiva strömmar med ffmpeg och konfigurera dem med mitt exempel.

Jag har testat den här konfigurationen på en enda kärna, 1GB Vultr VPS och jag upptäckte att med en enda livestream, plus den trans-klassade mobilströmmen den skapar med ffmpeg, var CPU-användningen mindre än 35 % och den hade bara förbrukat 100 MB min 1GB ram. Nu är det en mycket effektiv installation.

Om du planerar att strömma video som är mycket större i pixeldimensioner än SD, kan du upptäcka att du måste använda en kraftfullare VPS. Jag var nyfiken på detta och körde min huvudström upp till 1280x960 pixlar och 2Mbps - vilket belastade saker ytterligare. Men VPS:n använde fortfarande bara 50 % CPU och minnesanvändningen låg kvar på 100 MB. Jag lade till ett dussin tittare/webbläsare och det gjorde nästan ingen skillnad i belastningen på VPS-en – bara den använda bandbredden ökade. Jag är säker på att skapa ytterligare trans-klassade strömmar med ffmpeg skulle fortsätta att belasta systemet ytterligare.

Jag har använt den här typen av server i produktionsmiljöer med mellan 50 och 100 samtidiga användare och upptäckte att resursanvändningen ökade väldigt lite med ökande tittaranslutningar. Experimentera med det. Men jag tror att de flesta användare skulle vara nöjda med att använda en enkelkärnig, 1 GB VPS. Njut av din nya HLS-streamingserver!


Skapa en Jekyll-blogg på Ubuntu 16.04

Skapa en Jekyll-blogg på Ubuntu 16.04

Använder du ett annat system? Jekyll är ett bra alternativ till WordPress för att blogga eller dela innehåll. Det kräver inga databaser och det är väldigt enkelt i

Hur man installerar Squid Proxy på CentOS

Hur man installerar Squid Proxy på CentOS

Squid är ett populärt, gratis Linux-program som låter dig skapa en webbproxy för vidarebefordran. I den här guiden ser du hur du installerar Squid på CentOS för att förvandla dig

Hur man installerar Memcached på Ubuntu 14.04

Hur man installerar Memcached på Ubuntu 14.04

Memcached är ett högpresterande databassystem som kan hjälpa dig att ladda din applikation. Det är väldigt snabbt eftersom det inte skriver till disken, utan istället t

Installera InfluxDB på Ubuntu 14

Installera InfluxDB på Ubuntu 14

Inledning InfluxDB är en öppen källkod, distribuerad, tidsseriedatabas utan externa beroenden. Ja, du läser paragrafen för inga externa beroenden

Installera Fail2ban Ubuntu x64

Installera Fail2ban Ubuntu x64

Fail2ban är ett program som övervakar inloggningsaktivitet på din server och blockerar stötande IP-adresser. Som standard blockerar den IP-adresser i 10 minuter

Konfigurera Red5 Media Server på Ubuntu 16.04

Konfigurera Red5 Media Server på Ubuntu 16.04

Använder du ett annat system? Red5 är en mediaserver med öppen källkod implementerad i Java som låter dig köra Flash fleranvändarapplikationer som livestreamin

Hur man installerar Vanilla Forum på Ubuntu 16.04

Hur man installerar Vanilla Forum på Ubuntu 16.04

Använder du ett annat system? Vanilla forum är en open source forumapplikation skriven i PHP. Det är en helt anpassningsbar, enkel att använda och stöder externa

Hur man installerar Kanboard på Ubuntu 18.04 LTS

Hur man installerar Kanboard på Ubuntu 18.04 LTS

Använder du ett annat system? Introduktion Kanboard är ett gratis och öppen källkodsprogram för projektledningsprogram som är utformat för att underlätta och visualisera

Hur man installerar Kanboard på Debian 9

Hur man installerar Kanboard på Debian 9

Använder du ett annat system? Introduktion Kanboard är ett gratis och öppen källkodsprogram för projektledningsprogram som är utformat för att underlätta och visualisera

Hur man installerar Tiny Tiny RSS Reader på en FreeBSD 11 FAMP VPS

Hur man installerar Tiny Tiny RSS Reader på en FreeBSD 11 FAMP VPS

Använder du ett annat system? Tiny Tiny RSS Reader är en gratis och öppen källkod, webbaserat nyhetsflöde (RSS/Atom) läsare och aggregator, utformad för att

Hur man installerar Gitea på Debian 9

Hur man installerar Gitea på Debian 9

Använder du ett annat system? Gitea är ett alternativt versionskontrollsystem med öppen källkod som drivs av Git. Gitea är skriven på Golang och är

Hur man installerar Wiki.js på FreeBSD 11

Hur man installerar Wiki.js på FreeBSD 11

Använder du ett annat system? Wiki.js är en gratis och öppen källkod, modern wiki-app byggd på Node.js, MongoDB, Git och Markdown. Wiki.js källkod är offentlig

Hur man installerar Gitea på Ubuntu 18.04

Hur man installerar Gitea på Ubuntu 18.04

Använder du ett annat system? Gitea är ett alternativt versionskontrollsystem med öppen källkod som drivs av git. Gitea är skriven på Golang och är

Hur man installerar Thelia 2.3 på Debian 9

Hur man installerar Thelia 2.3 på Debian 9

Använder du ett annat system? Thelia är ett verktyg med öppen källkod för att skapa e-handelswebbplatser och hantera onlineinnehåll skrivet i PHP. Thelia källkod i

Hur man installerar Microweber på CentOS 7

Hur man installerar Microweber på CentOS 7

Använder du ett annat system? Microweber är en öppen källkod för dra och släpp CMS och onlinebutik. Microweber källkod finns på GitHub. Denna guide kommer att visa dig

Installera Microweber på Ubuntu 16.04

Installera Microweber på Ubuntu 16.04

Använder du ett annat system? Microweber är en öppen källkod för dra och släpp CMS och onlinebutik. Microweber källkod finns på GitHub. Denna guide kommer att visa dig

Hur man installerar MODX Revolution på en Ubuntu 16.04 LAMP VPS

Hur man installerar MODX Revolution på en Ubuntu 16.04 LAMP VPS

Använder du ett annat system? MODX Revolution är ett snabbt, flexibelt, skalbart, gratis och öppen källkod, företagsklassat Content Management System (CMS) skrivet i

Hur man installerar Vanilla Forum på CentOS 7

Hur man installerar Vanilla Forum på CentOS 7

Använder du ett annat system? Vanilla forum är en open source forumapplikation skriven i PHP. Det är en helt anpassningsbar, enkel att använda och stöder externa

Hur man installerar Mattermost 4.1 på CentOS 7

Hur man installerar Mattermost 4.1 på CentOS 7

Använder du ett annat system? Mattermost är ett alternativ med öppen källkod, självvärd till meddelandetjänsten Slack SAAS. Med andra ord, med Mattermost, du ca

Hur man installerar dotCMS på Ubuntu 16.04

Hur man installerar dotCMS på Ubuntu 16.04

Använder du ett annat system? DotCMS är ett open-source, företagsklassat innehållshanteringssystem skrivet i Java. Den innehåller nästan alla funktioner som krävs

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Artificiell intelligens är inte i framtiden, det är här i nuet I den här bloggen Läs hur Artificiell intelligens-applikationer har påverkat olika sektorer.

DDOS-attacker: En kort översikt

DDOS-attacker: En kort översikt

Är du också ett offer för DDOS-attacker och förvirrad över de förebyggande metoderna? Läs den här artikeln för att lösa dina frågor.

Har du någonsin undrat hur hackare tjänar pengar?

Har du någonsin undrat hur hackare tjänar pengar?

Du kanske har hört att hackare tjänar mycket pengar, men har du någonsin undrat hur de tjänar den typen av pengar? låt oss diskutera.

Revolutionerande uppfinningar från Google som gör ditt liv lätt.

Revolutionerande uppfinningar från Google som gör ditt liv lätt.

Vill du se revolutionerande uppfinningar av Google och hur dessa uppfinningar förändrade livet för varje människa idag? Läs sedan till bloggen för att se uppfinningar av Google.

Fredag ​​Essential: Vad hände med AI-drivna bilar?

Fredag ​​Essential: Vad hände med AI-drivna bilar?

Konceptet med att självkörande bilar ska ut på vägarna med hjälp av artificiell intelligens är en dröm vi har ett tag nu. Men trots flera löften finns de ingenstans att se. Läs den här bloggen för att lära dig mer...

Technological Singularity: A Distant Future of Human Civilization?

Technological Singularity: A Distant Future of Human Civilization?

När vetenskapen utvecklas i snabb takt och tar över en hel del av våra ansträngningar, ökar också riskerna för att utsätta oss för en oförklarlig singularitet. Läs, vad singularitet kan betyda för oss.

Utveckling av datalagring – Infographic

Utveckling av datalagring – Infographic

Lagringsmetoderna för data har utvecklats kan vara sedan födelsen av data. Den här bloggen tar upp utvecklingen av datalagring på basis av en infografik.

Funktioner för Big Data Reference Architecture Layers

Funktioner för Big Data Reference Architecture Layers

Läs bloggen för att känna till olika lager i Big Data Architecture och deras funktionaliteter på enklaste sätt.

6 fantastiska fördelar med att ha smarta hemenheter i våra liv

6 fantastiska fördelar med att ha smarta hemenheter i våra liv

I denna digitala värld har smarta hemenheter blivit en avgörande del av livet. Här är några fantastiska fördelar med smarta hemenheter om hur de gör vårt liv värt att leva och enklare.

macOS Catalina 10.15.4 tilläggsuppdatering orsakar fler problem än att lösa

macOS Catalina 10.15.4 tilläggsuppdatering orsakar fler problem än att lösa

Nyligen släppte Apple macOS Catalina 10.15.4, en tilläggsuppdatering för att åtgärda problem, men det verkar som om uppdateringen orsakar fler problem som leder till att mac-datorer blir murade. Läs den här artikeln för att lära dig mer