Asterisk et le protocole SIP

Bonjour à tous! Je suis Benoît, développeur d’applications chez NetDevices. Je suis spécialisé notamment dans le développement d’applications. Aujourd’hui, je vais vous  présenter le principe d’Asterisk et le protocole SIP.

Qu’est-ce qu’Asterisk?

asterisk et le protocole sip

Asterisk est un autocommutateur téléphonique privé (PABX) sous linux. Le principe de l’autocommutateur téléphonique est qu’il permet une gestion complète des communications internes et externes d’un ensemble de postes. Par exemple au sein d’un groupe d’assurance, d’une entreprise, ou d’un hôpital.  

Asterisk possède un grand nombre de fonctionnalités permettant de répondre à une grande majorité des besoins en téléphonie. Il permet par exemple les appels directs (comme une ligne de téléphone classique), mais aussi la messagerie vocale, les files d’attente, les conférences d’appels, la redirection d’appel vers le service concerné suivant le choix des clients (centre d’appel)…

Ces fonctionnalités vont être complétées par des protocoles visant à améliorer l’UX téléphonique et mobile.

Un protocole possible: SIP.

Qu’est-ce que le protocole SIP?

SIP (Session Initiation Protocole) est un protocole qui permet d’établir des appels multimédias (audios, vidéos, messages). Ces appels peuvent être initiés en audio par exemple puis on va passer en mode vidéo sans coupure d’appel. Autre exemple: dans le cas d’une perte de connexion ou de débit il va y avoir une renégociation de l’appel permettant de le garder en cours tout en diminuant la qualité de l’appel.

Ceci va être possible grâce au codec.

Qu’est-ce que le Codec?

Le Codec (“codage-décodage”) est un dispositif capable de compresser et/ou de décompresser un signal numérique. Chaque codec peut avoir plusieurs modes de fonctionnement qui changeront ses performances. Le choix du codec à utiliser se fait en prenant en compte la possibilité de l’utiliser de bout en bout (lors d’un appel de type VOIP, il faut que les deux terminaux puissent coder, mais aussi décoder le signal, et donc avoir le codec d’installé) mais aussi de la qualité du réseau. Un codec avec un fort taux de compression (et donc une perte de qualité) sera choisi quand la qualité du réseau n’est pas suffisante. A contrario, les codecs de meilleure qualité seront utilisés avec des connexions de bonne qualité.

Quelques Exemples de codecs

Le codec le plus connu dans l’audio est: Le MP3

Cependant lors d’appel audio/vidéo les codecs les plus couramment utilisés sont:

  • G711 G723 G726 G729 GSM iLBC pour l’audio (on retrouve bien le GSM qui est utilisé pour les appels sur les réseaux mobiles)
  • H.261 H.263/ H.263+ / H.263++ MPEG-4 H.264 pour le vidéo

Il en existe bien évidemment plein d’autres, certains libres, d’autres propriétaires.

Projet made in NetDevices

Au sein de NetDevices, nous avons été amené à utiliser ces technologies pour un de nos clients. Notre client (VideoDesk) est une start-up qui permet à des sites de e-commerce d’intégrer une interface de “chat” (texte, audio ou vidéo) entre clients et vendeurs. VideoDesk proposait déjà leurs services dans l’intégration sur les sites internet et nous ont contactés afin de créer un SDK permettant d’intégrer leur service à des applications mobiles. Le SDK a été développé pour une intégration sur iOS et Android. Pour effectuer les différents tests, nous avons mis en place au sein de notre entreprise, un serveur SIP afin d’avoir la main sur les échanges de bout en bout.

[wpforms id="9980" title="false"]
<div class="wpforms-container wpforms-container-full" id="wpforms-9980"><form id="wpforms-form-9980" class="wpforms-validate wpforms-form wpforms-ajax-form" data-formid="9980" method="post" enctype="multipart/form-data" action="/asterisk-et-le-protocole-sip/" data-token="13a379f11ff5fcd5bbd65e171d85e5a5"><noscript class="wpforms-error-noscript">Veuillez activer JavaScript dans votre navigateur pour remplir ce formulaire.</noscript><div class="wpforms-field-container"><div id="wpforms-9980-field_3-container" class="wpforms-field wpforms-field-layout" data-field-id="3"><label class="wpforms-field-label wpforms-label-hide" for="wpforms-9980-field_3">Layout</label><div class="wpforms-field-layout-columns wpforms-field-layout-preset-50-50"><div class="wpforms-layout-column wpforms-layout-column-50"><div id="wpforms-9980-field_0-container" class="wpforms-field wpforms-field-name" data-field-id="0"><label class="wpforms-field-label" for="wpforms-9980-field_0">Résumé / Pitch du projet <span class="wpforms-required-label">*</span></label><input type="text" id="wpforms-9980-field_0" class="wpforms-field-small wpforms-field-required" name="wpforms[fields][0]" required></div><div id="wpforms-9980-field_16-container" class="wpforms-field wpforms-field-radio wpforms-conditional-trigger" data-field-id="16"><label class="wpforms-field-label" for="wpforms-9980-field_16">J&#039;ai une description détaillée du projet</label><ul id="wpforms-9980-field_16"><li class="choice-1 depth-1"><input type="radio" id="wpforms-9980-field_16_1" name="wpforms[fields][16]" value="Oui" ><label class="wpforms-field-label-inline" for="wpforms-9980-field_16_1">Oui</label></li><li class="choice-2 depth-1"><input type="radio" id="wpforms-9980-field_16_2" name="wpforms[fields][16]" value="Non" ><label class="wpforms-field-label-inline" for="wpforms-9980-field_16_2">Non</label></li></ul></div><div id="wpforms-9980-field_18-container" class="wpforms-field wpforms-field-checkbox wpforms-conditional-field wpforms-conditional-show" data-field-id="18" style="display:none;"><label class="wpforms-field-label" for="wpforms-9980-field_18">Vous avez des technos en tête ?</label><ul id="wpforms-9980-field_18"><li class="choice-1 depth-1"><input type="checkbox" id="wpforms-9980-field_18_1" name="wpforms[fields][18][]" value="fullstackJS / python" ><label class="wpforms-field-label-inline" for="wpforms-9980-field_18_1">fullstackJS / python</label></li><li class="choice-2 depth-1"><input type="checkbox" id="wpforms-9980-field_18_2" name="wpforms[fields][18][]" value="nocode bubble" ><label class="wpforms-field-label-inline" for="wpforms-9980-field_18_2">nocode bubble</label></li><li class="choice-3 depth-1"><input type="checkbox" id="wpforms-9980-field_18_3" name="wpforms[fields][18][]" value="autre" ><label class="wpforms-field-label-inline" for="wpforms-9980-field_18_3">autre</label></li></ul></div><div id="wpforms-9980-field_19-container" class="wpforms-field wpforms-field-checkbox wpforms-conditional-field wpforms-conditional-show" data-field-id="19" style="display:none;"><label class="wpforms-field-label" for="wpforms-9980-field_19">Type de projet</label><ul id="wpforms-9980-field_19"><li class="choice-1 depth-1"><input type="checkbox" id="wpforms-9980-field_19_1" name="wpforms[fields][19][]" value="Applications web / mobiles" ><label class="wpforms-field-label-inline" for="wpforms-9980-field_19_1">Applications web / mobiles</label></li><li class="choice-2 depth-1"><input type="checkbox" id="wpforms-9980-field_19_2" name="wpforms[fields][19][]" value="Projet data, IA " ><label class="wpforms-field-label-inline" for="wpforms-9980-field_19_2">Projet data, IA </label></li><li class="choice-3 depth-1"><input type="checkbox" id="wpforms-9980-field_19_3" name="wpforms[fields][19][]" value="Site vitrine / e-commerce" ><label class="wpforms-field-label-inline" for="wpforms-9980-field_19_3">Site vitrine / e-commerce</label></li></ul></div><div id="wpforms-9980-field_12-container" class="wpforms-field wpforms-field-textarea wpforms-conditional-field wpforms-conditional-show" data-field-id="12" style="display:none;"><label class="wpforms-field-label" for="wpforms-9980-field_12">Description détaillée de votre projet </label><textarea id="wpforms-9980-field_12" class="wpforms-field-medium" name="wpforms[fields][12]" ></textarea></div></div><div class="wpforms-layout-column wpforms-layout-column-50"><div id="wpforms-9980-field_1-container" class="wpforms-field wpforms-field-email wpforms-one-third" data-field-id="1"><label class="wpforms-field-label" for="wpforms-9980-field_1">Votre e-mail <span class="wpforms-required-label">*</span></label><input type="email" id="wpforms-9980-field_1" class="wpforms-field-small wpforms-field-required" name="wpforms[fields][1]" required></div><div id="wpforms-9980-field_17-container" class="wpforms-field wpforms-field-radio" data-field-id="17"><label class="wpforms-field-label" for="wpforms-9980-field_17">Signer un accord de confidentialité ?</label><ul id="wpforms-9980-field_17"><li class="choice-1 depth-1"><input type="radio" id="wpforms-9980-field_17_1" name="wpforms[fields][17]" value="Oui" ><label class="wpforms-field-label-inline" for="wpforms-9980-field_17_1">Oui</label></li><li class="choice-2 depth-1"><input type="radio" id="wpforms-9980-field_17_2" name="wpforms[fields][17]" value="Non" ><label class="wpforms-field-label-inline" for="wpforms-9980-field_17_2">Non</label></li></ul></div></div></div></div><div id="wpforms-9980-field_22-container" class="wpforms-field wpforms-field-checkbox" data-field-id="22"><ul id="wpforms-9980-field_22"><li class="choice-1 depth-1 wpforms-selected"><input type="checkbox" id="wpforms-9980-field_22_1" name="wpforms[fields][22][]" value="Recevoir les newsletters personnalisées" checked='checked'><label class="wpforms-field-label-inline" for="wpforms-9980-field_22_1">Recevoir les newsletters personnalisées</label></li></ul></div></div><div class="wpforms-submit-container"><input type="hidden" name="wpforms[id]" value="9980"><input type="hidden" name="wpforms[author]" value="1"><input type="hidden" name="wpforms[post_id]" value="5457"><button type="submit" name="wpforms[submit]" id="wpforms-submit-9980" class="wpforms-submit" data-alt-text="Envoi..." data-submit-text="Envoyer" aria-live="assertive" value="wpforms-submit">Envoyer</button><img src="https://www.netdevices.fr/wp-content/plugins/wpforms/assets/images/submit-spin.svg" class="wpforms-submit-spinner" style="display: none;" width="26" height="26" alt="Chargement en cours"></div></form></div> <!-- .wpforms-container -->