Konfiguro Nginx në Ubuntu për të transmetuar video të drejtpërdrejtë HLS

Konfiguro Nginx në Ubuntu për të transmetuar video të drejtpërdrejtë HLS

HTTP Live Streaming (HLS) është një protokoll video transmetimi shumë i fortë i zbatuar nga Apple Inc. HLS përdor transaksionet HTTP të cilat përshkojnë muret e zjarrit, proxies dhe mund të shpërndahen me lehtësi përmes CDN-ve. Prandaj, kjo teknologji është në gjendje të arrijë një audiencë shumë më të madhe shikimi sesa RTP ose protokolle të tjera të bazuara në UDP. Shumica e videove të transmetimit të drejtpërdrejtë në internet sot priten nga sisteme të shtrenjta që përdorin HLS, por ato janë përgjithësisht të shtrenjta dhe kërkojnë shumë burime serveri. Ky tutorial do t'ju tregojë se si të konfiguroni një Ubuntu 14.04 VULTR VPS shumë të përballueshme për të kryer ngjarje të transmetimit të drejtpërdrejtë HLS duke përdorur vetëm softuer me burim të hapur.

Hapi i parë është të lexoni dhe konfiguroni serverin tuaj sipas Vultr Doc " Setup Nginx-RTMP në Ubuntu 14.04 ". Udhëzimet në atë dokument ishin më gjithëpërfshirëset për fazën e konfigurimit, në kohën e shkrimit. Do të përmendja se mund të dëshironi të zëvendësoni "nginx-1.7.5" me "nginx-1.9.4" ose çfarëdo versioni më të fundit të Nginx që është i disponueshëm. Sugjerimi tjetër është të përpiloni Nginx me modulin e statusit cung HTTP në mënyrë që t'i jepni vetes mundësinë për të monitoruar sa shikues të drejtpërdrejtë HLS keni më vonë.

Në vend të përpilimit me:

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

Përdoreni këtë varg në procedurën e përshkruar në dokumentin paraprak:

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

Shembulli në këtë tutorial do të krijojë transmetime "të drejtpërdrejta" dhe "mobile" (të optimizuara) dhe do të përdorë ffmpeg (instaluar në tutorialin e mëparshëm) për të gjeneruar transmetimin HLS të rregulluar me shpejtësi bit, të optimizuar për celularin. Shembulli do të tregojë gjithashtu se si të detyroni serverin të regjistrojë transmetimet tuaja të drejtpërdrejta automatikisht dhe t'ju lejojë të riprodhoni regjistrimet si një shërbim riprodhimi video sipas kërkesës (VOD).

Së pari, krijoni strukturat e dosjeve të nevojshme për të mbajtur manifestet e drejtpërdrejta dhe të lëvizshme HLS dhe fragmentet e videos:

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

Është ndoshta një ide e mirë të aktivizoni murin e zjarrit nëse nuk e keni bërë tashmë. Nëse po, duhet të lejoni trafikun në portet e përdorura nga Nginx dhe HLS. Nëse dëshironi të vraponi pa murin e zjarrit për momentin, injoroni seksionin ufw më poshtë.

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

Transmetimi HLS kërkon një konfigurim dukshëm të ndryshëm Nginx nga konfigurimi RTMP në artikullin e parë. Ndryshoni nginx.confskedarin tuaj për të përdorur sa vijon, duke zëvendësuar "my-ip" dhe "my-stream-key" me informacionin tuaj. Ju mund të përdorni çdo gjë që dëshironi për "my-stream-key" është vetëm një fjalë që është unike dhe e dobishme për ju. Ju mund të dëshironi të kopjoni skedarin tuaj origjinal të konfigurimit fillimisht, më pas ngjisni informacionin tim të dhënë të konfigurimit në redaktues, duke zëvendësuar gjithçka që ishte aty:

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

Nginx.conf i ri:

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

Shtypni Ctrl + X për të dalë. Thuaj "po" për të ruajtur ndryshimet.

Ju mund të gjeni udhëzime të qarta dhe shembuj të variablave të mundshëm në këtë nginx.confskedar nëse kërkoni motorin tuaj të preferuar të kërkimit për "nginx-rtmp direktivat". Unë kam përdorur nginx-rtmp me HLS për disa vite tani, pa përdorur direktivat "lejo publikimin" dhe "mohoni publikimin" dhe kam parë zero raste të njerëzve që përdorin/pushtojnë serverët e mi video. Kështu që unë nuk i përfshiva ato direktiva këtu. Lexoni dhe shtoni këto direktiva nëse dëshironi.

Pas ndryshimit të nginx.confskedarit, duhet të rinisni Nginx për të përdorur konfigurimin e ri:

sudo service nginx restart

Shikoni nga afër për çdo mesazh gabimi Nginx dhe adresoni çdo gabim që mund të jetë shkaktuar nga gabimet e drejtshkrimit, pronësia e dosjeve ose çështjet e lejeve. Nëse nuk keni mesazhe gabimi, atëherë jeni gati të krijoni transmetimin tuaj të kodimit.

Duhet të keni një kodues video për të krijuar transmetimin. Unë përdor OBS (Open Broadcaster Software) - i cili është me burim të hapur dhe funksionon mirë për mua. Ka zgjidhje të tjera për të zgjedhur, të cilat janë jashtë fushës së këtij tutoriali. Nuk do të mbuloj gjithçka në lidhje me konfigurimin e një koduesi video RTMP. Megjithatë, të gjithë kërkojnë përafërsisht të njëjtat variabla hyrëse. Cilësimet kryesore që duhet të futni për të përdorur nginx.confkonfigurimin tim të saktë dhe për të funksionuar mirë në shumicën e lojtarëve/shfletuesve/platformave janë si më poshtë:

  1. Enkoder-x264
  2. Shpejtësia e ndryshueshme e biteve (jo CBR ose shpejtësia konstante e biteve), Cilësia më e lartë
  3. Shpejtësia maksimale e biteve - 600 kbps
  4. Audio-Codec-AAC
  5. Formati i audios-44,1 khz
  6. Shpejtësia e biteve të audios - 64 kbps
  7. URL FMS-"rtmp://my-ip:1935/live"
  8. Çelësi i transmetimit-"kyç i transmetimit tim"
  9. Rezolucioni - 640x480
  10. FPS (korniza për sekondë) -30
  11. CFR (Constant Frame Rate) - Po
  12. Intervali i kuadrove kyçe-2 sekonda (një kuadro kyç çdo 2 sekonda)
  13. x264 Encoding Profile-baseline (mund të funksionojë me main—varet nga luajtësi i përdorur)
  14. CPU x264 Prezent-shumë i shpejtë

Unë rekomandoj të provoni kodues të ndryshëm dhe të eksperimentoni me ta. Ju mund të dëshironi një raport të gjerë të pamjes - ose materialet e kamerës suaj (ose transmetimeve të tjera) mund ta kërkojnë atë. Nëse po, sigurohuni që të ndryshoni këtë informacion në koduesin tuaj dhe gjithashtu raportin e pamjes të listuar në seksionin exec-ffmpeg të nginx.confskedarit që kam dhënë; përndryshe do të merrni disa burime video me pamje budallaqe.

Pasi të konfigurohet koduesi juaj, mund t'i provoni të gjitha. Nisni koduesin me kamerën tuaj të internetit ose ndonjë lloj ushqimi testues që funksionon në të. Ju mund ta shikoni transmetimin tuaj në këtë pikë me luajtësin VLC duke përdorur URL të tilla si:

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

These are for your main and your mobile video streams, respectively. Substitute your IP and stream key accordingly.

After you've successfully broadcasted your first stream check (via ssh or ftp) that your live broadcast was recorded in the /video_recordings folder on your Vultr VPS. You can also try playing this recorded file in VLC with a URL like:

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

Nginx stats are also available (with Nginx stub_status). To view visitor/viewer stats, access:

http://my-ip/stats

Për të parë videon tuaj në një faqe ueb, do t'ju duhet një luajtës i integruar. Ka shumë lojtarë të integruar të disponueshëm të cilët do të luajnë video HLS. Unë kam përdorur JW Player për disa vite tani, por versioni falas nuk do të luajë HLS. Flowplayer dhe Bitdash nga Bitmovin (midis zgjidhjeve të tjera) janë mjaft bujarë për të ofruar një version jokomercial të lojtarëve të tyre falas, i cili do ta bëjë transmetimin tuaj HLS të ngulitur në një faqe interneti. Për këtë artikull, i kam provuar të dyja dhe kam gjetur që të dyja funksionojnë mjaft mirë me serverin tim video të bazuar në Vultr/Nginx. Unë do të tregoj shkurtimisht se si e bëra funksionimin e Flowplayer me makinën time të shtratit të provës.

Nëse do të përdorni transmetimin e drejtpërdrejtë të HLS në ndonjë mënyrë të rregullt, të qëndrueshme ose komerciale, unë do t'ju inkurajoja të blini një licencë nga Flowplayer ose cilido lojtar që vendosni të përdorni. Ju do të merrni një lojtar që ka më pak kufizime, më shumë veçori dhe mund të markohet për organizatën tuaj. Do të merrni gjithashtu mbështetje - e cila mund të jetë shumë e rëndësishme. Përveç Vultr VPS, kjo është me të vërtetë kostoja e vetme e lidhur me projektin.

Përpara se të bëni ndonjë gjë tjetër, është e rëndësishme të kujdeseni për ato që quhen kufizime "ndër-domainësh", të cilat përndryshe do të mbyllnin aftësinë tuaj për të transmetuar në një faqe interneti/faqe interneti. Krijoni një crossdomain.xmlskedar në nginx/htmldosjen tuaj dhe vendosni udhëzime në të për të lejuar që të dhënat të rrjedhin midis domeneve:

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

Së pari kopjoni (nga kjo faqe) dhe më pas ngjitni (kliko me të djathtën) në fushën e redaktuesit nano të dhënat e mëposhtme XML:

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

Shtypni Ctrl + O për të shkruar jashtë, pastaj Ctrl + X për të ruajtur skedarin në disk dhe për të dalë.

Kam kapur HTML5 (versioni 6.0.3) i Flowplayer i cili më dha një numër skedarësh dhe një dosje kur u zbërthye. I ngarkova të gjithë skedarët dhe dosjen në një nënfolder të dosjes rrënjësore Nginx/HTML të cilën e quajta "flowplayer". Rruga e saktë ishte /usr/local/nginx/html/flowplayer.

Për të testuar videon tonë kur futet në një faqe interneti, krijoni disa skedarë HTML në rrënjën e dosjes Nginx/HTML duke përdorur nano dhe plotësoni ato me përmbajtjen e mëposhtme.

Skedari:

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

Kodi HTML:

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

Skedari:

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

Kodi HTML:

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

Sigurohuni që të zëvendësoni "my-ip" dhe "my-stream-key" me të dhënat tuaja.

Duhet të zëvendësoni shtegun flowplayer/skin/functional.csspër shenjën "#" në fletën e stilit href="#". Softueri i tutorialit heq rrugën. Ju duhet të plotësoni një URL në src=""pjesën - ajo është duke u hequr nga softueri tutorial, përdorimi http://my-ip/live/my-stream-key/index.m3u8dhe http://my-ip/mobile/my-stream-key/index.m3u8, respektivisht. Ju gjithashtu duhet të shtoni srcetiketa skripti në kokë për të dy jquery-1.11.2.min.jsdhe për flowplayer.min.js. Etiketat po hiqen nga softueri i tutorialit. Mund të gjeni se si t'i example htmlkrijoni këto etiketa duke parë skedarin e përfshirë me kompletin Flowplayer.

Nisni koduesin me kamerën tuaj të internetit ose ndonjë lloj ushqimi testues që funksionon në të. Mund ta shikoni transmetimin tuaj në një shfletues duke përdorur URL-të e mëposhtme:

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

Faqja e parë thjesht tregon secilën prej transmetimeve tuaja - atë kryesore dhe atë të platformës celulare. Ju do të jeni në gjendje t'i nisni të dyja dhe t'i shikoni ato. Do të vini re se rryma e platformës celulare është më e vogël në madhësi. Këto hapa janë vetëm për t'u siguruar që gjithçka po funksionon.

Faqja e dytë tregon një transmetim të vetëm. Por është ngritur në një mënyrë që quhet "transmetim progresiv". Kjo do të thotë se kur një shikues luan videon, si serveri ashtu edhe luajtësi përpiqen t'i japin shikuesit transmetimin me shpejtësi të lartë të biteve dhe me cilësi të lartë nëse lidhja e shikuesve mund ta mbajë atë. Nëse lidhja e tyre është e dobët dhe nuk mund ta mbajë lidhjen, ajo zbret për të treguar transmetimin me shpejtësi më të ulët të biteve (celular), i cili është 200 kbps më i ulët në gjerësi bande. Nëse dëshironi, mund të krijoni transmetime më të graduara, progresive me ffmpeg dhe t'i konfiguroni ato duke përdorur shembullin tim.

Unë e kam testuar këtë konfigurim në një bërthamë të vetme, 1 GB Vultr VPS dhe zbulova se me një transmetim të vetëm të drejtpërdrejtë, plus transmetimin e transmetuar celular që krijon me ffmpeg, përdorimi i procesorit ishte më pak se 35% dhe kishte konsumuar vetëm 100 MB RAM-i im 1 GB. Tani ky është një konfigurim shumë efikas.

Nëse planifikoni të transmetoni video që është shumë më e madhe në dimensione piksel se SD, mund të zbuloni se duhet të përdorni një VPS më të fuqishëm. Isha kurioz për këtë dhe e drejtova transmetimin tim kryesor deri në 1280x960 piksele dhe 2 Mbps - duke i ngarkuar gjërat më shumë. Por VPS ende përdorte vetëm 50% CPU dhe përdorimi i memories mbeti në 100MB. Shtova një duzinë shikues/shfletues dhe nuk bëri pothuajse asnjë ndryshim në ngarkesën në VPS - vetëm gjerësia e brezit të përdorur u rrit. Jam i sigurt se krijimi i transmetimeve shtesë të vlerësuara në transmetim me ffmpeg do të vazhdojë të ngarkojë sistemin.

Unë e kam përdorur këtë lloj serveri në mjedise prodhimi me ndërmjet 50 dhe 100 përdorues të njëkohshëm dhe zbulova se përdorimi i burimeve u rrit shumë pak me rritjen e lidhjeve të shikuesve. Eksperimentoni me të. Por unë mendoj se shumica e përdoruesve do të ishin të lumtur duke përdorur një VPS me një bërthamë, 1 GB. Shijoni serverin tuaj të ri të transmetimit HLS!


Ngritja e makinave: Aplikimet në botën reale të AI

Ngritja e makinave: Aplikimet në botën reale të AI

Inteligjenca Artificiale nuk është në të ardhmen, është këtu në të tashmen Në këtë blog Lexoni se si aplikacionet e inteligjencës artificiale kanë ndikuar në sektorë të ndryshëm.

Sulmet DDOS: Një përmbledhje e shkurtër

Sulmet DDOS: Një përmbledhje e shkurtër

A jeni edhe ju viktimë e Sulmeve DDOS dhe jeni konfuz në lidhje me metodat e parandalimit? Lexoni këtë artikull për të zgjidhur pyetjet tuaja.

A e keni pyetur ndonjëherë veten se si fitojnë para hakerët?

A e keni pyetur ndonjëherë veten se si fitojnë para hakerët?

Ju mund të keni dëgjuar se hakerët fitojnë shumë para, por a keni menduar ndonjëherë se si i fitojnë ato para? Le te diskutojme.

Shpikjet revolucionare nga Google që do tju bëjnë të lehtë jetën tuaj.

Shpikjet revolucionare nga Google që do tju bëjnë të lehtë jetën tuaj.

Dëshironi të shihni shpikjet revolucionare nga Google dhe se si këto shpikje ndryshuan jetën e çdo njeriu sot? Më pas lexoni në blog për të parë shpikjet nga Google.

E Premte Thelbësore: Çfarë ndodhi me Makinat e drejtuara nga AI?

E Premte Thelbësore: Çfarë ndodhi me Makinat e drejtuara nga AI?

Koncepti i makinave vetë-drejtuese për të dalë në rrugë me ndihmën e inteligjencës artificiale është një ëndërr që e kemi prej kohësh. Por, pavarësisht nga disa premtime, ato nuk shihen askund. Lexoni këtë blog për të mësuar më shumë…

Singulariteti teknologjik: Një e ardhme e largët e qytetërimit njerëzor?

Singulariteti teknologjik: Një e ardhme e largët e qytetërimit njerëzor?

Ndërsa Shkenca evoluon me një ritëm të shpejtë, duke marrë përsipër shumë nga përpjekjet tona, rriten edhe rreziqet për t'iu nënshtruar një Singulariteti të pashpjegueshëm. Lexoni, çfarë mund të thotë singulariteti për ne.

Evolucioni i ruajtjes së të dhënave - Infografik

Evolucioni i ruajtjes së të dhënave - Infografik

Metodat e ruajtjes së të dhënave kanë evoluar mund të jenë që nga lindja e të dhënave. Ky blog mbulon evolucionin e ruajtjes së të dhënave në bazë të një infografike.

Funksionalitetet e shtresave të arkitekturës së referencës së të dhënave të mëdha

Funksionalitetet e shtresave të arkitekturës së referencës së të dhënave të mëdha

Lexoni blogun për të njohur shtresat e ndryshme në arkitekturën e të dhënave të mëdha dhe funksionalitetet e tyre në mënyrën më të thjeshtë.

6 Përfitimet e mahnitshme të të pasurit pajisje shtëpiake inteligjente në jetën tonë

6 Përfitimet e mahnitshme të të pasurit pajisje shtëpiake inteligjente në jetën tonë

Në këtë botë të drejtuar nga dixhitali, pajisjet inteligjente të shtëpisë janë bërë një pjesë thelbësore e jetës. Këtu janë disa përfitime të mahnitshme të pajisjeve shtëpiake inteligjente se si ato e bëjnë jetën tonë të vlefshme dhe më të thjeshtë.

Përditësimi shtesë i macOS Catalina 10.15.4 po shkakton më shumë probleme sesa zgjidhja

Përditësimi shtesë i macOS Catalina 10.15.4 po shkakton më shumë probleme sesa zgjidhja

Së fundmi Apple lëshoi ​​macOS Catalina 10.15.4 një përditësim shtesë për të rregulluar problemet, por duket se përditësimi po shkakton më shumë probleme që çojnë në bricking të makinerive mac. Lexoni këtë artikull për të mësuar më shumë