WebRTC och videövervakning: hur vi besegrade fördröjningen i videoströmmen frÄn kameror

WebRTC och videövervakning: hur vi besegrade fördröjningen i videoströmmen frÄn kameror

FrĂ„n första dagen av arbetet med vĂ„rt molnbaserade övervakningssystem stötte vi pĂ„ ett problem som utan en lösning skulle sĂ€tta en begrĂ€nsning för Ivideon – det var vĂ„r Everest, vars bestigning krĂ€vde enorma resurser, men nu har vi Ă€ntligen stuckit isyxan i toppen av det plattformsöverskridande pusslet.

Systemet för ljud- och videoöverföring över internet bör inte vara beroende av utrustning, webblÀsarklienter och de standarder som de stöder. Det ska ocksÄ fungera korrekt nÀr det finns Network Address Translators och brandvÀggar. AnvÀndaren av molnbaserad övervakning vill fÄ tillgÄng till tjÀnsten, Àven om den anvÀnder analoga kameror och föredrar att se livevideo pÄ den senaste enheten.

Det Àr mycket viktigt att anvÀndaren vill se video med minimal fördröjning. Den praktiskt taget enda möjligheten att visa video med lÄg fördröjning i webblÀsaren Àr att anvÀnda WebRTC (web real-time communications). WebRTC Àr en uppsÀttning teknologier för peer-to-peer överföring av video och ljud i webblÀsare, ursprungligen avsedd för överföring och uppspelning av videoströmmar med lÄg fördröjning. Detta anvÀnder, bland annat, UDP-protokollet.

Innan vi berÀttar vad den nya motorn ger anvÀndaren, pÄminner vi om varför och hur vi stöder HLS-teknologier och varför vi har beslutat att gÄ vidare.

HLS-motor: fördelar och nackdelar

WebRTC och videövervakning: hur vi besegrade fördröjningen i videoströmmen frÄn kameror
(c)

Tekniken HLS (HTTP Live Streaming) utvecklades av Apple, sÄ det Àr inte förvÄnande att det först blev stöd för den pÄ enheter frÄn just detta mÀrke. Idag kan nÀstan alla tv-boxar och mÄnga enheter som kör Android ocksÄ reproducera video i HLS-format.

HLS-motorn anvÀnder den vÀlkÀnda videokodeken H264 i kombination med AAC- eller MP3-ljudströmmar för videodataöverföring. Hela ljud- och videoströmmen paketeras i transportcontainern MPEG-TS. För överföring via HTTP delas informationen i strömmen upp i fragment som beskrivs i m3u8-spellistor. Dessa fragment tillsammans med spellistorna överförs sedan via HTTP. Uppdelningen i fragment innebÀr automatiskt fördröjningar i sekunder. Det Àr en sÀrskild egenskap hos MPEG-TS-containern.

HLS-motorn stöder ocksÄ multi-bitrate strömmar, Live/VOD.

De huvudsakliga fördelarna med HLS:

  • inbyggt stöd i alla stora webblĂ€sare;
  • enkelt att implementera (jĂ€mfört med WebRTC);
  • vĂ€ldigt bekvĂ€mt och effektivt att organisera olika sĂ€ndningar till en stor publik tack vare att segment kan laddas en gĂ„ng pĂ„ CDN.

Trots att motorn Àr enkel, Àr inte allt sÄ smidigt som det verkar. Huvudproblemet Àr att utvecklarna av tredjeparts spelfilmer har avvikit frÄn Apples rekommendationer, exempelvis nÀr det gÀller stödda ljudformat. MÄnga utvecklare har specifikt börjat lÀgga till stöd för populÀra ljudströmmar: mpeg2 video, mpeg2 audio osv. Resultatet blev att olika spellisteformat var tvungna att skapas för olika spelare.

Men en av de största problemen med HLS-motorn Àr den höga fördröjningen i dataöverföringen.

Ursprunget till 'stötarna'

Den frÀmsta orsaken till den höga fördröjningen i HLS ligger i det faktum att programmerarna skapade motorn för att fÄ maximal bildkvalitet. DÀrför passar inte parametrarna för den anvÀnda bildfrekvensen och buffertvolymen för direkt videoströmning. Detta leder till en ganska hög fördröjning i videoströmningen, som kan uppgÄ till 5-7 sekunder.

Å ena sidan Ă€r det lite, till exempel för dem som tittar pĂ„ en film frĂ„n en videohostingsserver. Men för övervakningssystem kan fördröjningen i videoströmmen ha stor betydelse.

Om du övervakar ett kontor dĂ€r anstĂ€llda slĂ€pper skĂ€rmarna en gĂ„ng i timmen, spelar 5 sekunder ingen roll. Men folk har börjat klaga pĂ„ att till exempel under sĂ€ndningen av en fotbollsmatch, i chatten redan har skrivit MÅÅÅL, men pĂ„ videon syns det fortfarande inte :). Vi har redan flera anvĂ€ndartester dĂ€r Ivideon pĂ„ praktiskt taget ska ersĂ€tta Skype.

Kan fördröjningen i HLS övervinnas? Svaret pÄ denna frÄga lÄter som en veteran rÄttjÀgare som förelÀser för nybörjare: "Det gÄr inte att utrota rÄttor, men deras antal kan reduceras till en rimlig minimivÀrde". SÄ det Àr med fördröjningen i HLS, att fÄ den till noll Àr inte möjligt, men det finns lösningar pÄ marknaden som kan minska fördröjningen avsevÀrt.

Fin klippning

En annan nackdel med motorn Àr anvÀndningen av smÄ filer för dataöverföring. Det verkar som att det inte Àr sÄ dÄligt?

NÄgon som har försökt att kopiera ett stort antal smÄ filer frÄn en enhet till en annan har sÀkert mÀrkt att skrivhastigheten för en sÄdan uppsÀttning Àr mycket lÀgre Àn för en enda stor fil av samma storlek. Dessutom ökar intensiteten av Ätkomsten till hÄrddisken avsevÀrt, vilket i sin helhet pÄverkar datorns prestanda negativt. DÀrför bidrar överföring av videodata i form av smÄ 10-sekunders fragment ocksÄ till den ökade latensen i motorn.

LÄt oss kort sammanfatta alla fördelar och nackdelar med HLS-teknologi.

Fördelarna med HLS:

  1. Möjlighet att arbeta med alla enheter. Du kan titta pÄ video pÄ vilken modern enhet som helst, vare sig det Àr en smartphone, surfplatta, bÀrbar dator eller stationÀr dator. Det viktigaste Àr att webblÀsaren Àr av modern version och kompatibel med HTML5 och Media Source Extensions.
  2. UtmÀrkt bildkvalitet. Den anvÀnda funktionen för adaptiv dataöverföring gör det möjligt att dynamiskt Àndra kvaliteten pÄ den överförda videoströmmen beroende pÄ bandbredden i internetanslutningen, samtidigt som algoritmen strÀvar efter att bevara kvaliteten sÄ hög som möjligt.
  3. Ingen behov av komplicerade anvÀndarinstÀllningar.

Nackdelar:

  1. BegrÀnsat stöd för motor pÄ vissa enheter.
  2. Höga latenser i bildöverföringen.
  3. Starkt ökad overhead och komplexitet i optimeringen pÄ grund av anvÀndning av smÄ filer. PÄ grund av behoven hos containern kan vi aldrig fÄ en latens som Àr lÀgre Àn segmentets storlek.

Nackdelarna med HLS övergick för oss dess fördelar och gjorde oss tvungna att leta efter alternativa lösningar.

Vad Àr WebRTC

WebRTC och videövervakning: hur vi besegrade fördröjningen i videoströmmen frÄn kameror
(c)

WebRTC-plattformen utvecklades av Google 2011 för att överföra strömmande video- och ljuddata mellan webblÀsare och mobilapplikationer med minimal latens. Detta görs med hjÀlp av den standardiserade UDP-protokollet och speciella algoritmer för flödeshantering. Idag Àr det ett projekt med öppen kÀllkod, som aktivt stödjs och utvecklas av Google.

WebRTC Àr en uppsÀttning teknologier för peer-to-peer överföring av video och ljud. Det innebÀr att anvÀndarnas webblÀsare med hjÀlp av WebRTC kan överföra data direkt till varandra, utan att anvÀnda externa servrar för lagring och bearbetning av information. All information bearbetas ocksÄ av webblÀsare och mobilapplikationer hos slutkonsumenterna.

BekvÀmligheten och de stora möjligheterna med denna teknologi har uppskattats av utvecklare av alla populÀra webblÀsare. Idag stöds WebRTC i Mozilla Firefox, Opera, Google Chrome (och alla webblÀsare baserade pÄ Chromium), samt i mobilapplikationer för Android och iOS.

Trots sina sjÀlvklara fördelar har WebRTC nÄgra betydande nackdelar.

SvÄrigheter med valet

WebRTC-teknologin Àr mycket mer komplex nÀr det kommer till nÀtverksinteraktioner pÄ grund av att den Àr baserad pÄ P2P. Den Àr svÄr att debugga och testa, och den kan bete sig oförutsÀgbart. Dessutom behöver vi övervinna NAT och brandvÀggar, och sÀkerstÀlla att den fungerar i nÀtverk dÀr UDP Àr blockerat.

Det Àr mycket svÄrt att anvÀnda Googles version av WebRTC. Det finns till och med ett helt företag som erbjuder tjÀnster för att bygga SDK. Dessutom var det mycket svÄrt att integrera Googles lösning med vÄrt system utan att behöva omkoda all video.

Vi har lÀnge velat ge anvÀndare möjlighet att arbeta med riktig "live" video och minimera fördröjningen mellan bilden pÄ skÀrmen och de faktiska hÀndelserna. Dessutom ville vi göra anvÀndningen av PTZ-kameror mer bekvÀm, dÀr fördröjningar Àr kritiska.

Med tanke pÄ att andra implementeringar för att bekÀmpa fördröjningar fortfarande har begrÀnsad funktionalitet och fungerar betydligt sÀmre, beslutade vi oss för att anvÀnda WebRTC.

Vad vi har gjort

WebRTC och videövervakning: hur vi besegrade fördröjningen i videoströmmen frÄn kameror

Att korrekt implementera WebRTC-plattformen Àr en svÄr uppgift. Varje felaktighet eller avvikelse kan leda till att fördröjningarna i videoströmmen inte bara inte minskar jÀmfört med andra plattformar, utan ocksÄ ökar.

För att WebRTC ska fungera korrekt Àr det först och frÀmst nödvÀndigt att genomföra en teknologisk modernisering av stacken för att arbeta med webbvideo. Det har vi gjort.

Först implementerade vi en signaleringsserver för WebRTC-protokollet över Websocket, samt distribuerade en WebRTC peer-server i molnet baserat pÄ SDK webrtc.org. Dess uppgift Àr att fördela videoströmmar till klienternas WebRTC peers i H.264 + Opus/G.711 format utan att koda om videon.

Vi valde Websocket som signaleringsprotokoll eftersom det redan har ett bra stöd i alla populÀra webblÀsare. Detta gör det möjligt att avsevÀrt minska inte bara utvecklingskostnaderna utan ocksÄ att spara tid och resurser genom att undvika upprepade TCP- och TLS-handshakes jÀmfört med AJAX.

Saken Àr den att WebRTC som standard inte erbjuder det signaleringsprotokoll som behövs för korrekt konfiguration, support och nedkoppling av videokommunikation i realtid mellan kÀll- och klientapplikationer.

För att sjÀlva implementera signaleringsteknologin behövde vi utveckla vÄr egen signalserver med stöd för flera webbprotokoll (Websocet, WebRTC). Detta inkluderade sÀker hantering av sessioner och meddelanden i realtid, videostyrning och mÄnga andra parametrar.

BegrÀnsningar med P2P övervann vi genom att minska latensen inte via P2P, utan genom UDP och strömhantering syftande till att reducera latensen. Detta Àr ocksÄ en del av WebRTC, eftersom den primÀra anvÀndningen Àr p2p-samtal via webblÀsaren.

I mobilklienten implementerade vi en spelare med anvÀndning av SDK webrtc.org, eftersom endast den har korrekt implementerat strömhantering, alla kÀnda scheman för Forward Error Correction (FEC) och en korrekt implementerad mekanism för paketÄterföring för alla webblÀsare. Det Àr ocksÄ viktigt att notera att SDK webrtc.org aktivt utvecklas av Google.

Vad Àr resultatet av att implementera WebRTC?


För att titta pÄ livevideo frÄn kameror har vi lagt till en ny optimerad spelare baserad pÄ WebRTC i anvÀndarens konto. Den sÀkerstÀller hög hastighet vid videoladdningen och eliminerar helt problemet med ackumulerad latens i takt med att visningstiden ökar.

Efter införandet av WebRTC-stöd i molntjÀnsten Ivideon kan vi med fullstÀndig sÀkerhet sÀga att vÄra kunder nu har tillgÄng till att se fullt levande video. För nÀrvarande överstiger inte fördröjningen vid överföring av videoström en sekund! Som jÀmförelse gav den tidigare HLS-motorn en videoleverans med en fördröjning pÄ 5-7 sekunder. Skillnaden i hastighet för videovisning Àr mycket betydande, och anvÀndaren kommer att mÀrka detta direkt efter att ha börjat anvÀnda vÄr videoservice.

Som vi förvÀntade oss har implementeringen av den nya spelaren ökat responsiviteten för PTZ och röstkommunikation med kameran.

WebRTC och videövervakning: hur vi besegrade fördröjningen i videoströmmen frÄn kameror

Det finns bara en liten punkt som vi vill uppmÀrksamma. Den nya WebRTC-spelaren fungerar för nÀrvarande i testlÀge. Av den anledningen aktiverar vi inte den automatiskt för alla vÄra kunder. Men du kan aktivera den sjÀlv genom att vÀlja motsvarande alternativ i kamerans instÀllningar (för detta behöver du gÄ till ditt personliga konto).

Egenskaper för WebRTC-implementeringen i Ivideon-tjÀnsten

WebRTC och videövervakning: hur vi besegrade fördröjningen i videoströmmen frÄn kameror

WebRTC Àr för nÀrvarande fortfarande en experimentell teknik. Dess stöd har Ànnu inte implementerats korrekt i alla webblÀsare och anvÀndarapparater, samt inte i alla kameror.

Det Àr just detta som förklarar varför vi Ànnu inte har gjort WebRTC-spelaren standard för alla anvÀndare.

Vi rekommenderar för nÀrvarande att anvÀnda WebRTC endast i Google Chrome-webblÀsare. De senaste versionerna av Firefox och Safari stöder ocksÄ denna teknik, men tyvÀrr Àr det fortfarande instabilt.

Vi har Ànnu inte infört WebRTC-stöd för webblÀsare pÄ mobila enheter. Om du nu loggar in frÄn en mobil enhet och aktiverar WebRTC kommer detta lÀge att fungera inte. DÀremot finns WebRTC i vÄra mobilapplikationer för Android och iOS.

Och som avslutning pÄ vÄr berÀttelse om egenskaperna hos WebRTC-implementeringen i vÄr tjÀnst vill vi nÀmna ytterligare tvÄ viktiga punkter.

För det första Àr tekniken inriktad pÄ att strömma just levande video i realtid. DÀrför, om din kanalbredband inte Àr tillrÀcklig för att överföra videoströmmen, kommer du att mÀrka att bilder faller bort (med HLS kommer du att mÀrka att videon fryser och fördröjningen ökar, men bilder kommer inte att falla bort), men videon kommer fortfarande att strömmas i realtid.

För det andra, eftersom teknologin Àr avsedd för att arbeta med livevideo i realtid, anvÀnder vi den inte för att hantera arkiverade videodata.

Andra Àndringar i tjÀnsten

För nÀrvarande deltar inte Flash lÀngre i mekanismen för automatisk val av motor. Du kan fortfarande anvÀnda en sÄdan spelare, men du mÄste vÀlja den manuellt i instÀllningarna för ditt konto eller din kamera. Detta Àr inte en trend, utan enligt statistiken frÄn vÄr tjÀnst finns det praktiskt taget inga anvÀndare kvar som arbetar med Flash. Och pÄ försöket att avgöra om anvÀndarens webblÀsare stöder det, förlorar vi runt 2 sekunders vÀrdefull tid.

HÀr Àr en kort sammanfattning av de förÀndringar som vÀntar dig i vÄrt molnbaserade övervakningssystem och din personliga portal. HÄll dig uppdaterad med oss och följ nyheterna!

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster