RTPEngine est un relais média qui prend en charge la partie la plus volumineuse d’une communication téléphonique sur IP : les paquets RTP qui transportent la voix et la vidéo. Il est développé par Sipwise, éditeur viennois de plateformes télécoms, qui le publie sous licence GPL v3 et l’intègre à ses propres commutateurs. Le dépôt GitHub le présente d’ailleurs sous son nom complet, Sipwise NGCP rtpengine.
Le projet est intimement lié à Kamailio. Le module qui permet à ce serveur SIP de le piloter s’appelait rtpproxy-ng avant d’être renommé rtpengine en mars 2014, selon la liste de diffusion des développeurs de Kamailio.
À quoi sert RTPEngine
Dans une architecture VoIP, le proxy SIP se charge de la signalisation, c’est-à-dire de l’établissement et de la fin des appels, mais il ne touche pas aux flux audio. Quand deux correspondants se trouvent derrière des routeurs NAT, sur des réseaux différents ou utilisent des protocoles incompatibles, il faut un intermédiaire qui reçoit les paquets médias d’un côté et les renvoie de l’autre. Kamailio ou OpenSIPS demandent alors à RTPEngine, par un protocole de contrôle appelé « ng », d’ouvrir des ports, puis réécrivent la description de session SDP pour que chaque terminal envoie son flux vers le relais.
Sa particularité tient au transfert dans le noyau. Une fois l’appel négocié, un module Linux, chargé sous le nom nft_rtpengine sur les noyaux 4.4 et plus récents, déplace les paquets sans repasser par le programme principal, ce qui réduit la latence et la charge du processeur. Si le module est absent, le démon continue de fonctionner en espace utilisateur. C’est ce qui le distingue de l’ancien rtpproxy, auquel il se substitue sans modifier la configuration de Kamailio.
Le logiciel va bien au-delà du simple relais. Il gère ICE, y compris en mode trickle, le chiffrement SRTP et DTLS-SRTP ainsi que le multiplexage RTP et RTCP, ce qui lui permet de raccorder un navigateur WebRTC à un réseau SIP classique. Il transcode et réempaquette l’audio, avec des codecs comme G.711, G.722, G.729, Opus, AMR ou EVS d’après la page produit de Sipwise, convertit les tonalités DTMF, transforme la télécopie T.38 en PCM, diffuse des annonces et enregistre les appels grâce à un démon dédié. La documentation signale aussi une compatibilité partielle avec le protocole de contrôle de la passerelle Janus. Le chiffrement ZRTP, lui, n’est pas pris en charge, même si ses paquets traversent le relais.
RTPEngine sait également envoyer des statistiques au format HEP vers HOMER, l’outil de capture présenté dans notre logithèque, et on le teste volontiers en charge avec SIPp avant une mise en production.
Pour qui ?
Il s’adresse aux opérateurs, aux hébergeurs de standards téléphoniques et aux éditeurs de services de visioconférence qui exploitent déjà Kamailio ou OpenSIPS et doivent traverser le NAT, chiffrer les médias ou relier WebRTC à la téléphonie. Les grandes plateformes y trouvent un moyen de traiter beaucoup d’appels simultanés sur un matériel raisonnable, grâce au transfert dans le noyau et à la reprise des sessions stockées en base après un redémarrage.
Ce n’est pas un autocommutateur. Il ne sait ni enregistrer des postes, ni router des appels, ni gérer une messagerie vocale, et reste inutile sans un proxy SIP qui lui donne des ordres. Il ne tourne que sous Linux, et la compilation complète réclame de nombreuses bibliothèques, dont ffmpeg pour le transcodage. Une petite entreprise qui veut simplement un standard téléphonique sera mieux servie par un IPBX comme Asterisk ou FreeSWITCH, qui gèrent eux-mêmes leurs médias.
Télécharger RTPEngine sans risque
Le code source se trouve sur le dépôt sipwise/rtpengine de GitHub, et la documentation officielle, hébergée sur rtpengine.readthedocs.io, décrit deux voies d’installation. La première consiste à construire soi-même les paquets Debian, qui séparent le démon, le module noyau en version DKMS et le démon d’enregistrement. La seconde passe par les paquets précompilés du dépôt dfx.at vers lequel renvoie cette documentation, qui couvre les versions récentes de Debian et d’Ubuntu en amd64, i386, armhf et arm64, avec une branche stable, plusieurs branches LTS et des versions quotidiennes.
Le logiciel est gratuit. Sipwise propose du support et mentionne sur son site un module de transcodage accéléré par processeur graphique Nvidia, à discuter avec son service commercial. Le module noyau s’exécute avec les privilèges les plus élevés du système : un paquet récupéré sur un site inconnu pourrait donc compromettre tout le serveur, et il vaut mieux vérifier la clé de signature du dépôt avant d’installer quoi que ce soit.
Questions fréquentes
RTPEngine fonctionne-t-il avec OpenSIPS ?
Oui. OpenSIPS dispose d’un module rtpengine qui pilote le relais de la même manière que Kamailio. Le README du projet parle surtout de Kamailio, pour lequel il a été conçu à l’origine.
Peut-on l’installer sur Windows ou macOS ?
Non. La documentation indique qu’il fonctionne uniquement sous GNU/Linux, et le transfert accéléré repose sur un module du noyau Linux. Il peut en revanche tourner dans une machine virtuelle Linux.
Quelle version choisir ?
Le dépôt de paquets distingue la branche la plus récente, 26.2 lors de notre consultation, et des branches LTS comme 26.0, 13.5 ou 12.5. Une plateforme en production a intérêt à rester sur une LTS.