mercredi 17 février 2010

Logiciel: Asterisk, DahDi et FreeBSD

J'ai développé, il y a maintenant plus de deux ans, une petite application Windows - RxIAX - me permettant de déporter une voie audio afin d'écouter celle-ci sur un équipement distant. Mon objectif était de disposer d'un système simple, robuste et n'imposant pas l'utilisation d'une infrastructure complexe. Très rapidement mon choix s'est porté sur l'utilisation d'un système de téléphonie sur IP, et plus particulièrement sur le produit Asterisk et son protocole IAX2 développé par la société Digium.  Parmi les critères m'ayant conduit à ce choix, celui d'un protocole auto-suffisant transportant aussi bien les données de signalisation que les flux audio, et s'appuyant sur le protocole UDP simple à gérer sur les équipements de filtrage et de sécurité.

L'infrastructure mise en oeuvre me donne pleinement satisfaction en me permettant de me connecter aussi bien depuis un softphone que d'un téléphone IP, et théoriquement même depuis un téléphone classique. Le problème de la diffusion d'un flux vers de multiples destinataires est résolu par l'inscription du diffuseur dans une salle de conférence virtuelle, salle de conférence sur laquelle se connectent les auditeurs.
Cette infrastructure est constituée:
-d'un premier serveur dédié, équipée de plusieurs cartes sons, assure le rôle de concentrateur des voies audios. Chacune d'elle est gérée par mon application laquelle n'est ni plus ni moins qu'un client Asterisk offrant deux modes de fonctionnement: un mode 'client' autorisant un décroché automatique sur appel distant, et un mode 'serveur' permettant d'engager un appel vers un numéro prédéfini dès le lancement de l'application.
- d'un second serveur fonctionnant sous FreeBSD qui assure, entre autre, le rôle de système d'accueil et de gestion des appels. Il embarque l'application Asterisk configurée pour accepter les appels en provenance du concentrateur vers autant de salles de conférence qu'il y a de voies audio gérées. Ces salles de conférence (application MeetMe) sont accessibles par tout client supportant le protocole IAX2 mais aussi SIP.


Cette infrastructure a fait l'objet d'une description détaillée, il y a tout juste un an, dans le numéro 18 du magazine HAM-RADIO.

Quelques problèmes subsistent cependant, liés au choix du système d'exploitation FreeBSD lequel n'est plus réellement supporté par les mainteneurs du système Asterisk, et ceci malgré les avantages indéniables de ce système, et plus largement de la famille BSD, sur les systèmes LINUX.

Le support des cartes de type 'WinModem', bien pratiques pour s'interfacer avec le RTC, a ainsi disparu
avec le portage  FreeBSD de la version du module ZAPTEL (par la suite renommé DAHDI) adapté à la version 1.4.26.2 d'Asterisk. Ceci m'a donc contraint à conserver une version obsolète de l'application - V1.4.21.2 - sans pouvoir profiter des évolutions fonctionnelles des nouvelles versions.

Avec le passage sous FreeBSD 8.0, les choses ont empiré, le module ZAPTEL obsolète - V1.4.6_7 - ne se compilant plus à la suite de l'abandon de certains fonctionnalités dans le noyau. La modification du code ne m'ayant pas permis d'obtenir un fonctionnement fiable, il m'a fallu étudier le passage du serveur sous la version 1.6 d'Asterisk. Par chance, un portage partiel du module DAHDI avait été rendu disponible mi-janvier qui, sans encore supporter la carte WinModem, permettait au moins de réactiver la fonctionnalité des salles de conférence. L'application 'MeetMe' nécessite en effet la présence du module DAHDI.

Après quelques heures de travail consacrées à charger le portage DAHDI depuis le repository SVN de Digium, à compiler et installer celui-ci puis à tenter d'adapter le code du gestionnaire des cartes WinModem (wcfxo.c), l'infrastructure était de nouveau opérationnelle sans l'accès RTC toutefois, mes efforts d'adaptation ayant échoué.

Il me reste à résoudre un problème dans le client RxIAX lequel, dans certaines conditions difficiles à reproduire, ne se reconnecte pas automatiquement sur le serveur Asterisk après que la connexion ait été rompue pour une quelconque raison: arrêt du service, perte de connectivité...

Aucun commentaire: