
Fin dai primi giorni di lavoro sul sistema di videosorveglianza in cloud, ci siamo trovati di fronte a un problema così grande che senza una soluzione avremmo dovuto porre fine a Ivideon – era la nostra Everest, la cui scalata ha richiesto enormi sforzi, ma ora finalmente abbiamo piantato il piccozzino sulla vetta di questo rompicapo cross-platform.
Il sistema di trasmissione audio e video via Internet non deve dipendere dall'hardware, dai web client e dagli standard supportati, e deve funzionare correttamente anche in presenza di Network Address Translators e firewall. L'utente della videosorveglianza in cloud desidera accedere al servizio, anche se utilizza telecamere analogiche, e preferisce guardare la trasmissione di video in diretta su un dispositivo all'avanguardia.
È molto importante per l'utente guardare video con una latenza minima. Praticamente l'unico modo per mostrare video a bassa latenza nel browser è utilizzare WebRTC (web real-time communications). WebRTC è un insieme di tecnologie per la trasmissione peer-to-peer di video e audio nei browser, originariamente progettato per la trasmissione e la riproduzione di flussi video a bassa latenza. A questo scopo, tra l'altro, viene utilizzato il protocollo UDP.
Prima di spiegarti cosa offre il nuovo motore all'utente, vogliamo ricordarti perché e per quale motivo supportiamo le tecnologie HLS, e perché abbiamo deciso di andare avanti.
Motore HLS: pro e contro

()
La tecnologia HLS (HTTP Live Streaming) è stata sviluppata da Apple, quindi non sorprende che il suo supporto sia apparso per la prima volta sui dispositivi di questo brand. Oggi il formato video HLS è supportato praticamente da tutti i set-top box e molti dispositivi che funzionano con il sistema operativo Android.
Il motore HLS utilizza per lo streaming video il ben noto codec video H264 insieme a flussi audio AAC o MP3. L'intero flusso di dati audio e video viene confezionato in un contenitore di trasporto MPEG-TS. Per la trasmissione tramite HTTP, le informazioni contenute nel flusso vengono suddivise in frammenti descritti nelle playlist m3u8. Solo dopo questi frammenti, insieme alle playlist, vengono inviati tramite HTTP. La suddivisione in frammenti comporta automaticamente un ritardo in secondi. Questa caratteristica del contenitore MPEG-TS.
Il motore HLS supporta anche flussi multibitrate, Live/VOD.
Principali vantaggi di HLS:
- supporto integrato in tutti i principali browser;
- facilità di implementazione (rispetto a WebRTC);
- è molto comodo ed efficace organizzare vari eventi in streaming per un grande pubblico grazie alla possibilità di caricare i segmenti una sola volta su CDN.
Sebbene il motore sia semplice, non è tutto così fluido come sembra. Il principale problema è che gli sviluppatori di lettori di terze parti si sono allontanati dalle raccomandazioni di Apple, ad esempio per quanto riguarda i formati audio supportati. In particolare, molti sviluppatori hanno iniziato ad aggiungere il supporto per flussi audio popolari: mpeg2 video, mpeg2 audio, ecc. Di conseguenza, è stato necessario creare diversi formati di playlist per lettori diversi.
Ma uno dei problemi più grandi del motore HLS è l'elevata latenza nella trasmissione dei dati.
Le origini dei 'ritardi'
La principale causa dell'alta latenza dell'HLS risiede nel fatto che i programmatori hanno progettato il motore per ottenere la massima qualità dell'immagine. Pertanto, i parametri dell'intervallo di fotogrammi utilizzato e il volume del buffer di riproduzione non sono adatti per le trasmissioni video in diretta. Ciò provoca un'elevata latenza nella trasmissione del video, che può arrivare a 5-7 secondi.
Da un lato, questo è poco, ad esempio, per chi guarda un film su un server di video hosting. Ma per i sistemi di videosorveglianza, la latenza nella trasmissione del video può essere di grande importanza.
Se stai osservando un ufficio in cui i dipendenti si distaccano dai monitor ogni ora, allora un ritardo di 5 secondi non ha alcuna importanza. Ma le persone hanno iniziato a lamentarsi che, ad esempio, durante la trasmissione di una partita di calcio, nel chat qualcuno scrive già GOOOOOL, mentre nel video non è ancora visibile. Abbiamo già diversi casi d'uso in cui Ivideon deve praticamente sostituire Skype.
Si può sconfiggere il ritardo in HLS? La risposta a questa domanda suona come il discorso di un esperto cacciatore di topi a una lezione per principianti: «I topi non possono essere sterminati, ma la loro popolazione può essere ridotta a un numero ragionevole». Così è con il ritardo in HLS, non è possibile eliminarlo completamente, ma sul mercato ci sono soluzioni che consentono di ridurre notevolmente il ritardo.
Taglio fine
Un altro svantaggio del motore è l'uso di file di piccole dimensioni per la trasmissione dei dati. A prima vista, cosa c'è di male in questo?
Chiunque abbia provato a copiare un gran numero di piccoli file da un dispositivo a un altro avrà notato che la velocità di scrittura di un simile insieme è molto inferiore rispetto a quella di un singolo grande file della stessa dimensione. Inoltre, l'intensità delle operazioni sul disco rigido aumenta significativamente, il che influisce negativamente sulle prestazioni complessive del computer. Pertanto, la trasmissione di dati video in piccoli frammenti di 10 secondi contribuisce anch'essa all'aumento della latenza del motore.
Riepiloghiamo brevemente tutti i vantaggi e svantaggi della tecnologia HLS.
Vantaggi dell'HLS:
- Possibilità di funzionare su qualsiasi dispositivo. Puoi guardare video su qualsiasi dispositivo moderno, che si tratti di uno smartphone, tablet, laptop o computer desktop. L'importante è che il browser web sia di versione recente e compatibile con HTML5 e Media Source Extensions.
- Eccellente qualità dell'immagine. La funzione di trasmissione adattativa utilizzata consente di cambiare dinamicamente la qualità del video trasmesso in base alla larghezza di banda della connessione Internet, cercando al contempo di mantenere la qualità al massimo.
- Non è necessaria una configurazione complessa dell'hardware dell'utente.
Svantaggi:
- Supporto limitato per il funzionamento del motore su alcuni dispositivi.
- Alte latenze nella trasmissione delle immagini.
- Aumento significativo delle spese generali e complessità dell'ottimizzazione a causa dell'uso di file di dimensioni ridotte. A causa delle caratteristiche del contenitore, non saremo mai in grado di ottenere una latenza inferiore alla dimensione del segmento.
Per noi, gli svantaggi dell'HLS hanno superato i suoi benefici, spingendoci a cercare alternative.
Cos'è WebRTC

()
La piattaforma WebRTC è stata sviluppata da Google nel 2011 per la trasmissione di dati video e audio in streaming tra browser e applicazioni mobili con latenza minima. Utilizza il protocollo standard UDP e algoritmi speciali di gestione del flusso. Oggi è un progetto open source, supportato attivamente da Google e in fase di sviluppo.
WebRTC è un insieme di tecnologie per la trasmissione peer-to-peer di video e audio. Questo significa che, ad esempio, i browser degli utenti possono trasferire dati direttamente tra loro utilizzando WebRTC, senza dover ricorrere a server remoti per l'archiviazione e l'elaborazione dei dati. Tutte le informazioni vengono elaborate dai browser e dalle applicazioni mobili degli utenti finali.
La comodità e le ampie funzionalità di questa tecnologia sono state apprezzate dagli sviluppatori dei browser più diffusi. Oggi, il supporto per WebRTC è implementato in Mozilla Firefox, Opera, Google Chrome (e in tutti i browser basati su Chromium), oltre che nelle applicazioni mobili per Android e iOS.
Nonostante i suoi indiscutibili vantaggi, WebRTC presenta alcuni svantaggi significativi.
Difficoltà nella scelta
La tecnologia WebRTC è molto più complessa in termini di interazioni di rete a causa della sua natura P2P. È difficile da debug, da testare e può comportarsi in modo imprevedibile. Inoltre, dobbiamo superare NAT e firewall e garantire il funzionamento in reti dove l'UDP è bloccato.
L'implementazione di WebRTC da parte di Google è molto complessa da utilizzare. Esiste persino un'intera azienda che fornisce servizi per la creazione di SDK. Inoltre, l'integrazione dell'implementazione di Google con il nostro sistema è stata molto difficile senza dover ricodificare completamente il video.
Tuttavia, desideravamo da tempo offrire agli utenti la possibilità di lavorare con immagini video 'live' complete e di ridurre al minimo il ritardo tra il video sullo schermo e gli eventi reali. Inoltre, avevamo la volontà di rendere l'uso delle telecamere PTZ più confortevole, dove i ritardi sono critici.
Considerando che altre implementazioni per combattere i ritardi hanno ancora funzionalità limitate e funzionano molto peggio, abbiamo deciso di utilizzare WebRTC.
Cosa abbiamo fatto

Implementare correttamente la piattaforma WebRTC non è un compito semplice. Qualsiasi errore o imprecisione può portare a ritardi nella trasmissione del video che non solo non diminuirebbero rispetto ad altre piattaforme, ma potrebbero addirittura aumentare.
Per il corretto funzionamento di WebRTC, prima di tutto, è necessario effettuare una modernizzazione tecnologica dello stack per lavorare con i video web. Ed è proprio quello che abbiamo fatto.
Inizialmente abbiamo implementato un server di segnalazione WebRTC sopra Websocket e abbiamo anche distribuito un server peer WebRTC nel cloud basato sul SDK di webrtc.org. Il suo compito è quello di distribuire flussi video ai peer WebRTC client in formato H.264 + Opus/G.711 senza ricodificare il video.
Abbiamo scelto Websocket come protocollo di segnalazione perché ha già un supporto di alta qualità in tutti i browser web popolari. Grazie a questo, possiamo ridurre significativamente non solo i costi di sviluppo ma anche evitare di sprecare tempo e risorse su handshake TCP e TLS ripetuti rispetto ad AJAX.
Il fatto è che WebRTC non fornisce un protocollo di segnalazione per impostazione predefinita, necessario per configurare, sostenere e interrompere correttamente la comunicazione video in tempo reale tra le applicazioni sorgente e client.
E per implementare autonomamente la tecnologia di segnalazione, era necessario sviluppare un nostro server di segnalazione con supporto per più protocolli web (Websocet, WebRTC). Inoltre, con la possibilità di gestire in modo sicuro le sessioni e le notifiche in tempo reale, la gestione dei video e molti altri parametri.
Abbiamo superato le limitazioni P2P riducendo la latenza non a scapito del P2P, ma grazie a UDP e alla gestione del flusso orientata a diminuire la latenza. Questo è anche integrato in WebRTC, poiché il caso d'uso principale sono le conversazioni P2P tramite browser.
Nell'app mobile abbiamo implementato un lettore utilizzando l'SDK webrtc.org, poiché solo in esso è gestita correttamente la gestione del flusso, ci sono tutti i noti schemi di Forward Error Correction (FEC) e il meccanismo di reinvio dei pacchetti è correttamente realizzato per tutti i browser. Non è trascurabile il fatto che l'SDK webrtc.org è attivamente sviluppato da Google.
Qual è il risultato dell'implementazione di WebRTC?
Per la visione di video live dalle telecamere, abbiamo aggiunto un nuovo lettore ottimizzato basato su WebRTC nel pannello personale. Garantisce un'elevata velocità di caricamento del flusso video e elimina completamente il problema dell'accumulo di latenza con l'aumentare del tempo di visione.
Dopo aver implementato il supporto WebRTC nel servizio cloud Ivideon, possiamo affermare con certezza che ora i nostri clienti possono accedere a un video in diretta di alta qualità. Attualmente, il ritardo nella trasmissione del video non supera il secondo! A titolo di confronto, il precedente motore HLS garantiva la consegna del video con un ritardo di 5-7 secondi. La differenza nella velocità di visualizzazione dei video è notevole e l'utente la noterà immediatamente dopo aver iniziato a utilizzare il nostro servizio video.
Come ci aspettavamo, l'implementazione del nuovo lettore ha aumentato la reattività del PTZ e della comunicazione vocale con la telecamera.

C'è solo un aspetto sottile su cui vogliamo richiamare l'attenzione. Il nuovo lettore WebRTC è attualmente in fase di test. Ecco perché non lo attiviamo automaticamente per tutti i nostri clienti. Tuttavia, puoi attivarlo autonomamente abilitando l'apposita opzione nelle impostazioni della telecamera (per farlo, devi accedere al ).
Caratteristiche dell'implementazione di WebRTC nel servizio Ivideon

WebRTC è ancora una tecnologia sperimentale. Il suo supporto non è attualmente implementato correttamente in tutti i browser e dispositivi degli utenti, né in tutte le telecamere.
Questa è la ragione per cui non abbiamo ancora reso il lettore WebRTC predefinito per tutti gli utenti.
Attualmente, raccomandiamo di utilizzare WebRTC solo nei browser Google Chrome. Le ultime versioni di Firefox e Safari supportano anche questa tecnologia, ma, purtroppo, non sono ancora stabili.
Non abbiamo ancora implementato il supporto per WebRTC nei browser sui dispositivi mobili. Al momento, se accedi da un dispositivo mobile e attivi WebRTC, questa modalità non funzionerà. Tuttavia, WebRTC è disponibile nelle nostre applicazioni mobili per e .
E concludendo il discorso sulle caratteristiche di implementazione di WebRTC nel nostro servizio, segnaliamo altri due aspetti importanti.
In primo luogo, la tecnologia è progettata per la trasmissione di video in tempo reale. Pertanto, se la larghezza di banda della tua connessione non è sufficiente a trasmettere il video, noterai un salto di fotogrammi (con HLS noterai interruzioni nel video e un aumento del ritardo, senza perdita di fotogrammi), ma il video verrà comunque trasmesso in tempo reale.
In secondo luogo, poiché la tecnologia è specificamente destinata a lavorare con video in tempo reale, non la utilizziamo per gestire dati video archiviati.
Altre modifiche al servizio
Attualmente, Flash non fa più parte del meccanismo di selezione automatica del motore. Puoi comunque utilizzare un lettore di questo tipo, ma è necessario selezionarlo manualmente nelle impostazioni dell'account o della telecamera. Non è solo una questione di moda; statisticamente, gli utenti del nostro servizio che utilizzano Flash sono praticamente scomparsi. Inoltre, nel tentativo di determinare se il browser dell'utente lo supporta, perdiamo circa 2 secondi preziosi.
Ecco un breve resoconto delle modifiche che vi attendono nel nostro sistema di videosorveglianza cloud e nel vostro pannello di controllo. Rimanete con noi e seguite le novità!
Fonte: habr.com
