WebRTC : ce que c'est, architecture et principe de fonctionnement

Auteur : IT Sectr Publié le : 2026-06-01 Temps de lecture : 9 min

WebRTC est une technologie ouverte pour transmettre de l'audio, de la vidéo et des données en temps réel directement entre appareils, sans serveurs intermédiaires. Selon WebRTC Project (2026), la norme est prise en charge par tous les navigateurs modernes et les plateformes mobiles, offrant une latence inférieure à 500 ms. WebRTC utilise les protocoles ICE, STUN, TURN pour établir des connexions même derrière un NAT et des pare-feu.

Points clés

  • WebRTC — une norme ouverte pour la transmission peer-to-peer d'audio, de vidéo et de données en temps réel sans plugins.
  • Architecture comprend trois couches : API applicatives (getUserMedia, RTCPeerConnection), transport (ICE, STUN, TURN) et sécurité (DTLS, SRTP).
  • NAT traversal est résolu via le framework ICE avec des serveurs STUN (IP publique) et des relais TURN (contournement des NAT symétriques).
  • SDK mobiles — Google WebRTC pour Android et iOS offrent des API natives pour les appels vocaux et vidéo.
  • Signalisation (échange SDP) ne fait pas partie de WebRTC et est implémentée via WebSocket, SIP ou un protocole personnalisé.

Qu'est-ce que WebRTC

WebRTC (Web Real-Time Communication) est un projet open source initié par Google en 2011 et standardisé par le W3C (JavaScript API) et l'IETF (protocoles). Son objectif principal est de fournir une communication à faible latence entre navigateurs et applications sans installer de plugins ou de logiciels tiers.

Contrairement aux solutions traditionnelles (RTMP, HLS) où la vidéo passe par un serveur, WebRTC utilise une architecture peer-to-peer : les données sont transmises directement entre les participants. Cela offre une latence de 200-500 ms contre 3 à 10 secondes pour HLS — une différence cruciale pour les appels vocaux et vidéo, le streaming de jeux et la chirurgie à distance.

Selon Google WebRTC Team (2025), la technologie est utilisée dans des applications comptant plus de 5 milliards d'installations au total : Google Meet, WhatsApp, Discord, Telegram, Zoom (partiellement). Plus de 85% des startups financées par capital-risque dans les secteurs de la télésanté et de l'edtech choisissent WebRTC comme transport de base en temps réel.

Le développement mobile a bénéficié du support complet de WebRTC en 2013 avec la sortie de libjingle_peerconnection — une implémentation native pour Android et iOS. Aujourd'hui, les deux plateformes disposent de SDK stables avec prise en charge du codage matériel H.264 et VP8, de la caméra, du microphone et des haut-parleurs de l'appareil.

Architecture et protocoles WebRTC

L'architecture WebRTC se compose de trois couches. La couche supérieure est la JavaScript API (ou API native pour les plateformes mobiles), la couche intermédiaire est constituée des protocoles de transport, la couche inférieure concerne les codecs et la sécurité. Chaque couche résout sa propre tâche, mais toutes sont nécessaires à l'établissement de la connexion.

API principales de WebRTC

MediaStream (getUserMedia) — capture l'audio et la vidéo du microphone et de la caméra de l'appareil. RTCPeerConnection — gère la connexion P2P : codage, transport, adaptation du débit. RTCDataChannel — transmet des données arbitraires (texte, fichiers, messages binaires) sur le même canal.

js
// API JavaScript WebRTC (exemple de navigateur)
const pc = new RTCPeerConnection({
    iceServers: [
        { urls: "stun:stun.l.google.com:19302" }
    ]
});

pc.onicecandidate = (event) => {
    if (event.candidate) {
        sendToPeer(JSON.stringify(event.candidate));
    }
};

const offer = await pc.createOffer();
await pc.setLocalDescription(offer);

Protocoles en temps réel

WebRTC utilise SRTP (Secure Real-Time Transport Protocol) pour l'audio et la vidéo — une version sécurisée de RTP avec chiffrement AES-128. La gestion de session s'effectue via SCTP (Stream Control Transmission Protocol) sur DTLS. Chaque flux de données est obligatoirement chiffré : WebRTC n'a pas de mode non sécurisé.

  • SRTP/SRTCP — transmission chiffrée des flux médias avec protection contre les attaques par rejeu
  • DTLS-SRTP — établissement des clés de chiffrement via Datagram TLS sur UDP
  • SCTP — livraison de données fiable ou partiellement fiable pour DataChannel
  • ICE (Interactive Connectivity Establishment) — framework pour trouver un chemin réseau entre pairs
  • Trickle ICE — version incrémentale d'ICE où les candidats sont envoyés au fur et à mesure de leur découverte, accélérant l'établissement de la connexion

NAT traversal : ICE, STUN et TURN

Le principal défi technique de WebRTC est d'établir une connexion P2P entre des appareils situés derrière un NAT (Network Address Translation). Sans mécanismes spéciaux, les appareils ne peuvent pas se joindre directement car leurs adresses IP locales ne sont pas visibles depuis Internet.

STUN — détermination de l'adresse publique

STUN (Session Traversal Utilities for NAT) — un serveur qui répond à la question « Quelle est mon adresse IP publique et mon port ?‬». Le client envoie une requête au serveur STUN, le serveur voit son adresse publique et la renvoie au client. Google maintient publiquement le serveur STUN stun:stun.l.google.com:19302.

swift
// WebRTC sur iOS — configuration des serveurs ICE
import WebRTC

let config = RTCConfiguration()
config.iceServers = [
    RTCIceServer(
        urlStrings: ["stun:stun.l.google.com:19302"]
    ),
    RTCIceServer(
        urlStrings: ["turn:turn.example.com:3478"],
        username: "user",
        credential: "password"
    )
]

let pc = RTCPeerConnection(configuration: config)

TURN — connexion par relais

TURN (Traversal Using Relays around NAT) — un serveur relais pour les cas où STUN ne suffit pas (NAT symétrique ou pare-feu d'entreprise). Dans ce mode, toutes les données passent par le serveur TURN — cela réduit la vitesse et augmente la latence, mais garantit une connexion dans 99% des cas.

TURN est le composant le plus coûteux de l'infrastructure WebRTC, car le serveur fait passer tout le trafic médiatique à travers lui. Selon Coturn Project (2025), un serveur TURN typique avec 8 vCPU et 16 Go de RAM traite environ 200 appels audio simultanés ou 40 appels vidéo en HD.

Processus ICE

ICE collecte tous les candidats possibles (IP locale, IP publique via STUN, relais via TURN) et tente d'établir une connexion par ordre de priorité. Dès qu'au moins une paire de candidats (local-distant) réussit le test de connectivité, la connexion est considérée comme établie.

  • Host candidates — adresse IP locale de l'appareil dans le sous-réseau (la plus rapide, mais ne fonctionne pas derrière un NAT)
  • Server Reflexive candidates — IP publique obtenue via un serveur STUN
  • Relay candidates — adresse du serveur TURN via lequel le relais s'effectue (la plus lente, la plus fiable)

WebRTC dans les applications mobiles

Pour le développement mobile, Google maintient libWebRTC — une bibliothèque native pour Android (AAR) et iOS (XCFramework). La bibliothèque inclut l'ensemble de la pile protocolaire, les codecs (VP8, VP9, H.264, AV1) et l'accélération matérielle pour le codage/décodage.

WebRTC sur Android

Le SDK Android fournit les classes PeerConnectionFactory, PeerConnection, MediaStream. L'application crée une fabrique, configure les codecs vidéo, capture le flux de la caméra via VideoCapturer et établit la connexion pair-à-pair via SDP offer/answer.

java
// WebRTC sur Android — initialisation
import org.webrtc.*;

PeerConnectionFactory.Initialize(PeerConnectionFactory.InitializationOptions
    .builder(context)
    .setFieldTrials("WebRTC-H264-HighProfile/Enabled/")
    .createInitializationOptions());

PeerConnectionFactory factory =
    PeerConnectionFactory.builder()
        .setVideoDecoderFactory(new DefaultVideoDecoderFactory(eglBase))
        .setVideoEncoderFactory(new DefaultVideoEncoderFactory(eglBase, true, true))
        .createPeerConnectionFactory();

WebRTC sur iOS

Le SDK iOS utilise une API Objective-C avec les wrappers RTCPeerConnectionFactory, RTCCameraVideoCapturer, RTCVideoTrack. Le codage matériel H.264 est disponible via VideoToolbox. Pour l'affichage vidéo, on utilise RTCMTLVideoView (Metal) ou RTCVideoRenderer.

swift
// WebRTC sur iOS — capture vidéo depuis la caméra
let factory = RTCPeerConnectionFactory()
let capturer = RTCCameraVideoCapturer(delegate: factory)

// Sélection de la caméra (avant/arrière)
guard let device = RTCCameraVideoCapturer
    .captureDevices().first(where: {
        $0.position == .front
    }) else { return }

// Démarrer la capture avec FPS maximal
capturer.startCapture(
    with: device,
    format: RTCCameraVideoCapturer
        .supportedFormats(for: device).last!,
    fps: 30
)

Pour les appels vidéo en production, les applications mobiles utilisent généralement des wrappers SDK autour de libWebRTC : Twilio Video, Agora, Daily.co. Ces SDK simplifient la signalisation, la gestion des salles et fournissent des composants d'interface prêts à l'emploi pour afficher la grille vidéo des participants.

Signalisation et établissement de connexion

WebRTC ne spécifie pas de protocole de signalisation — l'échange de messages SDP (Session Description Protocol) entre pairs. Le développeur choisit le transport pour la signalisation : WebSocket, MQTT, SIP, XMPP ou API REST. La signalisation achemine l'offer, l'answer et les candidats ICE d'un pair à l'autre.

Échange SDP Offer/Answer

Le processus commence par la création d'une offer (l'initiateur décrit ses capacités médiatiques), transmise via la signalisation au second pair, qui répond par un answer. Après l'échange SDP, chaque pair démarre ICE et lance DTLS-SRTP pour le chiffrement du flux.

kotlin
// Android — création et envoi d'offer
private fun startCall(peerConnection: PeerConnection) {
    val constraints = MediaConstraints().apply {
        mandatory["OfferToReceiveAudio"] = "true"
        mandatory["OfferToReceiveVideo"] = "true"
    }

    peerConnection.createOffer(object : SdpObserver {
        override fun onCreateSuccess(sdp: SessionDescription) {
            peerConnection.setLocalDescription(this, sdp)
            // Envoyer sdp.description au serveur de signalisation
            sendSdpOffer(sdp.description)
        }
    }, constraints)
}

Protocoles de signalisation

Pour les applications mobiles, la signalisation la plus courante est via WebSocket — un canal bidirectionnel sur TCP qui maintient une connexion persistante avec le serveur. Le serveur de signalisation est souvent un microservice distinct (Node.js, Golang, Elixir) qui achemine les messages entre les participants d'une salle.

  • WebSocket — connexion bidirectionnelle persistante, surcharge minimale, choix standard pour la signalisation
  • SIP sur WebSocket — protocole VoIP standard, s'intègre à l'infrastructure téléphonique existante
  • MQTT — protocole pub/sub léger pour l'IoT et les réseaux faibles, mais avec une latence plus élevée
  • Matrix / XMPP — protocoles décentralisés pour les applications axées sur la confidentialité

Après la fin d'ICE et DTLS-SRTP, la signalisation ne participe plus à la transmission des données — tout le trafic médiatique circule directement en P2P (ou via un relais TURN). Le serveur de signalisation peut être arrêté sans interrompre les appels actifs. C'est l'avantage clé de l'architecture décentralisée de WebRTC.

Foire aux questions

En quoi WebRTC diffère-t-il de RTMP ou HLS ?

RTMP et HLS sont des protocoles serveur avec une latence de 3 à 10 secondes, où toutes les données passent par le serveur. WebRTC est peer-to-peer avec une latence de 200 à 500 ms. RTMP convient au streaming vers un large public, WebRTC aux appels interactifs et aux jeux.

Est-il obligatoire d'utiliser un serveur TURN ?

Non, TURN n'est nécessaire que lorsque le P2P ne fonctionne pas (NAT symétrique, pare-feu d'entreprise). Selon les statistiques de Google, environ 15% des connexions nécessitent TURN. Pour la production, il est recommandé d'avoir un serveur TURN comme solution de repli pour une fiabilité à 100%.

Quels codecs WebRTC prend-il en charge dans les applications mobiles ?

Codecs obligatoires : VP8 (toutes les plateformes) et H.264 (avec accélération matérielle sur iOS/Android). Optionnels : VP9 (meilleure compression, débit inférieur) et AV1 (super efficace mais exigeant en CPU). Audio : Opus (principal) et G.711 (PCMU/PCMA).

Peut-on utiliser WebRTC uniquement pour le transfert de données sans vidéo ?

Oui, via RTCDataChannel. C'est un canal complet pour transmettre des données arbitraires : texte, fichiers, messages binaires. DataChannel fonctionne sur SCTP avec une fiabilité configurable (livraison partiellement fiable pour les jeux, fiable pour les fichiers).

Comment garantir l'enregistrement des appels avec WebRTC ?

Via l'API MediaRecorder côté client ou via SFU (Selective Forwarding Unit) — un serveur qui reçoit tous les flux des participants et peut les enregistrer. La deuxième option est plus fiable car l'enregistrement ne dépend pas de l'appareil du participant et n'est pas interrompu en cas de déconnexion.

Résumé

  • WebRTC — standard ouvert P2P en temps réel avec latence de 200-500 ms, pris en charge par tous les navigateurs et plateformes mobiles.
  • Architecture basée sur trois couches : API médias (getUserMedia, RTCPeerConnection), transport ICE (STUN/TURN) et sécurité (DTLS-SRTP).
  • NAT traversal résolu par le framework ICE — du P2P direct (host) au relais TURN (relay) pour contourner tout pare-feu.
  • SDK mobiles de Google offrent le codage matériel H.264 et VP8, la capture de caméra et de microphone sur Android et iOS.
  • Signalisation (échange SDP) ne fait pas partie de WebRTC et est implémentée via WebSocket, SIP ou tout protocole disponible pour le développeur.
  • SDK de production (Twilio, Agora, Daily.co) sur libWebRTC simplifient la gestion des salles, la signalisation et les composants d'interface.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi