2015-04-04 10 views
9

Sto provando a creare una semplice applicazione VoIP utilizzando C# quindi ho trovato che il Ozeki SDK è il modo semplice per farlo ma quando sto cercando di registrare l'account SIP utilizzando la classe SIPAccount da il Ozeki SDK e il mio locale IP fallire sempre e questo è il codiceRegistrazione SIP utilizzando Ozeki SDK non funzionante

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Ozeki.VoIP; 
using Ozeki.VoIP.SDK; 

namespace SIP_R 
{ 
    class Program 
    { 
     private static ISoftPhone softphone; // softphone object 
     private static IPhoneLine phoneLine; // phoneline object 

     private static void Main(string[] args) 
     { 
      // Create a softphone object with RTP port range 5000-10000 
      softphone = SoftPhoneFactory.CreateSoftPhone(5000, 10000); 

      // SIP account registration data, (supplied by your VoIP service provider) 
      var registrationRequired = true; 
      var userName = "1000"; 
      var displayName = "1000"; 
      var authenticationId = "1000"; 
      var registerPassword = "1000"; 
      var domainHost = SoftPhoneFactory.GetLocalIP().ToString(); 
      var domainPort = 9000; 

      var account = new SIPAccount(registrationRequired, displayName, userName, authenticationId, registerPassword, domainHost, domainPort); 

      // Send SIP regitration request 
      RegisterAccount(account); 

      // Prevents the termination of the application 
      Console.ReadLine(); 
     } 

     static void RegisterAccount(SIPAccount account) 
     { 
      try 
      { 
       phoneLine = softphone.CreatePhoneLine(account); 
       phoneLine.RegistrationStateChanged += sipAccount_RegStateChanged; 
       softphone.RegisterPhoneLine(phoneLine); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Error during SIP registration: " + ex); 
      } 
     } 

     static void sipAccount_RegStateChanged(object sender, RegistrationStateChangedArgs e) 
     { 
      if (e.State == RegState.Error || e.State == RegState.NotRegistered) 
       Console.WriteLine("Registration failed!"); 

      if (e.State == RegState.RegistrationSucceeded) 
       Console.WriteLine("Registration succeeded - Online!"); 
     } 
    } 
} 

quindi per favore qualsiasi aiuto su cosa fare molte grazie in anticipo per qualsiasi aiuto ..

quando si cerca di fare chiamate utilizzando softphone Ozeki SDK e IP locale danno un errore NatType:UDPBlocked

risposta

1

Avete entrambe le porte UDP e TCP 5060 aperte? (La porta SIP standard) È possibile registrare un softphone SIP normale dalla macchina di sviluppo?

Dal tuo messaggio di errore sembra che tu abbia un problema con il firewall, non un problema di codice.

E guardando il tuo codice, controllerei tutte le porte che hai inserito: da 5.000 a 10.000.

0

Errore: NatType:UDPBlocked

codice SDK:

<member name="F:Ozeki.Network.Nat.NatType.UdpBlocked"> 
     <summary> 
      Firewall that blocks UDP. 
      </summary> 
     <remarks> 
      Probably no internet connection available or firewall issue. 
      </remarks> 
    </member> 

Probabilmente senza connessione a internet a disposizione o un firewall problema.

Provare Abilitando il NAT avanzato in uscita, modificare la regola di uscita predefinita per abilitare la porta statica. Riavvia l'adattatore.

Come suggerisce il codice SDK,

Controllare Firewall e porte che si hanno il problema affrontato

0

Dopo aver studiato il codice e la spiegazione di registrazione SIP sul sito del SDK, credo che questa linea genera il problema:

var domainHost = SoftPhoneFactory.GetLocalIP().ToString(); 

per essere in grado di comunicare, abbiamo bisogno di registrare il nostro softphone a un PBX. Per fare ciò, l'esempio utilizza il metodo Register. Abbiamo bisogno di creare una linea telefonica per questa registrazione, che necessita di un account SIP e di un metodo NAT Traversal.

(Fonte: How to register to a PBX using SIP Account?)

Quindi lo scopo di questo frammento di codice è quello di definire un account SIP che verrà registrato per un certo PBX. Di conseguenza, domainHost dovrebbe essere l'indirizzo IP del PBX che si desidera registrare. (E domainPort dovrebbe essere il numero di porta di questo PBX.)

Problemi correlati