
Že od prvih dni dela na oblačnem videonadzornem sistemu smo se soočili s problemom, brez rešitve katerega bi se lahko odpovedali Ivideonu – to je bil naš Everest, plezanje na katerega je vzelo ogromno energije, zdaj pa smo končno zapičil cepin v vrh sestavljanke na več platformah.
Sistem za prenos zvoka in videa po internetu ne bi smel biti odvisen od opreme, spletnih odjemalcev in standardov, ki jih podpirajo, prav tako pa ne bi smel delovati pravilno ob prisotnosti prevajalnikov omrežnih naslovov in požarnih zidov. Uporabnik videonadzora v oblaku želi dostopati do storitve, tudi če uporablja analogne kamere, in raje spremlja video prenos v živo na najsodobnejši napravi.
Zelo pomembno je, da si uporabnik želi ogledati videe z minimalno zamudo. Skoraj edini način za prikaz videa z nizko zakasnitvijo v brskalniku je uporaba WebRTC (spletne komunikacije v realnem času). WebRTC je nabor tehnologij za peer-to-peer prenos videa in zvoka v brskalnikih, prvotno zasnovan za prenos in predvajanje video tokov z nizko zakasnitvijo. V ta namen se med drugim uporablja protokol UDP.
Preden vam povemo, kaj novi motor daje uporabniku, vas bomo spomnili, zakaj in zakaj podpiramo tehnologije HLS ter zakaj smo se odločili iti naprej.
Motor HLS: prednosti in slabosti

()
Технология HLS (HTTP Live Streaming) разработана в Apple, поэтому не удивительно, что впервые её поддержка появилась на устройствах именно этого бренда. На сегодняшний день видеоряд в формате HLS также умеют воспроизводить практически все телевизионные приставки и многие устройства, работающие на ОС Android.
Motor HLS uporablja dobro znani video kodek H264 v kombinaciji z avdio tokovi AAC ali MP3 za pretakanje video podatkov. Celoten tok avdio in video podatkov je zapakiran v transportni vsebnik MPEG-TS. Za prenos prek protokola HTTP so informacije v toku razdeljene na fragmente, opisane v seznamih predvajanja m3u8. In šele nato se ti fragmenti skupaj s seznami predvajanja prenašajo prek HTTP. Samodejno razdeljevanje pomeni zakasnitev v sekundah. To je lastnost vsebnika MPEG-TS.
Motor HLS podpira tudi večbitne tokove, Live/VOD.
Glavne prednosti HLS:
- vgrajena podpora v vseh večjih brskalnikih;
- enostavnost implementacije (v primerjavi z WebRTC);
- Zelo priročno in učinkovito je organizirati vse vrste oddaj za veliko občinstvo zaradi dejstva, da je mogoče segmente enkrat naložiti v CDN.
Kljub preprostosti motorja ni vse tako gladko, kot se zdi. Glavna težava je, da so se razvijalci predvajalnikov tretjih oseb oddaljili od Applovih priporočil, na primer glede podprtih zvočnih formatov. Še posebej so številni razvijalci začeli dodajati možnost dela s priljubljenimi zvočnimi tokovi: mpeg2 video, mpeg2 audio itd. Posledično so morali ustvariti različne formate seznamov predvajanja za različne predvajalnike.
Toda ena največjih težav z motorjem HLS je velika zakasnitev pri prenosu podatkov.
Izvor "zavor"
Glavni razlog za visoko latenco HLS je v dejstvu, da so programerji ustvarili motor za pridobivanje slik najvišje kakovosti. Zato parametri uporabljenega intervala sličic in velikost medpomnilnika za predvajanje preprosto niso primerni za video prenose v živo. Zaradi tega je pri prenosu videoposnetkov precej velika zakasnitev, ki lahko znaša 5-7 sekund.
Po eni strani to ni veliko, na primer za tiste, ki gledajo film s strežnika za video gostovanje. Toda za videonadzorne sisteme je lahko zamuda pri prenosu video posnetkov zelo pomembna.
Če gledate pisarno, kjer zaposleni enkrat na uro dvignejo pogled od svojih monitorjev, potem zakasnitev 5 sekund sploh ni pomembna. Pa so se ljudje začeli pritoževati, da so na primer ob prenosu nogometne tekme že v klepetu napisali GOOOOL, na videu pa tega še ni :). Imamo že vrsto uporabniških primerov, ko bi moral Ivideon praktično nadomestiti Skype.
Ali je mogoče premagati zakasnitev v HLS? Odgovor na to vprašanje zveni kot govor izkušenega uničevalca podgan na predavanju začetnikom strokovnjakom za zatiranje škodljivcev: "Podgan ni mogoče iztrebiti, lahko pa zmanjšamo njihovo število na razumen minimum." Enako je z zamikom pri HLS, ne bo ga mogoče zmanjšati na nič, so pa na trgu rešitve, ki lahko zamik bistveno zmanjšajo.
Fini kosi
Druga pomanjkljivost motorja je uporaba majhnih datotek za prenos podatkov. Zdi se, kaj je narobe s tem?
Vsakdo, ki je poskušal kopirati veliko število majhnih datotek z enega medija na drugega, je verjetno opazil, da je hitrost pisanja takšnega niza veliko nižja od ene velike datoteke enake velikosti. In intenzivnost dostopa do trdega diska se znatno poveča, kar na splošno negativno vpliva na delovanje celotnega računalnika. Zato prenos video podatkov v majhnih 10-sekundnih delih prav tako prispeva k večji zakasnitvi motorja.
Naj na kratko povzamemo vse prednosti in slabosti tehnologije HLS.
Prednosti HLS:
- Sposobnost dela s katero koli napravo. Videoposnetke lahko gledate na kateri koli sodobni napravi, pa naj bo to pametni telefon, tablica, prenosnik ali namizni računalnik. Glavna stvar je, da je spletni brskalnik posodobljen in združljiv s HTML5 in Media Source Extensions.
- Odlična kakovost slike. Uporabljena funkcija prilagodljivega prenosa podatkov omogoča dinamično spreminjanje kakovosti prenesenega videa glede na pasovno širino internetne povezave, medtem ko algoritem stremi k ohranjanju maksimalne kakovosti.
- Ni potrebe po kompleksni konfiguraciji uporabniške opreme.
Slabosti:
- Omejena podpora za delo z motorjem na nekaterih napravah.
- Velike zamude pri prenosu slike.
- Znatno povečanje režijskih stroškov in kompleksnosti optimizacije zaradi uporabe majhnih datotek. Zaradi narave vsebnika nikoli ne bomo mogli doseči zakasnitve, nižje od velikosti segmenta.
Slabosti HLS so za nas odtehtale njegove prednosti in nas prisilile k iskanju alternativnih možnosti.
Kaj je WebRTC

()
Platformo WebRTC je Google razvil leta 2011 za prenos pretočnih video in avdio podatkov med brskalniki in mobilnimi aplikacijami z minimalno zakasnitvijo. Za to se uporabljajo standardni protokol UDP in posebni algoritmi za nadzor pretoka. Danes je odprtokodni projekt, aktivno ga vzdržuje Google in se razvija.
WebRTC je nabor tehnologij za prenos videa in zvoka med enakovrednimi. To pomeni, da lahko na primer uporabniški brskalniki, ki uporabljajo WebRTC, prenašajo podatke drug drugemu neposredno, brez uporabe oddaljenih strežnikov za shranjevanje in obdelavo podatkov. Vse informacije obdelujejo tudi brskalniki in mobilne aplikacije končnih uporabnikov.
Удобство и большие возможности данной технологии по достоинству оценили разработчики всех популярных браузеров. Сегодня поддержка WebRTC реализована в Mozilla Firefox, Opera, Google Chrome (и всеми браузерами на базе Chromium), а также в мобильных приложениях под Android in iOS-u.
Kljub vsem svojim nedvomnim prednostim ima WebRTC več pomembnih pomanjkljivosti.
Težave izbire
Tehnologija WebRTC je veliko bolj zapletena v smislu omrežnih interakcij zaradi dejstva, da gre za P2P. Težko ga je odpraviti, preizkusiti in se lahko obnaša nepredvidljivo. Hkrati moramo premagati NAT in požarni zid, zagotoviti moramo delovanje v omrežjih, kjer je UDP blokiran.
Googlovo implementacijo WebRTC je zelo težko uporabljati. Obstaja celo celotno podjetje, ki ponuja storitve sestavljanja SDK. Poleg tega je bilo Googlovo izvedbo zelo težko integrirati v naš sistem brez ponovnega kodiranja celotnega videa.
Vendar smo že dolgo želeli uporabnikom dati možnost, da delajo s popolnim videoposnetkom »v živo« in zmanjšajo zamik med sliko na zaslonu in samimi dogodki. Poleg tega smo želeli narediti uporabo PTZ kamer, kjer so zamude kritične, udobnejšo.
Glede na to, da imajo druge anti-lag implementacije še vedno omejeno funkcionalnost in delujejo opazno slabše, smo se odločili za uporabo WebRTC.
Kaj smo naredili

Pravilna implementacija platforme WebRTC ni lahka naloga. Vsak napačen izračun ali netočnost lahko privede do zamud pri prenosu videa, ki se v primerjavi z drugimi platformami ne le ne zmanjšajo, ampak celo povečajo.
Za pravilno delovanje WebRTC je najprej potrebno izvesti tehnološko nadgradnjo sklada za delo s spletnim videom. To smo storili.
Najprej smo implementirali strežnik signalnega protokola WebRTC preko Websocketa in uvedli enakovredni strežnik WebRTC v oblaku, ki temelji na webrtc.org SDK. Njegova naloga je distribucija video tokov odjemalskim vrstnikom WebRTC v formatu H.264 + Opus/G.711 brez video transkodiranja.
Za signalizacijski protokol smo izbrali Websocket, ker že ima kakovostno podporo v vseh priljubljenih spletnih brskalnikih. Zaradi tega lahko v primerjavi z AJAX znatno zmanjšate ne samo stroške razvoja, ampak se tudi izognete zapravljanju časa in sredstev za ponavljajoče se rokovanje TCP in TLS.
Dejstvo je, da WebRTC privzeto ne zagotavlja signalnega protokola, potrebnega za pravilno konfiguracijo, vzdrževanje in prekinitev video komunikacije v realnem času med izvorno in odjemalsko aplikacijo.
Za samostojno implementacijo signalizacijske tehnologije smo morali razviti lasten signalizacijski strežnik s podporo za več spletnih protokolov (Websocet, WebRTC). In z možnostjo varnega upravljanja sej in obvestil v realnem času, upravljanjem videa in še veliko več.
Omejitve P2P smo premagali tako, da smo zmanjšali zakasnitev ne prek P2P, temveč z UDP in nadzorom pretoka za zmanjšanje zakasnitve. To je vgrajeno tudi v WebRTC, saj so glavni primer uporabe pogovori p2p prek brskalnika.
V mobilnem odjemalcu smo predvajalnik implementirali s pomočjo webrtc.org SDK, saj le ta pravilno izvaja nadzor pretoka, ima vse znane sheme Forward Error Correction (FEC) in pravilno implementira mehanizem za ponovno pošiljanje paketov za vse brskalnike. Pomembno je tudi, da Google aktivno razvija SDK webrtc.org.
Kakšen je rezultat implementacije WebRTC?
Za ogled videa v živo s kamer smo v vaš osebni račun dodali nov optimiziran predvajalnik, ki temelji na WebRTC. Zagotavlja visoke hitrosti nalaganja videa in popolnoma odpravi težavo kopičenja zakasnitve, ko se čas gledanja podaljšuje.
Po uvedbi podpore za WebRTC v storitvi v oblaku Ivideon lahko s popolnim zaupanjem trdimo, da lahko naši uporabniki zdaj gledajo poln video v živo. Zdaj zakasnitev pri predvajanju video sekvenc ne presega ene sekunde! Za primerjavo, prejšnji motor HLS je zagotavljal dostavo videa z zakasnitvijo 5-7 sekund. Razlika v hitrosti video demonstracije je zelo pomembna in jo bo uporabnik opazil takoj po začetku dela z našo video storitvijo.
Kot smo pričakovali, je implementacija novega predvajalnika izboljšala odzivnost PTZ in glasovno komunikacijo s kamero.

Obstaja le ena subtilna točka, na katero želimo opozoriti. Novi predvajalnik WebRTC trenutno deluje v testnem načinu. In zato ga privzeto ne omogočimo za vse naše stranke. Lahko pa ga aktivirate sami, tako da omogočite ustrezen element v nastavitvah kamere (za to morate iti na ).
Značilnosti implementacije WebRTC v storitev Ivideon

WebRTC je trenutno še eksperimentalna tehnologija. Njegova podpora še ni pravilno implementirana v vseh brskalnikih in uporabniških napravah, pa tudi ne v vseh kamerah.
Ravno zato predvajalnika WebRTC še nismo postavili kot privzetega predvajalnika za vse uporabnike.
Za zdaj priporočamo uporabo WebRTC samo v brskalnikih Google Chrome. Najnovejši različici Firefoxa in Safarija podpirata tudi to tehnologijo, vendar je na žalost še vedno nestabilna.
Podpore za WebRTC še nismo implementirali za brskalnike na mobilnih napravah. Ta način trenutno ne bo deloval, če se prijavite iz mobilne naprave in aktivirate WebRTC. Vendar je WebRTC na voljo v naših mobilnih aplikacijah za и .
In ob zaključku zgodbe o značilnostih implementacije WebRTC v naši storitvi, omenimo še dve subtilni točki.
Prvič, tehnologija je osredotočena na oddajanje videa v živo v realnem času. Če torej vaš kanal nima dovolj pasovne širine za prenos videa, boste opazili padce sličic (pri HLS boste opazili bledenje videa in povečano zakasnitev, vendar ne bo padcev sličic), vendar se bo video še vedno predvajal v resničnem čas.
Drugič, ker je tehnologija zasnovana posebej za delo z videoposnetki v živo v realnem času, je ne uporabljamo za delo z arhiviranimi videopodatki.
Druge spremembe storitve
Trenutno Flash ni več vključen v mehanizem samodejne izbire motorja. Še vedno lahko uporabljate tak predvajalnik, vendar ga morate za to ročno izbrati v nastavitvah računa ali kamere. To ni poklon modi, samo glede na statistiko naše storitve praktično ni več uporabnikov, ki bi delali s Flashom. In ko poskušamo ugotoviti, ali brskalnik uporabnika to podpira, izgubimo približno 2 sekundi dragocenega časa.
Tukaj je kratek pregled sprememb, ki vas čakajo v našem sistemu videonadzora v oblaku in osebnem računu. Ostanite z nami in spremljajte novice!
Vir: www.habr.com
