2016-07-28 6 views
1

Ich bin ein wenig verwirrt mit der Konfiguration von SIP-Account. Also ich denke hier, jemand klärt Probleme, basierend auf SIP stack documentation.Android SIP-Konfiguration funktioniert nicht

Alles funktioniert gut, aber jetzt möchte ich einige Konfiguration zu funktionierenden Account hinzufügen. Beachten Sie, dass alle anderen Methoden dieses Protokolls einwandfrei funktionieren. Was ich verwenden möchte, sind seine Konfigurationsmethoden: retryIntervalSec(), delayBeforeRefreshSec() und timeOutSec().

Problem, dass diese Methode nicht funktioniert, unten ein Beispiel für die Einstellung dieser Konfig. Basierend auf doc über DelayBeforeRefreshSec hat einen Wert von 5 Sekunden. So Registrierung Aktualisierung nach 5 Sekunden, und wenn ich diesen Basiswert von Standard-Konfiguration, ist es gleich der Standardeinstellung. Aber! erfrischend feuert nicht nach 5 Sekunden!

Sind Sie bereit für Magie?

Wie Sie sehen können, Methoden Namen wie "delayBeforeRefreshSec", was bedeutet, für die Eingabe Sekunden (z. B. delayBeforeRefreshSec (5)) zu verwenden. Aber wenn wir diesen Methodenwert auf lang setzen (z. B. delayBeforeRefreshSec (100000)), wird das Auffrischen alle 5 Sekunden ausgelöst! Beachten Sie, dass jeder Wert über 500 mit periodischen 5 Sekunden beginnt!

Ich weiß, dass es vielleicht einige Überprüfung und Einstellung Basiswert in der Quelle, wenn es mehr einen höheren Wert ist. Aber was ist das alles? Warum funktionieren diese Methoden? Beachten Sie, dass andere Methoden wie timeOutSec nicht mit einem Wert arbeiten.

Und schließlich meine Hauptfrage, ist es, wie dies alles konfigurierbar machen?

mAccountConfig = new AccountConfig(); 
      mAccountConfig.setIdUri(myAccountName); 
      mAccountConfig.getRegConfig().setRetryIntervalSec(SIP_RECONNECT_DELAY); 
      mAccountConfig.getRegConfig().setDelayBeforeRefreshSec(SIP_KEEP_ALIVE_DELAY); 
      mAccountConfig.getNatConfig().setUdpKaIntervalSec(SIP_KEEP_ALIVE_DELAY); 

//.... 

mAccount = new Account; 
mAccount.create(mAccountConfig); 

Antwort

2

Ich habe die gleichen Probleme hatte, wenn versucht pjsip Bibliothek zu zwingen, die Anmeldung an den erforderlichen Abstand zu aktualisieren. Ich habe pjsua_acc_config Struct Reference gefunden, um mehr Details bezüglich aller Parameter zu liefern, die für die Registrierung eingestellt werden können.

Leider funktionieren nicht alle Parameter, also habe ich am Ende setDelayBeforeRefreshSec Methode verwendet, die durch die Anzahl der Sekunden vor Ablauf der Registrierung, in denen die Aktualisierungsnachricht gesendet wird, handeln wird. Wenn beispielsweise mAccountConfig.getRegConfig().setDelayBeforeRefreshSec(20) verwendet wird, wird die Aktualisierung im 40-Sekunden-Intervall durchgeführt. Also für Ihr gewünschtes 5 Sekunden Intervall müssen Sie mAccountConfig.getRegConfig().setDelayBeforeRefreshSec(60-SIP_KEEP_ALIVE_DELAY) verwenden.

Auch die Methode, die das auslaufende Intervall setTimeoutSec ändern sollte, funktioniert nicht, so dass ein Intervall von 60 Sekunden als Standard verwendet wird (weiß nicht warum genau, weil in der Dokumentation erwähnt wird, dass der Standardwert PJSUA_REG_INTERVAL ist) , das ist 300).

Unten ist meine Konfiguration verwendet, um die Registrierung bei 33 Sekunden mit Kommentaren für jede Methode zu aktualisieren.

 /* 
     * Specify interval of auto registration retry upon registration failure (including 
     * caused by transport problem), in second. Set to 0 to disable auto re-registration. 
     * Note that if the registration retry occurs because of transport failure, the first 
     * retry will be done after reg_first_retry_interval seconds instead. Also note that 
     * the interval will be randomized slightly by some seconds (specified in reg_retry_ 
     * random_interval) to avoid all clients re-registering at the same time. 
     * */ 
     sipAccountConfig.getRegConfig().setFirstRetryIntervalSec(3); 
     sipAccountConfig.getRegConfig().setRetryIntervalSec(10); 

     /* 
     * This specifies maximum randomized value to be added/subtracted to/from the 
     * registration retry interval specified in reg_retry_interval and 
     * reg_first_retry_interval, in second. This is useful to avoid all clients 
     * re-registering at the same time. For example, if the registration retry interval 
     * is set to 100 seconds and this is set to 10 seconds, the actual registration retry 
     * interval will be in the range of 90 to 110 seconds. 
     */ 
     sipAccountConfig.getRegConfig().setRandomRetryIntervalSec(7); 

     /* 
     * Optional interval for registration, in seconds. If the value is zero, default 
     * interval will be used (PJSUA_REG_INTERVAL, 300 seconds). 
     */ 
     sipAccountConfig.getRegConfig().setTimeoutSec(60); 

     /* 
     * Specify the number of seconds to refresh the client registration before the 
     * registration expires. 
     * Default: PJSIP_REGISTER_CLIENT_DELAY_BEFORE_REFRESH, 5 seconds 
     */ 
     sipAccountConfig.getRegConfig().setDelayBeforeRefreshSec(27); 

Ich hoffe, es wird Ihnen oder jemandem helfen.