当我进行SIP呼叫然后在Freeswitch呼叫日志中显示旧的编解码器时,编解码器优先级不会改变

时间:2018-02-22 05:47:00

标签: android codec pjsip freeswitch csip-simple

我正在使用Pjsip库进行调用,因为我正在从我的代码中更改编解码器并使用新的优先级进行更改,但它不会在FreeSWITCH调用日志中更新,因为它显示我的旧编解码器。不使用新的优先级编解码器更新。假设我将Codec优先级从PCMU 8 kHz更改为G729 8 kHz。但它只显示PCMU的日志,而不是G729。

我使用了以下PJSIP内置方法来更改CodecPriority,因为它在设备内部更改但不反映FreeSWITCH日志。

 public short getCodecPriority(String codecName, String type, String defaultValue) {
    String key = SipConfigManager.getCodecKey(codecName, type);
    if (key != null) {
        String val = getPreferenceStringValue(key, defaultValue);
        if (!TextUtils.isEmpty(val)) {
            try {
                return (short) Integer.parseInt(val);
            } catch (NumberFormatException e) {
                Log.e(THIS_FILE, "Impossible to parse " + val);
            }
        }
    }
    return (short) Integer.parseInt(defaultValue);
}

/**
 * Set the priority for the codec for a given bandwidth type
 * 
 * @param codecName the name of the codec as announced by codec
 * @param type bandwidth type <br/>
 *            For now, valid constants are :
 *            {@link SipConfigManager#CODEC_NB} and
 *            {@link SipConfigManager#CODEC_WB}
 * @param newValue Short value for preference as a string.
 */
public void setCodecPriority(String codecName, String type, String newValue) {
    String key = SipConfigManager.getCodecKey(codecName, type);
    if (key != null) {
        setPreferenceStringValue(key, newValue);
    }
    // TODO : else raise error
}

我使用了CSipSimple GitHub代码中的参考代码。

如果有人想知道在FreeSWITCH通话记录中更改编解码器优先级,请分享您的答案。

感谢。

1 个答案:

答案 0 :(得分:3)

Codec Priority 只是安排我们的可用编解码器列表。 交换机/其他方将选择编解码器,基于哪个编解码器与发送的优先级编解码器列表匹配,并按升序排列。

如果PCMU编解码器仅在应答者端可用编解码器,那么即使您设置了优先级列表,他们也只会选择PCMU。即使我们将PCMU编解码器放在优先级列表的最后一行,也会选择PCMU进行呼叫。

如果您想在PJSIP库侧禁用 PCMU /任意编解码器,请在设置优先级时将默认值设置为 0

  

您是否检查过编解码器优先级值,如下所示?编解码器优先级   将安排如下,

CODEC_NAME/CODEC_TYPE        PRIORITY_VALUE      
G729/8000/1                        133        
GSM/8000/1                         132      
speex/8000/1                       131      
speex/16000/1                      131     
speex/48000/1                      130      
PCMU/8000/1                        128      
iLBC/8000/1                        127

请尝试禁用PCMU编解码器。 如果freeswitch然后选择G729编解码器,则确定错误地分配了优先级值。

更高优先级值位居第一位。所以尝试G729编解码器的价值高于其他编解码器。

我把我的观察结果放在上面,请尝试一下,并在评论时询问您的问题!