
Încă din primele zile de lucru la un sistem de supraveghere video în cloud, ne-am confruntat cu o problemă, fără o soluție la care să renunțăm la Ivideon - acesta a fost Everestul nostru, urcarea care a luat multă energie, dar acum avem în sfârșit. a înfipt un piolet în partea de sus a puzzle-ului multiplatforme.
Sistemul de transmitere audio și video prin Internet nu ar trebui să depindă de echipamente, clienți web și standardele pe care le suportă și, de asemenea, să funcționeze corect în prezența traducătorilor de adrese de rețea și a firewall-urilor. Un utilizator de supraveghere video în cloud dorește să acceseze serviciul, chiar dacă folosește camere analogice, și preferă să urmărească transmisia video în direct pe cel mai modern dispozitiv.
Este foarte semnificativ faptul că utilizatorul dorește să vizioneze videoclipuri cu întârziere minimă. Aproape singura modalitate de a afișa videoclipuri cu latență scăzută într-un browser este utilizarea WebRTC (comunicații web în timp real). WebRTC este un set de tehnologii pentru transmisia peer-to-peer a video și audio în browsere, concepute inițial pentru transmiterea și redarea fluxurilor video cu latență scăzută. În acest scop, printre altele, se utilizează protocolul UDP.
Înainte de a vă spune ce oferă noul motor utilizatorului, vă vom aminti de ce și de ce sprijinim tehnologiile HLS și de ce am decis să mergem mai departe.
Motorul HLS: argumente pro și contra

()
Tehnologia HLS (HTTP Live Streaming) a fost dezvoltată de Apple, așa că nu este surprinzător faptul că a fost compatibilă pentru prima dată cu dispozitivele Apple. Astăzi, tehnologia video HLS este compatibilă și cu practic toate set-top box-urile și cu multe dispozitive care rulează acest sistem de operare. Android.
Motorul HLS folosește binecunoscutul codec video H264 în combinație cu fluxuri audio AAC sau MP3 pentru a transmite date video. Întregul flux de date audio și video este împachetat într-un container de transport MPEG-TS. Pentru transmiterea prin protocolul HTTP, informațiile conținute în flux sunt împărțite în fragmente descrise în listele de redare m3u8. Și numai atunci aceste fragmente, împreună cu listele de redare, sunt transmise prin HTTP. Fragmentarea automată înseamnă o întârziere în secunde. Aceasta este o caracteristică a containerului MPEG-TS.
Motorul HLS acceptă și fluxuri multibitrate, Live/VOD.
Principalele avantaje ale HLS:
- suport încorporat în toate browserele majore;
- ușurință de implementare (comparativ cu WebRTC);
- Este foarte convenabil și eficient să organizezi tot felul de emisiuni către o audiență mare datorită faptului că segmentele pot fi încărcate pe un CDN o singură dată.
În ciuda simplității motorului, nu totul este atât de lin pe cât pare. Principala problemă este că dezvoltatorii de playere terțe s-au îndepărtat de recomandările Apple, de exemplu în ceea ce privește formatele audio acceptate. În special, mulți dezvoltatori au început să adauge capacitatea de a lucra cu fluxuri audio populare: video mpeg2, audio mpeg2 etc. Ca urmare, au trebuit să creeze diferite formate de liste de redare pentru diferiți jucători.
Dar una dintre cele mai mari probleme ale motorului HLS este latența mare în transferul de date.
Originile „frânelor”
Motivul principal al latenței mari a HLS constă în faptul că programatorii au creat motorul pentru a obține imagini de cea mai înaltă calitate. Prin urmare, parametrii intervalului de cadre utilizate și dimensiunea buffer-ului de redare pur și simplu nu sunt potriviți pentru transmisiile video live. Din acest motiv, există o întârziere destul de mare în transmiterea înregistrărilor video, care poate fi de 5-7 secunde.
Pe de o parte, acest lucru nu este mult, de exemplu, pentru cei care urmăresc un film de pe un server de găzduire video. Însă pentru sistemele de supraveghere video, întârzierea transmiterii înregistrărilor video poate fi foarte importantă.
Dacă urmăriți un birou în care angajații își ridică privirea de pe monitoare o dată pe oră, atunci o întârziere de 5 secunde nu contează deloc. Dar oamenii au început să se plângă că, de exemplu, la difuzarea unui meci de fotbal, au scris deja GOOOOL în chat, dar asta nu este încă în videoclip :). Avem deja o serie de cazuri de utilizator în care Ivideon ar trebui să înlocuiască practic Skype.
Este posibil să învingeți latența în HLS? Răspunsul la această întrebare sună ca discursul unui exterminator de șobolani experimentat la o prelegere adresată specialiștilor începători în controlul dăunătorilor: „Șobolanii nu pot fi exterminați, dar numărul lor poate fi redus la un minim rezonabil”. La fel și cu întârzierea în HLS, nu se va putea reduce la zero, dar există soluții pe piață care pot reduce semnificativ întârzierea.
Tăieturi fine
Un alt dezavantaj al motorului este utilizarea de fișiere mici pentru transferul de date. S-ar părea că ce e în neregulă cu asta?
Oricine a încercat să copieze un număr mare de fișiere mici de pe un mediu pe altul a observat probabil că viteza de scriere a unui astfel de set este mult mai mică decât un fișier mare de aceeași dimensiune. Iar intensitatea accesului la hard disk crește semnificativ, ceea ce afectează în general negativ performanța întregului computer. Prin urmare, transmiterea datelor video în bucăți mici de 10 secunde contribuie, de asemenea, la creșterea latenței motorului.
Să rezumăm pe scurt toate avantajele și dezavantajele tehnologiei HLS.
Avantajele HLS:
- Abilitatea de a lucra cu orice dispozitiv. Puteți viziona videoclipuri pe orice dispozitiv modern, fie că este un smartphone, tabletă, laptop sau computer desktop. Principalul lucru este că browserul web este actualizat și compatibil cu HTML5 și extensiile Media Source.
- Calitate excelentă a imaginii. Funcția adaptivă de transmisie a datelor utilizată vă permite să schimbați dinamic calitatea videoclipului transmis în funcție de lățimea de bandă a conexiunii la Internet, în timp ce algoritmul se străduiește să mențină calitatea maximă.
- Nu este nevoie de configurarea complexă a echipamentului utilizatorului.
Dezavantaje:
- Suport limitat pentru lucrul cu motorul pe unele dispozitive.
- Întârzieri mari în transmiterea imaginii.
- Creștere semnificativă a costurilor generale și a complexității optimizării datorită utilizării fișierelor mici. Datorită naturii containerului, nu vom putea niciodată să obținem o latență mai mică decât dimensiunea segmentului.
Dezavantajele HLS au depășit avantajele sale pentru noi și ne-au forțat 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 latență minimă. Pentru aceasta, se utilizează protocolul UDP standard și algoritmi speciali de control al fluxului. Astăzi este un proiect open source, este întreținut activ de Google și este în curs de dezvoltare.
WebRTC este un set de tehnologii pentru transmisia video și audio peer-to-peer. Adică, de exemplu, browserele utilizatorilor care utilizează WebRTC pot transfera date între ele direct, fără a utiliza servere la distanță pentru stocarea și procesarea datelor. Toate informațiile sunt procesate și de browserele utilizatorilor finali și de aplicațiile mobile.
Comoditatea și capacitățile extinse ale acestei tehnologii au fost apreciate de dezvoltatorii tuturor browserelor populare. Suportul WebRTC este disponibil în prezent în Mozilla Firefox, Opera, Google Chrome (și toate browserele bazate pe Chromium), precum și în aplicațiile mobile care rulează Android și iOS.
Cu toate avantajele sale neîndoielnice, WebRTC are câteva dezavantaje semnificative.
Dificultăți de alegere
Tehnologia WebRTC este mult mai complexă în ceea ce privește interacțiunile în rețea datorită faptului că este vorba despre P2P. Este dificil de depanat, testat și se poate comporta imprevizibil. În același timp, trebuie să depășim NAT și firewall, trebuie să asigurăm funcționarea în rețelele în care UDP este blocat.
Implementarea WebRTC de la Google este foarte dificil de utilizat. Există chiar și o întreagă companie care oferă servicii de asamblare SDK. În plus, implementarea Google a fost foarte dificil de integrat cu sistemul nostru fără a re-codifica întregul videoclip.
Cu toate acestea, ne-am dorit de mult să oferim utilizatorilor posibilitatea de a lucra cu videoclipuri „în direct” cu drepturi depline și de a minimiza decalajul dintre imaginea de pe ecran și evenimentele în sine. În plus, am avut dorința de a folosi camerele PTZ, unde întârzierile sunt critice, mai confortabile.
Având în vedere că alte implementări anti-lag au încă funcționalități limitate și funcționează considerabil mai rău, am decis să folosim WebRTC.
Ce am făcut

Implementarea corectă a platformei WebRTC nu este o sarcină ușoară. Orice calcul greșit sau inexactitate poate duce la întârzierile transmisiei video nu numai că nu scad în comparație cu alte platforme, ci chiar cresc.
Pentru ca WebRTC să funcționeze corect, în primul rând, este necesar să se efectueze o actualizare tehnologică a stivei pentru lucrul cu video web. Asta am făcut.
În primul rând, am implementat un server de protocol de semnalizare WebRTC prin Websocket și, de asemenea, am implementat un server WebRTC peer în cloud bazat pe SDK-ul webrtc.org. Sarcina sa este de a distribui fluxuri video către colegii client WebRTC în format H.264 + Opus/G.711 fără transcodare video.
Am ales Websocket ca protocol de semnalizare, deoarece are deja suport de înaltă calitate în toate browserele web populare. Datorită acestui fapt, puteți reduce semnificativ nu numai costul general de dezvoltare, ci și să evitați pierderea timpului și a resurselor cu strângeri de mână TCP și TLS repetate în comparație cu AJAX.
Faptul este că, în mod implicit, WebRTC nu oferă protocolul de semnalizare necesar pentru a configura, menține și încheia în mod corespunzător comunicarea video în timp real între aplicațiile sursă și client.
Și pentru a implementa independent tehnologia de semnalizare, a trebuit să dezvoltăm propriul server de semnalizare cu suport pentru mai multe protocoale web (Websocet, WebRTC). Și cu capacitatea de a gestiona în siguranță sesiunile și notificările în timp real, gestionarea videoclipurilor și multe altele.
Am depășit limitările P2P prin reducerea latenței nu prin P2P, ci prin UDP și controlul fluxului pentru a reduce latența. Acesta este, de asemenea, încorporat în WebRTC, deoarece principalul caz de utilizare sunt conversațiile p2p prin intermediul unui browser.
În clientul mobil, am implementat playerul utilizând SDK-ul webrtc.org, deoarece numai acesta implementează corect controlul fluxului, are toate schemele cunoscute de corectare a erorilor înainte (FEC) și implementează corect mecanismul de retrimitere a pachetelor pentru toate browserele. De asemenea, este important ca SDK-ul webrtc.org să fie dezvoltat în mod activ de Google.
Care este rezultatul implementării WebRTC?
Pentru a vizualiza videoclipuri live de la camere, am adăugat un nou player optimizat bazat pe WebRTC în contul dvs. personal. Oferă viteze rapide de încărcare a videoclipurilor și elimină complet problema acumularii latenței pe măsură ce timpul de vizionare crește.
După introducerea suportului WebRTC în serviciul cloud Ivideon, putem spune cu deplină încredere că clienții noștri pot viziona acum videoclipuri în direct cu drepturi depline. Acum, întârzierea la difuzarea secvențelor video nu depășește o secundă! Pentru comparație, motorul HLS anterior a furnizat livrarea video cu o întârziere de 5-7 secunde. Diferența de viteză a demonstrației video este foarte semnificativă, iar utilizatorul o va observa imediat după ce începe să lucreze cu serviciul nostru video.
După cum ne așteptam, implementarea noului player a îmbunătățit capacitatea de răspuns a PTZ și a comunicației vocale cu camera.

Există un singur punct subtil asupra căruia vrem să atragem atenția. Noul player WebRTC funcționează în prezent în modul de testare. Și de aceea nu îl activăm pentru toți clienții noștri în mod implicit. Dar îl puteți activa singur activând elementul corespunzător din setările camerei (pentru a face acest lucru, trebuie să accesați ).
Caracteristici ale implementării WebRTC în serviciul Ivideon

WebRTC este încă o tehnologie experimentală în acest moment. Suportul său nu este încă implementat corect în toate browserele și dispozitivele utilizatorului și, de asemenea, nu în toate camerele.
Acesta este motivul pentru care nu am făcut încă playerul WebRTC implicit pentru toți utilizatorii.
Pentru moment, vă recomandăm să utilizați WebRTC numai în browserele Google Chrome. Cele mai recente versiuni de Firefox și Safari acceptă și ele această tehnologie, dar, din păcate, este încă instabilă.
Nu am implementat încă suportul WebRTC pentru browserele de pe dispozitivele mobile. În prezent, dacă vă conectaț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 încheind povestea despre caracteristicile implementării WebRTC în serviciul nostru, să remarcăm încă două puncte subtile.
În primul rând, tehnologia se concentrează pe difuzarea de videoclipuri live în timp real. Prin urmare, dacă canalul dvs. nu are suficientă lățime de bandă pentru a transmite videoclipul, veți observa scăderi de cadre (cu HLS veți observa decolorarea video și latența crescută, dar nu vor exista scăderi de cadre), dar videoclipul va fi în continuare difuzat în real timp.
În al doilea rând, deoarece tehnologia este concepută pentru a funcționa în mod specific cu videoclipuri live în timp real, nu o folosim pentru a lucra cu date video arhivate.
Alte modificări ale serviciului
În acest moment, Flash nu mai este implicat în mecanismul de selecție automată a motorului. Puteți folosi în continuare un astfel de player, dar pentru a face acest lucru trebuie să îl selectați manual în setările contului sau ale camerei. Acesta nu este un tribut adus modei, ci doar că, conform statisticilor serviciului nostru, practic nu au mai rămas utilizatori care lucrează cu Flash. Și încercând să stabilim dacă browserul utilizatorului îl acceptă, pierdem aproximativ 2 secunde de timp prețios.
Iată o scurtă prezentare generală a schimbărilor care vă așteaptă în sistemul nostru de supraveghere video în cloud și în contul personal. Rămâneți alături de noi și urmăriți noutățile!
Sursa: www.habr.com
