Appels vidéo et diffusion en temps réel avec WebRTC et SDK

  • WebRTC offre des données, de l'audio et de la vidéo en temps réel avec une latence très faible grâce à getUserMedia, RTCPeerConnection et RTCDataChannel.
  • Pour fonctionner dans le monde réel, il a besoin de signalisation, de STUN/TURN et d'ICE, et la mise à l'échelle nécessite généralement des SFU ou des serveurs multimédias.
  • Les SDK comme Agora, Twilio ou ZEGOCLOUD simplifient l'infrastructure au prix de coûts récurrents et d'une dépendance vis-à-vis du fournisseur.
  • Un projet parallèle peut démarrer avec un SDK et évoluer vers sa propre infrastructure WebRTC à mesure que le produit mûrit.

Appels vidéo et diffusion en temps réel avec WebRTC et SDK

Si vous construisez un projet parallèle JavaScript Et si vous avez besoin de passer des appels vidéo, il est normal d'avoir des doutes : faut-il utiliser WebRTC pur, un SDK comme Agora, Twilio, Mux ou Zegocloud, ou opter pour une solution entièrement basée sur React Native et WebRTC ? La mauvaise nouvelle, c'est qu'il n'existe pas de solution unique. La bonne nouvelle, c'est que vous maîtrisez JavaScript temps réel, ce qui vous permet de prendre une décision éclairée et d'éviter de compromettre l'architecture.

Vous verrez dans les lignes qui suivent, étape par étape, comment cela fonctionne. WebRTC InsideQuel est le rôle d'Agora (et des autres fournisseurs similaires) ? Qu'implique la mise en place de sa propre infrastructure (STUN/TURN, signalisation, SFU, serveurs multimédias…) ? Et quels sont les véritables compromis entre coût, complexité et évolutivité pour les appels vidéo et la diffusion en temps réel ?

Qu'est-ce que WebRTC et pourquoi est-il à la base de tout ?

WebRTC (communication Web en temps réel) Il s'agit d'un ensemble de normes, d'API et de protocoles open source permettant la diffusion en continu de données, d'audio et de vidéo en temps réel directement depuis un navigateur ou une application native, sans plugins ni applications externes. Normalisé par le W3C et l'IETF, il est pris en charge par tous les navigateurs modernes : Chrome, Firefox, Safari, Edge, Opera et de nombreux navigateurs mobiles.

Leur philosophie est claire : permettre la communication pair à pair (P2P) entre utilisateurs avec une latence très faible, gérant en arrière-plan tous les problèmes de réseau (codecs, gigue, écho, perte de paquets, chiffrement, etc.). Cela inclut tout, d'un appel vidéo individuel à un système de diffusion interactive avec des centaines voire des milliers de spectateurs si l'on y ajoute les infrastructures adéquates.

application d'appel
Article connexe:
Comment utiliser et créer une application d'appel sur Android : le guide ultime pour les utilisateurs et les développeurs

Principales API WebRTC : getUserMedia, RTCPeerConnection et RTCDataChannel

WebRTC repose sur trois API principales côté navigateur que vous utiliserez certainement, que vous construisiez votre propre solution ou que vous utilisiez un SDK comme Agora :

  • Flux multimédia / obtenir les médias de l'utilisateur: pour capturer la vidéo et l'audio (caméra, microphone, et même l'écran ou les onglets).
  • Connexion RTCPeer: négocier et transporter des flux audio et vidéo entre pairs.
  • Canal de données RTC: envoyer des données arbitraires (texte, binaire, fichiers) avec une faible latence entre les clients.

Avec getUserMedia Vous pouvez demander au navigateur l'accès à la caméra et au microphone et recevoir une MediaStream que vous associez ensuite à un élément <video> avec video.srcObject = stream. Vous pouvez postuler restrictions (résolution, fréquence d'images, caméra avant/arrière, etc.) et, si ces conditions ne sont pas remplies, vous obtiendrez des erreurs telles que : OverconstrainedErrorvous devez proposer des alternatives (par exemple, en réduisant la résolution de 1080p à 720p et en appliquant des ajustements pour améliorer le son du microphone).

L'API de Connexion RTCPeer Il s'agit du cœur des appels : il gère la négociation SDP (offre/réponse), la collecte des candidats ICE (stun/turn), l'établissement de la connexion et la transmission sécurisée via SRTP. Depuis votre code, vous créez simplement la connexion, ajoutez des pistes multimédias et réagissez à des événements tels que : onicecandidate u ontrack et vous vous occupez de la signalétique.

Enfin, Canal de données RTC Il permet de configurer des canaux de données similaires à WebSocket, mais point à point et avec un contrôle précis de la fiabilité et de l'ordre. Il est utile pour les conversations vidéo, le partage de fichiers, la synchronisation de l'état des jeux ou la collaboration en temps réel. La syntaxe est familière : dataChannel.send() y onmessage en el récepteur.

Signalisation : le « ciment » que WebRTC ne définit pas

Un malentendu typique : WebRTC n'inclut pas la signalétiqueRTCPeerConnection doit échanger des informations, mais n'en définit pas la méthode. Vous devez la définir vous-même, ou bien utiliser un SDK tiers.

Les paires sont envoyées par signalisation :

  • Messages de contrôle de session: début d'appel, raccrochage, erreurs.
  • Informations sur le réseau: Candidats ICE (adresses IP/ports découverts).
  • Métadonnées des médias: Offres et réponses SDP avec codecs, résolutions, etc.

Cette signalétique est généralement mise en œuvre avec WebSocketsSocket.IO, HTTP (interrogation/interrogation longue), MQTT ou autres mécanismes bidirectionnels. Un modèle très typique est un serveur Node.js avec Socket.IO qui gère les « salles » et transfère les messages type texte/JSON entre clients :

Serveur: reçoit create or joinElle crée une salle si elle n'existe pas, prend en charge jusqu'à deux clients (pour un appel vidéo basique) et transfère les messages. message aux autres prises de la pièce. Il vous incombe de ne pas dépasser le nombre maximal d'utilisateurs ou de concevoir votre propre logique de salle.

ClientLors du chargement de la page, elle demande un nom de salle (ou le déduit de l'URL), puis elle émet create or joinÉcoutez des événements comme created, joined, full, ready et convient avec l'autre partie d'initier ou de refuser l'appel.

Ce modèle est parfait pour un prototype ou projet parallèleIl vous offre un serveur de signalisation léger que vous pouvez faire évoluer avec des clusters et des équilibreurs de charge si nécessaire.

STUN, TURN, ICE : Passer les NAT et les pare-feu sans devenir fou

Dans un monde idéal, deux utilisateurs seraient toujours connectés à des réseaux accessibles et pourraient se connecter directement. Dans la réalité, il existe… NAT, pare-feu, CGNAT des FAI et des réseaux d'entreprises paranoïaques. C'est là qu'intervient ICE, combinant STUN et TURN.

  • ÉTOURDIR (Utilitaires de traversée de session pour NAT) permet à un client de découvrir son Adresse IP publique et portLe serveur STUN ne répond qu'avec ces informations.
  • TOUR (Traversée via des relais autour du NAT) agit comme serveur relais Le trafic multimédia transite par ce canal lorsqu'il est impossible d'établir une connexion P2P directe, consommant ainsi de la bande passante serveur et engendrant des coûts.
  • VÉLO (Établissement interactif de la connectivité) est responsable de tester tous les candidats possibles (adresses locales, reflétées par les relais STUN et TURN) jusqu'à ce qu'une route viable soit trouvée.

En pratique, dans votre objet de configuration RTCPeerConnection, vous ajoutez un tableau de Serveurs de glace Avec les URI STUN/TURN, le navigateur se charge du reste. Si vous configurez votre propre infrastructure, vous devrez déployer et gérer vos serveurs STUN/TURN ; si vous utilisez un SDK comme Agora, Twilio ou Zegocloud, tout est déjà configuré et prêt pour la production.

Diffusion en continu en temps réel à faible latence : WebRTC vs HLS/DASH

Appels vidéo et diffusion en temps réel avec WebRTC et SDK

Quand on parle de diffusion en direct Il existe deux mondes distincts : les protocoles basés sur HTTP (HLS, DASH) et WebRTC. HLS/DASH fonctionnent en téléchargeant et en lisant des segments vidéo côté client ; c’est idéal pour la mise à l’échelle via un CDN, mais cela introduit… latences de plusieurs secondes (5 à 30 secondes facilement).

WebRTC, en revanche, utilise UDP + RTP et diffuse la vidéo en mode « push » de la source au lecteur, avec des temps de démarrage très courts et des latences typiques inférieures à 500 ms (souvent ~250 ms) si le réseau est performant. Ceci est rendu possible grâce à :

  • contrôle de la congestion intégré, qui ajuste le débit binaire et la résolution en temps réel en fonction de la perte de paquets, de la gigue ou du RTT.
  • Utilisation de codecs efficaces (VP8, VP9, ​​H.264 ; de plus en plus AV1) avec accélération matérielle lorsqu'il sera disponible.
  • Possibilité d'utiliser le SVC (Scalable Video Coding) afin que le récepteur ne reçoive que les couches que son réseau/appareil peut prendre en charge.

C'est pourquoi WebRTC est le choix naturel pour enchères en temps réel, les paris sportifs en direct, le trading, les jeux interactifs, l'assistance à distance, la télémédecine, les classes virtuelles participatives ou les tableaux de bord financiers qui ne peuvent se permettre plusieurs secondes de délai.

Le problème est que le protocole WebRTC P2P pur ne s'adapte pas bien à des milliers de spectateurs ; pour cela, il faut… SFU, serveurs multimédias ou plateformes hybridesC’est précisément là qu’interviennent des solutions comme Flussonic, Agora ou similaires.

Passer à l'échelle supérieure au-delà du P2P : SFU, serveurs multimédias et architectures hybrides

Lors d'un appel vidéo individuel, WebRTC fonctionne parfaitement. Mais dès qu'on ajoute 10, 20 ou 100 utilisateurs, la situation se complique : chaque client doit envoyer et recevoir plusieurs flux, son processeur surchauffe et le réseau sature. Trois schémas classiques se dégagent alors :

  • MCU (Unité de contrôle multipoint)Le serveur reçoit tous les flux, les mélange et envoie un flux unique à chaque client. Avantage : faible consommation de ressources côté client. Inconvénients : charge serveur importante, contrôle qualité individuel réduit.
  • SFU (Unité de transfert sélectif)Le serveur reçoit les flux et les transmet de manière sélective sans les mélanger. Chaque spectateur reçoit les flux dont il a besoin, éventuellement en qualité différente. C'est le modèle le plus couramment utilisé aujourd'hui pour vidéoconférence multi-utilisateurs et la diffusion interactive évolutive.
  • Architectures hybrides WebRTC + HLS/DASHWebRTC est utilisé pour l'ingestion et l'interaction, tandis que HLS/DASH est utilisé pour la distribution à un large public ne nécessitant pas d'interaction en temps réel. Il s'agit d'un équilibre entre les deux. latence ultra faible pour les « acteurs » et une capacité d'adaptation massive pour les « spectateurs ».

Serveurs multimédias comme Flussonique D'autres fournissent l'infrastructure nécessaire : ils reçoivent le flux WebRTC, le transcodent si besoin, le transmettent via WebRTC à d'autres clients ou le convertissent en protocoles de type HLS pour une diffusion à grande échelle. C'est ce type d'infrastructure qui, concrètement, permet de dépasser le cadre des appels individuels sans avoir à réinventer la roue.

Cas d'utilisation typiques : appels vidéo, streaming, IoT et bien plus encore

WebRTC est devenu omniprésent, et vous l'utilisez probablement tous les jours sans vous en rendre compte. Voici quelques exemples où il est particulièrement adapté : appels vidéo et vidéoconférences:

  • Appels vidéo et vidéoconférencesGoogle Meet, Jitsi, Slack, Microsoft Teams et de nombreux autres outils s'appuient sur WebRTC (en partie ou en totalité) pour la vidéo, l'audio et le partage d'écran.
  • Services de diffusion en continu en temps réelDes plateformes comme Twitch, Meta Live, Vimeo Livestream ou des outils comme Streamyard combinent WebRTC pour l'ingestion et d'autres technologies pour la distribution de masse.
  • Discussion et messagerie avec partage de fichiersGrâce à RTCDataChannel, vous pouvez bénéficier de conversations en temps réel, du partage de fichiers, de la synchronisation de statut, etc., sans serveurs multimédias centraux.
  • Jeux en nuage et multijoueurDes services comme GeForce NOW ou Xbox Cloud Gaming exploitent des technologies similaires pour la vidéo interactive ; de nombreux jeux P2P utilisent WebRTC pour synchroniser le jeu.
  • Internet des objets et surveillanceLes caméras intelligentes, les babyphones, les sonnettes vidéo ou les drones peuvent envoyer vidéo en temps réel aux appareils mobiles et aux navigateurs utilisant WebRTC.
  • Éducation et télémédecine: salles de classe virtuelles avec tableaux blancs, questionnaires et vidéo bidirectionnelle, ou consultations médicales en ligne où la latence et la sécurité sont cruciales.

Sécurité WebRTC : chiffrement, autorisations et bonnes pratiques

La sécurité dans WebRTC n'est pas une option supplémentaire : elle est intégrée. intégré dès la conceptionTous les éléments multimédias sont chiffrés et les API ne fonctionnent qu'à partir d'origines sécurisées (HTTPS ou localhost), même s'il est conseillé de rester vigilant. arnaques par appels vidéo.

  • DTLS (Datagram Transport Layer Security) chiffre les données en transit.
  • SRTP (Secure Real-time Transport Protocol) protège l'audio et la vidéo afin qu'ils ne puissent pas être facilement manipulés ou interceptés.
  • Accès à caméra et micro Elle nécessite une autorisation explicite de l'utilisateur, avec des indicateurs visuels visibles (icônes, points colorés, etc.).
  • Comme il n'y a pas de plugins à installer, le risque de logiciel malveillant camouflés dans des extensions ou des binaires tiers.

Malgré tout, vous devez prendre soin de votre propre couche : utilisez HTTPS entièrementVérifiez les autorisations que vous demandez, maintenez vos navigateurs et bibliothèques à jour et ne négligez pas la sécurité de votre serveur de signalisation ni de vos API REST.

WebRTC comparé aux autres technologies : VoIP, WebSockets et plateformes propriétaires

Si vous venez du monde de la VoIP traditionnelle, vous connaissez sans doute le SIP, les PBX, les softphones et les serveurs onéreux. WebRTC change la donne : l’utilisateur n’a plus besoin de fournir la moindre information. client de bureau Aucun matériel spécifique n'est nécessaire ; un navigateur et un serveur de signalisation relativement simple suffisent.

Face à VoIP traditionnelleWebRTC allège la charge sur l'infrastructure centrale et ouvre la voie à des applications directement intégrées au Web. Dans de nombreux cas, vous pouvez réutiliser votre infrastructure SIP grâce à des passerelles qui traduisent la signalisation en WebRTC.

Respect WebSocketsIl convient de les considérer comme complémentaires : ils sont idéaux pour les notifications, les conversations légères ou les mises à jour de statut, mais pas pour les contenus multimédias exigeants. WebRTC est optimisé pour audio/vidéo en temps réelavec contrôle de la congestion, codecs, tampon de gigue, etc. En pratique, de nombreux projets utilisent WebSockets pour la signalisation et WebRTC pour le transport des médias.

Si vous les comparez à des plateformes comme Zoom, GoToMeeting ou WebExLa différence réside dans le modèle : ces outils sont des solutions fermées, souvent avec des applications de bureau obligatoires et un système propriétaire. WebRTC, en revanche, est une technologie de base ; vous pouvez créer votre propre « mini-Meet » par-dessus ou l’intégrer à des services qui l’utilisent déjà (comme Google Meet ou Microsoft Teams).

Développement avec WebRTC : complexité réelle et pièges courants

Bien que les API semblent simples sur le papier, implémenter WebRTC à partir de zéro est plus complexe. Vous devrez notamment prendre en compte les points suivants :

Comment utiliser le navigateur Tor pour accéder au dark web
Article connexe:
Navigateur Tor pour Android : Paramètres avancés et utilisation sécurisée
  • Signalétique personnalisée: conception des messages, des salles, gestion des reconnexions, des nouvelles tentatives, des erreurs.
  • Gestion ICE/STUN/TURNDéployer les serveurs, surveiller l'utilisation de TURN (qui consomme de la bande passante), ajuster les délais d'expiration.
  • Qualité de service (QoS): adapter les débits binaires, gérer les réseaux instables, négocier les codecs, détecter les dégradations de connexion et réagir.
  • escaladé: passer d'un simple P2P à des groupes, puis à des centaines d'utilisateurs, introduire des SFU ou des serveurs multimédias sans rompre la conception originale.
  • Compatibilité entre navigateursBien que la situation soit favorable, vous trouverez tout de même des nuances. Utilisez adapter.js Il est toujours fortement recommandé.

Dans le cadre d'un petit projet parallèle, la mise en place d'un serveur Node avec Socket.IO et d'un port STUN public peut suffire pour les appels individuels ou les très petits groupes. Mais si votre idée prend de l'ampleur et que vous avez besoin de plus d'informations, il vous faudra peut-être un serveur Node plus performant. foule importanteQu'il s'agisse de contrôle qualité précis, d'enregistrements, d'analyses, de transcriptions ou de monétisation, vous devrez bientôt envisager ou intégrer un serveur multimédia personnelou passer à un prestataire spécialisé.

CDN en temps réel avec SDK : Agora, Twilio, Mux, ZEGOCLOUD…

Services comme Agora, Twilio, Mux, ZEGOCLOUD ou des technologies similaires créent une couche de valeur ajoutée au-dessus de WebRTC qui vous épargne des mois de travail et d'innombrables maux de tête :

  • Ils vous en offrent un réseau médiatique mondial avec des SFU réparties dans le monde entier, optimisées pour une faible latence.
  • Abstrait STUN/TURN, signalisation, nouvelles tentatives, les reconnexions et la gestion complexe des réseaux.
  • Ils comprennent des SDK bien maintenus pour Web, iOS, Android, React Native et d'autres cadres.
  • Ils offrent des services supplémentaires tels que enregistrement et diffusion au format RTMP/HLS, la modération, les statistiques en temps réel, les contrôles de qualité, les rôles des utilisateurs (animateur, public, orateur), etc.

Le coût, comme vous vous en doutez probablement, est le principal problème : même avec un peu d'argent plusieurs minutes de vidéo Ou, avec un nombre important d'utilisateurs simultanés, la facture explose. De plus, vous devenez dépendant de leur plateforme et de ses changements de prix ou d'API.

Dans votre situation particulière, avec une solide expérience en JavaScript en temps réelUne solution judicieuse consiste à commencer par un kit de développement logiciel (SDK) pour accélérer le développement, valider le produit et se familiariser avec son modèle de salles, les rôles, le cycle de vie des flux et la gestion des états. Par la suite, si le projet prend de l'ampleur et que le coût devient un facteur limitant, vous pourrez progressivement migrer certaines parties de la solution vers une plateforme plus robuste. infrastructure WebRTC propriétaire ou s'appuyer sur un serveur multimédia de type Flussonic pour contrôler la couche de distribution.

Bonnes pratiques et outils pour le débogage de WebRTC

Pour éviter de se perdre dans les méandres de WebRTC, il est conseillé de s'appuyer sur les outils déjà présents dans les navigateurs et l'écosystème :

  • chrome: // webrtc-internals (o à propos de :webrtc (dans Firefox) : panneau avec des statistiques détaillées sur les connexions, les débits binaires, la perte de paquets, les codecs actifs, etc.
  • adapter.js: un module d'interface maintenu par la communauté qui lisse les différences entre les navigateurs et leurs versions.
  • test.webrtc.org: vérifier la compatibilité de la caméra, du microphone, du réseau et la compatibilité générale d'une machine.
  • Échantillons officiels Sur webrtc.github.io/samples : exemples de contraintes, de connexions entre pairs, de canaux de données, de partage d’écran… très utiles pour copier des modèles.

Il est également judicieux de structurer le code en séparant clairement les couche de signalisation (prises, salles, messages) de la couche de WebRTC pur (Création de connexions, gestion des flux, gestion des événements). Cela vous permet de remplacer un serveur de signalisation ou un serveur multimédia sans avoir à réécrire toute la logique client.

Androïd et Linux
Article connexe:
Android et Linux : les meilleures alternatives à KDE Connect

Compte tenu de tout ce qui précède, pour un projet parallèle qui débute et auquel vous accordez tant d'importance… temps de développement comme l' coût à moyen termeLa stratégie la plus équilibrée consiste généralement à commencer par un SDK temps réel basé sur WebRTC qui permet d'itérer rapidement dans React/React Native, d'intégrer la gestion des rôles, des sessions, du cycle de vie des flux et des états en direct, et en parallèle d'approfondir WebRTC « par l'interface » (getUserMedia, RTCPeerConnection, RTCDataChannel, signalisation avec Node+Socket.IO, STUN/TURN, SFU) afin de ne pas être lié indéfiniment à une seule plateforme et de pouvoir passer à une solution plus personnalisée lorsque le produit le justifie.


Ajouter comme source préférée