2010-04-20 33 views
2

Je crée une session SIP avec mjsip à un fournisseur de VoIP externe. Ensuite, je transmets un fichier wav de test via rtp au fournisseur en utilisant RtpManager.Port RTP local inaccessible lors de l'utilisation de mjsip/jmf

Le programme s'exécute sans erreur et je réponds à l'appel sip. Cependant, aucun son n'est transmis. Quand je diagnostique le trafic réseau avec wireshark, je vois un tas de trafic RTP de mon localhost (derrière une sorte de nat) au fournisseur de voip et rien de retour. Après un certain temps, je reçois l'erreur ICMP "Destination inaccessible (Port inaccessible)" du fournisseur vers mon hôte local. Le téléphone logiciel fonctionne en utilisant le même fournisseur localhost et voip - bien qu'il utilise une pile de sip différente.

Des suggestions?

Merci

+0

Salut, je suis vraiment intéressé par votre projet.Pouvez-vous me dire comment vous avez fait l'appel avec mjsip? Comment diffusez-vous le fichier wav de test? – B770

Répondre

3

Vous avez déjà répondu à votre propre question, mais oui, vous avez raison: Le Callee/SAMU, après une certaine période de temps, considérer la la connexion n'a pas pu être établie si elle n'a pas reçu de accusé de réception.

Le SIP RFC nous indique que la transaction INVITE du serveur UAS entrera dans l'état Terminé lorsqu'il envoie un 200 OK. La réception d'un accusé de réception l'envoie à l'état confirmé. Si, cependant, l'UAS a une erreur de transport lors de l'envoi du 200 OK ou ne reçoit pas un accusé de réception ACK (Timer H déclenche (64 * T1 = 64 * 500m = 32 secondes par défaut), l'UAS se déplace. à l'état Terminé

2

D'oh!

Le problème a été constaté que je n'ai pas envoyé un accusé de réception à un message SIP 200 lorsque mon appel a été accepté dans ma classe d'écouteurs d'appel. Ainsi, le client voip a ignoré les requêtes rtp correspondantes.

public void onCallAccepted(Call call, String sdp, Message resp){ 
    System.out.println("call accepted"); 
    call.ackWithAnswer(sdp); //this was the missing line I needed 
    this.setupRtpSession(call); 
} 

Espérons que cela aide quelqu'un à un problème similaire