
Din primele zile de lucru asupra sistemului de supraveghere video în cloud, ne-am confruntat cu o problemă, fără soluția căreia Ivideon ar fi fost sortit eșecului – a fost Everestul nostru, al cărui ascensiune ne-a consumat multă energie, dar acum, în sfârșit, am reușit să plantăm un ice-axe în vârful acestui puzzle multiplatformă.
Sistemul de transmitere a sunetului și video-ului prin Internet nu trebuie să depindă de echipamentele hardware, clienții web și standardele suportate de acestea, și, de asemenea, trebuie să funcționeze corect în prezența Network Address Translators și a firewall-urilor. Utilizatorul sistemului de supraveghere video în cloud dorește să aibă acces la serviciu, chiar dacă utilizează camere analogice, iar transmisiile live preferă să le vizioneze pe cele mai moderne dispozitive.
Este foarte important ca utilizatorul să vizioneze video cu o latență minimă. Practic, singura modalitate de a afișa video cu latență scăzută în browser este de a utiliza WebRTC (comunicări web în timp real). WebRTC este un set de tehnologii pentru transmiterea peer-to-peer a video-ului și sunetului în browsere, destinat inițial transmiterii și redării fluxurilor video cu latență scăzută. Acest lucru implică, printre altele, utilizarea protocolului UDP.
Înainte de a vă spune ce le oferă utilizatorului noul motor, vă vom aminti de ce și pentru ce susținem tehnologiile HLS și de ce am decis să avansăm.
Motorul HLS: avantaje și dezavantaje

()
Tehnologia HLS (HTTP Live Streaming) a fost dezvoltată de Apple, așa că nu este de mirare că sprijinul inițial a apărut pe dispozitivele acestui brand. În prezent, majoritatea set-top box-urilor și multe dispozitive care funcționează pe sistemul de operare Android pot reda videoclipuri în format HLS.
Motorul HLS utilizează pentru transmiterea video-ului un codec video cunoscut, H264, împreună cu fluxuri audio AAC sau MP3. Întregul flux de date audio și video este ambalat într-un container de transport MPEG-TS. Pentru a fi transmis prin protocolul HTTP, informațiile din flux sunt împărțite în fragmente, descrise în playlist-uri m3u8. Doar după aceea aceste fragmente, împreună cu playlist-urile, sunt transmise prin HTTP. Împărțirea în fragmente implică automat o întârziere în secunde. Această caracteristică a containerului MPEG-TS.
Motorul HLS suportă, de asemenea, fluxuri multiple cu bitrate-uri diferite, Live/VOD.
Principalele avantaje ale HLS:
- suport încorporat în toate browserele principale;
- ușurința de implementare (comparativ cu WebRTC);
- este foarte convenabil și eficient să organizați diverse transmisii pentru un public mare, deoarece puteți încărca segmente pe CDN o singură dată.
Cu toate că motorul este simplu, lucrurile nu sunt atât de ușoare pe cât par. Principala problemă este că dezvoltatorii de playere terță parte s-au distanțat de recomandările Apple, de exemplu, în ceea ce privește formatele audio acceptate. În special, mulți dezvoltatori au început să adauge funcționalitatea de a lucra cu fluxuri audio populare: video mpeg2, audio mpeg2 și altele. Din această cauză, a fost necesar să se creeze formate diferite de liste de redare pentru diferite playere.
Dar una dintre cele mai mari probleme ale motorului HLS este întârzierea mare în transmisia datelor.
Istoricul "întârzierilor"
Principala cauză a întârzierii mari la HLS se îndreaptă spre faptul că programatorii au creat motorul pentru a obține o calitate maximă a imaginii. Prin urmare, parametrii intervalului de cadre utilizat și dimensiunea buffer-ului de redare pur și simplu nu se potrivesc pentru desfășurarea transmisiunilor video live. Din acest motiv, apare o întârziere destul de mare în transmisia video, care poate ajunge la 5-7 secunde.
Pe de o parte, aceasta este o întârziere mică, de exemplu, pentru cei care vizionează un film de pe un server de video hosting. Dar pentru sistemele de supraveghere, întârzierea în transmisia video poate avea o importanță foarte mare.
Dacă observați un birou unde angajații se deconectează o dată pe oră de la monitoare, atunci o întârziere de 5 secunde nu are nicio importanță. Dar utilizatorii au început să se plângă că, de exemplu, în timpul transmiterii unui meci de fotbal, în chat s-a scris deja GOOOOOL, dar în video nu a apărut încă :). Avem deja o serie de cazuri de utilizare în care Ivideon trebuie să înlocuiască practic Skype.
Se poate înfrunta întârzierea în HLS? Răspunsul la această întrebare sună ca un discurs al unui fumător experimentat de șobolani la o lecție în fața deratizatorilor începutori: „Șobolanii nu pot fi exterminați, dar populația lor poate fi redusă la un minim rezonabil”. La fel este și cu întârzierea în HLS, nu o putem elimina complet, dar pe piață există soluții care permit reducerea semnificativă a întârzierii.
Tăieturi mici
O altă problemă a motorului este utilizarea fișierelor mici pentru transmisia datelor. S-ar părea că ce poate fi rău în asta?
Oricine a încercat să copieze un număr mare de fișiere mici de pe un suport pe altul a observat cu siguranță că viteza de scriere pentru un astfel de set este mult mai mică decât cea a unui singur fișier mare cu același volum. De asemenea, intensitatea accesării discului dur crește semnificativ, ceea ce afectează în general performanța întregului computer. Prin urmare, transmiterea datelor video sub formă de fragmente mici de 10 secunde contribuie de asemenea la o întârziere mai mare a motorului.
Să rezumăm pe scurt toate avantajele și dezavantajele tehnologiei HLS.
Avantajele HLS:
- Posibilitatea de a funcționa cu orice dispozitiv. Puteți viziona video pe orice dispozitiv modern, fie că este vorba de smartphone, tabletă, laptop sau PC desktop. Principalul lucru este ca browserul web să fie o versiune modernă și să fie compatibil cu HTML5 și Media Source Extensions.
- Calitate excelentă a imaginii. Funcția utilizată de transmitere adaptivă a datelor permite schimbarea dinamică a calității fluxului video în funcție de lățimea de bandă a conexiunii la internet, iar algoritmul tinde să mențină calitatea la maxim.
- Nu este nevoie de o configurare complexă a echipamentului utilizatorului.
Dezavantaje:
- Suport limitat pentru funcționarea motorului pe anumite dispozitive.
- Întârzieri mari în transmiterea imaginii.
- Creșterea semnificativă a cheltuielilor și complexitatea optimizării din cauza utilizării fișierelor de dimensiuni mici. Datorită caracteristicilor containerului, nu vom putea obține niciodată o întârziere mai mică decât dimensiunea segmentului.
Dezavantajele HLS au depășit pentru noi avantajele sale și ne-au făcut să căutăm opțiuni alternative.
Ce este WebRTC

()
Platforma WebRTC a fost dezvoltată de Google în 2011 pentru a transmite date video și audio în flux între browsere și aplicații mobile cu o întârziere minimă. Acest lucru se face prin utilizarea protocolului standard UDP și a unor algoritmi speciali de control al fluxului. Astăzi, este un proiect cu sursă deschisă, care este activ susținut de Google și în dezvoltare.
WebRTC este un set de tehnologii pentru transmiterea video și audio peer-to-peer. Adică, de exemplu, browserele utilizatorilor pot transmite date direct între ele, fără a utiliza servere externe pentru stocarea și procesarea datelor. Toate informațiile sunt de asemenea procesate de browsere și aplicații mobile ale utilizatorilor finali.
Confortul și capacitățile mari ale acestei tehnologii au fost apreciate de dezvoltatorii tuturor browserelor populare. În prezent, suportul pentru WebRTC este implementat în Mozilla Firefox, Opera, Google Chrome (și toate browserele bazate pe Chromium), precum și în aplicațiile mobile pentru Android și iOS.
În ciuda tuturor calităților sale incontestabile, WebRTC are câteva dezavantaje semnificative.
Dificultăți de alegere
Tehnologia WebRTC este mult mai complicată în ceea ce privește interacțiunile de rețea, deoarece este bazată pe P2P. Este greu de debug-uit, testat și poate avea un comportament imprevizibil. În plus, trebuie să depășim NAT-ul și firewall-urile, necesitând asigurarea funcționării în rețele unde UDP este blocat.
Implementarea WebRTC de la Google este foarte greu de utilizat. Există chiar o întreagă companie care oferă servicii de construcție a SDK-ului. În plus, integrarea soluției de la Google cu sistemul nostru a fost foarte dificilă, astfel încât să nu fie necesară recompunerea întregului video.
Cu toate acestea, ne-am dorit de mult timp să oferim utilizatorilor posibilitatea de a lucra cu un flux video 'live' complet și de a minimiza decalajul imaginii de pe ecran față de evenimentele în sine. În plus, am dorit să facem utilizarea camerelor PTZ mai confortabilă, unde întârzierile au o semnificație critică.
Având în vedere că alte soluții pentru combaterea întârzierilor au, deocamdată, funcționalitate limitată și funcționează semnificativ mai rău, am decis să folosim WebRTC.
Ce am făcut

Integrarea eficientă a platformei WebRTC nu este o sarcină ușoară. Orice calcule greșite sau inexactități pot duce la faptul că întârzierile în transmiterea fluxului video nu numai că nu scad față de alte platforme, ci pot chiar crește.
Pentru funcționarea corectă a WebRTC, mai întâi trebuie realizată o modernizare tehnologică a stivei pentru a lucra cu video-web. Acesta a fost ceea ce am realizat.
La început, am implementat serverul de semnalizare WebRTC peste Websocket și am desfășurat un server peer WebRTC în cloud bazat pe SDK webrtc.org. Rolul său este de a distribui fluxuri video către clienții peer WebRTC în format H.264 + Opus/G.711 fără recodificarea video.
Am ales Websocket ca protocol de semnalizare deoarece beneficiază deja de un suport de calitate în toate browserele web populare. Acest lucru permite reducerea semnificativă nu doar a cheltuielilor de dezvoltare, ci și a timpului și resurselor necesare pentru reîncărcările TCP și TLS în comparație cu AJAX.
Problema este că, în mod implicit, WebRTC nu oferă un protocol de semnalizare necesar pentru configurarea, întreținerea și întreruperea corectă a comunicației video în timp real între aplicațiile de sursă și cele client.
Și pentru a implementa tehnologia de semnalizare pe cont propriu, a fost necesar să dezvoltăm propriul server de semnalizare cu suport pentru mai multe protocoale web (Websocket, WebRTC). De asemenea, cu posibilități de gestionare sigură a sesiunilor și notificărilor în timp real, gestionarea video și multe alte parametrii.
Am depășit limitările P2P reducând latența nu prin P2P, ci prin UDP și gestionarea fluxului pentru a reduce întârzierea. Acest lucru este, de asemenea, încorporat în WebRTC, având în vedere că principalul caz de utilizare este conversațiile p2p prin browser.
În clientul mobil, am realizat un player folosind SDK webrtc.org, deoarece doar acesta a implementat corect gestionarea fluxului, are toate schemele cunoscute de Forward Error Correction (FEC) și a implementat corect mecanismul de retransmitere a pachetelor pentru toate browserele. Un alt aspect important este că SDK webrtc.org este activ dezvoltat de Google.
Care este rezultatul implementării WebRTC?
Pentru a viziona flux video live din camere, am adăugat în cabinetul personal un nou player optimizat bazat pe WebRTC. Acesta asigură o viteză mare de încărcare a fluxului video și elimină complet problema acumulării întârzierii pe măsură ce timpul de vizionare crește.
După implementarea suportului WebRTC în serviciul cloud Ivideon, putem afirma cu încredere că acum clienții noștri pot viziona video în direct complet. Acum, întârzierea în transmiterea fluxului video nu depășește un secundă! Spre deosebire, vechiul motor HLS asigura livrarea video cu o întârziere de 5-7 secunde. Diferența de viteză a demonstrării video este foarte semnificativă, iar utilizatorul o va observa imediat după ce începe să utilizeze serviciul nostru video.
Așa cum ne-am așteptat, implementarea noului player a permis creșterea reacției PTZ și a comunicării vocale cu camera.

Există un singur aspect subtil asupra căruia dorim să atragem atenția. Noul player WebRTC funcționează deocamdată în modul de testare. Din acest motiv, nu îl activăm pentru toți clienții noștri în mod implicit. Dar îl puteți activa singuri, activând opțiunea corespunzătoare în setările camerei (pentru aceasta trebuie să accesați ).
Particularitățile implementării WebRTC în serviciul Ivideon

WebRTC este în prezent o tehnologie experimentală. Suportul său nu este încă implementat corect în toate browserele și dispozitivele utilizatorilor, precum și în toate camerele.
Acest fapt explică de ce nu am făcut WebRTC playerul principal pentru toți utilizatorii deocamdată.
Deocamdată recomandăm utilizarea WebRTC doar în browserele Google Chrome. Cele mai recente versiuni de Firefox și Safari suportă de asemenea această tehnologie, dar, din păcate, încă instabil.
Nu am implementat încă suportul WebRTC pentru browserele de pe dispozitivele mobile. Acum, dacă accesați de pe un dispozitiv mobil și activați WebRTC, acest mod nu va funcționa. Cu toate acestea, WebRTC este disponibil în aplicațiile noastre mobile pentru și .
Și în încheiere, discutând despre particularitățile implementării WebRTC în serviciul nostru, menționăm încă două aspecte subtile.
În primul rând, tehnologia este orientată spre transmiterea video în timp real. Prin urmare, dacă lățimea de bandă a canalului dvs. nu este suficientă pentru transmiterea fluxului video, veți observa caderea cadrelor (cu HLS, veți observa înghețarea video și creșterea întârzierei, dar cadrele nu vor cădea), însă video va fi în continuare transmis în timp real.
În al doilea rând, deoarece tehnologia este destinată să funcționeze exact cu video live în timp real, nu o folosim pentru a lucra cu date video arhivate.
Alte modificări în serviciu
În prezent, Flash nu mai este implicat în mecanismul de selecție automată a motorului. Este încă posibil să folosiți un astfel de player, dar pentru aceasta trebuie să-l selectați manual în setările contului sau ale camerei. Nu este o chestiune de modă, pur și simplu, conform statisticilor noastre de utilizare, utilizatorii care lucrează cu Flash aproape că nu mai există. Și în tentativa de a determina dacă browserul utilizatorului îl suportă, pierdem aproximativ 2 secunde din timp prețios.
Iată pe scurt modificările pe care le veți întâlni în sistemul nostru de supraveghere video cloud și în portalul personal. Rămâneți alături de noi și urmăriți noutățile!
Sursa: habr.com
