
Od prvih dana rada na sustavu videonadzora u oblaku susreli smo se s problemom, bez rješenja za koji smo mogli odustati od Ivideona - to je bio naš Everest, penjanje koje je oduzimalo puno energije, ali sada smo konačno zabio je sjekiru u vrh slagalice s više platformi.
Sustav za prijenos zvuka i videa putem interneta ne bi trebao ovisiti o opremi, web klijentima i standardima koje oni podržavaju, a također bi trebao ispravno raditi u prisutnosti prevoditelja mrežnih adresa i vatrozida. Korisnik videonadzora u oblaku želi pristupiti usluzi, čak i ako koristi analogne kamere, te radije gleda video prijenos uživo na najmodernijem uređaju.
Vrlo je značajno da korisnik želi gledati video s minimalnim kašnjenjem. Gotovo jedini način za prikazivanje videa s malom latencijom u pregledniku je korištenje WebRTC-a (web komunikacija u stvarnom vremenu). WebRTC je skup tehnologija za peer-to-peer prijenos videa i zvuka u preglednicima, prvobitno dizajniran za prijenos i reprodukciju video streamova s niskom latencijom. U tu svrhu, između ostalog, koristi se UDP protokol.
Prije nego što vam kažemo što novi engine daje korisniku, podsjetit ćemo vas zašto i zašto podržavamo HLS tehnologije, te zašto smo odlučili krenuti dalje.
HLS motor: prednosti i mane

()
HLS (HTTP Live Streaming) tehnologiju razvio je Apple, stoga ne čudi da je prvi put podržana na Apple uređajima. Danas HLS video podržavaju gotovo svi set-top box uređaji i mnogi uređaji s tim operativnim sustavom. Android.
HLS motor koristi dobro poznati H264 video kodek u kombinaciji s AAC ili MP3 audio streamovima za strujanje video podataka. Cijeli tok audio i video podataka pakiran je u MPEG-TS transportni spremnik. Za prijenos putem HTTP protokola, informacije sadržane u streamu podijeljene su u fragmente opisane u m3u8 playlistama. I tek tada se ti fragmenti, zajedno s popisima za reprodukciju, prenose putem HTTP-a. Chunking automatski znači odgodu u sekundama. Ovo je značajka MPEG-TS spremnika.
HLS mehanizam također podržava multibitrate streamove, Live/VOD.
Glavne prednosti HLS-a:
- ugrađena podrška u svim glavnim preglednicima;
- jednostavnost implementacije (u usporedbi s WebRTC-om);
- Vrlo je zgodno i učinkovito organizirati sve vrste emitiranja za veliku publiku zbog činjenice da se segmenti mogu prenijeti na CDN jednom.
Unatoč jednostavnosti motora, nije sve tako glatko kao što se čini. Glavni problem je što su programeri playera trećih strana odstupili od Appleovih preporuka, primjerice u pogledu podržanih audio formata. Konkretno, mnogi programeri počeli su dodavati mogućnost rada s popularnim audio streamovima: mpeg2 video, mpeg2 audio, itd. Kao rezultat toga, morali su stvoriti različite formate popisa za reprodukciju za različite igrače.
Ali jedan od najvećih problema s HLS motorom je velika latencija u prijenosu podataka.
Porijeklo "kočnica"
Glavni razlog za visoku latenciju HLS-a leži u činjenici da su programeri stvorili motor za dobivanje slike najviše kvalitete. Stoga parametri korištenog intervala okvira i veličina međuspremnika za reprodukciju jednostavno nisu prikladni za video prijenos uživo. Zbog toga dolazi do prilično velikog kašnjenja u prijenosu video zapisa, koje može iznositi 5-7 sekundi.
S jedne strane, to nije puno, na primjer, za one koji gledaju film s poslužitelja za video hosting. Ali za sustave video nadzora kašnjenje u prijenosu video zapisa može biti vrlo važno.
Ako gledate ured u kojem zaposlenici podižu pogled sa svojih monitora jednom u sat vremena, tada odgoda od 5 sekundi uopće nije bitna. Ali ljudi su se počeli buniti da su, primjerice, prilikom prijenosa nogometne utakmice već napisali GOOOOL u chatu, ali toga još nema na videu :). Već imamo niz korisničkih slučajeva u kojima bi Ivideon praktički trebao zamijeniti Skype.
Je li moguće pobijediti latenciju u HLS-u? Odgovor na ovo pitanje zvuči poput govora iskusnog istrebljivača štakora na predavanju početnicima u suzbijanju štetočina: "Štakori se ne mogu istrijebiti, ali se njihov broj može svesti na razumni minimum." Isto je i s kašnjenjem u HLS-u, neće ga se moći svesti na nulu, ali na tržištu postoje rješenja koja mogu značajno smanjiti kašnjenje.
Fini rezovi
Još jedan nedostatak motora je korištenje malih datoteka za prijenos podataka. Čini se da što nije u redu s ovim?
Svatko tko je pokušao kopirati veliki broj malih datoteka s jednog medija na drugi vjerojatno je primijetio da je brzina pisanja takvog skupa mnogo manja od jedne velike datoteke iste veličine. I intenzitet pristupa tvrdom disku značajno se povećava, što općenito negativno utječe na performanse cijelog računala. Stoga prijenos videopodataka u malim dijelovima od 10 sekundi također pridonosi povećanom kašnjenju motora.
Ukratko rezimiramo sve prednosti i nedostatke HLS tehnologije.
Prednosti HLS-a:
- Sposobnost rada s bilo kojim uređajima. Možete gledati videozapise na bilo kojem modernom uređaju, bilo da se radi o pametnom telefonu, tabletu, prijenosnom ili stolnom računalu. Najvažnije je da web-preglednik bude ažuriran i kompatibilan s HTML5 i Media Source Extensions.
- Izvrsna kvaliteta slike. Korištena adaptivna funkcija prijenosa podataka omogućuje dinamičku promjenu kvalitete prenesenog videa ovisno o propusnosti internetske veze, dok algoritam nastoji održati maksimalnu kvalitetu.
- Nema potrebe za složenim konfiguriranjem korisničke opreme.
Nedostaci:
- Ograničena podrška za rad s motorom na nekim uređajima.
- Velika kašnjenja u prijenosu slike.
- Značajno povećanje troškova i složenosti optimizacije zbog upotrebe malih datoteka. Zbog prirode spremnika, nikada nećemo moći dobiti latenciju nižu od veličine segmenta.
Nedostaci HLS-a za nas su nadmašili njegove prednosti i natjerali nas da tražimo alternativne mogućnosti.
Što je WebRTC

()
Platformu WebRTC razvio je Google 2011. godine za prijenos video i audio podataka u struji između preglednika i mobilnih aplikacija s minimalnom latencijom. Za to se koriste standardni UDP protokol i posebni algoritmi za kontrolu protoka. Danas je to projekt otvorenog koda, Google ga aktivno održava i razvija se.
WebRTC je skup tehnologija za peer-to-peer video i audio prijenos. To jest, na primjer, korisnički preglednici koji koriste WebRTC mogu međusobno izravno prenositi podatke, bez korištenja udaljenih poslužitelja za pohranu i obradu podataka. Sve informacije također obrađuju preglednici i mobilne aplikacije krajnjih korisnika.
Praktičnost i opsežne mogućnosti ove tehnologije cijenili su programeri svih popularnih preglednika. Podrška za WebRTC trenutno je dostupna u Mozilla Firefoxu, Operi, Google Chromeu (i svim preglednicima temeljenim na Chromiumu), kao i u mobilnim aplikacijama koje rade Android i iOS-u.
Uz sve svoje nedvojbene prednosti, WebRTC ima nekoliko značajnih nedostataka.
Teškoće u odabiru
WebRTC tehnologija je mnogo složenija u pogledu mrežnih interakcija zbog činjenice da se radi o P2P. Teško ga je ispraviti, testirati i može se ponašati nepredvidivo. U isto vrijeme, moramo prevladati NAT i firewall, moramo osigurati rad u mrežama gdje je UDP blokiran.
Googleovu implementaciju WebRTC-a vrlo je teško koristiti. Postoji čak i cijela tvrtka koja pruža usluge sklapanja SDK-a. Osim toga, Googleovu implementaciju bilo je vrlo teško integrirati s našim sustavom bez ponovnog kodiranja cijelog videozapisa.
Međutim, dugo smo željeli korisnicima dati priliku da rade s potpunim videom "uživo" i minimiziraju kašnjenje između slike na ekranu i samih događaja. Osim toga, imali smo želju da korištenje PTZ kamera, gdje su kašnjenja kritična, učinimo ugodnijim.
S obzirom na to da druge anti-lag implementacije još uvijek imaju ograničenu funkcionalnost i osjetno lošije rade, odlučili smo koristiti WebRTC.
Što smo učinili

Ispravna implementacija WebRTC platforme nije lak zadatak. Svaka pogrešna procjena ili netočnost može dovesti do kašnjenja u video prijenosu, ne samo da se ne smanjuju u usporedbi s drugim platformama, nego se čak i povećavaju.
Za ispravan rad WebRTC-a, prije svega, potrebno je izvršiti tehnološku nadogradnju steka za rad s web videom. To smo i učinili.
Prvo smo implementirali poslužitelj WebRTC signalnog protokola preko Websocketa, a također smo postavili WebRTC peer poslužitelj u oblaku temeljen na webrtc.org SDK. Njegov zadatak je distribuirati video streamove klijentskim WebRTC peerovima u H.264 + Opus/G.711 formatu bez video transkodiranja.
Izabrali smo Websocket kao signalni protokol jer već ima visokokvalitetnu podršku u svim popularnim web preglednicima. Zbog toga možete značajno smanjiti ne samo troškove razvoja, već i izbjeći gubljenje vremena i resursa na ponovljena TCP i TLS rukovanja u usporedbi s AJAX-om.
Činjenica je da, prema zadanim postavkama, WebRTC ne osigurava signalni protokol potreban za pravilno konfiguriranje, održavanje i prekid video komunikacije u stvarnom vremenu između izvorne i klijentske aplikacije.
A kako bismo samostalno implementirali signalnu tehnologiju, morali smo razviti vlastiti signalni server s podrškom za nekoliko web protokola (Websocet, WebRTC). Uz mogućnost sigurnog upravljanja sesijama i obavijestima u stvarnom vremenu, upravljanje video zapisima i još mnogo toga.
Prevladali smo ograničenja P2P-a smanjivanjem kašnjenja ne putem P2P-a, već putem UDP-a i kontrole protoka kako bismo smanjili kašnjenje. Ovo je također ugrađeno u WebRTC, budući da su glavni slučaj upotrebe p2p razgovori putem preglednika.
U mobilnom klijentu implementirali smo player koristeći webrtc.org SDK, budući da samo on ispravno implementira kontrolu protoka, ima sve poznate sheme Forward Error Correction (FEC) i ispravno implementira mehanizam za ponovno slanje paketa za sve preglednike. Također je važno da webrtc.org SDK aktivno razvija Google.
Koji je rezultat implementacije WebRTC-a?
Za gledanje videa uživo s kamera, dodali smo novi optimizirani player temeljen na WebRTC-u na vaš osobni račun. Omogućuje velike brzine učitavanja videozapisa i potpuno eliminira problem kašnjenja dok se vrijeme gledanja povećava.
Nakon uvođenja WebRTC podrške u uslugu oblaka Ivideon, s potpunim povjerenjem možemo reći da naši klijenti sada mogu gledati potpuni video uživo. Sada kašnjenje pri emitiranju video sekvenci ne prelazi jednu sekundu! Za usporedbu, prethodni HLS motor omogućio je isporuku videa s odgodom od 5-7 sekundi. Razlika u brzini video demonstracije je vrlo značajna, a korisnik će je primijetiti odmah nakon početka rada s našim video servisom.
Kao što smo i očekivali, implementacija novog playera poboljšala je odziv PTZ-a i glasovnu komunikaciju s kamerom.

Postoji samo jedna suptilna točka na koju želimo skrenuti pozornost. Novi WebRTC player trenutno radi u testnom načinu rada. I zato ga ne omogućujemo svim našim klijentima prema zadanim postavkama. Ali možete ga sami aktivirati tako da omogućite odgovarajuću stavku u postavkama kamere (da biste to učinili, idite na ).
Značajke implementacije WebRTC-a u uslugu Ivideon

WebRTC je još uvijek eksperimentalna tehnologija u ovom trenutku. Njegova podrška još nije ispravno implementirana u svim preglednicima i korisničkim uređajima, a također ni u svim kamerama.
Upravo zbog toga još nismo postavili WebRTC player kao zadani za sve korisnike.
Za sada preporučujemo korištenje WebRTC-a samo u preglednicima Google Chrome. Najnovije verzije Firefoxa i Safarija također podržavaju ovu tehnologiju, ali je ona, nažalost, još uvijek nestabilna.
Još nismo implementirali WebRTC podršku za preglednike na mobilnim uređajima. Trenutačno, ako se prijavite s mobilnog uređaja i aktivirate WebRTC, ovaj način rada neće raditi. Međutim, WebRTC je dostupan u našim mobilnim aplikacijama za и .
I završavajući priču o značajkama implementacije WebRTC-a u našoj usluzi, zabilježimo još dvije suptilne točke.
Prvo, tehnologija je usmjerena na emitiranje videa uživo u stvarnom vremenu. Stoga, ako vaš kanal nema dovoljnu propusnost za prijenos videa, primijetit ćete pad okvira (s HLS-om ćete primijetiti blijeđenje videa i povećanu latenciju, ali neće biti pada okvira), ali će se video i dalje emitirati u stvarnom vrijeme.
Drugo, budući da je tehnologija dizajnirana za rad s videom uživo u stvarnom vremenu, ne koristimo je za rad s arhiviranim video podacima.
Ostale promjene usluge
U ovom trenutku Flash više nije uključen u mehanizam automatskog odabira motora. I dalje možete koristiti takav player, ali da biste to učinili, morate ga ručno odabrati u postavkama računa ili kamere. Ovo nije danak modi, samo što prema statistici naše usluge praktički više nema korisnika koji rade s Flashom. I pokušavajući utvrditi podržava li korisnikov preglednik, gubimo oko 2 sekunde dragocjenog vremena.
Donosimo kratki pregled promjena koje vas očekuju u našem sustavu videonadzora u oblaku i osobnom računu. Ostanite uz nas i pratite novosti!
Izvor: www.habr.com
