WebRtc搭建Turn穿透服務(Peerjs-騰訊雲Centos7.6)


WebRtc搭建Turn穿透服務

webetc視頻通話搭建成功截圖(Turn-Net穿透)。國內太少這部分相關內容了,我也是一點一點摸索過來的。
圖1

 圖2

屏幕共享

注意:請不要使用烏班圖或Debian系統 請使用Centos  我被這兩個系統坑慘了
環境安裝
sudo yum install -y make gcc cc gcc-c++ wget

sudo yum install -y openssl-devel libevent libevent-devel
生成簽名(一直按回車即可)
openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes
Turn安裝,使用github上的coturn構建: https://github.com/coturn/coturn
wget http://turnserver.open-sys.org/downloads/v4.5.1.2/turnserver-4.5.1.2.tar.gz

tar -xvzf turnserver-4.5.1.2.tar.gz

cd turnserver-4.5.1.2 && ./configure

make

sudo make install
不要使用git clone拉取,不然你會發現報C的錯誤

使用wget下載包,最后這是turn安裝成功界面

測試是否安裝成功,若有路徑表示成功

which turnserver

進入配置文件夾

cd /usr/local/etc/

復制出turnserver.conf.default 為 turnserver.conf

cp turnserver.conf.default turnserver.conf

vim編輯配置文件,shift+g跳到最后一行加上以下內容

把后面的注釋去掉

vim turnserver.conf
relay-device=eth0 #(與ifconfig查到的網卡名稱一致)
listening-ip=你的內網 #(ifconfig查看)
relay-ip=你的內網
external-ip=你的外網
user=你的賬號:你的密碼
cli-password=你的密碼 #(這個要加上,不然一會啟動服務會報cli-password啥的)
min-port=49152
max-port=65535
#realm=xxx.com
listening-port=3478
cert=/etc/turn_server_cert.pem
pkey=/etc/turn_server_pkey.pem

然后去你的雲服務器控制台把3478的tcp和udp開放

開放3478防火牆

yum install firewalld
firewall-cmd --zone=public --add-port=3478/udp --permanent firewall-cmd --zone=public --add-port=3478/tcp --permanent firewall-cmd --reload

查看是否開放,返回yes表示開放

firewall-cmd --zone=public --query-port=3478/tcp
firewall-cmd --zone=public --query-port=3478/udp

測試服務

turnserver -a -f -r 公網ip:3478

返回上圖表示成功

ctrl+c暫停服務,使用后台運行

turnserver -a -o -f -r 公網ip:3478

然后啟動服務(跳過此步

turnserver -v -r 你的公網ip:3478 -a -o -c /usr/local/etc/turnserver.conf

如果運行日志沒報錯就應該成功了

查看是否在運行了

ps -ef|grep turnserver

啟動成功

關閉服務

kill -9 服務id

到官網測試下:https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

輸入turn:你的ip:3478 還有賬號、密碼

addserver后點下面的按鈕

注意使用火狐瀏覽器 chrome會報401和701錯誤

看到relay和返回了你的公網ip和顯示Done表示turn服務連接成功

如果下面返回not reachable?,檢查一下安全組上面是否將3478端口打開了

如果你還是配置不成功

可以相互參考:

https://blog.csdn.net/qq_44938451/article/details/122158975

http://events.jianshu.io/p/5543dd3e002b

https://docs.wildfirechat.cn/webrtc/turn_server.html

https://blog.csdn.net/daisysmilee/article/details/120306900

 最后是我們的前端vue代碼

this.peerExa = new Peer(undefined, {
      host: "/",
      port: "3001",
      config: {
        iceServers: [
          {
            urls: "turn:ip:3478",
            username: "賬號",
            credential: "密碼",
          },
        ],
      },
    });

 

參考:

peerjs文檔

https://peerjs.com/

webrtc-turn測試連接

https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

禁用webrtc的https安全檢查

https://blog.csdn.net/yunzhonghefei/article/details/120290541

Turn服務器搭建

https://docs.wildfirechat.cn/webrtc/turn_server.html

https://www.jianshu.com/p/d65e369f44fb

WebRTC原理

1.1什么是WebRTC

WebRTC(Neb Real-Time Communication)是Google於2010以6829萬美元從Global IP Solutions公司購買,並於2011年將其開源,旨在1立一個互聯網瀏覽器問的實時通信的平台,讓NebRTC:技術成為H5標准之一。我們看官網(https://webrtc.org)的介紹

 

上圖的框架對於不同的開發人員關注點不同:

(1)紫色部分是Wb應用開發者API層

(2)藍色實線部分是面向瀏覽器廠商的AP層

(3)藍色虛線部分劉覽器廠商可以自定義實現

1.3 WebRTC發展前景

WebRTC雖然冠以wb”之名,但並不受限於傳統互聯網應用或瀏覽器的終端運行環坑。實際上無論終端運行環坑是瀏覽器、桌面應用、移動設備(Android.或iOS)還是loT設備,只要IP連接可到達且符合NabRTC規范就可以互通。這一點釋放了大呈智能終端(或運行在智能終端上的pp)的實時通信能力,打開了許多對於實時交互性要求較高的應用場錄的想象空間,警如在線教育、視煩會議、視頻社交、遠程協助、遠程操控等等都是其合適的應用領域。

全球領先的技術研究和咨詢公司Technavio.近發布了題為全球網絡實時通訊(WebRTC)市場,2017-2021"的報告。報告顯示,2017-2021年期間,全球網絡實時通信(WebRTC)市場將以34.37%的年均復合增長率增長,增長十分迅速。增長主要來自北美、歐洲及亞太地區。 1.4國內方案廠商

聲網、即構科技、環信、融雲等公司都在某於WebRTC.二次開發自己的音視頻通話方案。

聲網htps:ww.agora.io/cn/

即構科技https:www.Zeqo.imM

1.5 WebRTC通話原理

首先思考的問題:兩個不同網絡環坑的(具備攝像頭麥克風多媒體設備的)劉覽器,要實現點對點的實時音視頻對話,難點在哪里?

1.媒體協商

彼此要了解對方支持的媒體格式

1.A端視頻采用VP8做編碼,然后發送給B端B端怎么去解碼?????

2.BVP9做編碼,發給A,A怎么去解碼?

比如:Peer-A瑞可支特VP8、H264多種編碼格式,而Peer-B瑞支持VP9、H264,要保證二瑞都正確的編解碼,最簡單的辦法就是取它們的交集H264注:有一個專門的協議,稱為Session Description Protocol(SDP),可用於描述上述這類信息,在WebRTC中,參與視頻通訊的雙方必須先交換SDP信息,這樣雙方才知根知底,而交換SDP的過程,也稱為"媒體協商。

2.網絡協商

彼此要了解對方的網絡情況,這樣才有可能找到一條相互通訊的鏈路

先說結論:(1)獲取外網P地址映射:(2)通過信令服務器(signal s8rver)交換"網絡信息"

理想的網絡情況是每個瀏覽器的電腦都是私有公網IP,可以直接進行點對點連接。

實際情況是:我們的電腦和電腦之前或大或小都是在某個局域網中,需要NAT(Network Address Translation,F網絡地址轉換),顯示情況如下圖:

在解決WebRTC使用過程中的上術問的時候,我們需要用到STUN和TURN。

STUN

STUN(Session Traversal Utilities for NAT,NAT會話穿越應用程序)是一種網絡協議,它允許位於NAT(或多重NAT)后的客戶端找出自己的公網地址,查出自己位於哪種類型的NAT之后以及NAT為某一個本地端口所綁定的Internet喘端口。這些信息被用來在兩個同時處於NAT路由器之后的主機之間創建UDP通信。該協議由RFC5389定義。在遇到上述情況的時候,我們可以建立一個STUN服務器,這個服務器做什么用的呢?主要是給無法在公網環境下的視頻通話設備分配公網P用的。這樣兩台電腦就可以在公網P中進行通話。

使用一句話說明STUN做的事情就是:告訴我你的公網IP地址+瑞口是什么。搭社STUN服務器很簡單,媒體流傳輸是按照P2P的方式。那么問題來了,STUN並不是每次都能成功的為需要NAT的通話設備分配P地址的,P2P在傳輸媒體流時,使用的本地帶寬,在多人視頻通話的過程中,通話質量的好壞往往需要將據使用者本地的帶寬確定。那么怎么辦?TURN可以很好的解決這個問題

TURN

TURN的全稱為Traversal Using Relays around NAT,是STUN/RFC5389的一個拓展,主要添加了Relay1功能。如果終諾在NAT之后,那么在特定的情景下有可能使得終瑞無法和其對等端(Pee)進行直接的通信,這時就需要公網的服務器作為一個中繼,對來往的數據進行轉發。這個轉發的協議就被定義為 TURN.

在上圖的其礎上,再架設幾台TURN服務器:

在STUN分配公網IP失敗后,可以通過TURN服務器話求公網IP地址作為中繼地址。這種方式的帶寬由服務器端擔,在多人視頻聊天的時候,本地帶寬壓力較小,並且,根據Google的說明,TURN協議可以使用在所有的環境中。(單向數據200kbps一對一通話)

以上是NebRTC中經常用到的2個協議,STUN和TURN服務器我們使用coturn開源項目來搭建

補充:ICE跟STUN和TURN不一樣,ICE不是一種協議,而是個框架(Framework),它整合了STUN和TURN。coturn開源項目某成了STUN和TURN功能。

打洞不成功 需要經過中繼服務器轉發數據包

但轉發會十分消耗服務器網絡資源

上圖演示的是如果你沒有P2P成功一對一視頻通話情況下總共需要消耗的數據

即單向200kb x 4 =800kb

 

在WebRTC中用來描術網絡信息的術語叫candidate。

媒體協商sdp

網絡協商candidate

3.媒體協商+網絡協商數據的交換通道

從上面1/2點我們知道了2個客戶瑞協商媒體信息和網絡信息,那怎么去交換?是不是需要一個中間商去做交換?所以我們需要一個信令服務器(Sgl server)轉發彼此的媒體信息和網絡信息。

如上圖,我們在基於VebRTC APl開發應用(APP)時,可以將彼此的APP連接到信令服務器(Signal Server,一股搭讓在公網,或者兩喘都可以訪問到的局域網),借助信令服務器,就可以實現上面提到的sDP媒休信息及Candidate網絡信息交換。

信令服務器不只是交互媒體信息sdp和網絡信息candidate,比如:

(1)    房間管理(2)人員進出房間

WebRTC APIs

1.MediaStream一MediaStream用來表示個媒體數據流(通過getUserMedia接口獲取),允許你訪問輸入設備,如麥克風和Web攝像機,該APl允許從其中任意一個獲取媒體流。

2.RTCPeerConnection一RTCPeerConnection對像允許用戶在兩個瀏覽器之間直接通訊,你可以通過網絡將捕獲的音頻和視頻流實時發送到另一個 NebRTC端點。使用這些Api,你可以在本世機器和遠程對等點之問創建連接。它提供了連接到遠程對等點、維護和監視連接以及在不再需要連接時關閉連接的方法。

5.NAT知識補充

具體NAT打洞的知識在本課程不做進一步的講解,這里提供些鏈接給大家做參考:

P2P技術詳解():NAT詳解一詳細原理、P2P簡介https://www.cnblogs.com/mlgib/p/8243646.htm

P2P技術詳解(二):P2P中的NAT穿越(打洞)方案詳解https://www.jianshu.com/p/9bfbcbee0abb

P2P技術詳解(三):P2P技術之STUN、TURN、ICE詳解https:www.jianshu.com/p/258e7d8be2ba

詳解P2P技術中的NAT穿透原理

https://www.jianshu.com/p/f71707892eb2


免責聲明!

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



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