WebRTC 如何實現網路通訊
WebRTC 的起源
Google 在 2010 年收購了一家名為 Global IP Solutions (GIPS) 的公司。這家公司的技術核心是即時語音和視訊通訊,包括了先進的語音編碼器(如 Opus)、回音消除、降噪等功能。
收購 GIPS 後,Google 將這些專有技術開源,並將其與自己正在開發的瀏覽器技術整合。在 2011 年,Google 正式將這套技術命名為 WebRTC,並向 IETF(網際網路工程任務組)提交標準化草案。
開源與標準化
Google 提出 WebRTC 的初衷,是為了讓網頁瀏覽器能夠直接進行即時語訊和視訊通訊,而不需要安裝任何外掛(如過去的 Flash 或 Java applet)。
為了實現這個目標,Google 積極與多個組織合作,包括:
- IETF (Internet Engineering Task Force):負責制定網路通訊協議的標準。
- W3C (World Wide Web Consortium):負責制定網頁相關技術的標準。
在這些組織的共同努力下,WebRTC 逐漸成為一個開放的、標準化的技術,並獲得了主流瀏覽器(如 Chrome、Firefox、Safari、Edge)的支援,最終成為了網路即時通訊的基礎技術之一。
WebRTC 的技術
WebRTC(Web Real-Time Communication)是如何實現網路電話語音串流的?簡單來說,它就像一個內建在瀏覽器裡的通訊工具箱,能讓電腦或手機之間直接進行語音、視訊和資料傳輸,而不需要經過複雜的伺服器中轉。
以下是 WebRTC 實現語音串流的幾個核心步驟和技術:
1. 取得與處理本地媒體(Get Media)
首先,WebRTC 需要取得你設備上的音訊。這一步驟透過瀏覽器提供的 API 實現,你可能會看到一個彈跳視窗詢問你是否允許網站存取你的麥克風。
- getUserMedia() API:這是 WebRTC 的起點。它會向作業系統請求存取你的麥克風,一旦你允許,你的聲音訊號就會被捕捉下來。
- 音訊處理:原始的音訊訊號非常龐大,WebRTC 會對其進行數位化、編碼和壓縮。這個過程會使用語音編碼器(Audio Codec),例如 Opus,它是一種高效能、低延遲的編碼器,非常適合即時通訊。
2. 建立連線(Peer-to-Peer Connection)
WebRTC 的核心優勢在於它能建立點對點(P2P)連線,讓兩台設備可以直接通話,而非將資料先上傳到伺服器再傳給對方。這樣可以大幅降低延遲。
- SDP(Session Description Protocol):為了讓兩台設備知道如何互相通話,它們需要交換彼此的通話設定。SDP 就是用來描述這些設定的,例如:
- 支援的語音編碼器:雙方都支援 Opus 編碼嗎?
- IP 位址與埠號:我的「網路地址」是什麼?
- ICE(Interactive Connectivity Establishment):由於網路環境複雜,設備可能在防火牆、路由器或 NAT 之後,直接連線會很困難。ICE 就是解決這個問題的技術框架。它會嘗試多種連線方式:
- STUN 伺服器:幫助設備找出自己對外的公網 IP。
- TURN 伺服器:如果 P2P 連線真的無法建立(例如網路限制非常嚴格),TURN 伺服器會充當中繼者,將所有的資料流量中轉,確保通話可以進行,但這會犧牲一些延遲優勢。
3. 即時串流(Real-Time Streaming)
一旦 P2P 連線建立,語音數據就會開始即時傳輸。WebRTC 使用了兩種核心協議來實現這一步:
- RTP(Real-time Transport Protocol):這個協議負責將壓縮後的語音資料打包成一個個的資料封包,並加上時間戳和序號,以確保接收端能正確地將封包重新組裝成連貫的聲音。
- UDP(User Datagram Protocol):與 TCP 不同,UDP 是一種「不可靠」的傳輸協議。這聽起來很糟,但對即時通訊來說是優點。UDP 不保證每個封包都會送達,也不會花時間重新發送遺失的封包。這使得它非常快速,能最大限度地降低延遲,即使偶爾丟失一個語音封包,對整體語音品質的影響也相對較小。
4. 播放語音(Render Audio)
接收端收到 RTP 封包後,WebRTC 會進行以下處理:
- 緩衝區與抖動處理(Jitter Buffer):網路環境不穩定會導致封包抵達的時間不一(稱為「抖動」)。接收端會將封包暫存在一個緩衝區裡,重新排列它們的順序,並以穩定的速度將它們送給解碼器。
- 解碼與播放:封包內的壓縮語音數據被解碼器還原,最終轉換為類比訊號,透過你的耳機或喇叭播放出來。
總結一下,WebRTC 實現網路電話語音串流的流程如下:
- 捕捉你的麥克風聲音,並用高效的編碼器 Opus 進行壓縮。
- 透過 SDP 與對方交換通話設定,並利用 ICE(STUN/TURN)技術找到最佳的連線路徑,建立 P2P 連線。
- 利用 RTP 和 UDP 將語音數據快速且低延遲地傳輸給對方。
- 在接收端用 緩衝區 處理延遲問題,並將語音解碼後播放出來。
這個複雜的過程都是在你的瀏覽器內部自動完成的,這就是為何能輕鬆地在許多網頁上進行語音通話,而不需要安裝任何額外的軟體或外掛。