我想在 freeswitch pbx 软件中关闭 SIP 呼叫缓冲。
Freeswitch 将来自客户端的 RTP 数据保存在缓冲区中,并每 20 毫秒发送一次。
我想自由切换传递数据包而不保留。
如何配置呢?
----- 编辑(附加信息)-----
我有两个 SIP 客户端和 FreeSwitch PBX。
语音 8 kHz 采样率,A-Law 编码(每个样本 8 字节,无压缩)
当我直接从一个客户端调用另一个客户端时,一个客户端上的 tcpdump 输出为:
00:00:00.000475 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.031599 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.032012 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.000315 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.031775 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.000384 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.031499 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.031986 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.000475 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.031578 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.031936 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.000419 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.031573 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
但是当我使用 pbx 作为中间点从一个客户端连接到另一个客户端时,我得到:
00:00:00.020013 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.019969 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.020017 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.019984 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.020078 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.020016 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.019850 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.020045 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.020012 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.019974 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.020054 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.019996 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.019972 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
两种情况下的平均时间约为 20 毫秒(直接情况下稍短),但非常规数据部分对客户端来说似乎更好,因为听到的声音(在扬声器或耳机中)没有间隙。我认为数据的规则周期部分会因时钟漂移问题而导致问题。
所以我想在 FreeSwitch 中关闭这个功能,这样数据就会以原始时间戳出现。
答案1
我找到了我的问题的解决方案。
您需要添加行
<X-PRE-PROCESS cmd="set" data="rtp_notimer_during_bridge=true"/>
在文件中
/etc/freeswitch/vars.xml
这会导致桥接模式下的 FreeSwitch 保留原始数据包间隔。
答案2
由于 Sip 通信使用 udp 发送语音数据,因此需要一个强制缓冲区来填充每个帧,20 ms 是 sip 通信中 udp 数据包通常保存的数据量。
您将无法绕过它,但您可以通过配置来减少它
我不使用 freepbx,而是使用 Asterisk 作为 pbx,所以我不知道它是一个功能还是只是计算延迟。也许您应该考虑使用 asterisk 中的 direct_media 功能的等效功能,以便通过 pbx 完成 sip 协商,但 rtp 有效负载在对等点之间是直接的。