我正在使用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通话记录中更改编解码器优先级,请分享您的答案。
感谢。
答案 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编解码器的价值高于其他编解码器。
我把我的观察结果放在上面,请尝试一下,并在评论时询问您的问题!