![]()
全球每天有35億分鐘視頻通話通過瀏覽器完成,但90%的開發(fā)者第一次看WebRTC文檔時(shí),會(huì)被SDP、ICE、STUN、TURN四個(gè)縮寫直接勸退。
這不是技術(shù)門檻,是表達(dá)方式的問題。當(dāng)你把WebRTC想象成兩個(gè)陌生人相親,整個(gè)流程突然變得像常識一樣簡單。
第一步:先找個(gè)中間人傳話
瀏覽器不會(huì)直接握手。Rahim(工程師)和Aisha(產(chǎn)品經(jīng)理)同時(shí)連上一個(gè)"會(huì)議協(xié)調(diào)員"——這叫信令服務(wù)器(Signaling Server)。
信令服務(wù)器不干別的,只負(fù)責(zé)遞紙條。
兩人先交換家底:"我有攝像頭、麥克風(fēng),支持這些格式。"這份自我介紹叫SDP(會(huì)話描述協(xié)議)。Rahim把SDP塞進(jìn)WebSocket發(fā)給服務(wù)器,服務(wù)器轉(zhuǎn)給Aisha;Aisha也一樣回一份。雙方確認(rèn)"能聊",但還沒真正連上。
這個(gè)階段像相親前的資料交換——知道對方存在,但沒見過面。
第四步:發(fā)現(xiàn)根本找不到對方
真正的麻煩才開始。Rahim在家用WiFi,Aisha在公司內(nèi)網(wǎng),兩臺電腦都不知道怎么直接找到彼此。NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)和防火墻把內(nèi)網(wǎng)IP藏得嚴(yán)嚴(yán)實(shí)實(shí),就像兩個(gè)人都在密室,互相不知道門牌號。
這時(shí)候需要STUN服務(wù)器出場。
STUN像個(gè)查號臺。Rahim問:"我在互聯(lián)網(wǎng)上看長什么樣?"STUN回:"你公網(wǎng)地址是103.xx.xx.xx:54321。"Aisha也得到自己的公網(wǎng)地址。兩人交換這個(gè)信息,嘗試直接連——這叫ICE(交互式連接建立)候選地址交換。
第六步:實(shí)在連不上,只能走中繼
直接連接有時(shí)成功,有時(shí)失敗。公司防火墻、對稱NAT、端口限制……各種原因會(huì)讓直連泡湯。這時(shí)候啟動(dòng)Plan B:TURN服務(wù)器。
TURN是個(gè)中轉(zhuǎn)站。兩人把視頻流先發(fā)給TURN,TURN再轉(zhuǎn)發(fā)給對方。延遲增加幾十毫秒,成本上升(流量費(fèi)×2),但保證能通。就像相親雙方被隔在兩間屋子,只能通過對講機(jī)說話。
代碼層面,這一切被封裝在RTCPeerConnection里:
const pc = new RTCPeerConnection({
iceServers: [
{ urls: "stun:stun.l.google.com:19302" },
{ urls: "turn:your-turn-server.com", username: "user", credential: "pass" }
]
});
STUN免費(fèi),TURN燒錢。產(chǎn)品決策的關(guān)鍵:你的用戶有多少在企業(yè)內(nèi)網(wǎng)?
第八步:視頻終于亮了
ICE候選交換完成,連接建立,ontrack事件觸發(fā)。Rahim的攝像頭畫面出現(xiàn)在Aisha的video元素里,反之亦然。從打開網(wǎng)頁到畫面出現(xiàn),理想情況下300毫秒內(nèi)完成。
整個(gè)過程的核心就三句話:信令服務(wù)器牽線,STUN查公網(wǎng)地址,TURN保底中繼。其他都是瀏覽器自動(dòng)處理的細(xì)節(jié)。
但大多數(shù)教程不會(huì)告訴你的是:WebRTC的"簡單"是有代價(jià)的。信令服務(wù)器要自己搭,TURN服務(wù)器按流量計(jì)費(fèi),移動(dòng)端耗電像倒水,大規(guī)模會(huì)議還得換SFU(選擇性轉(zhuǎn)發(fā)單元)架構(gòu)。那個(gè)"簡單"的demo,離生產(chǎn)環(huán)境還有十個(gè)坑要填。
當(dāng)你下次聽到有人說"WebRTC很簡單",可以反問:你指的demo,還是月活百萬的會(huì)議產(chǎn)品?
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.