背景說明
在freeswitch中有mod_sofia模塊支持sip協議。sip協議用於媒體鏈接建立前的信令交互。像mod_sofia這種模塊在freeswitch中稱爲endpoint,除了mod_sofia,freeswitch還有一個mod_verto模塊。mod_verto使用freeswitch自定義的一個協議,通過websocket進行信令交互。verto協議基於jsonRpc協議,通過json格式來傳輸數據。
它作爲一個端點存在,也就意味着可以用它來和PSTN或sip終端進行互聯互通, 下面就進入實戰階段, 本篇重在安裝部署,FS的安裝可以按照官方文檔來, 這裏描述了verto模塊的相關配置和啓動,如果自己實在不想從頭來一遍但稍瞭解一些docker指令可以直接通過:docker pull yine/freeswitch:1.10.2-verto
來拉取最新的版本進行體驗。
系統配置
配置verto
- 修改conf/autoload_configs/verto.conf.xml
- debug 設置爲10 適用於調試;
- enable-presence 設置爲false,關閉狀態;
- outbound-codec-string 添加h264編碼支持;
- inbound-codec-string 添加h264編碼支持;
- 爲用戶號碼配置verto支持
- 修改directory/default.xml,在中添加如下:
<param name="jsonrpc-allowed-methods" value="verto"/>
<param name="jsonrpc-allowed-event-channels" value="demo,conference,presence"/>
- 每個用戶的xml配置文件中conf/directory/default/1000.xml,在中添加如下:
<param name="verto-context" value="public"/>
<param name="verto-dialplan" value="XML"/>
- 如需使用會議功能,請修改會議配置文件conf/autoload_configs/conference.conf.xml
- 在中檢查conference-flags項目,確保其中包含livearray-sync和livearray-json-status
- 撥號計劃配置
- 在 dialplan/default 下新建 00_verto_demo.xml 內容如下:
<include>
<extension name="verto-demo">
<condition field="destination_number" expression="^(10[0-9][0-9])$">
<action application="export" data="dialed_extension=$1"/>
<action application="set" data="call_timeout=30"/>
<action application="bridge" data="${verto_contact ${dialed_extension}@${dialed_domain}}"/>
</condition>
</extension>
</include>
- 因爲 Local_Extension 和上面定義的准入條件衝突,所以需要將這個拔號計劃給註釋掉,自己添加的才能生效;
創建自簽名證書
-
因爲wss方式的訪問是加密的,所以需要配置https方式運行demo,先創建一個自簽名證書,以供freeswitch和web服務使用,注意二者需要使用同一套證書才能順利的訪問freeswitch。
-
創建自簽名證書,過程中按提示輸入各種信息,過程中需要openssl的支持,如果未安裝請提前自行安裝。
wget http://files.freeswitch.org/downloads/ssl.ca-0.1.tar.gz
tar zxfv ssl.ca-0.1.tar.gz
cd ssl.ca-0.1/
perl -i -pe 's/md5/sha256/g' *.sh
perl -i -pe 's/1024/4096/g' *.sh
./new-root-ca.sh
./new-server-cert.sh self.zerostudio.com
./sign-server-cert.sh self.zerostudio.com
cat self.zerostudio.com.crt self.zerostudio.com.key > /etc/freeswitch/tls/wss.pem
/*注意此路徑和verto配置文件中的相同*/
安裝web服務(以apache爲例)
sudo apt-get install apache2
配置apache
sudo a2enmod ssl
sudo a2enmod rewrite
修改/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:443> -- 修改爲443
…………
--增加下面幾行
SSLEngine On
SSLOptions +StrictRequire
SSLCertificateFile /etc/freeswitch/tls/wss.pem
SSLCertificateKeyFile /etc/freeswitch/tls/wss.pem
SSLCertificateChainFile /etc/freeswitch/tls/wss.pem
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
/etc/init.d/apache2 restart 啓動web服務, 如出現問題用a2enmod 來加載ssl模塊;
重啓apache服務
sudo service apache2 restart
部署verto_demo
- 在freeswitch源碼中找到video_demo cpy 到web服務目錄
cp -rf ./freeswitch/html5/verto/video_demo /var/www/html
- 打開瀏覽器(我用的Chrome)訪問https://IP地址/video_demo
- 提示未信任,點高級,繼續前往。
- 至此安裝完畢,其他請自行體驗。
補充
但實際情況總不盡人意,Debian 8.x Jessie 目前的 OpenSSL 版本還是 1.0.1,不支持 ALPN 的最低要求 1.0.2,所以我們升級到1.0.2的版本,線上環境最好是用Debian9來進行,兼容性會更好, 如果實在想在debian8上升級,建議源碼安裝再修改環境變量,但是這種方式需要你重新編譯你的可執行程序。