
Fan 'e earste dagen fan wurkjen oan in wolkfideo-tafersjochsysteem waarden wy konfrontearre mei in probleem, sûnder in oplossing wêrop wy Ivideon koene opjaan - dit wie ús Everest, klimmen dy't in protte enerzjy koste, mar no hawwe wy einliks stuts in iisbijl yn 'e top fan' e cross-platform puzel.
It systeem foar it ferstjoeren fan audio en fideo oer it ynternet moat net ôfhinklik wêze fan apparatuer, webkliïnten en de noarmen dy't se stypje, en wurket ek goed yn 'e oanwêzigens fan Network Address Translators en firewalls. In brûker fan wolkfideo-tafersjoch wol tagong krije ta de tsjinst, sels as hy analoge kamera's brûkt, en sjocht leaver live fideo-útstjoeringen op it meast moderne apparaat.
It is heul wichtich dat de brûker fideo's wol besjen mei minimale fertraging. Hast de ienige manier om fideo mei lege latency yn in browser te sjen is om WebRTC (web real-time kommunikaasje) te brûken. WebRTC is in set technologyen foar peer-to-peer-oerdracht fan fideo en audio yn browsers, yn earste ynstânsje ûntworpen foar oerdracht en ôfspieljen fan fideostreamen mei lege latency. Dêrfoar wurdt ûnder oare it UDP-protokol brûkt.
Foardat wy jo fertelle wat de nije motor de brûker jout, sille wy jo herinnerje wêrom en wêrom wy HLS-technologyen stypje, en wêrom hawwe wy besletten om fierder te gean.
HLS motor: foar- en neidielen

()
HLS (HTTP Live Streaming) technology waard ûntwikkele troch Apple, dus it is gjin ferrassing dat it earst stipe waard op Apple-apparaten. Tsjintwurdich wurdt HLS-fideo ek stipe troch praktysk alle settopboxen en in protte apparaten dy't it bestjoeringssysteem brûke. Android.
De HLS-motor brûkt de bekende H264-fideokodek yn kombinaasje mei AAC- as MP3-audiostreamen om fideogegevens te streamen. De heule audio- en fideodatastream is yn in MPEG-TS-transportkontainer ferpakt. Foar oerdracht fia it HTTP-protokol wurdt de ynformaasje yn 'e stream ferdield yn fragminten beskreaun yn m3u8-playlists. En allinich dan wurde dizze fragminten, tegearre mei playlists, oerdroegen fia HTTP. Chunking betsjut automatysk in fertraging yn sekonden. Dit is in skaaimerk fan 'e MPEG-TS-container.
De HLS-motor stipet ek multibitrate streams, Live / VOD.
De wichtichste foardielen fan HLS:
- ynboude stipe yn alle grutte browsers;
- gemak fan ymplemintaasje (ferlike mei WebRTC);
- It is heul handich en effisjint om allerhanne útstjoerings te organisearjen foar in grut publyk troch it feit dat segminten ien kear op in CDN kinne wurde upload.
Nettsjinsteande de ienfâld fan 'e motor, net alles is sa glêd as it liket. It wichtichste probleem is dat spielerûntwikkelders fan tredden fuort binne fan 'e oanbefellings fan Apple, bygelyks yn termen fan stipe audioformaten. Benammen in protte ûntwikkelders begûnen de mooglikheid ta te foegjen om te wurkjen mei populêre audiostreamen: mpeg2-fideo, mpeg2-audio, ensfh. Dêrtroch moasten se ferskate playlist-formaten meitsje foar ferskate spilers.
Mar ien fan 'e grutste problemen mei de HLS-motor is de hege latency yn gegevensferfier.
De oarsprong fan "remmen"
De wichtichste reden foar de hege latency fan HLS leit yn it feit dat programmeurs de motor hawwe makke om ôfbyldings fan 'e heechste kwaliteit te krijen. Dêrom binne de parameters fan it brûkte frame-ynterval en de grutte fan 'e ôfspielbuffer gewoan net geskikt foar live fideo-útstjoerings. Hjirtroch is d'r in frij hege fertraging yn 'e oerdracht fan fideomateriaal, dat kin 5-7 sekonden wêze.
Oan 'e iene kant is dit net folle, bygelyks foar dyjingen dy't in film sjogge fan in fideohostingtsjinner. Mar foar systemen foar fideotafersjoch kin de fertraging by it ferstjoeren fan fideomateriaal heul wichtich wêze.
As jo in kantoar sjogge wêr't meiwurkers ien kear yn 't oere fan har monitors opsykje, dan makket in fertraging fan 5 sekonden hielendal neat út. Mar minsken begûnen te klagen dat se bygelyks by it útstjoeren fan in fuotbalwedstriid al GOOOOL yn it petear skreaun hawwe, mar dit stiet noch net op 'e fideo :). Wy hawwe al in oantal brûkersgefallen wêr't Ivideon Skype praktysk ferfange moat.
Is it mooglik om latency te ferslaan yn HLS? It antwurd op dizze fraach klinkt as de taspraak fan in betûfte rotteneksterminator by in lêzing foar begjinnende pestbestridingsspesjalisten: "Ratten kinne net útroege wurde, mar har oantallen kinne wurde fermindere oant in ridlik minimum." Itselde mei de fertraging yn HLS, it sil net mooglik wêze om it nei nul te ferminderjen, mar d'r binne oplossingen op 'e merk dy't de fertraging signifikant kinne ferminderje.
Fijne besunigingen
In oar neidiel fan 'e motor is it gebrûk fan lytse bestannen foar gegevensferfier. It soe lykje dat wat is der mis mei dit?
Elkenien dy't besocht hat in grut tal lytse triemmen fan it iene medium nei it oare te kopiearjen, hat nei alle gedachten opfallen dat de skriuwsnelheid fan sa'n set folle leger is as ien grutte triem fan deselde grutte. En de yntinsiteit fan tagong ta de hurde skiif ferheget gâns, dy't oer it algemien negatyf beynfloedet de prestaasjes fan 'e hiele kompjûter. Dêrom draacht it oerdragen fan fideogegevens yn lytse brokken fan 10 sekonden ek by oan ferhege motorlatens.
Litte wy alle foar- en neidielen fan HLS-technology koart gearfetsje.
Foardielen fan HLS:
- Mooglikheid om te wurkjen mei elk apparaat. Jo kinne fideo's besjen op elk modern apparaat, of it no in smartphone, tablet, laptop of buroblêd PC is. It wichtichste is dat de webblêder aktueel is en kompatibel is mei HTML5 en Media Source Extensions.
- Excellent byld kwaliteit. De brûkte adaptive gegevensferfierfunksje lit jo de kwaliteit fan 'e oerdroegen fideo dynamysk feroarje ôfhinklik fan' e bânbreedte fan 'e ynternetferbining, wylst it algoritme stribbet om maksimale kwaliteit te behâlden.
- D'r is gjin ferlet fan komplekse konfiguraasje fan 'e apparatuer fan' e brûker.
Nedenberjochten:
- Beheinde stipe foar wurkjen mei de motor op guon apparaten.
- Hege fertragingen yn ôfbylding oerdracht.
- Signifikante ferheging fan overhead en kompleksiteit fan optimalisaasje troch it brûken fan lytse bestannen. Fanwegen de aard fan 'e kontener sille wy noait in latency kinne krije dy't leger is as de segmintgrutte.
De neidielen fan HLS wiene grutter as de foardielen foar ús en twongen ús om te sykjen nei alternative opsjes.
Wat is WebRTC

()
It WebRTC-platfoarm waard ûntwikkele troch Google yn 2011 om streamende fideo- en audiogegevens oer te stjoeren tusken browsers en mobile applikaasjes mei minimale latency. Hjirfoar wurde it standert UDP-protokol en spesjale algoritmen foar streamkontrôle brûkt. Hjoed is it in iepen boarne-projekt, it wurdt aktyf ûnderhâlden troch Google en wurdt ûntwikkele.
WebRTC is in set technologyen foar peer-to-peer fideo en audio oerdracht. Dat is, bygelyks, brûkersbrowsers mei WebRTC kinne gegevens direkt nei elkoar oerdrage, sûnder tsjinners op ôfstân te brûken foar it opslaan en ferwurkjen fan gegevens. Alle ynformaasje wurdt ek ferwurke troch browsers en mobile applikaasjes fan ein brûkers.
It gemak en de útwreide mooglikheden fan dizze technology binne wurdearre troch ûntwikkelders fan alle populêre browsers. WebRTC-stipe is op it stuit beskikber yn Mozilla Firefox, Opera, Google Chrome (en alle browsers basearre op Chromium), lykas yn mobile apps dy't rinne Android en iOS.
Foar al syn sûnder twifel foardielen hat WebRTC ferskate wichtige neidielen.
Schwierigens fan kar
WebRTC technology is folle komplekser yn termen fan netwurk ynteraksjes fanwege it feit dat it giet om P2P. It is lestich om te debuggen, te testen en kin ûnfoarspelber gedrage. Tagelyk moatte wy NAT en firewall oerwinne, wy moatte soargje foar operaasje yn netwurken wêr't UDP is blokkearre.
Google's WebRTC-ymplemintaasje is heul lestich te brûken. D'r is sels in heule bedriuw dat tsjinsten foar SDK-assemblage leveret. Plus, Google's ymplemintaasje wie heul lestich om te yntegrearjen mei ús systeem sûnder de heule fideo opnij te kodearjen.
Wy wolle lykwols al lang brûkers de kâns jaan om te wurkjen mei folweardige "live" fideo en minimalisearje de efterstân tusken it byld op it skerm en de eveneminten sels. Plus, wy hiene in winsk om it gebrûk fan PTZ-kamera's, wêr't fertragingen kritysk binne, nofliker te meitsjen.
Yn betinken nommen dat oare anty-lag-ymplemintaasjes noch beheinde funksjonaliteit hawwe en merkber slimmer wurkje, besleaten wy WebRTC te brûken.
Wat hawwe wy dien

It goed ymplemintearjen fan it WebRTC-platfoarm is gjin maklike taak. Elke misrekkening of unakkuraatheid kin liede ta fertragingen yn fideo-oerdracht net allinich net ôfnimme yn ferliking mei oare platfoarms, mar sels tanimmend.
Foar WebRTC om goed te wurkjen, is it earst fan alles nedich om in technologyske upgrade fan 'e stapel út te fieren foar wurkjen mei webfideo. Dat hawwe wy dien.
Earst hawwe wy in WebRTC-sinjaalprotokolserver ymplementearre oer Websocket, en ek in WebRTC-peer-tsjinner yn 'e wolk ynset op basis fan de webrtc.org SDK. Syn taak is om fideostreamen te fersprieden oan kliïnt WebRTC-peers yn H.264 + Opus/G.711-formaat sûnder fideo-transkodearjen.
Wy hawwe Websocket keazen as it sinjaalprotokol, om't it al stipe fan hege kwaliteit hat yn alle populêre webbrowsers. Hjirtroch kinne jo net allinich ûntwikkelingsoverhead signifikant ferminderje, mar ek foarkomme dat jo tiid en boarnen fergrieme op werhelle TCP- en TLS-handshake yn ferliking mei AJAX.
It feit is dat WebRTC standert net it sinjaalprotokol leveret dat nedich is om realtime fideokommunikaasje tusken de boarne- en kliïntapplikaasjes goed te konfigurearjen, te ûnderhâlden en te beëinigjen.
En om selsstannich sinjaaltechnology te ymplementearjen, moasten wy ús eigen sinjaalserver ûntwikkelje mei stipe foar ferskate webprotokollen (Websocet, WebRTC). En mei de mooglikheid om sesjes en notifikaasjes yn realtime feilich te behearjen, fideobehear en folle mear.
Wy hawwe de beheiningen fan P2P oerwûn troch latency te ferminderjen net fia P2P, mar troch UDP en streamkontrôle om latency te ferminderjen. Dit is ek ynboud yn WebRTC, om't it haadgebrûk p2p-konversaasjes is fia in browser.
Yn 'e mobile kliïnt hawwe wy de spiler ymplementearre mei de webrtc.org SDK, om't allinich it streamkontrôle korrekt ymplementearret, hat alle bekende Forward Error Correction (FEC) skema's, en ymplementearret it meganisme foar it opnij ferstjoeren fan pakketten foar alle browsers korrekt. It is ek wichtich dat de webrtc.org SDK aktyf wurdt ûntwikkele troch Google.
Wat is it resultaat fan it ymplementearjen fan WebRTC?
Om live fideo fan kamera's te besjen, hawwe wy in nije optimalisearre spiler tafoege op basis fan WebRTC oan jo persoanlike akkount. It soarget foar rappe laden fan fideo's en elimineert it probleem fan 'e latency dy't accumulearret as sjochtiid tanimt folslein.
Nei it yntrodusearjen fan WebRTC-stipe yn 'e Ivideon-wolktsjinst, kinne wy mei folslein fertrouwen sizze dat ús kliïnten no folweardige live fideo kinne besjen. No is de fertraging by it útstjoeren fan fideosekwinsjes net mear as ien sekonde! Foar fergeliking levere de foarige HLS-motor fideolevering mei in fertraging fan 5-7 sekonden. It ferskil yn fideo-demonstraasjesnelheid is heul signifikant, en de brûker sil it direkt fernimme nei't jo begjinne te wurkjen mei ús fideotsjinst.
As wy ferwachte hawwe, hat de ymplemintaasje fan 'e nije spiler de responsiviteit fan PTZ en stimkommunikaasje mei de kamera ferbettere.

D'r is mar ien subtyl punt dêr't wy omtinken op wolle. De nije WebRTC-spieler wurket op it stuit yn testmodus. En dêrom skeakelje wy it standert net yn foar al ús kliïnten. Mar jo kinne it sels aktivearje troch it oerienkommende item yn te skeakeljen yn 'e kamera-ynstellingen (om dit te dwaan moatte jo gean nei ).
Funksjes fan 'e ymplemintaasje fan WebRTC yn' e Ivideon-tsjinst

WebRTC is op it stuit noch in eksperimintele technology. De stipe is noch net korrekt ymplementearre yn alle browsers en brûkersapparaten, en ek net yn alle kamera's.
Dit is krekt wêrom wy de WebRTC-spiler noch net de standert makke hawwe foar alle brûkers.
Foar no riede wy oan om WebRTC allinich te brûken yn Google Chrome-browsers. De lêste ferzjes fan Firefox en Safari stypje dizze technology ek, mar, spitigernôch, is it noch ynstabyl.
Wy hawwe noch gjin WebRTC-stipe foar browsers op mobile apparaten ymplementearre. Op it stuit, as jo ynlogge fan in mobyl apparaat en aktivearje WebRTC, dizze modus sil net wurkje. WebRTC is lykwols beskikber yn ús mobile applikaasjes foar и .
En konkludearje it ferhaal oer de funksjes fan 'e WebRTC-ymplemintaasje yn ús tsjinst, litte wy noch twa subtile punten notearje.
As earste is de technology rjochte op it útstjoeren fan live fideo yn realtime. Dêrom, as jo kanaal net genôch bânbreedte hat om de fideo te ferstjoeren, sille jo frame-druppels fernimme (mei HLS sille jo fideofading en ferhege latency fernimme, mar d'r sil gjin frame-druppels wêze), mar de fideo sil noch yn echte útstjoerd wurde tiid.
As twadde, om't de technology is ûntworpen om spesifyk te wurkjen mei live fideo yn realtime, brûke wy it net om te wurkjen mei argyfearre fideogegevens.
Oare feroarings oan de tsjinst
Op dit stuit is Flash net mear belutsen by it automatyske motorseleksjemeganisme. Jo kinne sa'n spiler noch brûke, mar om dit te dwaan moatte jo it manuell selektearje yn 'e akkount of kamera-ynstellingen. Dit is gjin earbetoan oan moade, it is gewoan dat der neffens de statistiken fan ús tsjinst praktysk gjin brûkers mei Flash wurkje. En besykje te bepalen oft de browser fan de brûker it stipet, ferlieze wy sawat 2 sekonden fan kostbere tiid.
Hjir is in koart oersjoch fan 'e wizigingen dy't op jo wachtsje yn ús wolkfideo-tafersjochsysteem en persoanlike akkount. Bliuw by ús en folgje it nijs!
Boarne: www.habr.com
