

摘要:P2P是指網絡上雙方直接連接通信,不經過中間服務器中轉的技術。P2P有很多應用,最常見的bittorrent和eDonkey下載就是使用P2P技術。雙人語音視頻通信的場景特別適合采用P2P技術,無需服務器,延遲快,實時性強,安全性也可得到保障。WebRTC是一個開放源碼的語音視頻通信框架,其提供P2P語音視頻通信的基本功能,通過此框架可以方便快速的搭建自己的視頻軟件。本文介紹了基于WebRTC實現的視頻通信技術。
關鍵詞:WebRTC;P2P;語音視頻通信;設計
1.WebRTC技術與主要對象
1.1.MediaDevices設備對象
用來操作音視頻設備的對象,提供高度的抽象化,主要方法為getUserMedia,可以返回一個MediaDevices設備對象,并通過它獲取MediaStream流對象,這是音視頻流的抽象接口。通過給getUserMedia傳入不同參數可以控制打開的具體設備,例如手機前后攝像頭,PC內置mic;外接mic/usb mic;外放喇叭或耳機等等。對于找不到的設備有對應異常對象處理。
1.2.RTCPeerConnection連接對象
RTCPeerConnection連接對象代表一個與遠端設備WebRCT連接的一個對象。WebRTC的底層連接可以基于多個協議,例如UDP或WebSocket,但是這里API已經完全封裝,上層不關心具體連接底層協議。
連接的雙方之間通過交換SDP(Session Description Protocol)來交換獲取對方媒體信息,以確定一個雙方都能接受的多媒體協議。RTCPeerConnection的createOffer與createAnswer方法會返回一個RTCSessionDescriptionInit字典,其中包含了PeerConnection的SDP信息。連接建立后便可以通過此連接傳輸音視頻數據。
RTCPeerConnection連接的建立過程如圖2所示:
1.3.RTCDataChannel數據頻道
RTCDataChannel接口代表了用于點對點數據傳輸的雙向信息通道,它是RTCConnection連接對象的更上層封裝,每一個RTCDataChannel都和一個RTCPeerConnection相結合,但一個連接可以同時含有多個DataChannel,理論上限制最多能有65535個DataChannel,實際情況則取決于瀏覽器和具體設備)。
多個RTCDataChannel實際上復用了一個RTCConnection連接,類似于多路復用的概念,就像馬路劃分多個車道一樣,這樣在一個連接里存在多個通道,語音視頻文本等數據可以分開傳輸,互相影響比較少。
2.應用程序
基于WebRTC構造應用比較簡單,首先需要一個公網服務器提供NAT網絡地址轉換服務。服務端NAT穿透程序有RFC標準方案:ICE,ICE同時支持基于UDP的STUN協議和基于TCP
的TURN協議,并且能根據不同網絡環境而選擇最高效的連接方式。WebRTC中RTCConnection對象完全實現了ICE方案,所以一旦RTCConnection對象建立成功,則表示ICE連接成功。
3.總結
本文介紹了P2P技術和基于此的WebRTC框架,重點分析了WebRTC中的3個重要對象。依靠這些技術,可以方便的建立音視頻通信的軟件,我們提供一個示例構建基于WebRTC的應用程序。
作者簡介:閆新惠(1974-),女(漢),山東省泰安市人,講師,碩士,主要研究方向為計算機網絡技術。