概述
freeswitch是一款簡單好用的VOIP開源軟交換平臺。
fs在實際的使用過程中也會經常碰到莫名其妙的問題,大部分都是配置問題。
環境
CentOS 7.9
freeswitch 1.10.7
docker 26.1.1
問題描述
組網方案如下。其中的fs-reg是註冊伺服器,fs1和fs2是業務媒體伺服器,B1B2是倆個B路中繼。
比較特殊的地方是,fs1和fs2是透過docker部署在同一臺實體伺服器上的2個docker例項。
eyebean --> fs-reg --> fs1 --> B1
--> fs2 --> B2
問題現象。
當fs1和fs2的併發比較大的時候,會出現語音串線的情況。
本來a通話是打到B1的,看信令也是送到了B1,但是語音裡是B2的聲音,錄音也是。
問題分析
分析fs1日誌,B1協商的本端埠為“10.32.255.26 port 25692”。
[DEBUG] switch_core_media.c:8777 AUDIO RTP [sofia/external5060/13712345678] 10.32.255.26 port 25692 -> 10.0.129.14 port 11612 codec: 8 ms: 20
再從fs2的日誌中發現,B2呼叫在B1呼叫12秒後協商了一個相同的本端埠“10.32.255.26 port 25692”。
這樣,fs1和fs2會同時監聽port 25692,結果就是莫名其妙的語音串線問題。
fs1和fs2會使用相同的媒體埠,則是因為各自的配置中使用了相同的媒體埠範圍,在大併發的場景下,會有小機率發生該問題。
cat switch.conf.xml
<!-- RTP port range -->
<param name="rtp-start-port" value="16384"/>
<param name="rtp-end-port" value="32768"/>
解決方案
修改fs1和fs2的媒體埠範圍。
fs1的switch.conf.xml。
<!-- RTP port range -->
<param name="rtp-start-port" value="16000"/>
<param name="rtp-end-port" value="32000"/>
fs2的switch.conf.xml。
<!-- RTP port range -->
<param name="rtp-start-port" value="32001"/>
<param name="rtp-end-port" value="48000"/>
總結
fs的docker模式挺好用的,但是有不少要注意的坑。
空空如常
求真得真