日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络电话VOIP技术解析

發布時間:2023/12/18 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络电话VOIP技术解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

絡電話的整體解決方案。

一、VOIP介紹

VOIP即網絡電話,Voice over Internet Protocol,通過把語音信號經過數字化處理、壓縮編碼打包、通過網絡傳輸,然后解壓、把數字信號還原成聲音,讓通話對方聽到。 話音從源端到達目的端的基本過程是: 聲 – 電轉換:通過壓電陶瓷等類似裝置將聲波變換為電信號。

量化采樣:將模擬電信號按照某種采樣方法(比如脈沖編碼調制,即PCM)轉換成數字信號;

封包:將一定時長的數字化之后的語音信號組合為一幀,隨后,按照國際電聯(ITU-T)的標準,這些話音幀被封裝到一個RTP(即實時傳輸協議,Realtime Transport Protocol)博主weixin@yuyinjiqiren報文中,并被進一步封裝到UDP報文和IP報文中。

傳輸:IP報文在IP網絡由源端傳遞到目的端 去抖動:去除因封包在網絡中傳輸速度不均勻所造成的抖動音 拆包 電聲轉換 一個完整的、可以大規模商用運營的IP電話系統包括如下一些技術(暫不完全):尋址 話音編解碼 回聲消除和回聲抑制 傳輸 IP報文時延控制功能 去抖動 IP報文的去抖動(de-jitter)功能 。

二、VOIP與傳統電話的比較

簡單地來說,VOIP網絡電話免費(流量、wifi),傳統電話更穩定點。不過現在網絡電話行業發展快,很多產品穩定性都超過了傳統電話,好比mimicall、vp3000等,所以現在越來越多的人習慣了使用網絡電話去進行溝通。

三、開源軟PBX(軟交換)的選擇

國內比較流行和擁有活躍用戶群的是FreeSwitch(https://freeswitch.org/)和Asterisk(http://www.asterisk.org/),由于之前對Asterisk有一定的應用經驗,所以選擇了Asterisk。二者都基于sip協議。

四、客戶端開源sip協議庫的選取

目前比較流行的開源的SIP協議庫是PJSIP(http://www.pjsip.org/),它實現了SIP、SDP、RTP、STUN、TURN和ICE。PJSIP作為基于SIP的一個多媒體通信框架提供了非常清晰的API,以及NAT穿越的功能。PJSIP具有非常好的移植性,幾乎支持現今所有系統:從桌面系統、嵌入式系統到智能手機。PJSIP同時支持語音、視頻、狀態呈現和即時通訊。PJSIP具有非常完善的文檔,對開發者非常友好支持。

五、調研評估和Demo搭建

目前市場上對于voip的應用已經比較成熟,好多公司都在做。微信電話本等的推出說明voip完全可行。相對于去哪兒呼叫中心更好的服務于去哪兒用戶解決海外用戶撥打人工服務的困難,盡最大努力降低用戶的成本,voip完全可行。

1)Demo的快速搭建

找一臺linux機器首先下載安裝pjsip軟件 安裝過程這里不做過細講解

用ldconfig命令 驗證pjsip的動態鏈接是否創建

ldconfig -p | grep pj

安裝Asterisk 13(注意只有12以上才支持了pjsip)

這里注意在編譯的時候其實可以查詢系統的位數,我的是64位所以直接指定了64,查詢指定的命令如下:

ARCH=$(getconf LONG_BIT | grep “64”)

./configure –libdir=/usr/lib${ARCH}

用make menuselect命令選擇安裝的模塊

做選擇需要編譯安裝的modules,查看確保pjsip相關的module已選擇

然后make config 命令是將asterisk作為linux service的服務

還有一點就是Asterisk 13 requires pjsip >= 2.4. 所以選取版本的時候也 需要注意。

2)demo客戶端軟件選取

PjSua是開源的客戶端代碼,同時支持ios和android等主流操作系統,做測試用的話eyeBeam,X-Lite,Blink 都可以作為PC客戶端,Blink PC客戶端做tls測試的時候比較方便。

這里可以同時下載eyeBeam,X-Lite兩臺互撥便于測試。

3)Asterisk的配置

Demo可以配置兩個測試的分機號(可以認為是用戶名和密碼)

配置是在 /etc/asterisk/pjsip.conf 中

監聽地址端口配置為本機ip和5061端口,協議配置成udp

分別再配置兩個號 8005和8006

[transport-udp]

type=transport

protocol=udp

bind=0.0.0.0:5061

[8005]

type=endpoint

context=from-external

disallow=all

allow=ulaw

transport=transport-udp

auth=8005

aors=8005

[8005]

type=auth

auth_type=userpass

password=8005

username=8005

[8005]

type=aor

max_contacts=1

[8006]

type=endpoint

context=from-external

disallow=all

allow=ulaw

transport=transport-udp

auth=8006

aors=8006

[8006]

type=auth

auth_type=userpass

password=8006

username=8006

[8006]

type=aor

max_contacts=1

4)撥號方案的配置

撥號方案的配置在 /etc/asterisk/extensions.conf 中 增加配置

[from-external]

exten => _80XX,1,NoOp()

same => n,Dial(PJSIP/${EXTEN})

啟動asterisk

service asterisk start

控制臺連接

sudo asterisk -rvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

注冊分機8005 8006

Asterisk 控制臺輸出

撥打測試 戴上耳機就可以聽到你的聲音啦

demo用例圖

六、Asterisk 負載均衡的搭建

完美的線上解決方案是不允許單點的出現,作為pbx 也是一樣。

負載均衡軟件選取,sip層的負載均衡可以選取硬件,但是成本原因我們可以用軟件代替,行業中有不少做sbc的廠家,提供硬件和軟件的解決方案,我們可選取kamailio (https://www.kamailio.org/w/) 或者opensips (http://www.opensips.org/),其實二者是一家,不同的分支而已 其中的故事我就不在這里說了,這里我們選取 kamailio。

1)kamailio安裝

安裝過程這里不做過細講解 這里需要注意將kamailio做成service服務啟動方式或者init腳本啟動方式需要做以下操作,同時需要注意權限問題

cp pkg/kamailio/rpm/kamailio.init /etc/init.d/

mv /etc/init.d/kamailio.init /etc/init.d/kamailio

chmod 755 /etc/init.d/kamailio

/etc/init.d/kamailio start

2) 配置asterisk的轉發

cd /usr/local/etc/kamailio/

vim dispatcher.list

1 sip:192.168.0.1 0 1 weight=50

1 sip:192.168.0.2 0 1 weight=50

vim kamailio.cfg(kamailio配置比較多官方有文檔(http://www.kamailio.org.cn/data/pages/cookbooks/4.3.x/stable.html)這里列舉主要的配置)

listen=udp:192.168.0.3:5060

modparam(“dispatcher”, “list_file”, “/usr/local/etc/kamailio/dispatcher.list”)

Route配置中加入

if(!ds_select_dst(“$var(dispatcher_group)”, “9”))

{

send_reply(“404”, “No destination dispatcher”);

exit;

}

關于dispatcher 的選項配置

3)重啟 kamailio

/etc/init.d/kamailio restart

此時呼叫 可以查看kamailio的日志或者asterisk控制臺 發現已經按照我們的配置按權重做了轉發。

Asterisk負載均衡用例圖

七、kamailio的HA

此時發現雖然解決了asterisk的單點問題,但是沒有解決kamailio的單點問題。我們選取keepalived解決kamailio的HA。Keepalived 引入需要vrrp(虛擬ip)的配合,這里我們指定192.168.1.4是192.168.1.5和192.168.1.6vrrp (這個需要在路由器端配置)。

1)Keepalived(http://www.keepalived.org/)安裝

需要主備兩臺服務器 地址分別對應192.168.1.5和192.168.1.6。兩臺都得安裝。

2)Keepalived 配置

兩臺機器的配置,基本一致只是一臺是master一臺是backup

還需要修改 /etc/sysctl.conf文件輸入

net.ipv4.ip_nonlocal_bind = 1

這條配置是允許linux的服務可以綁定虛擬ip,這里我們的kamailio需要綁定虛擬ip。

3)啟動keepalived

service keepalived start

兩臺都啟動

修改kamailio的配置文件 綁定虛擬ip

listen=udp:192.168.1.4

重啟kamailio 這里已經是兩臺了 主備

/etc/init.d/kamailio restart

這是時候撥打虛擬ip就可以了

4)HA的主備切換的檢驗

針對kamailio 我們需要引入sipsak小軟件,做sip探測比較合適

安裝sipsak

yum install sipsak

向kamailio發送探測 命令格式

sipsak -s sip:s@192.168.1.4:5060

根據返回值判斷echo $?

編寫監測腳本 做邏輯處理

這里大致說下腳本思路:利用sipsak 向kamailio發送探測命令,根據返回值是否為0判斷kamailio是否存活,根據失敗次數做keepalived的關閉這樣就可以實現vrrp指向另一臺機器。結合crontab 和shell腳本可以實現精細到每秒執行一次監測。

Kamailio HA后的用例圖

八、回撥方案的解決

現實中手機上并未啟動voip電話,此時撥打用戶是打不通的。為了解決這個問題我們設計了回撥方案,主要思路是當一方呼入電話時我們將這通電話hold起來,根據業務方式通知到另一方(比如push通知),當對方上線后我們放行這通電話就可以正常通話了,另一種方式是會議室方式,將呼入方先加入會議室,業務通知(同樣可以push或者短信等)另一方,另一方收到通知后主動加入會議室,此時雙方就可以通話啦。

回撥方案的序列圖

九、NAT 問題簡述

在企業服務中通常公司都有防火墻和DNS服務器,我熟知的一般是bind服務,在對外網開放的時候,需要開放端口,同時需要做端口和ip轉發。對應的外網地址轉發到對應的內網地址上,這一點需要注意。在asterisk和kamailio中都有對NAT的支持,做對應的配置即可,其中的坑只能自己動手去踩坑,比較雜,這里就不做過多說明,如果公司實力強大,還可以搭建stun服務器,免費的一般不靠譜,這樣既能解決端口問題又能解決NAT問題。

十、TLS和SRTP的支持

對于對外的服務來說,如果不想讓別人看到你的數據和聽到你的通話,需要在協議層引入TLS 語音層引入SRTP。tls和srtp都是需要單獨安裝的模塊,在kamailio中編譯安裝的時候就需要指定tls.so的加入。Asterisk編譯安裝的時候也需要提前編譯安裝tls和srtp。至于證書沒必要去購買 自簽名的即可。Kamailio是可以單獨配置rtpproxy的,所以這些服務都可以細分。

十一、問題排查

實際搭建過程中肯定會碰到各種各樣的問題,如網絡問題可以采用小工具netcat(http://www.jianshu.com/p/fa4eeac44e5c)進行排查,如果是分析sip協議哪步出的問題linux的 tcpdump是很好的工具,如果采用了tls協議,則有相對應的工具ssldump。最后推薦個非常實用的抓包軟件wireshark,這款軟件無論是分析sip協議還是丟包率,還是語音質量方面都是非常好用的。

十二、總結

如圖是比較簡單的voip接入呼叫中心的架構圖,實際的應用項目中還有許多監控的事情,比如宕機的通知之類的事情這里和業務相關的就不多說了,真正搭建的過程中會遇到許許多的問題,在此只是一個小的總結,希望對大家有所幫助。

歡迎留言交流或投稿,和我們一起分享知識。

總結

以上是生活随笔為你收集整理的网络电话VOIP技术解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。