Asterisk-WebRTC客戶端的部署

大米粥的部落格發表於2020-09-01

很久沒有寫部落格了。最近完成asterisk 和  jssip的庫整合,瀏覽器支援chrome/firefox。在整合的過程中遇到了一些問題,在這兒分享出來,免得大家走彎路。

在網上看一些帖子,環境都是比較老的,對於最新的瀏覽器和庫並不一定適配,在這兒我先系統環境介紹一下。

環境介紹:

作業系統: CentOS7.4

Asterisk:     Asterisk 16.9.0

jssip庫:   採用了Doubango  simpl5.     github的地址:https://gitee.com/msip/sipml5.git 大家可以自行去git clone.  這個程式碼好久都沒有人維護了,最新的一個commit 是2016年的。

瀏覽器:chrome 版本 84.0.4147.105      FireFox: 80.0 (64 位)

安裝部署:

1. CentOS7.4的作業系統的安裝,略過。提醒一下,最好把Development Tools都裝上。免得以後麻煩。

2. asterisk的安裝,按照官方的指南進行安裝就可以了。但是有幾個特性一定要安裝的。

    res_srtp   rtp加密

    res_http_websocket http支援web_socket

    res_pjsip_transport_websocket pjsip通道支援

    codec_opus   opus codec支援

3.  asterisk 安裝完成後,啟動asterisk,我們檢查安裝結果

  如果看到下面的顯示,web socket 模組已經載入上了。

ecs-1d79-0001*CLI> module show like websocket
Module                         Description                              Use Count  Status      Support Level
res_http_websocket.so          HTTP WebSocket Support                   16         Running          extended
res_pjsip_transport_websocket.so PJSIP WebSocket Transport Support        0          Not Running          core

 如果看到下面的程式碼,說明 srtp已經沒有問題了。

ecs-1d79-0001*CLI> module show like srtp
Module                         Description                              Use Count  Status      Support Level
res_srtp.so                    Secure RTP (SRTP)                        0          Running              core
1 modules loaded

 檢查 opus編碼的支援,opus 它適用於網際網路上的互動式語音和音樂傳輸,但也適用於儲存和流媒體應用。

     41 text  t140         t140             (Passthrough T.140 Realtime Text)
      29 audio opus         opus             (Opus Codec)
      30 image jpeg         jpeg             (JPEG image)

4.  生成簽名的認證檔案

 如果webrtc跑在insecure模式不需要,如果跑在TLS模式,這個認證檔案是必須的。生成認證的過程如下

  1.  建立一個資料夾 mkdir  /etc/asterisk/keys
  2.  asterisk的原始碼目錄下面,asterisk-16.9.0/contrib  執行指令碼   : contrib/scripts/ast_tls_cert -C pbx.example.com -O "My Organization" -b 2048 -d /etc/asterisk/keys
  3. 下面的生成過程,我直接拷貝的官方內容,很簡單一路向下,就能生成了。
$ sudo mkdir /etc/asterisk/keys
$ sudo contrib/scripts/ast_tls_cert -C pbx.example.com -O "My Organization" -b 2048 -d /etc/asterisk/keys
 
No config file specified, creating '/etc/asterisk/keys/tmp.cfg'
You can use this config file to create additional certs without
re-entering the information for the fields in the certificate
Creating CA key /etc/asterisk/keys/keys/ca.key
Generating RSA private key, 4096 bit long modulus
............................................................................++
.....................++
e is 65537 (0x010001)
Enter pass phrase for /etc/asterisk/keys/ca.key:********
Verifying - Enter pass phrase for /etc/asterisk/keys/ca.key:********
Creating CA certificate /etc/asterisk/keys/ca.crt
Enter pass phrase for /etc/asterisk/keys/ca.key:********
Creating certificate /etc/asterisk/keys/asterisk.key
Generating RSA private key, 1024 bit long modulus
........++++++
............++++++
e is 65537 (0x010001)
Creating signing request /etc/asterisk/keys/asterisk.csr
Creating certificate /etc/asterisk/keys/asterisk.crt
Signature ok
subject=CN = pbx.example.com, O = My Organization
Getting CA Private Key
Enter pass phrase for /etc/asterisk/keys/ca.key:********
Combining key and crt into /etc/asterisk/keys/asterisk.pem
 
 
$ ls -l /etc/asterisk/keys
total 32
-rw------- 1 root root 1204 Mar  4  2019 asterisk.crt
-rw------- 1 root root  574 Mar  4  2019 asterisk.csr
-rw------- 1 root root  887 Mar  4  2019 asterisk.key
-rw------- 1 root root 2091 Mar  4  2019 asterisk.pem
-rw------- 1 root root  149 Mar  4  2019 ca.cfg
-rw------- 1 root root 1736 Mar  4  2019 ca.crt
-rw------- 1 root root 3311 Mar  4  2019 ca.key
-rw------- 1 root root  123 Mar  4  2019 tmp.cfg

生成asterisk.key 和 asterisk.crt會用來配置 http server

5.  前序的各種工作已經完成,如果走到這兒沒有問題,那麼就距離成功不遠了。

6. 配置/etc/asterisk/http.conf

   建議把以前的http.conf做個備份,新建立一個空的http.conf,然後把下面的程式碼貼進去。各個欄位的意思如果不明白的去谷歌或百度,這個http server 支援了inscure 和  tls兩種模式了。配置完成後,重新reload res_http_websocket模組。

[general]

enabled=yes

bindaddr=0.0.0.0

bindport=8088

tlsenable=yes

tlsbindaddr=0.0.0.0:8089

tlscertfile=/etc/asterisk/keys/asterisk.crt

tlsprivatekey=/etc/asterisk/keys/asterisk.key

7. 配置分機  /etc/asterisk/sip.conf 仍然建議讀者把sip.conf備份,新建一個sip.conf 把下面的指令碼拷貝到空白的sip.conf中。需要修改的地方我用紅色粗體標識出來了。修改完成之後,Reload就可以了。

[general]
udpbindaddr=0.0.0.0:8052
realm=xxx.xxx.xxx.xxx
transport=udp,ws,wss

localnet=xxx.xxx.xxx.xxx/24
externip=xxx.xxx.xxx.xxx
nat=force_rport,comedia


[6001]
type=friend
secret=xxxxxx
host=dynamic
username=6001
insecure=invite,port
context=from-internal
disallow=all
allow=alaw
allow=ulaw
allow=opus
encryption=yes
avpf=yes
force_avp=yes
icesupport=yes
transport=wss,ws
rtcp_mux=yes
dtlsenable=yes
directmedia=no
dtlsverify=fingerprint
dtlscertfile=/etc/asterisk/keys/asterisk.pem
dtlscafile=/etc/asterisk/keys/ca.crt
dtlssetup=actpass


[6002]
type=friend
secret=xxxxxxx
host=dynamic
username=6002
insecure=invite,port
context=from-internal
disallow=all
allow=alaw
allow=ulaw
allow=opus
encryption=yes
avpf=yes
force_avp=yes
icesupport=yes
transport=ws
rtcp_mux=yes
dtlsenable=yes
directmedia=no
dtlsverify=fingerprint
dtlscertfile=/etc/asterisk/keys/asterisk.pem
dtlscafile=/etc/asterisk/keys/ca.crt
dtlssetup=actpass

8. 需要檢測我們http_server是否OK,看到下面的會先,說明成功了。

ecs-1d79-0001*CLI> http show status 
HTTP Server Status:
Prefix: 
Server: Asterisk/16.9.0
Server Enabled and Bound to 0.0.0.0:8088

HTTPS Server Enabled and Bound to 0.0.0.0:8089

Enabled URI's:
/httpstatus => Asterisk HTTP General Status
/phoneprov/... => Asterisk HTTP Phone Provisioning Tool
/ari/... => Asterisk RESTful API
/ws => Asterisk HTTP WebSocket

Enabled Redirects:

9. 驗證https支援,沒有問題說明成功了。

 

 10.  配置sipml5的客戶端

       git 之後有一個call.html檔案,直接通過chrome或firefox啟動這個檔案就可以了。按照下面的圖進行配置就可以了。後面一張是專家模式。

       

 

     

 

          點選登入就可以了。

          10. 測試外呼,然後看是否有聲音,外呼平臺,我讓平臺給我放了一個hello-world,這樣就結束了。

             

 

    11. 小結

      在配置中過程中,走了不少彎路,也遇到不少問題。我在這兒推薦幾個文件,基本上包括我遇到的問題,當然你也可以直接掠過我這個文件,直接查閱官方。

       官方文件為王:

https://wiki.asterisk.org/wiki/display/AST/WebRTC+tutorial+using+SIPML5#WebRTCtutorialusingSIPML5-BrowsersandWSS

https://wiki.asterisk.org/wiki/display/AST/Configuring+Asterisk+for+WebRTC+Clients

https://www.asterisk.org/rtcp-mux-webrtc/   這個文件給了我不少幫助,當初沒有配置rtcp-mux的支援。

 

   12. webrtc chrome api除錯,非常棒的。

         chrome://webrtc-internals/

 

  13. 結束了。。。

           

       

 

     

相關文章