音視頻學習筆記-WebRTC協(xié)商過程

音視頻學習筆記 - WebRTC協(xié)商過程

RTCPeerConnection

它是WebRTC中最關(guān)鍵的一個類, 端到端間的媒體協(xié)商就是基于該類對象實現(xiàn)的.

...
var pcConfig = null;
var pc = new RTCPeerConnection(pcConfig);
...

協(xié)商過程

  • Offer

    在雙方通訊時, 呼叫發(fā)送的SDP消息稱為Offer.

  • Answer

    在雙方通訊時, 被呼叫方發(fā)送的SDP消息稱為Answer.

時序圖

Screen Shot 2020-03-08 at 8.35.33 PM.png
  1. 呼叫方創(chuàng)建Offer類型的SDP消息, 調(diào)用setLocalDescription方法將該Offer保存到本地Local域, 再通過信令將Offer發(fā)送給被呼叫方.
  2. 被呼叫方收到Offer類型的SDP消息后, 調(diào)用setRemoteDescription方法將Offer保存到它的Remote域.
  3. 被呼叫方創(chuàng)建Answer類型的SDP消息, 調(diào)用setLocalDescription方法將Answer類型的SDP消息保存到本地的Local域.
  4. 被呼叫方將Answer消息通過信令發(fā)送給呼叫方.
  5. 呼叫方收到Answer類型的消息后, 調(diào)用setRemoteDescription方法, 將Answer保存到它的Remote域.

當通訊雙方拿到彼此的SDP消息后, 就可以進行媒體協(xié)商了.

代碼實現(xiàn)

  1. 呼叫方創(chuàng)建Offer

       function doCall() {
           console.log('Sending offer to peer');
           pc.createOffer(setLocalAndSendMessage, handleCreateOfferError);
      }  
    
      function setLocalAndSendMessage(sessionDescription) {
          pc.setLocalDescription(sessionDescription);
          sendMessage(sessionDescription);
      }
    
      socket.on('message', function(message) {
          ...
          } else if (message.type === 'answer') {
        
              pc.setRemoteDescription(new RTCSessionDescription(message));
          } else if (...) {
              ...
          }
          ....
      });
    
  1. 被呼叫方收到Offer

     socket.on('message', function(message) {
          ...
          } else if (message.type === 'offer') {
        
              pc.setRemoteDescription(new RTCSessionDescription(message));
              doAnswer();
          } else if (...) {
              ...
          }
          ....
      });
    
    
     function doAnswer() {
         pc.createAnswer().then(
             setLocalAndSendMessage,
             onCreateSessionDescriptionError
         );
     }
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 權(quán)限申請: Info.plist中添加 Camera和Microphone訪問權(quán)限 引入WebRTC庫: 1、通過...
    呂建雄閱讀 8,277評論 4 11
  • 這篇翻譯不完整。請幫忙從英語翻譯這篇文章。 這是一個實驗中的功能 此功能某些瀏覽器尚在開發(fā)中,請參考瀏覽器兼容性表...
    小杰的簡書閱讀 1,355評論 0 0
  • 翻譯?http://www.html5rocks.com/en/tutorials/webrtc/infrastr...
    bktmkd閱讀 6,734評論 1 28
  • 1,WebRTC入門基礎(chǔ) 什么是WebRTC WebRtc(Web Real-Time Communication...
    IOneStar閱讀 2,316評論 2 7
  • 【鬼谷語錄】019天 不用重來才叫快, 能夠積累才叫多? 這些年一路走來, 盲目的追求速度 現(xiàn)在回頭想一下, 本質(zhì)...
    鬼谷老尤閱讀 234評論 0 1

友情鏈接更多精彩內(nèi)容