最經在玩FreeSWITCH的時候,遇到很多的問題,特此總結一下,希望以后不要犯類似的錯誤了:
1、Client端無法注冊,但是FS運行正常?
解決辦法:查看防火牆是否關閉。/etc/init.d/iptables stop ,這條指令的僅僅是在運行FS的時候關閉一次防火牆,如果想每次開機都關閉防火牆,使用chkconfig iptables off。
2、打開FS的WebSOCKET功能?
解決辦法:在/usr/local/freeswitch/conf/sip_profiles/internal.xml中去掉WS的注釋即可,該行代碼為:<param name="ws-binding" value=":5066"/>
3、修改完FS之后,發現FS並沒有按照自己修改的方式進行?
解決辦法:在fs_cli 中輸入reloadxml,或者重新開啟FreeSWITCH。
4、開啟FreeSWITCH的常用方法有哪些?
A、/usr/local/freeswitch/bin/freeswtich -nonat
B、/etc/init.d/freeswitch start
C、service freeswitch start
5、如何讓FS實現媒體流和SIP信令分開傳輸,即媒體流實現P2P,SIP信令來維持通話過程的建立?
解決辦法:設置FS為媒體繞行方式,默認的是流媒體(RTP包)和SIP 信令是在一起傳輸,都經過FS,目的是FS做監控或者錄音錄影的功能。
要讓RTP 和SIP 分離,只要在/usr/local/freeswitch/conf/dialplan/default.xml中的Local_Extension中添加如下的代碼即可。
<action application="set" data="bypass_media=true"/>
<action application="bridge" data="user/${dialed_extension}@${domain_name}"/>
6、在fs_cli中使用show calls,或者使用 sofia status profile internal reg查看注冊賬號是,發現已經注銷的賬號還沒有及時更新?
原因:FreeSWITCH分為內核部分(FS Core)和外圍兩部分。內核使用其內部的隊列、哈希表以及外部的SQL數據庫,當前,系統的核心數據庫使用SQLite,默認村放在db/core.db。
使用外部數據庫的好處是:查詢數據不用鎖定內存數據結構。這樣不僅能提供性能,而且降低了死鎖的風險,保證了系統的穩定。
系統對數據庫操作做了優化,在高並發狀態時,核心會盡量將幾百條 SQL 一齊執行,這大大提高了性能。show calls 等都是直接從數據庫中讀取內容並顯示,所以在低並發的狀態下執行就顯得稍微有點慢。
7、從SDP協議應該看到的訊息:(2013/12/25)
A、所要描述的RTP的IP以及端口PORT;
B、編碼器的種類,以及是否支持視頻;
C、是否支持按鍵功能
注:很多情況下呼叫不成功都是因為SDP協商不成功導致的
以上是近期遇見問題的一個小結,以后的FS問題和解決方法也會及時的更新。