實作前言:
在試裝這個套件前,筆者陸續已經測過幾個商用或OpenSource的其他套件,憑心而論,如果是要應用在正式營運環境,還是建議使用商用的套件,例如 SisSky(請參閱之前的討論)。不過這套 SipTheeSkype 在整合 SIP 或 Asterisk 上還是有幾項優點:
- 純Java的執行環境,所以可以在兩大主流作業平台Linux及Windows上運作。
- OpenSource 的使用授權,意思就是可以免費使用它,這對玩家可是很重要。
- 不限定 Skpe Channel 數,這取決於主機的硬體效能而定,依照官方的 FAQ 說明如下
Windows - 56-70mb - Approx 12% cpu with an AMD Athlon 2700
Linux - 52mb+ for SipTheeSkype & Skype and 16mb+ for Xvfb & xterm - Approx 5% cpu with an AMD Athlon 2700. If you use a different method to create X sessions, your memory usage will be different. - 可以與 Asterisk 運行在同一個機器上,不過這只能運行單一個 Skype channel。
- 同一個 Skype 帳號整合 Asterisk Trunk,可作為 Outbound Route 或 Inbound Route,但不可同時為兩者用途。
這套件可以使用在三種模式下,分別是
- 與 SIP adapter 連接,例如 Sipura PAP2。
- 與 IP PBX 整合,例如 Asterisk Server。
- 與 SIP Provider 連接,例如 GizmoProject。
其各自的流程說明如下
for SIP adapter)
- SIPDevice --> SipTheeSkype --> SkypeSTS --> SkypeUser or SkypeOut to PSTN
- SkypeUser or SkypeIn --> SkypeSTS --> SipTheeSkype --> SIP Device or SIP Destination
for IP PBX)
- SIPCaller --> Asterisk/PBX --> SipTheeSkype --> SkypeSTS --> SkypeUser or SkypeOut to PSTN
- SkypeUser or SkypeIn --> SkypeSTS --> SipTheeSkype --> Asterisk --> SIP destination
for SIP Provider)
- SIPCaller --> SIPProvider --> SipTheeSkype --> SkypeSTS --> SkypeUser or SkypeOut to PSTN
- SkypeUser or SkypeIn --> SkypeSTS --> SipTheeSkype --> SIP destination
以上的 SkypeSTS 是指設定在 SipTheeSkype 的 Skype 帳號。
官網連結 - http://www.mhspot.com/siptheeskype.html
心得分享:
實作的軟硬體環境介紹
- Server 硬體 - Asus ep20, 需有音效卡裝置
- IP PBX - Elastix 1.1-8 (Asterisk 1.4.19 + FreePBX2.4.1.2)
- Skype - for Linux 2.0.0.72
- SipTheeSkype - SipTheeSkype3_20081101 + stsTrunkBuider_20081026
在這次實作我們將套件裝在 Elastix Server 上,所以只能運行一個 Skype Channel,並且在與 Asterisk 作整合時,當建立了 Trunk 可使用 Skype 帳號撥出時,卻無法使用 Skype 帳號的撥入,必須刪除 Trunk 或 Disable 才可以正常撥入,原因有可能是運行在同一機器的關係。
至於大家最關心的通話品質,實在很抱歉,我們並沒有和其他 Skype 用戶作充分的通話測試,只是簡單的用幾個 Skype 帳號互相作單向的測試,即使如此,結果顯示它的通話品質應該是可以接受的。
就我們作過 Skype 整合 SIP 的經驗上,不過是用哪一套,若 Skype 與 SIP 分屬不同主機上,必須同屬在內部網路(LAN),否則通話品質會因網路關係大打折扣。
這個套件與其他的商用或非商用型套件架構相同,皆以 Skype API 方式與 SIP 溝通,這樣雖然不是個很好的方式,但以目前 Skype 仍屬封閉的軟體來說,暫時也沒有更好的方式,不過 Skype 官方已經在考慮開發與 Asterisk 整合的版本(詳見討論區),希望很快能有進一步的釋出計畫。
雖然很辛苦的將它安裝起來了,不過最後還是沒將它掛上線,原因是 Skype 啟動後,即使沒有使用,頻寬仍會被偷偷吃掉,對此我很反感,如果頻寬不是很大的人,還是建議別想用 Skype。很多人很快樂在用 Skype,卻渾然不知自己的頻寬已被這家公司拿來作分享。
◆下載 java SE Runtime Enviroment(JRE) 6 Update 10
- 前往連結
安裝 jre-6u10-linux-i586.bin:
#chmod u+x jre-6u10-linux-i586.bin #./jre-6u10-linux-i586.bin 閱讀授權政策完後輸入 yes #mv jre1.6.0_10/ /opt #vi /etc/profile.d/java.sh 輸入以下這一段 JAVA_HOME=/opt/jre1.6.0_10 JAVA_BIN=$JAVA_HOME/bin PATH=$PATH:$JAVA_BIN export JAVA_HOME JAVA_BIN PATH
驗證 Java,重新再登入 console,執行
#java -version
此時應輸出正確的 Java 版本號。
◆下載安裝 vncserver
由於在下一個 Skype 安裝步驟前,系統需先具備視窗的執行環境,且為了方便遠端管理,也一併將 VNC 套件裝上(請注意:基於系統安全考量,VNC 套件可選擇不裝)。
安裝 GNOME 視窗套件 #yum groupinstall "GNOME Desktop Environment" 重開機 #reboot 安裝 vncserver #yum install vnc-server 設定 vncserver,以root執行以下指令,第一次執行時,系統會要求設定 vnc 登入密碼。 #vncserver 檢查 vncserver 的通訊埠,若有出現 port 590x,表示 vnc 啟動中。 #netstat -lt 關閉 vncserver 服務,如服務埠是 5902,請輸入 :2,埠號的最後一碼。 #vncserver -kill :2
◆下載安裝 Skype for CentOS Linux
- 前往連結
Skype 一定要與 siptheeskype 裝在同一部主機。以 root 登入 console
#wget http://www.skype.com/go/getskype-linux-centos 安裝其他相依性套件 #yum install qt4.i386 #rpm -ivh skype-2.0.0.72-centos.i586.rpm
進入視窗環境,啟動 Skype 時要以 root 身份執行,若以一般用戶執行有可能無法抓到音效卡。第一次啟動 Skype 作初始化設定,這與在 Windows 的差不多,開啟終端機執行以下指令:
#skype&
因為要配合 SipTheeSkype,Skype 有兩個設定要注意:
- 勾選自動登入並記憶密碼。
- 取消自動更新。
◆驅動音效卡
這個步驟是筆者花費最多時間的,原因是這次選用的機器 Asus ep20,在 Linux 預設環境無法正常驅動內建的音效卡,不過還好的是,在查了 Google 後,這內建的音效卡晶片是有支援 Linux,但要手動安裝驅動程式,又這款機器在網路上查到有使用在 Linux 的資料很少,如果能選擇有支援 Linux 音效驅動的機器,就可以減少不少的安裝時間。
以下步驟是以 Asus ep20 內建音效卡驅動為例。
#wget ftp://ftp.alsa-project.org/pub/driver/alsa-driver-1.0.17.tar.bz2 #wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.17a.tar.bz2 #wget ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.17.tar.bz2 #tar -xjf alsa-driver-1.0.17.tar.bz2 #cd alsa-driver-1.0.17 #./configure --with-cards=hda-intel --with-sequencer=yes #make #make install #cd ../ #tar -xjf alsa-lib-1.0.17a.tar.bz2 #cd cd alsa-lib-1.0.17a #./configure #make #make install #cd ../ #tar -xjf alsa-utils-1.0.17.tar.bz2 #cd alsa-utils-1.0.17 #./configure #make #make install #cd ../ #alsaconf
◆下載安裝 SipTheeSkype SIP Skype Bridge
- 前往連結
選擇 SipTheeSkype3_20081025.zip,下載後上傳至 Elastix 主機上目錄 /usr/src。
安裝:
#mkdir /opt/siptheeskype #cd /opt/siptheeskype #unzip /usr/src/SipTheeSkype3_20081101.zip #cp samples/* ./
修改檔案 siptheeskype.cfg,取代 192.168.0.4 為執行 siptheeskype 的主機 IP。
#vi siptheeskype.cfg //-------------------------------------------------------------------------------------------------------- #Sample config with NO registration - change 192.168.0.4 to ip address of computer running siptheeskype # username and password not important in this mode #Set to available port to transport SIP messages on siptheeskype computer host_port=5070 contact_url=sip:skype@192.168.0.4:5070 from_url="Skype" <sip:5611111111@192.168.0.4:5070> username=skype passwd=123456 realm=192.168.0.4
啟動 Skype
#skype &
先完成帳號登入。
啟動 siptheeskype
#./SipTheeSkype_linux
此時會出現提示視窗,請予許所執行的程式。
到這裡已經完成整合終端 SIP 設備/軟體電話撥 Skype 的環境了。
作測試時,可使用 SJphone 註冊至 siptheeskype 主機,主要資訊如下
- SIP server = sptheeskype 主機 IP
- Port = 5070
- 不要勾選註冊功能
- username/password = skype/123456
用 SJphone 撥 5551,如連結正確,會聽到 Skype 的 Echo Test,撥通正常後,也試試看能不能聽到自己的聲音,如果都沒問題,已經完成大部分的設定了。
不過,如果要和 Asterisk 整合,還有一項工作要作,下載 SipTheeSkype Skype Trunk Builder,這工具將幫助你快速建立所需的設定檔。
Skype Trunk 整合 Asterisk
參考文章:http://www.mhspot.com/siptheeskype_s...unk_howto.html
下載及安裝 stsTrunkBuilder
在開始安裝這個工具前,先作個簡單說明,不然會與上述的 SipTheeSkype 這支程式有所混淆。
SipTheeSkype - 這是建立 Skype Channel 的主程式,所以要繼續以下有關 Asterisk 整合 Trunk 的步驟前,一定要先完成所有步驟,並且作完 SIP device/softphone --> Skype 的測通步驟。
stsTrunkBuilder - 這是基於上述的主程式的設定檔產生器,透過這,可以很快速的建立,每個 Skype Channel 連結 Asterisk 所需的所有設定檔及啟動檔。既然它只是用來產生設定檔,所以只要熟悉主程式的用法,也可以手動逐一建立這些設定檔,而完全不需要這個工具。
#unzip -d /opt/ststrunkbuilder tmp_3170f_stsTrunkBuilder_20081026.zip #cd /opt/ststrunkbuilder #cp -a samples/* ./
編輯設定檔 stsTrunkDef.cfg
#vi stsTrunkDef.cfg
- ## 要作 Trunk 的 Skype 帳號,可輸入多組
- skypeUserList=skypeuser1,skypeuser2
- ## 輸入 SipTheeSkype 的安裝目錄,本例為 /opt/siptheeskype
- stsBaseConfigFile=/opt/siptheeskype/siptheeskype.cfg
產生Skype Trunk 所需的設定檔及啟動檔
#chmod u+x trunkConfig_linux #./trunkConfig_linux
這些產生出來的設定檔及啟動檔,若一切都正常,會儲存在 SipTheeSkype 的程式目錄下,此例為 /opt/siptheeskype。
簡單的說明一下,這些檔案的用途:
- stsTrunk_01_start - 啟動第一組 Skype Channel
- stsTrunk_01.cfg - 第一組 Skype Channel 的設定檔
- stsTrunk_01_stop - 關閉第一組 Skype Channel
- 若有第二組、第三組以此類推
- stsTrunkStartAll_linux - 啟動所有 Skype Channel
- stsTrunkStopAll_linux - 關閉所有 Skype Channel
用視窗模式以 root 登入主機,第一次啟動任一組 Skype Channel 時,必須先作設定的初始化,啟動指令再加一個參數 config:
#cd /opt/siptheeskype #./stsTrunk_01_start config
初始化的過程,會開啟 xterm 視窗以及呼叫 Skype 程式(請先完成 Skype 的安裝),依序完成 Skype 的登入程序,登入的Skype帳號要與第一組設定檔所指定的相同,並且確認以下的設定:
- 在 Skype 的登入設定要勾選密碼記憶
- 若一切都正常,會跳出 Skype API 執行確認的提示窗,除了選 Yes 外,要勾選 "不要再提示" 的選項。
到這邊已經完成了第一個 Skype Channel 的初始化設定以及啟動,請繼續按同樣的方法依序完成第二個、第三個 Skype Channel 的初始化及啟動。
在完成所有 Channel 的初始化啟動後,雖然此時所有 Channel 都已經啟動了,但卻只有最後啟動的那個 Channel 可以作用,在反覆閱讀官方的資料後,才理解,初始化的啟動模式會影響多 Channel 之間的運作。
所以做完初始化後,先關閉各 Channel,執行:
#cd /opt/siptheeskype #./stsTrunk_01_stop #./stsTrunk_02_stop
注意:關閉 Channel 時,同時也會自動關閉相應的 Skype 程式,所以不用先手動關閉 Skype。
啟動 Skype Channel,但不要加任何參數:
#./stsTrunk_01_start
這時啟動的程序會丟到背景執行,你可以使用以下指令,檢視程式是否已執行:
#ps -ef | grep skype
root 15034 15021 23 22:12 pts/4 00:00:03 skype --dbpath=/opt/siptheeskype_20081101/skype_stsTrunk_01/ root 15049 15048 9 22:12 pts/4 00:00:00 java -Xms24m -Xmx24m -Djava.library.path=. -classpath tritonus_gsm-0.3.6.jar:tritonus_share-0.3.6.jar:jmf.jar:jspeex.jar:sip.jar:ua.jar:skype.jar:log4j-1.2.15.jar:siptheeskype.jar:. local.ua.SkypeUA stsTrunk_01.cfg |
其他 Channel 也按此法依序啟動。
Tips:
- 如果從 SIP 分機撥 Skype Echo Test,都無法聽到自己的聲音,請檢查 /etc/hosts 的設定。
- 從 Skype 帳號撥入進 Asterisk 的 IVR,無法辨識 DTMF 按鍵訊號時,請修改檔案 siptheeskype.cfg 或 stsTrunk_xx.cfg 的兩個參數
enableSkypeDtmfDetector=yes
inbandFullTimeDtmfDetection=yes - 錯誤:Xvfb: command not found
Ans: yum install xorg-x11-server-Xvfb - 如果使用多個 Skype Channels,每啟動一個 Skype Channel會佔用 port 5070+1,例如:
skypeuser1 - port 5070
skypeuser2 - port 5071
skypeuser3 - port 5072
然而在 CentOS 預設環境下,這些 port 可能被其他系統佔用,請將需要用到的 port number 空出給 SipTheeSkype 使用,步驟如下:
修改 /etc/services
// 註解會用到的 port
#powerschool 5071/tcp # PowerSchool
#powerschool 5071/udp # PowerSchool
#ayiya 5072/tcp # Anything In Anything
#ayiya 5072/udp # Anything In Anything
檢查 port 是否有開啟,執行指令
#netstat -lu | grep 507 - 錯誤:error opening security policy file /usr/lib/xserver/SecurityPolicy
Ans:yum install xorg-x11-server-Xorg
留言列表