0

我正在使用 Pjsip 库进行呼叫,并且因为我正在从我的代码更改编解码器并且它随着新的优先级而发生变化,但它没有在 FreeSWITCH 呼叫日志中更新,因为它向我显示了旧的编解码器。不使用新的优先编解码器进行更新。假设我已将编解码器优先级从 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 通话记录中更改编解码器优先级有任何想法,请分享您的答案。

谢谢。

4

1 回答 1

3

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

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

如果要在 PJSIP 库端禁用PCMU/Any 编解码器,则在设置优先级时将默认值设置为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 编解码器价值。

我把我的观察放在上面,请试试这个,并在评论中询问您的问题!

于 2018-02-22T07:07:42.303 回答