Nustatykite „Nginx“ Ubuntu, kad galėtumėte transliuoti tiesioginį HLS vaizdo įrašą

Nustatykite „Nginx“ Ubuntu, kad galėtumėte transliuoti tiesioginį HLS vaizdo įrašą

HTTP tiesioginis srautas (HLS) yra labai tvirtas srautinio vaizdo perdavimo protokolas, įdiegtas Apple Inc. HLS naudoja HTTP operacijas, kurios kerta ugniasienes, tarpinius serverius ir gali būti lengvai platinami per CDN. Todėl ši technologija gali pasiekti daug didesnę žiūrovų auditoriją nei RTP ar kiti UDP pagrįsti protokolai. Didžioji dalis tiesioginių vaizdo įrašų internete šiandien yra priglobta brangiose sistemose, kuriose naudojama HLS, tačiau jos paprastai yra brangios ir reikalauja daug serverio išteklių. Ši instrukcija parodys, kaip nustatyti labai prieinamą Ubuntu 14.04 VULTR VPS, kad būtų galima atlikti HLS tiesioginės transliacijos įvykius naudojant tik atvirojo kodo programinę įrangą.

Pirmas žingsnis yra perskaityti ir nustatyti serverį pagal Vultr Doc " Nustatyti Nginx-RTMP Ubuntu 14.04 ". Šiame dokumente pateiktos instrukcijos buvo pačios išsamiausios sąrankos etape rašymo metu. Norėčiau paminėti, kad galbūt norėsite „nginx-1.7.5“ pakeisti „nginx-1.9.4“ arba bet kokia naujausia „Nginx“ versija. Kitas pasiūlymas yra kompiliuoti „Nginx“ su HTTP stuburo būsenos moduliu, kad vėliau galėtumėte stebėti, kiek tiesioginių HLS žiūrovų turite.

Užuot kompiliavęs su:

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

Naudokite šią eilutę atlikdami procedūrą, aprašytą būtinos sąlygos dokumente:

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

Šiame vadove pateiktame pavyzdyje bus sukurti „tiesioginiai“ ir „mobilieji“ (optimizuoti) srautai ir bus naudojamas ffmpeg (įdiegtas ankstesnėje mokymo programoje), kad sugeneruotų koreguotą bitų spartą, mobiliesiems optimizuotą HLS srautą. Pavyzdyje taip pat bus parodyta, kaip priversti serverį automatiškai įrašyti jūsų tiesiogines transliacijas ir leisti atkurti įrašus kaip vaizdo įrašo pagal pareikalavimą (VOD) atkūrimo paslaugą.

Pirmiausia sukurkite aplankų struktūras, reikalingas tiesioginiams ir mobiliesiems HLS aprašams ir vaizdo įrašų fragmentams laikyti:

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

Tikriausiai būtų gera idėja įjungti užkardą, jei to dar nepadarėte. Jei taip, turite leisti srautą į Nginx ir HLS naudojamus prievadus. Jei norite kol kas veikti be ugniasienės, nekreipkite dėmesio į toliau pateiktą ufw skyrių.

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

HLS srautiniam perdavimui reikalinga žymiai skirtinga Nginx konfigūracija nei RTMP konfigūracija pirmame straipsnyje. Redaguokite nginx.conffailą, kad galėtumėte naudoti toliau nurodytus žodžius, pakeisdami „mano ip“ ir „mano srauto raktas“ savo informacija. „Mano srauto raktas“ gali naudoti bet ką, tai tik unikalus ir jums naudingas žodis. Pirmiausia galite sukurti atsarginę pradinio konfigūracijos failo kopiją, tada įklijuokite pateiktą konfigūracijos informaciją į redaktorių, pakeisdami viską, kas ten buvo:

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

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

Norėdami išeiti, paspauskite Ctrl + X. Pasakykite „taip“, kad išsaugotumėte pakeitimus.

Šiame nginx.conffaile galite rasti aiškių instrukcijų ir galimų kintamųjų pavyzdžių, jei savo mėgstamoje paieškos sistemoje ieškosite „nginx-rtmp direktyvų“. Jau keletą metų naudoju nginx-rtmp su HLS, nenaudodamas direktyvų „leisti skelbti“ ir „neleisti skelbti“, ir nemačiau nulio atvejų, kai žmonės naudotųsi / įsiveržtų į mano vaizdo serverius. Taigi aš tų direktyvų čia neįtraukiau. Perskaitykite ir pridėkite šias direktyvas, jei norite.

Pakeitę nginx.conffailą, turite iš naujo paleisti Nginx, kad galėtumėte naudoti naują konfigūraciją:

sudo service nginx restart

Atidžiai stebėkite, ar nėra „Nginx“ klaidų pranešimų, ir pašalinkite visas klaidas, kurios galėjo atsirasti dėl rašybos klaidų, aplanko nuosavybės ar leidimų problemų. Jei neturite klaidų pranešimų, esate pasirengę sukurti kodavimo srautą.

Norėdami sukurti srautą, turite turėti vaizdo kodavimo įrenginį. Naudoju OBS (Open Broadcaster Software), kuri yra atvirojo kodo ir man puikiai tinka. Galima rinktis iš kitų sprendimų, kurie nepatenka į šios mokymo programos taikymo sritį. Neaprašysiu visko apie RTMP vaizdo kodavimo įrenginio konfigūravimą. Vis dėlto jiems visiems reikia maždaug tų pačių įvesties kintamųjų. Pagrindiniai nustatymai, kuriuos turėsite įvesti, kad galėtumėte naudoti tikslią nginx.confkonfigūraciją ir gerai veikti daugelyje grotuvų / naršyklių / platformų, yra šie:

  1. Encoder-x264
  2. Kintama bitų sparta (ne CBR arba pastovi bitų sparta), kokybė aukščiausia
  3. Maksimalus bitų greitis - 600 kbps
  4. Garso kodekas-AAC
  5. Garso formatas - 44,1 khz
  6. Garso bitų sparta - 64 kbps
  7. FMS URL - "rtmp://my-ip:1935/live"
  8. Srauto raktas – „mano srauto raktas“
  9. Rezoliucija - 640x480
  10. FPS (kadrai per sekundę) -30
  11. CFR (nuolatinis kadrų dažnis) – taip
  12. Pagrindinių kadrų intervalas – 2 sekundės (vienas pagrindinis kadras kas 2 sekundes)
  13. x264 Encoding Profile-baseline (gali veikti su pagrindiniu – priklauso nuo naudojamo grotuvo)
  14. x264 CPU dabar - labai greitas

Rekomenduoju išbandyti įvairius koduotuvus ir su jais eksperimentuoti. Galbūt norėsite plataus formato koeficiento arba jo gali prireikti jūsų fotoaparatui (ar kitai transliacijai). Jei taip, būtinai pakeiskite šią informaciją kodavimo priemonėje ir formato santykį, nurodytą nginx.conffailo, kurį pateikiau, skyriuje exec-ffmpeg ; kitu atveju gausite keistai atrodančius vaizdo įrašų kanalus.

Kai koduotuvas bus nustatytas, galėsite visa tai išbandyti. Paleiskite koduotuvą naudodami internetinę kamerą arba joje veikiantį bandomąjį pašarą. Šiuo metu transliaciją galite peržiūrėti naudodami VLC grotuvą naudodami tokius URL:

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

Tai atitinkamai jūsų pagrindiniam ir mobiliajam vaizdo įrašų srautui. Atitinkamai pakeiskite savo IP ir srauto raktą.

Sėkmingai /video_recordingsištransliavus pirmąjį srautą, patikrinkite (per ssh arba ftp), ar jūsų tiesioginė transliacija buvo įrašyta į jūsų Vultr VPS aplanką. Taip pat galite pabandyti paleisti šį įrašytą failą VLC su tokiu URL adresu:

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

Taip pat yra Nginx statistika (su Nginx stub_status). Norėdami peržiūrėti lankytojų / žiūrinčiųjų statistiką, eikite į:

http://my-ip/stats

Jei norite peržiūrėti vaizdo įrašą tinklalapyje, jums reikės įterpiamo grotuvo. Yra daug įterpiamųjų grotuvų, kurie leis HLS vaizdo įrašus. Jau keletą metų naudoju JW Player, bet nemokama versija neleis HLS. „Bitmovin“ „Flowplayer“ ir „Bitdash“ (be kitų sprendimų) yra pakankamai dosnūs, kad galėtų nemokamai pasiūlyti nekomercinę savo grotuvų versiją, kuri pavers jūsų HLS srautą įterptu į tinklalapį. Šiame straipsnyje aš išbandžiau juos abu ir radau, kad jie abu puikiai veikia su mano Vultr / Nginx pagrindu veikiančiu vaizdo serveriu. Trumpai parodysiu, kaip man pavyko „Flowplayer“ su savo bandomuoju įrenginiu.

Jei ketinate naudoti tiesioginį HLS srautinį perdavimą bet kokiu įprastu, nuolatiniu ar komerciniu būdu, siūlyčiau įsigyti licenciją iš „Flowplayer“ arba bet kurio grotuvo, kurį nuspręsite naudoti. Jūs gausite grotuvą, kuris turi mažiau apribojimų, daugiau funkcijų ir gali būti priskirtas jūsų organizacijai. Taip pat gausite paramą – tai gali būti labai svarbu. Išskyrus Vultr VPS, tai tikrai vienintelė su projektu susijusi kaina.

Prieš darydami ką nors kita, svarbu pasirūpinti vadinamaisiais „kryžminiais domenais“ taikomais apribojimais, kurie kitu atveju sustabdytų jūsų galimybę srautu perduoti į tinklalapį / svetainę. Sukurkite crossdomain.xmlfailą savo nginx/htmlaplanke ir įdėkite jame instrukcijas, kad duomenys galėtų tekėti tarp domenų:

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

Pirmiausia nukopijuokite (iš šio puslapio) ir įklijuokite (dešiniuoju pelės mygtuku spustelėkite) į nano redaktoriaus lauką šiuos XML duomenis:

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

Paspauskite Ctrl + O, kad išrašytumėte, tada Ctrl + X, kad išsaugotumėte failą diske ir išeitumėte.

Paėmiau „Flowplayer“ HTML5 (6.0.3 versija), kurį išpakavus davė daug failų ir aplanką. Įkėliau visus failus ir aplanką į Nginx / HTML šakninio aplanko poaplankį, kurį pavadinau „flowplayer“. Tikslus kelias buvo /usr/local/nginx/html/flowplayer.

Norėdami išbandyti mūsų vaizdo įrašą, kai jis įterptas į tinklalapį, sukurkite keletą HTML failų aplanko Nginx/HTML šaknyje naudodami nano ir užpildykite juos tokiu turiniu.

Failas:

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

HTML kodas:

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

Failas:

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

HTML kodas:

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

Būtinai pakeiskite „my-ip“ ir „my-stream-key“ savo duomenimis.

flowplayer/skin/functional.cssStiliaus lape ženklą „#“ turite pakeisti keliu href="#". Mokomoji programinė įranga pašalina kelią. src=""Dalyje turite užpildyti URL – jį pašalina mokymo programinė įranga, naudokite http://my-ip/live/my-stream-key/index.m3u8ir http://my-ip/mobile/my-stream-key/index.m3u8atitinkamai. Taip pat turite pridėti scenarijaus srcžymas abiem jquery-1.11.2.min.jsir flowplayer.min.js. Mokymo programinė įranga pašalina žymas. Galite sužinoti, kaip sukurti šias žymas, peržiūrėję example htmlfailą, esantį su Flowplayer rinkiniu.

Paleiskite koduotuvą naudodami internetinę kamerą arba joje veikiantį bandomąjį pašarą. Savo transliaciją galite peržiūrėti naršyklėje naudodami šiuos URL:

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

Pirmame puslapyje tiesiog rodomas kiekvienas jūsų srautas – pagrindinis ir mobiliosios platformos. Galėsite juos abu paleisti ir peržiūrėti. Pastebėsite, kad mobiliosios platformos srautas yra mažesnis. Šie veiksmai yra tik tam, kad įsitikintumėte, jog viskas veikia.

Antrame puslapyje rodomas vienas srautas. Tačiau jis nustatytas tokiu būdu, kuris vadinamas „progresyviu srautiniu perdavimu“. Tai reiškia, kad žiūrinčiajam paleidus vaizdo įrašą, tiek serveris, tiek grotuvas bando suteikti žiūrovui didelės spartos aukštos kokybės srautą, jei žiūrinčiojo ryšys gali jį palaikyti. Jei jų ryšys yra prastas ir jis negali palaikyti ryšio, jis nuleidžiamas iki mažesnio bitų spartos (mobiliojo ryšio) srauto, kurio pralaidumas yra 200 kbps mažesnis. Jei norite, galite sukurti daugiau laipsniškų, progresyvių srautų naudodami ffmpeg ir sukonfigūruoti juos naudodami mano pavyzdį.

Išbandžiau šią konfigūraciją su vienu branduoliu, 1GB Vultr VPS, ir sužinojau, kad naudojant vieną tiesioginį srautą ir trans-rated srautą mobiliesiems, kuriuos jis sukuria naudojant ffmpeg, procesoriaus naudojimas buvo mažesnis nei 35% ir sunaudojo tik 100 MB mano 1GB RAM. Dabar tai labai efektyvi sąranka.

Jei planuojate transliuoti vaizdo įrašą, kurio pikselių matmenys yra daug didesni nei SD, galite pastebėti, kad turėsite naudoti galingesnį VPS. Man tai buvo įdomu ir paleidau pagrindinį srautą iki 1280 x 960 pikselių ir 2 Mbps – tai dar labiau apkraunu dalykus. Tačiau VPS vis tiek naudojo tik 50% procesoriaus, o atminties kiekis liko 100 MB. Pridėjau tuziną peržiūros programų / naršyklių ir tai beveik nepakeitė VPS apkrovos – padidėjo tik naudojamas pralaidumas. Esu tikras, kad papildomų trans-rated srautų kūrimas naudojant ffmpeg ir toliau apkraustų sistemą.

Naudojau šio tipo serverį gamybinėse aplinkose, kuriose vienu metu dirba nuo 50 iki 100 vartotojų, ir pastebėjau, kad išteklius sunaudojama labai mažai didėjant žiūrinčiųjų ryšiams. Eksperimentuokite su juo. Tačiau manau, kad dauguma vartotojų būtų patenkinti naudodami vieno branduolio, 1 GB VPS. Mėgaukitės nauju HLS srautinio perdavimo serveriu!


Mašinų augimas: AI pritaikymas realiame pasaulyje

Mašinų augimas: AI pritaikymas realiame pasaulyje

Dirbtinis intelektas nėra ateityje, jis čia, dabartyje Šiame tinklaraštyje Skaitykite, kaip dirbtinio intelekto programos paveikė įvairius sektorius.

DDOS atakos: trumpa apžvalga

DDOS atakos: trumpa apžvalga

Ar taip pat esate DDOS atakų auka ir esate sumišęs dėl prevencijos metodų? Perskaitykite šį straipsnį, kad išspręstumėte savo užklausas.

Ar kada nors susimąstėte, kaip įsilaužėliai uždirba pinigų?

Ar kada nors susimąstėte, kaip įsilaužėliai uždirba pinigų?

Galbūt girdėjote, kad įsilaužėliai uždirba daug pinigų, bet ar kada susimąstėte, kaip jie uždirba tokius pinigus? padiskutuokime.

Revoliuciniai „Google“ išradimai, kurie palengvins jūsų gyvenimą.

Revoliuciniai „Google“ išradimai, kurie palengvins jūsų gyvenimą.

Ar norite pamatyti revoliucinius „Google“ išradimus ir kaip šie išradimai pakeitė kiekvieno žmogaus gyvenimą šiandien? Tada skaitykite tinklaraštį, kad pamatytumėte „Google“ išradimus.

Penktadienio esminiai dalykai: kas atsitiko AI varomiems automobiliams?

Penktadienio esminiai dalykai: kas atsitiko AI varomiems automobiliams?

Savavaledžių automobilių koncepcija, kuri išvažiuotų į kelius su dirbtinio intelekto pagalba, yra svajonė, kurią jau kurį laiką svajojame. Tačiau nepaisant kelių pažadų, jų niekur nematyti. Skaitykite šį tinklaraštį, kad sužinotumėte daugiau…

Technologinis išskirtinumas: tolima žmogaus civilizacijos ateitis?

Technologinis išskirtinumas: tolima žmogaus civilizacijos ateitis?

Kadangi mokslas sparčiai vystosi, perimdamas daug mūsų pastangų, taip pat didėja rizika, kad pateksime į nepaaiškinamą singuliarumą. Skaitykite, ką mums gali reikšti išskirtinumas.

Duomenų saugojimo raida – infografika

Duomenų saugojimo raida – infografika

Duomenų saugojimo metodai gali būti tobulinami nuo pat Duomenų gimimo. Šiame tinklaraštyje, remiantis infografika, aprašoma duomenų saugojimo raida.

Didžiųjų duomenų atskaitos architektūros sluoksnių funkcijos

Didžiųjų duomenų atskaitos architektūros sluoksnių funkcijos

Skaitykite tinklaraštį, kad paprasčiausiai sužinotumėte apie skirtingus didžiųjų duomenų architektūros sluoksnius ir jų funkcijas.

6 nuostabūs išmaniųjų namų įrenginių privalumai

6 nuostabūs išmaniųjų namų įrenginių privalumai

Šiame skaitmeniniu būdu pagrįstame pasaulyje išmanieji namų įrenginiai tapo svarbia gyvenimo dalimi. Štai keletas nuostabių išmaniųjų namų įrenginių privalumų, kaip jie daro mūsų gyvenimą vertą gyventi ir paprastesnį.

„macOS Catalina 10.15.4“ priedo atnaujinimas kelia daugiau problemų, nei sprendžia

„macOS Catalina 10.15.4“ priedo atnaujinimas kelia daugiau problemų, nei sprendžia

Neseniai „Apple“ išleido „macOS Catalina 10.15.4“ priedą, skirtą problemoms išspręsti, tačiau atrodo, kad dėl atnaujinimo kyla daugiau problemų, dėl kurių „Mac“ įrenginiai blokuojami. Norėdami sužinoti daugiau, perskaitykite šį straipsnį