一、WebRTC基本架構

圖一 WebRTC總體架構,摘自百度百科
先說說WebRTC大致的實現思路:我們創建的web app,然后在app中調用W3C提供的JS API,JS API 會調用瀏覽器中的C++層API,底層C++模塊是來自Google的開源項目WebRTC,它可以讓瀏覽器和瀏覽器直接傳輸音視頻流。但若想就這樣兩個browser就直接通信仍是不行的,后面一節會講到。
再看上面的圖, WebRTC有三個模塊,Voice Engine(音頻引擎),Video Engine(視頻引擎),Transport。Voice Engine包含iSAC/iLBC Codec(音頻編解碼器,前者是針對寬帶和超寬帶,后者是針對窄帶),NetEQ for voice(處理網絡抖動和語音包丟失),Echo Canceler(回聲消除器),Noise Reduction(噪聲抑制);Video Engine包含VP8 Codec(視頻圖像編解碼器),Video jitter buffer(視頻抖動緩沖器,處理視頻抖動和視頻信息包丟失),Image enhancements(圖像質量增強)。Transport包含SRTP(安全的實時傳輸協議,用以音視頻流傳輸),Multiplexing(多路復用),P2P,STUN+TURN+ICE(用於NAT網絡和防火牆穿越的)。除此之外,安全傳輸可能還會用到DTLS(數據報安全傳輸),用於加密傳輸和密鑰協商。整個WebRTC通信是基於UDP的。
二、W3C提供的WebRTC API
英文API:http://www.w3.org/TR/webrtc/(個人建議看英文版)
中文API:http://www.iwebrtc.com/blog/webrtc1-0/(old版)
三個主要API:
MediaStream:獲取音視頻流
RTCPeerConnection:用以音視頻數據通信
RTCDataChannel:用以任意應用數據通信
學習重點:offer/answer狀態機變化和ICE狀態機變化,並且結合代碼和整個流程圖理解

圖二 offer/answer狀態機變化圖,摘自W3C

圖三 ICE狀態機變化圖,摘自W3C

圖四 完整呼叫連接流程(*重點),摘自W3C
三、WebRTC開源項目
licode:http://chotis2.dit.upm.es/ MIT License
kurento:http://www.kurento.org/ LGPL License
Google也有官方的demo,github上也有比較好的demo(WebRTC-experiment demo比較全)
另外,大家也可以閱讀《web性能權威指南》,里面也有關於WebRTC的講解,講的挺好的。
