
Dès les premiers jours de travail sur un système de vidéosurveillance basé sur le cloud, nous avons rencontré un problème sans lequel il était possible de mettre un terme à Ivideon - c'était notre Everest, l'escalade prenait beaucoup d'énergie, mais maintenant nous avons finalement coincé un piolet dans la couronne du rébus multiplateforme.
Le système de transmission audio et vidéo sur Internet ne doit pas dépendre de l'équipement, des clients Web et des normes qu'ils prennent en charge, et doit également fonctionner correctement lorsqu'il existe des traducteurs d'adresses réseau et des pare-feu. L'utilisateur de la vidéosurveillance dans le cloud souhaite accéder au service, même s'il utilise des caméras analogiques, et préfère regarder des émissions vidéo en direct sur l'appareil le plus moderne.
Il est très important que l'utilisateur veuille regarder la vidéo avec un minimum de retard. Presque le seul moyen d'afficher des vidéos à faible latence dans un navigateur est d'utiliser WebRTC (communications Web en temps réel). WebRTC est un ensemble de technologies pour la transmission vidéo et audio peer-to-peer dans les navigateurs, initialement conçu pour transmettre et lire un flux vidéo avec une faible latence. Pour cela, entre autres, le protocole UDP est utilisé.
Avant de vous dire ce que le nouveau moteur offre à l'utilisateur, nous vous rappellerons pourquoi et pourquoi nous prenons en charge les technologies HLS, et pour ce que nous avons décidé de faire.
Moteur HLS: avantages et inconvénients

(
c )
La technologie HLS (HTTP Live Streaming) a été développée par Apple, il n'est donc pas surprenant que pour la première fois son support apparaisse sur les appareils de cette marque particulière. À ce jour, presque tous les décodeurs de télévision et de nombreux appareils fonctionnant sous Android OS peuvent également lire des séquences au format HLS.
Le moteur HLS utilise le codec vidéo bien connu H264 en combinaison avec des flux audio AAC ou MP3 pour le streaming vidéo. L'ensemble du flux audio et vidéo est conditionné dans un conteneur de transport MPEG-TS. Pour la transmission via HTTP, les informations contenues dans le flux sont divisées en fragments décrits dans les listes de lecture m3u8. Et seulement alors, ces fragments, ainsi que les listes de lecture, sont transmis via HTTP. La division en fragments signifie automatiquement un retard en quelques secondes. Une telle fonctionnalité du conteneur MPEG-TS.
Le moteur HLS prend également en charge les flux multibits, Live / VOD.
Les principaux avantages de HLS:- prise en charge intégrée dans tous les principaux navigateurs;
- facilité de mise en œuvre (par rapport à WebRTC);
- il est très pratique et efficace d'organiser toutes sortes de diffusions à un large public car vous pouvez charger des segments sur un CDN une seule fois.
Malgré toute la simplicité du moteur, tout n'est pas aussi fluide qu'il n'y paraît. Le principal problème est que les développeurs de lecteurs tiers se sont éloignés des recommandations d'Apple, par exemple, en termes de formats audio pris en charge. En particulier, de nombreux développeurs ont commencé à ajouter la possibilité de travailler avec des flux audio populaires: vidéo mpeg2, audio mpeg2, etc. En conséquence, nous avons dû créer différents formats de listes de lecture pour différents lecteurs.
Mais l'un des plus gros problèmes du moteur HLS est la latence élevée du transfert de données.
Les origines des "freins"
La raison principale du retard élevé dans HLS réside dans le fait que les programmeurs ont créé un moteur pour obtenir une image de la plus haute qualité. Par conséquent, les paramètres de l'intervalle de trame utilisé et la taille de la mémoire tampon de lecture ne sont tout simplement pas appropriés pour effectuer des diffusions vidéo en direct. De ce fait, un retard assez élevé dans la transmission de la séquence vidéo se produit, qui peut être de 5 à 7 secondes.
D'une part, c'est un peu, par exemple, pour ceux qui regardent un film depuis un serveur d'hébergement vidéo. Mais pour les systèmes de vidéosurveillance, le retard dans la transmission des images peut être très important.
Si vous observez un bureau où les employés sortent des moniteurs une fois par heure, un délai de 5 secondes n'a pas d'importance. Mais les gens ont commencé à se plaindre que, par exemple, lors de la diffusion d'un match de football, GOOOOOOL était déjà écrit dans le chat, mais ce n'est pas sur la vidéo :). Nous avons déjà un certain nombre de cas personnalisés où Ivideon devrait presque remplacer skype.
Est-il possible de vaincre le retard dans HLS? La réponse à cette question ressemble à un discours d'un combattant expérimenté lors d'une conférence devant des perturbateurs novices: "Les rats ne peuvent pas être exterminés, mais leur nombre peut être réduit à un minimum raisonnable." Ainsi, avec un retard dans HLS, sa suppression à zéro ne fonctionnera pas, mais il existe des solutions sur le marché qui peuvent réduire considérablement le retard.
Coupe peu profonde
Un autre inconvénient du moteur est l'utilisation de fichiers de petite taille pour le transfert de données. Il semblerait que ce soit mauvais?
Quiconque a essayé de copier un grand nombre de petits fichiers d'un support à un autre a probablement remarqué que la vitesse d'écriture d'un tel ensemble est bien inférieure à un gros fichier de la même taille. Oui, et l'intensité de l'accès au disque dur augmente considérablement, ce qui affecte généralement négativement les performances de l'ensemble de l'ordinateur. Par conséquent, la transmission de données vidéo sous la forme de petits fragments de 10 secondes contribue également à l'augmentation du retard du moteur.
Résumez brièvement tous les avantages et les inconvénients de la technologie HLS.
Avantages de HLS:- Capacité à travailler avec n'importe quel appareil. Vous pouvez regarder des vidéos sur n'importe quel appareil moderne, qu'il s'agisse d'un smartphone, d'une tablette, d'un ordinateur portable ou d'un ordinateur de bureau. L'essentiel est que le navigateur Web soit à jour et compatible avec HTML5 et Media Source Extensions.
- Grande qualité d'image. La fonction de transfert de données adaptative utilisée vous permet de modifier dynamiquement la qualité de la séquence vidéo transmise en fonction de la bande passante de la connexion Internet, tandis que l'algorithme cherche à maintenir la qualité maximale.
- Aucune configuration complexe de l'équipement utilisateur n'est nécessaire.
Inconvénients:- Prise en charge limitée pour travailler avec le moteur sur certains appareils.
- Retards importants dans la transmission d'images.
- Forte augmentation des frais généraux et de la complexité de l'optimisation en raison de l'utilisation de petits fichiers. En raison de la nature du conteneur, nous ne pouvons jamais obtenir un retard inférieur à la taille du segment.
Les inconvénients de HLS l'emportaient sur ses avantages pour nous et nous ont obligés à rechercher des options alternatives.
Qu'est-ce que WebRTC?

(
c )
WebRTC a été développé par Google en 2011 pour diffuser la vidéo et l'audio entre les navigateurs et les applications mobiles avec une latence minimale. Pour cela, le protocole UDP standard et des algorithmes de contrôle de flux spéciaux sont utilisés. Aujourd'hui c'est un projet open source, il est activement soutenu par Google et se développe.
WebRTC est un ensemble de technologies pour la transmission peer-to-peer de la vidéo et du son. C'est-à-dire, par exemple, que les navigateurs utilisateurs utilisant WebRTC peuvent se transférer des données directement, sans utiliser de serveurs distants pour stocker et traiter les données. Toutes les informations sont également traitées par les navigateurs et les applications mobiles des utilisateurs finaux.
La commodité et les grandes capacités de cette technologie ont été appréciées par les développeurs de tous les navigateurs populaires. Aujourd'hui, le support WebRTC est implémenté dans Mozilla Firefox, Opera, Google Chrome (et tous les navigateurs basés sur Chromium), ainsi que dans les applications mobiles pour Android et iOS.
Avec tous ses avantages incontestables, WebRTC présente plusieurs inconvénients importants.
Difficulté à choisir
WebRTC est beaucoup plus complexe en termes de mise en réseau car il s'agit de P2P. Il est difficile de déboguer, de tester, il peut se comporter de façon imprévisible. Dans ce cas, nous devons surmonter le NAT et le pare-feu, nous devons fournir du travail dans les réseaux où UDP est bloqué.
L'implémentation WebRTC de Google est très difficile à utiliser. Il existe même toute une entreprise qui fournit des services d'assemblage SDK. De plus, l'implémentation de Google était très difficile à intégrer à notre système afin qu'il ne transcode pas toutes les vidéos.
Cependant, nous souhaitons depuis longtemps donner aux utilisateurs la possibilité de travailler avec une séquence vidéo "en direct" à part entière et de minimiser le décalage de l'image à l'écran par rapport aux événements eux-mêmes. De plus, nous souhaitions rendre l'utilisation des caméras PTZ plus confortable, là où les retards sont critiques.
Considérant que les autres implémentations de la lutte contre les décalages jusqu'à présent ont des fonctionnalités limitées et fonctionnent nettement moins bien, nous avons décidé d'utiliser WebRTC.
Qu'avons-nous fait

La mise en œuvre correcte de la plate-forme WebRTC n'est pas une tâche facile. Toute erreur de calcul ou inexactitude peut conduire au fait que les retards dans la transmission des séquences vidéo non seulement ne diminuent pas par rapport aux autres plates-formes, mais augmentent également.
Pour que WebRTC fonctionne correctement, tout d'abord, il est nécessaire d'effectuer une modernisation technologique de la pile pour travailler avec la vidéo Web. Ce que nous avons fait.
Tout d'abord, nous avons implémenté le serveur de protocole de signalisation WebRTC au-dessus de Websocket, et également déployé le serveur homologue WebRTC dans le cloud sur la base du SDK webrtc.org. Sa tâche consiste à distribuer des flux vidéo aux homologues WebRTC clients au format H.264 + Opus / G.711 sans transcodage vidéo.
Nous avons choisi Websocket comme protocole de signalisation car il prend déjà en charge la qualité dans tous les navigateurs Web populaires. De ce fait, il est possible de réduire considérablement non seulement les frais généraux de développement, mais aussi de ne pas perdre de temps et de ressources sur une négociation TCP et TLS répétée par rapport à AJAX.
Le fait est que par défaut WebRTC ne fournit pas le protocole de signalisation nécessaire à la configuration, au support et à la rupture des communications vidéo en temps réel entre les applications source et clientes.
Et afin de mettre en œuvre de manière indépendante la technologie de signalisation, nous devions développer notre propre serveur de signaux avec la prise en charge de plusieurs protocoles Web (Websocet, WebRTC). Et aussi avec la possibilité de gérer en toute sécurité les sessions et les notifications en temps réel, la gestion vidéo et de nombreux autres paramètres.
Nous avons surmonté les limites du P2P en réduisant le retard non dû au P2P, mais grâce à l'UDP et au contrôle de flux visant à réduire le retard. Ceci est également intégré à WebRTC, car le cas d'utilisation principal est les conversations p2p via le navigateur.
Dans le client mobile, nous avons implémenté le lecteur à l'aide du SDK webrtc.org, car seul le contrôle de flux est correctement implémenté, il existe tous les schémas FEC (Forward Error Correction) connus et le mécanisme de renvoi des paquets pour tous les navigateurs est correctement implémenté. Il est également important que le SDK webrtc.org soit activement développé par Google.
Quel est le résultat de la mise en œuvre de WebRTC?
Pour regarder des vidéos en direct à partir de caméras, nous avons ajouté un nouveau lecteur optimisé basé sur WebRTC à notre compte. Il fournit des séquences vidéo à haute vitesse et élimine complètement le problème d'accumulation de retard à mesure que le temps de visionnement augmente.
Après avoir mis en œuvre la prise en charge WebRTC dans le service cloud Ivideon, nous pouvons affirmer avec confiance que nos clients peuvent désormais regarder des vidéos en direct à part entière. Maintenant, le retard dans la diffusion des images ne dépasse pas une seconde! À titre de comparaison, le moteur HLS précédent fournissait une diffusion vidéo avec un retard de 5 à 7 secondes. La différence de vitesse de démonstration vidéo est très importante et l'utilisateur le remarquera immédiatement après avoir commencé à travailler avec notre service vidéo.
Comme nous nous y attendions, la mise en place du nouveau lecteur nous a permis d'augmenter la réactivité du PTZ et la communication vocale avec la caméra.

Il n'y a qu'un seul point subtil sur lequel nous voulons attirer l'attention. Le nouveau lecteur WebRTC est toujours en mode test. Et c'est pourquoi nous ne le connectons pas à tous nos clients par défaut. Mais vous pouvez l'activer vous-même en activant l'élément correspondant dans les paramètres de l'appareil photo (pour cela, vous devez vous rendre sur votre
compte personnel ).
Caractéristiques de l'implémentation WebRTC dans le service Ivideon

WebRTC est actuellement encore une technologie expérimentale. Sa prise en charge n'a pas encore été correctement implémentée dans tous les navigateurs et appareils utilisateur, ainsi que dans toutes les caméras.
Cela explique le fait que nous n'avons pas encore fait du lecteur WebRTC la valeur par défaut par défaut pour tous les utilisateurs.
Pour l'instant, nous vous recommandons d'utiliser WebRTC uniquement dans les navigateurs Google Chrome. Les versions récentes de Firefox et Safari prennent également en charge cette technologie, mais, malheureusement, elles sont toujours instables.
Nous n'avons pas encore implémenté le support WebRTC pour les navigateurs sur les appareils mobiles. Maintenant, si vous vous connectez à partir d'un appareil mobile et activez WebRTC, ce mode ne fonctionnera pas. Cependant, WebRTC est dans nos applications mobiles pour
Android et
iOS .
Et pour conclure l'histoire des fonctionnalités de l'implémentation de WebRTC dans notre service, nous notons deux points plus subtils.
Premièrement, la technologie se concentre sur la diffusion de vidéo en direct en temps réel. Par conséquent, si la bande passante de votre chaîne n'est pas suffisante pour la transmission vidéo, vous remarquerez une baisse des images (avec HLS, vous remarquerez un fondu vidéo et un retard accru, tandis que les images ne seront pas abandonnées), mais la vidéo sera toujours diffusée en temps réel.
Deuxièmement, étant donné que la technologie est conçue pour fonctionner avec des vidéos en direct en temps réel, nous ne les utilisons pas pour travailler avec des données vidéo archivées.
Autres changements de service
Flash n'est plus impliqué dans le mécanisme de sélection automatique du moteur. Vous pouvez toujours utiliser un tel lecteur, mais pour cela, vous devez le sélectionner manuellement dans les paramètres du compte ou de l'appareil photo. Ce n'est pas une mode, juste selon les statistiques de notre service d'utilisateurs travaillant avec Flash, il n'y en a pratiquement plus. Et pour tenter de déterminer si le navigateur de l'utilisateur le prend en charge, nous perdons environ 2 secondes de temps précieux.
Voici un bref résumé des changements qui vous attendent dans notre système de vidéosurveillance basé sur le cloud et notre compte personnel. Restez à l'écoute et restez à l'écoute!