Demo webrtc et audio

Bonjour a tous

Je teste la démo de webrtc.
J ai pu installer le plugin, j accède bien à l interface.
La signalisation est ok, car j appel bien un poste fixe ou inversement.
Par contre pas d audio.

Je précise qu il y a un NAT entre le client et le serveur wazo.
Sauf erreur, je dois installer coturn pour que le flux audio fonctionne.
Néanmoins sauf erreur également, je dois indiquer au client (donc wazo webrtc démo) que j utilise un serveur turn.

Comment le modifier?

Merci et bonnes fêtes de fin d année

Hello,

Ça semble similaire à

Il n’y a rien à configurer au niveau du client.
C’est le serveur qui assure le transport et en détient les informations.

Cheers

Salut,

Attention c’est pas complètement vrai, le client a besoin d’une configuration donc oui le serveur peut la pousser, mais dans tous les cas, il doit savoir où est son serveur STUN ou TURN. Quand on execute un setLocalDescription() l’agent ICE va chercher ses informations de configuration pour un STUN ou TURN et faire le requête pour récupérer les informations pour la négociation de media. Côté serveur on a la même chose si on a activé un service STUN et TURN. Cela permettra dans l’INVITE d’avoir les bonnes informations pour le SDP (ice candidate).
De souvenir on a mis par défaut un STUN de google dans la demo, tu peux aussi modifier le code et mettre ton propre STUN/TURN ou modifier le code et utiliser des STUN/TURN as a service avec leur API.

Sylvain

Bonjour
Et merci pour vos retours

oui au niveau symptômes nous avons le même problème néanmoins sauf erreur nous ne sommes pas sur les mêmes protocoles : sip d un côté et webrtc de mon cote

a mon sens je dois utiliser coturn pour que flux audio fonctionne. Néanmoins je dois bien dire au serveur l adresse du serveur coturn et le client webrtc (dans le code de démo) que je passe par un serveur coturn?
Le stun de Google est côté démo webrtc ou wazo?

Merci a vous pour votre aide

Salut,

Webrtc est une technologie pour embarquer des communications temps réel dans un navigateur web, on utilise comme transport de la signalisation une websocket (TCP) avec le protocole sip. Un softphone utilise en général une socket TCP ou UDP comme transport et a aussi du sip. La différence la plus importante et au niveau du sdp qui car pour simplifier la traversée Nat il y a un agent Ice qui va faire une requête sur un serveur stun/turn pour permettre de passer le média qui utilise le protocole rtp mais chiffré (srtp). Tu feras la différence dans ton sdp avec les Ice candidate entre autre.

Sylvain

Concernant ta demande, nous avons mis par défaut dans le client le stun de Google. Tu peux changer le code et mettre l’adresse de ton coturn si tu veux l’utiliser et tu peux utiliser le turn si le stun ne fonctionne pas, parfois sur des Nat spécifique stun ne passe pas. Exemple Nat type 2. Côté serveur tu as besoin d’un stun ou turn si ton serveur est natté sinon il va mettre le port et l’IP public directement dans le Ice candidate. Il suffit de vérifier le sdp du invite et le 200 associé dans la réponse.

Bonjour

merci pour l’information.
Par contre pour l’interface coté client ou est dans le code dans le debian11 ? S’agit t-il d’un code compilé ou une simple modification de la page concernée suffira?
Coté serveur ou puis je configurer l’adresse de coturn ?

De manière générale je vais partir plutot sur du turn qui assurera le fonctionnement plus facilement dans plus de cas peu standard

merci

Non c’est juste côté client qu’on parle là.

Par contre je t’ai dit je pense une bêtise, on ne set rien par défaut.

Tu peux passer dans connect ton object options.

Comme ça tu pourras mettre ton propre STUN/TURN.
Tu peux vérifier ça avec chrome par exemple en utilisant chrome://webrtc-internals.
Sylvain

oui, la fonction connect du sdk prend des options
et lance la fonction

connectWithCredentials(
    server: string,
    sipLine: SipLine,
    displayName: string,
    rawOptions: Partial<ConnectionOptions> = {},
  )

Mais nous n’avons pas de détails sur les possibilités de l’objet rawOptions.
dans le code on peut deviner les options suivantes:

rawOptions: {
  media: {something here},
  uaConfigOverrides: {
    traceSip:: boolean,
    somethingelse: any
    },
audioDeviceOutput: "string",
audioDeviceRing: "string
}

Il faudrait avoir connaissance des propriétés attendues pour l’objet rawOptions afin de réussir à bien définir le stun/turn.

Je ne dis pas trop de bétises ?

cheers

Il est décrit juste en dessous dans la doc.

const uaConfigOverrides = {
  peerConnectionOptions: {
    iceServers = [
      {urls: "stun:stun.example.com:443"},  // STUN server
      {urls: "turn:turn.example.com:443", username: "login", credential: "secret" },  // TURN server
      ...
    ]
  }
}
1 Like

bonjour

Il me faudrait simplement par cette ligne ajouter la partie liée mon serveur turn.
Par contre pour le faire, puis je directement modifier le code dans la demo déjà installée sur le debian11? et si oui est le code?
De plus coté serveur wazo, j’imagine qu il faut également indiquer qu’il y a un serveur turn? Comment puis je l’intégrer?

merci

yep,

Pour la partie client, si tu utilise le Wazo-webrtc-demo, c’est assez simple, car c’est du html + js

La demo n’est pas dans debian11, a moins de l’avoir installé comme plugins.
Tu peux simplement télécharger le code depuis le github

tu “download ZIP”
tu ouvres le zip
tu lance le fichier “index.html” et hop !!
ça fonctionne !

Pour ce que tu veux modifier, le code est là:

et ligne 68

Wazo.Phone.connect({
    media: {
      audio: true,
      video: true,
    },
  });

devient:

Wazo.Phone.connect({
    media: {
      audio: true,
      video: true,
    },
    uaConfigOverrides: {
        peerConnectionOptions: {
            iceServers = [
                {urls: "stun:stun.example.com:443"}, 
                {urls: "turn:turn.example.com:443", username: "login", credential: "secret" }
            ]
        }
    }
});

Je ne pense pas qu’il faille renseigner le Turn côté serveur.
Mais Sylvain pourra te le confirmer

cheers

Alors oui je l’ai installé en tant que plugin :frowning:

J’ai un peu de mal à comprendre justement :

  • Si j’installe le plugin, cela marche tres bien mais pas de son (par contre je ne sais pas ou sont les fichiers)
  • Si j’installe pas le plugin et que j’essai de lancer différemment (via python3 directement), il y a rien qui marche

Après ce qui est sur c’est que l’étape d’après c’est que j’essaye de me développer un truc à minima pour comprendre comment cela marche mais à partir d’un serveur web sur un autre serveur…

juste télécharge le .zip des sources
désarchive
et lance le fichier index.html depuis ton PC

et ça va fonctionner !
avec du son normalement !

tu pourras facilement éditer le fichier comme je te l’ai indiqué, avec le bloc note de windows par exemple.

Sinon, tu peux tester mon client qui est en cours développement.
mais tu ne pourras pas configurer ton turn
c’est ici:
https://wazophone.web.app/

Merci encore
Effectivement j ai fait et cela marche bien et c est plus simple car on sait où sont les fichiers.

Donc maintenant plus qu à configurer le turn.

Et tout cela sans besoin de config au niveau de wazo?

Merci

Salut, ça n’a pas de rapport avec Wazo directement.

Merci
Donc si je traduis:
Lorsqu un client webrtc veut appeler par exemple.
Via la signalisation, l appel est lancé
Cote flux audio, le client demandeur envoi les flux vers le turn
Par contre si le numéro composé est un numéro extérieur: comment est fait le lien entre le turn et wazo si a aucun moment on indique à l autre qu il existe?

Merci a vous

Toute la partie media est dans le sdp. Tu peux regarder ça en inspectant tes paquets SIP.

Bonjour

Je reviens sur le sujet après une longue pause.

J’ai configuré un serveur turn avec une écoute sur le port 3478.

Voici donc la config que j’ai mis dans webrtc demo suite à vos conseils:

const initializeWebRtc = () => {
Wazo.Phone.connect({
    media: {
      audio: true,
      video: true,
    },
    uaConfigOverrides: {
        peerConnectionOptions: {
            iceServers = [
                //{urls: "stun:stun.example.com:443"},
                {urls: "turn:192.168.1.202:3478", username: "user", credential: "secret" }
            ]
        }
    }
});

L’utlisateur est le même coté coturn.

Par contre lorsque j’émet un appel de la demo, je n’ai aucune trace supplémentaire coté coturn, comme si il ne le contactait pas.
De plus sans cette portion de ligne, le poste destinataire sonne, avec la config du coturn la j’ai plus rien qui sonne

avez vous une idée?

merci

Tu dois avoir une erreur de négociation quelques parts, il faut regarder tes traces sip (regarde le sdp) pour comprendre ce qu’il se passe et tu peux aussi regarder les logs de ton coturn après les avoir activé.
Comme ça j’ai rien de plus que je peux te dire, c’est trop vague.