webrtc筆記(1): 基於coturn項目的stun/turn服務器搭建


webrtc是google推出的基於瀏覽器的實時語音-視頻通訊架構。其典型的應用場景為:瀏覽器之間端到端(p2p)實時視頻對話,但由於網絡環境的復雜性(比如:路由器/交換機/防火牆等),瀏覽器與瀏覽器很多時候無法建立p2p連接,只能通過公網上的中繼服務器(也就是所謂的turn服務器)中轉。示例圖如下:

上圖中的Relay server即為turn中繼服務器,而STUN server的作用是通過收集NAT背后peer端(即:躲在路由器或交換機后的電腦)對外暴露出來的ip和端口,找到一條可穿透路由器的鏈路,俗稱“打洞”。stun/turn服務器通常要部署在公網上,能被所有peer端訪問到,coturn開源項目同時實現了stun和turn服務的功能,是webrtc應用的必備首選。

下面介紹coturn的搭建過程:

一、弄一台有公網ip的雲主機

對於新手,推薦使用國內DaoCloud的"免費膠囊主機",可免費耍2小時,即不花錢,又搞了運行環境(就是干活時,手腳要麻利點),等基本概念熟悉了,再到阿里雲或騰迅雲上買一台可長期使用的主雲機。

創建成功后,在主機詳情里,可以看到公網及內網ip,包括ssh登錄方法

 

二、安裝coturn的依賴組件

daocloud提供的免費膠囊主機是ubuntu環境,上面啥都沒有,必須先安裝以下組件:

sudo su root #先切換到root
apt-get  install  build-essential #(可選),如果后面的./configure失敗時,可先安裝gcc
apt-get install openssl libssl-dev make

wget https://github.com/libevent/libevent/releases/download/release-2.1.10-stable/libevent-2.1.10-stable.tar.gz
tar -zxvf libevent-2.1.10-stable.tar.gz
cd libevent-2.1.10-stable
./configure
make & make install
apt-get install sqlite libsqlite3-dev
cd ~/

注:coturn的用戶信息等,默認是持久化保存在sqlite中,如果想保存到mysql中,上面的sqlite安裝選項,需要改成mysql相關的依賴項。

1 apt-get install mysql-server -y #可選(安裝mysql)
2 apt-get install mysql-client -y
3 apt-get -y install libmysqlcppconn-dev libmysqlclient-dev libmysql++-dev 

 

三、下載coturn源碼並編譯

wget https://github.com/coturn/coturn/archive/4.5.1.1.tar.gz
tar -zxvf 4.5.1.1.tar.gz
cd coturn-4.5.1.1
./configure
make & make install

tips: daoclound的免費主機下載github源碼的速度並不快,如果本機網速夠快,可以事先在本機下載好,然后用類似

scp ~/Downloads/4.5.1.1.tar.gz ubuntu@52.81.17.142:/home/ubuntu

直接上傳,速度要快很多。

注意:一定要在./configure前,把sqlite或mysq依賴項安裝好,否則./configure時無法識別出sqlite或mysql,最后make成功的版本,會顯示xxx is not supported。sqlite\mysql正常的版本,啟用時會有類似下面的顯示: 

如果對sqlite里的表結構感興趣,可以把turndb down到本機,用工具打開:

 

四、創建用戶並配置coturn

turnadmin -a -u yjmyzz -p yjmyzz.cnblogs.com -r cnblogs

上面的命令,將創建用戶yjmyzz,密碼為yjmyzz.cnblogs.com,同時指定realm為cnblogs,大家根據實際情況修改 

cp /usr/local/etc/turnserver.conf.default /usr/local/etc/turnserver.conf

上面的命令,將配置模式文件復制一份到/usr/local/etc/下

vim /usr/local/etc/turnserver.conf

修改下面幾個關鍵項:

listening-port=3478 #監聽端口
listening-device=eth0 #監聽的網卡
external-ip=52.81.17.142 #公網ip
user=yjmyzz:yjmyzz.cnblogs.com #用戶名:密碼
realm=cnblogs #一般與turnadmin創建用戶時指定的realm一致

注:如果機器上有多塊網卡,注意listening-ip與listening-device要匹配,參考下圖:

 

五、啟用coturn並驗證

turnserver -o -a -f -v -r cnblogs

最后的-r cnblogs意為指定realm,要與創建用戶時指定的realm一致。可用lsof -i:3478校驗下是否啟動成功,如果看到類似下面的輸出,說明3478監聽正常。

webrtc-samples官網還提供了一個檢測ice穿透的在線工具:https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

參考下圖,把stun和turn地址設置好,然后點擊最下面的“Gather candidates”(收集候選鏈路)

如果看到最后的reply那一行,address里的ip與turn服務器的公網ip相同,說明中繼成功。

 

參考文章:

https://www.kancloud.cn/vim26/v1/578933


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM