WebRTC ou WebSocket pour l'IA vocale en temps réel

Rene, Kabir Goel 
WebRTC ou WebSocket pour l'IA vocale en temps réel

WebSocket et WebRTC gardent tous deux une connexion ouverte pour que l’audio circule dans les deux sens sans nouvelle requête à chaque segment. La différence, c’est ce qui se passe quand le réseau flanche. Un WebSocket fonctionne sur TCP : chaque octet arrive dans l’ordre, quitte à attendre. WebRTC fonctionne généralement sur UDP et il est conçu pour les médias : il abandonne ou masque un paquet en retard et continue la lecture.

Pour un agent vocal, cette différence décide de la place de chacun. WebRTC sert au tronçon entre l’appareil d’une personne et vos serveurs, là où le Wi-Fi et les réseaux mobiles perdent des paquets. WebSocket sert aux tronçons entre serveurs, où ils n’en perdent pas, et à tout ce qui demande un flux de messages simple et ordonné. La plupart des agents vocaux en production utilisent les deux.

Ce guide s’adresse aux ingénieurs qui choisissent le transport d’un agent vocal ou d’une fonction vocale en temps réel. Il explique le fonctionnement de chaque protocole, la comparaison qui compte pour l’audio et les architectures que les équipes mettent réellement en production.

WebRTC et WebSocket en un coup d’œil

WebSocketWebRTC
Ce que c’estUn canal de messages bidirectionnelUne pile de protocoles pour les médias en temps réel
TransportTCP (avec TLS pour wss://)Généralement UDP ; TCP ou TLS via un relais TURN en repli
LivraisonTous les messages, dans l’ordreDes paquets peuvent être abandonnés ; l’audio en retard est masqué
En cas de perte de paquetsLe flux se fige jusqu’à la retransmissionL’audio continue, avec de brefs artefacts
Gestion de l’audioAucune. Vous choisissez le format, le tampon et la lectureCodec Opus, tampon de gigue et masquage des pertes intégrés
ÉtablissementUne requête HTTP d’upgradeSignalisation, candidats ICE, souvent des serveurs STUN et TURN
Côté serveurN’importe quel serveur web ou langageGénéralement un serveur média ou une plateforme hébergée
Idéal pourServeur à serveur, API, messages texte et de contrôleAudio navigateur et mobile sur des réseaux que vous ne contrôlez pas

Comment fonctionne un WebSocket

Un WebSocket commence par une requête HTTP ordinaire avec un en-tête Upgrade. Si le serveur accepte, la même connexion TCP reste ouverte et chaque côté peut envoyer des messages à tout moment. Le protocole est défini dans la RFC 6455, et tous les navigateurs ont une API WebSocket.

WebSocket ne connaît rien à l’audio. Un message est une trame texte ou binaire, et l’application décide de son contenu. Les API vocales envoient généralement des événements JSON avec du PCM encodé en base64, ou des trames binaires brutes. Votre code capte le micro, encode les segments, les envoie et, à l’autre bout, met l’audio reçu en file d’attente pour la lecture.

Cette simplicité fait son intérêt. Un WebSocket passe la plupart des proxys et des répartiteurs de charge, fonctionne depuis n’importe quel langage et se débogue facilement : on peut lire les messages. Le prix à payer, c’est la garantie de livraison de TCP. Quand un paquet se perd, TCP le retransmet, et rien de ce qui suit n’atteint l’application avant. Pour télécharger un fichier, c’est exactement ce qu’il faut. Pour de la voix en direct, une retransmission de 200 millisecondes, c’est 200 millisecondes de silence, puis une rafale d’audio qui arrive d’un coup.

Comment fonctionne WebRTC

WebRTC est un ensemble de standards (la vue d’ensemble est la RFC 8825) pour envoyer de l’audio, de la vidéo et des données entre pairs en temps réel. Le navigateur se charge de l’essentiel du travail sur les médias :

  • Codecs. Les navigateurs doivent prendre en charge Opus et G.711 pour l’audio (RFC 7874). Opus compresse bien la voix et adapte son débit au réseau.
  • Transport. Les médias passent par SRTP (RFC 3711), généralement sur UDP, avec des clés négociées via DTLS. Le chiffrement est obligatoire.
  • Tampon de gigue et masquage des pertes. Le récepteur garde quelques dizaines de millisecondes d’audio pour lisser les arrivées irrégulières, et comble les petits trous au lieu de s’arrêter.
  • Traversée de NAT. ICE essaie d’abord les chemins directs, utilise STUN pour découvrir les adresses publiques et se replie sur un relais TURN quand rien d’autre ne passe.
  • Annulation d’écho et suppression du bruit. Les navigateurs les appliquent par défaut aux appels WebRTC.

Ce que WebRTC ne définit pas, c’est la signalisation : la façon dont deux pairs échangent la description de session et les candidats réseau avant que les médias circulent. Cette partie, vous la construisez vous-même, et c’est très souvent un WebSocket. C’est pourquoi « WebRTC ou WebSocket » est une comparaison un peu bancale. Beaucoup d’applications WebRTC contiennent un WebSocket.

L’autre difficulté, c’est le côté serveur. WebRTC a été conçu pour les appels de navigateur à navigateur. Quand l’autre « pair » est votre agent vocal, il vous faut un serveur qui parle WebRTC : un serveur média (une SFU) comme LiveKit, ou une plateforme hébergée comme Daily. Exploiter vos propres serveurs TURN et serveurs média représente un vrai travail d’infrastructure.

Lequel compte pour l’IA vocale

Un agent vocal a au moins trois tronçons réseau, et ils n’ont pas besoin du même transport.

De l’appareil de l’utilisateur à vos serveurs. C’est le tronçon qui passe par le Wi-Fi domestique, les réseaux de bureau et les téléphones dans le train. La perte de paquets et la gigue y sont normales. WebRTC a été conçu pour ce tronçon : l’audio continue malgré un paquet perdu, Opus baisse son débit quand la bande passante chute, et le navigateur retire la voix de l’agent du micro de l’utilisateur. Si vos utilisateurs parlent à un agent depuis un navigateur ou une application mobile, c’est là que WebRTC justifie son coût de mise en place.

De vos serveurs aux modèles vocaux. Votre agent envoie de l’audio à un modèle de transcription et du texte à un modèle de synthèse vocale. Ces connexions relient des centres de données, où la perte de paquets est rare, donc la livraison ordonnée de TCP ne coûte presque rien. Vous voulez aussi ce que WebSocket apporte : des événements texte et de contrôle ordonnés à côté de l’audio, des contextes de requête et une authentification simple. C’est pourquoi les API vocales, y compris celle de Cartesia, diffusent en WebSocket.

Les appels téléphoniques. Un appelant sur une ligne téléphonique vous parvient par le réseau téléphonique, puis SIP et RTP, ou par le flux média d’un opérateur. Twilio Media Streams, par exemple, transmet l’audio de l’appel à votre serveur par un WebSocket en μ-law à 8 kHz. Ni WebRTC ni WebSocket ne se trouvent côté appelant. Si vous choisissez un transport pour des agents téléphoniques, lisez plutôt notre guide sur le trunk SIP.

La question utile est donc de savoir où se trouve le réseau peu fiable. Mettez WebRTC sur ce tronçon et utilisez WebSocket partout ailleurs.

Quand un WebSocket suffit côté client

WebRTC n’est pas indispensable pour chaque fonction vocale dans le navigateur. Un WebSocket direct depuis le client est un choix raisonnable quand :

  • Le réseau est prévisible. Outils internes, bornes, applications de bureau sur des réseaux d’entreprise et démos.
  • Vous prototypez. Une seule connexion, pas de serveur média, pas de TURN, et vous pouvez journaliser chaque événement.
  • L’audio n’est pas conversationnel. Synthèse vocale en streaming pour la lecture à voix haute, ou dictée où un court blocage ne casse pas une conversation.
  • Le client est un serveur. Un backend ou une fonction edge qui relaie l’audio d’ailleurs.

Dans ce cas, envoyez de petits segments audio, gardez un tampon de lecture court et arrêtez la lecture dès que l’utilisateur interrompt. Testez sur un réseau avec pertes avant de livrer. Les outils de développement du navigateur peuvent limiter la bande passante et la latence, mais pas abandonner des paquets : utilisez un conditionneur réseau au niveau du système ou un partage de connexion mobile.

Les architectures qui fonctionnent

Front end WebRTC, back end WebSocket. La configuration de production la plus courante. Le navigateur ou l’application de l’utilisateur rejoint une salle WebRTC sur LiveKit ou Daily. Votre agent tourne sur un serveur, rejoint la même salle et diffuse vers les modèles vocaux en WebSocket. LiveKit Agents et Pipecat fonctionnent ainsi, et leurs plugins Cartesia ouvrent un WebSocket vers Cartesia depuis le serveur. LiveKit et Daily, l’entreprise derrière Pipecat, sont tous deux clients de Cartesia. Le PDG de Daily, Kwindla Hultman, le résume ainsi : « Cartesia Sonic is the best voice model today for real-time multimodal use cases. »

WebSocket de bout en bout. Le navigateur envoie l’audio à votre serveur par un WebSocket, et votre serveur parle aussi aux modèles vocaux en WebSocket. C’est la pile la plus simple, et elle convient bien aux prototypes et aux réseaux maîtrisés. Les Cartesia Managed Agents acceptent aussi une connexion WebSocket directe : un serveur de confiance ou un navigateur muni d’un jeton d’accès de courte durée peut parler à un agent hébergé sans exécuter de code d’agent.

Téléphone en entrée, WebSocket à l’intérieur. Pour les agents téléphoniques, l’appel arrive par SIP ou par un opérateur de téléphonie, et les connexions de l’agent aux modèles vocaux restent en WebSocket. Les Managed Agents gèrent la partie téléphonique pour vous, avec des numéros Cartesia, Twilio ou votre propre trunk SIP.

Diffuser de l’audio vers Cartesia en WebSocket

Les API temps réel de Cartesia diffusent en WebSocket :

  • Synthèse vocale : wss://api.cartesia.ai/tts/websocket reçoit le texte au fil de votre LLM et renvoie des segments audio. Une connexion peut porter plusieurs contextes, et les continuations permettent à Sonic de prononcer une phrase avant que le LLM ait fini sa réponse.
  • Transcription : Ink-2 transcrit un flux de PCM brut en WebSocket et gère nativement la détection de fin de tour.
  • Managed Agents : wss://api.cartesia.ai/v1/agents/websocket/{agent_id} relie une application à un agent hébergé. Vous envoyez des événements audio_input avec de l’audio en base64, par segments de 20 à 100 millisecondes, et vous lisez les événements audio_output. Quand l’utilisateur parle par-dessus l’agent, Cartesia envoie audio_output_clear et votre client arrête la lecture.

Le WebSocket de l’agent accepte de l’audio mono sans en-tête en pcm_16000, pcm_24000, pcm_44100 ou mulaw_8000, et renvoie l’audio dans le même format :

{
	"type": "session_create",
	"audio": {
		"input_format": "pcm_16000",
		"output_delivery": "speaking_pace"
	}
}

Depuis un navigateur, ne mettez jamais de clé API dans le code client. Les navigateurs ne peuvent pas définir d’en-têtes WebSocket : votre serveur génère donc un jeton d’accès de courte durée, que le client passe en paramètre de requête. Le guide de l’API WebSocket contient un exemple de session complet.

Pour essayer, créez un agent dans le playground Cartesia, ou obtenez une clé API et diffusez votre premier audio avec le démarrage rapide de la synthèse vocale.

Guides associés

FAQ

Quelle est la différence entre WebRTC et WebSocket ?

Un WebSocket est une connexion bidirectionnelle et persistante sur TCP. Chaque message arrive, dans l'ordre, et l'application décide du sens des octets. WebRTC est un ensemble de protocoles pour les médias en temps réel entre pairs. Il fonctionne généralement sur UDP et inclut des codecs, un tampon de gigue, la récupération des paquets perdus, le chiffrement et la traversée de NAT. WebSocket transporte des données ; WebRTC transporte de l'audio et de la vidéo.

WebRTC est-il plus rapide que WebSocket ?

Sur un réseau propre, les deux ont une latence comparable. La différence apparaît quand des paquets se perdent. TCP retient tout ce qui suit un paquet manquant jusqu'à sa retransmission, donc un flux audio WebSocket se fige. WebRTC saute ou masque l'audio perdu et continue la lecture, c'est pourquoi il tient mieux sur le Wi-Fi et les réseaux mobiles.

WebRTC utilise-t-il WebSocket ?

Souvent, mais seulement pour l'établissement de la connexion. WebRTC ne définit pas comment deux pairs se trouvent et échangent leurs informations de connexion, une étape appelée signalisation. Beaucoup d'applications envoient les messages de signalisation par un WebSocket. L'audio passe ensuite par le transport propre à WebRTC, pas par le WebSocket.

WebRTC utilise-t-il UDP ou TCP ?

Les médias WebRTC circulent normalement sur UDP, chiffrés avec SRTP. Quand un pare-feu bloque UDP, WebRTC peut basculer sur TCP ou TLS via un serveur relais TURN. Ce repli fonctionne, mais il réintroduit une partie des blocages de TCP en cas de perte de paquets.

Un agent vocal doit-il utiliser WebRTC ou WebSocket ?

Utilisez WebRTC entre l'appareil de l'utilisateur et vos serveurs quand les utilisateurs parlent depuis un navigateur ou une application mobile, sur des réseaux que vous ne contrôlez pas. Utilisez WebSocket entre serveurs, par exemple de votre agent vers les API de transcription et de synthèse vocale, et pour les clients sur des réseaux fiables. Les appels téléphoniques n'utilisent ni l'un ni l'autre côté appelant ; ils arrivent par SIP ou par le flux média d'un opérateur de téléphonie.

Cartesia prend-il en charge WebRTC ?

Les API temps réel de Cartesia pour la synthèse vocale, la transcription et les Managed Agents utilisent WebSocket. Pour un front end WebRTC, utilisez LiveKit ou Pipecat avec Daily. Les deux ont des plugins Cartesia qui se connectent à Cartesia en WebSocket depuis le serveur, pendant que l'audio de l'utilisateur passe par WebRTC.