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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

webrtc系列3——对于stun和turn的理解

發布時間:2024/8/1 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 webrtc系列3——对于stun和turn的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 對于stun和turn的理解
      • 1. SDP協議
      • 2. 地址轉換NAT
      • 3. candidate
    • stun
    • TURN
    • ICE

對于stun和turn的理解

在介紹turn和stun之前我們先來了解幾個概念

  • 會話描述協議 SDP(Session Description Protocol )
  • 網絡地址轉換 NAT (Network Address Translation)
  • 網絡協商 candidate
  • 1. SDP協議

    我們來思考,如果兩個不同的手機,一個手機支持VP8、VP9的媒體格式,另一個支持VP8、h264的協議,他們如果通信的話會選擇什么格式的媒體來進行交流?

    [外鏈圖片轉存失敗(img-uB81o8AW-1567468988824)(SDP協商.png)]

    這時候我們就需要用到這個SDP協議了,在WebRTC中,參與視頻通訊的雙方必須先交換SDP信息,這樣雙方才能知根知底,而交換SDP的過程,也稱為"媒體協商"。

    記住一點,SDP不叫媒體協商,交換SDP的過程才叫媒體協商,SDP全名叫會話描述協議

    2. 地址轉換NAT

    經常有人問我=

  • 為什么我配置了stun,進行了p2p穿透,可還是有很多情況下不通?
  • 為什么ios通,android不通?
  • 為什么移動能打通,電信打不通,wifi和4g有的通有的不通
  • 好吧,其實我也不是很清楚

    歷史告訴我們,當我們無法觸及到某個真理的時候,我們只能通過類比或者工具模擬的方式來解釋我們所看到的一切。

    說起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的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

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