聊聊多人語音通話的基本原理
0.引言
本文主要是介紹一些基本工作原理,包括移動(dòng)Mesh網(wǎng)絡(luò),VOIP技術(shù)等。
1.移動(dòng)Mesh網(wǎng)絡(luò)
1.1 常見的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)
常見的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)有點(diǎn)對(duì)點(diǎn)拓?fù)浣Y(jié)構(gòu)、星型拓?fù)浣Y(jié)構(gòu)、樹型拓?fù)浣Y(jié)構(gòu)、環(huán)型拓?fù)浣Y(jié)構(gòu)和總線型拓?fù)浣Y(jié)構(gòu)等。常見網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如下圖所示:

點(diǎn)對(duì)點(diǎn)拓?fù)浣Y(jié)構(gòu)(perr-to-peer,簡稱 P2P),是一種無路由節(jié)點(diǎn)、網(wǎng)絡(luò)成員直接交換信息的網(wǎng)絡(luò)結(jié)構(gòu)。這種結(jié)構(gòu)在通信上較為簡單,但應(yīng)用開發(fā)較為復(fù)雜,需要打洞,在有些場(chǎng)景可以應(yīng)用到。
在星型拓?fù)浣Y(jié)構(gòu)的網(wǎng)絡(luò)中,子節(jié)點(diǎn)都直接與中心節(jié)點(diǎn)相連,其具有結(jié)構(gòu)簡單,延遲低等優(yōu)點(diǎn),但是可靠性較低、部署成本較高。它目前常見于企業(yè)、學(xué)校和家庭網(wǎng)絡(luò)中,運(yùn)營商網(wǎng)絡(luò)由路由器接入后,各個(gè)設(shè)備通過網(wǎng)絡(luò)線纜或者無線網(wǎng)絡(luò)連接路由器或交換機(jī)接入互聯(lián)網(wǎng)??偩€型拓?fù)浣Y(jié)構(gòu)則是一種所有節(jié)點(diǎn)掛在同一條總線上的拓?fù)浣Y(jié)構(gòu),其沒有網(wǎng)絡(luò)中心,這種拓?fù)浣Y(jié)構(gòu)的優(yōu)點(diǎn)是可擴(kuò)展性好,但是維護(hù)困難,分支結(jié)構(gòu)定位故障較難。
2.Mesh網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)
Mesh 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),是一種在網(wǎng)絡(luò)節(jié)點(diǎn)上使用動(dòng)態(tài)路由的方式進(jìn)行數(shù)據(jù)傳輸?shù)耐負(fù)浣Y(jié)構(gòu)。這種網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)可以保證每個(gè)節(jié)點(diǎn)與其他節(jié)點(diǎn)之間連接的可靠性,當(dāng)網(wǎng)絡(luò)中有某個(gè)節(jié)點(diǎn)故障時(shí),這種結(jié)構(gòu)允許其他節(jié)點(diǎn)使用“跳躍”(hip)的方式形成一條新的、可用的路由進(jìn)行數(shù)據(jù)傳輸。
Mesh 網(wǎng)絡(luò)具有以下幾個(gè)特點(diǎn):
- 自組織:網(wǎng)絡(luò)節(jié)點(diǎn)可以即時(shí)加入 Mesh 網(wǎng)絡(luò),網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)會(huì)隨之改變,使得該節(jié)點(diǎn)可以與網(wǎng)絡(luò)中的任意一個(gè)節(jié)點(diǎn)連接。
- 自愈性:如果 Mesh 網(wǎng)絡(luò)中的網(wǎng)絡(luò)成員因?yàn)殛P(guān)機(jī)、故障等原因不能工作,網(wǎng)絡(luò)會(huì)自動(dòng)調(diào)整網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),使得原來被破壞的路由被有效的路由替換。
- 多跳:Mesh 網(wǎng)絡(luò)中的所有節(jié)點(diǎn)都具備轉(zhuǎn)發(fā)數(shù)據(jù)包的能力,網(wǎng)絡(luò)中的節(jié)點(diǎn)可以通過多跳與物理上不能直接通信的節(jié)點(diǎn)進(jìn)行數(shù)據(jù)傳輸。
相對(duì)于傳統(tǒng) Wi-Fi 的 AP(Access Point)工作模式使用的星型網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),Mesh 網(wǎng)絡(luò)使用的 Mesh 拓?fù)浣Y(jié)構(gòu)在網(wǎng)絡(luò)成員節(jié)點(diǎn)傳輸距離以及移動(dòng)性上都有了很大的改進(jìn)。
3.IEEE 802.11s 標(biāo)準(zhǔn)
IEEE 802.11s 是 IEEE(電機(jī)電子工程學(xué)會(huì))對(duì) 802.11 無線網(wǎng)絡(luò)協(xié)議中無線網(wǎng)狀網(wǎng)絡(luò)的補(bǔ)充標(biāo)準(zhǔn),它定義了無線設(shè)備如何交互以組成一個(gè) Mesh 無線局域網(wǎng),這個(gè)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)是可以隨時(shí)變化的。不同于傳統(tǒng)Ad-Hoc 網(wǎng)絡(luò)中使用傳輸層的路由協(xié)議實(shí)現(xiàn)多跳功能,802.11s 協(xié)議擴(kuò)展了 MAC(媒體訪問控制)層標(biāo)準(zhǔn),定義了一個(gè)使用無線感知進(jìn)行自配置多跳拓?fù)浣Y(jié)構(gòu)的架構(gòu)和協(xié)議,其支持包括廣播、組播和單播方式的數(shù)據(jù)傳輸。
802.11s 使用的路徑選擇協(xié)議為混合無線 Mesh 協(xié)議(Hybrid Wireless Mesh Protocol,簡稱 HWMP),即同時(shí)使用了先驗(yàn)式路由協(xié)議和反應(yīng)式路由協(xié)議,上述路徑選擇協(xié)議中包含了四種路徑選擇消息包,分別為根節(jié)點(diǎn)通告(Root Announcement,簡稱 RANN)、路徑請(qǐng)求(Path Request,簡稱 PREQ)、路徑回復(fù)(Path Reply,簡稱 PREP)和路徑錯(cuò)誤(Path Error,簡稱 PERR)。混合無線 Mesh 協(xié)議如下圖:

先驗(yàn)式路由協(xié)議對(duì)于網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn),會(huì)建立一個(gè)樹形的路由拓?fù)浣Y(jié)構(gòu),根節(jié)點(diǎn)可以通過兩種方式建立路由表,一種是使用根節(jié)點(diǎn)宣告包,另一種是使用路徑請(qǐng)求包。
使用根節(jié)點(diǎn)宣告包方式其路徑請(qǐng)求是由根節(jié)點(diǎn)以外的其他節(jié)點(diǎn)以單播的方式發(fā)送給根節(jié)點(diǎn),而根節(jié)點(diǎn)必須使用路徑回復(fù)包進(jìn)行回復(fù)。
使用路徑請(qǐng)求包的方式時(shí),不會(huì)使用路徑回復(fù)包,而且路徑請(qǐng)求包是由根節(jié)點(diǎn)發(fā)送的
反應(yīng)式路由協(xié)議,又稱為按需路由協(xié)議,是基于 RM-AODV(Radio-Metric Ad hoc On-Demand Distance Vector)的協(xié)議,使用路由請(qǐng)求和路由回復(fù)機(jī)制在兩個(gè)節(jié)點(diǎn)之間建立路由,節(jié)點(diǎn)間使用路由請(qǐng)求包和路由回復(fù)包進(jìn)行信息數(shù)據(jù)交互,并在路由回復(fù)包中采用序列號(hào)以保證路由的時(shí)效性
目前 IEEE 802.11s 標(biāo)準(zhǔn)已經(jīng)被 Linux 內(nèi)核支持,在 Linux 上可以方便地使用支持802.11s 標(biāo)準(zhǔn)的無線網(wǎng)卡組建基于 802.11s 的無線 Mesh 網(wǎng)絡(luò)。
4.Vo IP 技術(shù)
Vo IP 是一種語音通話技術(shù),通過將語音信號(hào)數(shù)字化處理、編碼壓縮、網(wǎng)絡(luò)傳輸、解碼、還原成音頻信號(hào)實(shí)現(xiàn)語音通信,其中關(guān)鍵技術(shù)為語音編碼技術(shù)和實(shí)時(shí)網(wǎng)絡(luò)傳輸技術(shù)。其流程如下圖所示:

5.音頻編碼技術(shù)
語音編碼是一種將語音數(shù)字信號(hào)壓縮的技術(shù)。由于數(shù)字化的語音信號(hào)在存儲(chǔ)、傳輸上的可靠性、抗干擾能力和保密性都遠(yuǎn)優(yōu)于模擬的語音信號(hào),因此,目前幾乎在所有的系統(tǒng)中都采用數(shù)字化的方式進(jìn)行語音的存儲(chǔ)和傳輸。未經(jīng)過壓縮的語音數(shù)據(jù)因?yàn)轶w積過大,受限于存儲(chǔ)設(shè)備的容量和傳輸網(wǎng)絡(luò)的帶寬,不適合直接進(jìn)行存儲(chǔ)和網(wǎng)絡(luò)傳輸,音頻編碼技術(shù)應(yīng)運(yùn)而生。音頻編碼技術(shù)可以大大的壓縮音頻數(shù)據(jù)的體積,減少了存儲(chǔ)消耗的硬件資源與傳輸占用的帶寬和時(shí)間,增加了在有限的資源下可以存儲(chǔ)和傳輸?shù)恼Z音數(shù)據(jù)量。
根據(jù)是否保留原始音頻數(shù)據(jù)的全部信息,音頻編碼技術(shù)通常被分為有損音頻編碼技術(shù)和無損音頻編碼技術(shù),有損音頻編碼技術(shù)在犧牲部分原始音頻數(shù)據(jù)的情況下可以達(dá)到更高的音頻數(shù)據(jù)壓縮率,而無損音頻編碼技術(shù)則可以還原出完整的原始音頻數(shù)據(jù)。
在 Vo IP 技術(shù)中,由于網(wǎng)絡(luò)帶寬的限制,往往會(huì)使用有損音頻編碼技術(shù),且這些音頻編碼算法可以達(dá)到的壓縮率通常比較高。此外,由于實(shí)時(shí)網(wǎng)絡(luò)傳輸?shù)牟豢煽啃?,使用的音頻編碼算法需要具備從殘損數(shù)據(jù)中獲得接近完整音頻數(shù)據(jù)的功能。常用的音頻編碼算法有 G.711、G729、AAC、Speex、Opus 等,這些音頻編碼算法壓縮后的音質(zhì)與比特率的關(guān)系對(duì)比如下圖所示,延遲與比特率的關(guān)系如下圖所示:

音頻編碼算法壓縮后的音質(zhì)與比特率的關(guān)系

部分音頻編碼算法延遲與比特率的關(guān)系
如果需要實(shí)現(xiàn)多方語音通話功能,對(duì)延遲的要求高,由于系統(tǒng)中各成員之間的距離可能較遠(yuǎn),整個(gè)網(wǎng)絡(luò)的帶寬較小,在保證音頻質(zhì)量的情況下,音頻數(shù)據(jù)碼率需要盡可能的低,選擇使用 Opus 音頻編碼算法實(shí)現(xiàn)語音數(shù)據(jù)編解碼。
Opus 是一種有損音頻編碼算法,包含了 SILK 和 CELT 兩種聲音編碼技術(shù),其開發(fā)目的是希望用單一格式包含聲音和語音,取代 Speex 和 Vorbis 音頻編碼算法,且適用于網(wǎng)絡(luò)上低延遲的實(shí)時(shí)音頻傳輸。Opus 可以調(diào)節(jié)編碼比特率,它在較低比特率時(shí)使用線性預(yù)測(cè)編碼,在高比特率時(shí)使用變換編碼,非常適合用于低延遲語音通話的編碼。此外 Opus 也可以透過降低編碼比特率,達(dá)成更低的算法延遲,最低可以到 5 ms。
6.RTP 實(shí)時(shí)傳輸協(xié)議
RTP 協(xié)議是一種基于 IP 網(wǎng)絡(luò)傳輸音視頻數(shù)據(jù)的網(wǎng)絡(luò)傳輸協(xié)議,它被廣泛應(yīng)用于通信和流媒體應(yīng)用,例如語音會(huì)話、視頻會(huì)議、網(wǎng)絡(luò)電視服務(wù)等。它在網(wǎng)絡(luò)模型中是一個(gè)應(yīng)用層協(xié)議,在傳輸層之上,通常 RTP 協(xié)議是基于 UDP 協(xié)議的,在一些特殊應(yīng)用場(chǎng)景之下也可以基于 TCP 協(xié)議。

表中幾個(gè)重要的字段的解釋如下:
- SN(Sequence Number,序列號(hào)):為了解決網(wǎng)絡(luò)傳輸時(shí)時(shí)延抖動(dòng)的問題,RTP協(xié)議使用一個(gè)長度為 16 位的序列號(hào)來確定數(shù)據(jù)報(bào)的順序,每個(gè)發(fā)出的數(shù)據(jù)報(bào)會(huì)被標(biāo)記上連續(xù)的序列號(hào),用于接收端對(duì)亂序到達(dá)的 RTP 數(shù)據(jù)報(bào)進(jìn)行排序,同時(shí)可以用于統(tǒng)計(jì) RTP 傳輸?shù)膩G包情況。
- PT(Payload Type,負(fù)載類型):RTP 協(xié)議使用 PT 字段來標(biāo)識(shí) RTP 報(bào)文所傳輸?shù)牧髅襟w數(shù)據(jù)的類型,常見的數(shù)據(jù)類型有 AAC、Speex、Opus、H.264 等。
- Timestamp(時(shí)間戳):由于時(shí)延抖動(dòng)的存在,目標(biāo)主機(jī)接收到數(shù)據(jù)報(bào)的順序和時(shí)間間隔與發(fā)送時(shí)的存在偏差,如果每次都立即播放接收到的數(shù)據(jù),則播放效果會(huì)與我們預(yù)期的大不相同。實(shí)際中,接收端通常會(huì)設(shè)置一個(gè)播放時(shí)延,時(shí)間戳在這個(gè)時(shí)延區(qū)間內(nèi)的包會(huì)被存入緩沖區(qū)等待播放,即打上發(fā)送時(shí)間戳。
- SSRC(Synchronization Source,同步源):RTP 協(xié)議在設(shè)計(jì)之初就考慮到了組播的方式,在進(jìn)行組播時(shí),IP 地址和端口無法用于確定唯一的一個(gè)網(wǎng)絡(luò)地址,因此 RTP 協(xié)議中使用一個(gè)長度為 32 位的字段標(biāo)識(shí) RTP 包來源,它是一個(gè)隨機(jī)數(shù),且能保證其在一個(gè) RTP 會(huì)話中的唯一性。RTP 協(xié)議不僅解決了使用 IP 協(xié)議進(jìn)行實(shí)時(shí)流媒體數(shù)據(jù)傳輸時(shí)存在的問題,同時(shí)也為應(yīng)用層的流媒體應(yīng)用程序提供了規(guī)范的傳輸協(xié)議,使得開發(fā)者不需要重復(fù)實(shí)現(xiàn)類似的私有協(xié)議。此外,RTP 協(xié)議也是一個(gè)開源的協(xié)議,開發(fā)者可以根據(jù)各自的應(yīng)用需求對(duì)其進(jìn)行修改。