webrtc系列3——对于stun和turn的理解
文章目錄
- 對于stun和turn的理解
- 1. SDP協議
- 2. 地址轉換NAT
- 3. candidate
- stun
- TURN
- ICE
對于stun和turn的理解
在介紹turn和stun之前我們先來了解幾個概念
1. SDP協議
我們來思考,如果兩個不同的手機,一個手機支持VP8、VP9的媒體格式,另一個支持VP8、h264的協議,他們如果通信的話會選擇什么格式的媒體來進行交流?
[外鏈圖片轉存失敗(img-uB81o8AW-1567468988824)(SDP協商.png)]
這時候我們就需要用到這個SDP協議了,在WebRTC中,參與視頻通訊的雙方必須先交換SDP信息,這樣雙方才能知根知底,而交換SDP的過程,也稱為"媒體協商"。
記住一點,SDP不叫媒體協商,交換SDP的過程才叫媒體協商,SDP全名叫會話描述協議
2. 地址轉換NAT
經常有人問我=
好吧,其實我也不是很清楚
歷史告訴我們,當我們無法觸及到某個真理的時候,我們只能通過類比或者工具模擬的方式來解釋我們所看到的一切。
說起nat,其實就是不知道對方實際地址,然后通過扔一個探測包,然后有回應就拿到對方地址的方式
我們說的nat不通,是因為咱們這個國內網絡情況比較復雜,究其歷史原因,就要說到移動、聯通、電信的歷史了,篇幅太長,暫時擱置。
總而言之,不通就不通嘛,總還有別的辦法
3. candidate
我們先來看下Ice candidate類中的屬性
public final String sdpMid;//描述協議的idpublic final int sdpMLineIndex;//描述協議的行索引public final String sdp;//會話描述協議好了,到這為止,應該已經了解到,這玩意就是個模版
當我們調用setLocalDescription的時候,底層的代碼就會幫我們的收集candidate(候選信息),然后回調到上層,然后我們將其發送到服務器,然后服務器再發送到另一端
一定會好奇這個candidate里有啥是吧,其實就是一些網絡信息的候選地址,一個不通換另一種的那種。
我們稱交換candidate的過程稱為網絡協商
stun
好了,我們的主角登場
STUN(Session Traversal Utilities for NAT,NAT會話穿越應用程序)是一種網絡協議,它允許位于NAT(或多重
NAT)后的客戶端找出自己的公網地址,查出自己位于哪種類型的NAT之后以及NAT為某一個本地端口所綁定的
Internet端端口。這些信息被用來在兩個同時處于NAT路由器之后的主機之間創建UDP通信。該協議由RFC 5389定
義。
其實有好多人問我,在局域網需不需要stun服務器?
我很認真的告訴你,不需要!
這時候,又會有人問了,你的demo為啥不部署stun,局域網內不通呢?
我也很認真的告訴你,請看官方demo,有個直連的類你可以借鑒,直接填寫對方的地址,因為需要知道對方的地址才能進行通信的咧
來張圖
STUN并不是每次都能成功的為需要NAT的通話設備分配IP地址的,P2P在傳輸媒體流時,使用的本
地帶寬,在多人視頻通話的過程中,通話質量的好壞往往需要根據使用者本地的帶寬確定。
這時候,就需要turn來協調,保證通話質量,用服務器來解壓
TURN
TURN的全稱為Traversal Using Relays around NAT,是STUN/RFC5389的一個拓展,主要添加了Relay功能。如果
終端在NAT之后, 那么在特定的情景下,有可能使得終端無法和其對等端(peer)進行直接的通信,這時就需要公網
的服務器作為一個中繼, 對來往的數據進行轉發。這個轉發的協議就被定義為TURN。
再來張圖
在STUN分配公網IP失敗后,可以通過TURN服務器請求公網IP地址作為中繼地址。這種方式的帶寬由服務器端承
擔,在多人視頻聊天的時候,本地帶寬壓力較小,并且,根據Google的說明,TURN協議可以使用在所有的環境中。
ICE
ICE跟STUN和TURN不一樣,ICE不是一種協議,而是一個框架(Framework),它整合了STUN和TURN。
coturn開源項目集成了STUN和TURN的功能
好了這篇文章到此位置,看看代碼消化一下
Android端:https://github.com/ddssingsong/webrtc_android
服務器端:https://github.com/ddssingsong/webrtc_server_node
總結
以上是生活随笔為你收集整理的webrtc系列3——对于stun和turn的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NAT- STUN和TURN简介
- 下一篇: 一种简单的睡眠评分规则