一種基于sip和ice的音視頻通信方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種音視頻通信,尤其涉及一種基于SIP和ICE的音視頻通信方法。
【背景技術(shù)】
[0002] 實(shí)時(shí)網(wǎng)絡(luò)音視頻通信由最早的VoIP(VoiceoverIP)發(fā)展而來,VoIP對(duì)語音數(shù)據(jù) 進(jìn)行壓縮、解壓處理,然后用IP及其它協(xié)議對(duì)數(shù)據(jù)進(jìn)行打包和拆包,從而實(shí)現(xiàn)利用IP網(wǎng)絡(luò) 傳輸語音數(shù)據(jù),實(shí)時(shí)網(wǎng)絡(luò)音視頻通信能否廣泛被應(yīng)用決定著社交網(wǎng)絡(luò)發(fā)展能否邁向新的臺(tái) 階,決定著人們的交際方式能否有新的突破,用P2P來進(jìn)行即時(shí)音視頻傳輸是一種有效方 式,但隨著互聯(lián)網(wǎng)的快速發(fā)展,IPv4地址的枯竭,NAT(NetworkAddressTranslation即網(wǎng) 絡(luò)地址轉(zhuǎn)換)設(shè)備和技術(shù)應(yīng)運(yùn)而生,從實(shí)現(xiàn)的技術(shù)角度,NAT可以分成如下7類:FullCone NAT(全維 NAT)'RestrictedConeNAT(限制性維 NAT)、PortRestrictedConeNAT(端口 限制性錐NAT)、SymmetricNAT(對(duì)稱NAT)、UDP網(wǎng)絡(luò)阻塞、位于對(duì)稱UDP防火墻后和處于 公網(wǎng)上,一般只對(duì) FullConeNAT(全維 NAT)、RestrictedConeNAT(限制性維 NAT)、Port RestrictedConeNAT(端口限制性維NAT)和SymmetricNAT(對(duì)稱NAT)進(jìn)行研究,其中, FullConeNAT(全維 NAT)、RestrictedConeNAT(限制性維 NAT)和 PortRestricted ConeNAT(端口限制性錐NAT)均屬于ConeNAT(錐形NAT)這一大類,NAT的使用能夠有 效緩解互聯(lián)網(wǎng)快速發(fā)展導(dǎo)致IPv4地址不足的問題,并且提高了內(nèi)部網(wǎng)絡(luò)的安全性,但卻嚴(yán) 重影響了音視頻的P2P(對(duì)等網(wǎng)絡(luò))實(shí)現(xiàn),因?yàn)镹AT設(shè)備的存在只允許內(nèi)部主機(jī)主動(dòng)發(fā)送數(shù) 據(jù)包到外部網(wǎng)絡(luò),對(duì)之前內(nèi)部主機(jī)并沒有訪問過的外部設(shè)備,其意圖主動(dòng)訪問內(nèi)部主機(jī)的 數(shù)據(jù)包會(huì)被NAT設(shè)備直接丟棄,因此使得目前被廣泛關(guān)注的P2P技術(shù),特別是音視頻的P2P 發(fā)展受到了很大的制約,位于不同NAT或防火墻之后的客戶端進(jìn)行音視頻P2P存在困難,特 別是SymmetricNAT存在時(shí),使得音視頻的P2P更難以實(shí)現(xiàn),使得P2P成功率不高。
[0003] ICE (Interactive Connectivity Establishment,交互式連接建立)是一種靈活 可靠的方案,綜合利用已有的STUN和TURN等協(xié)議并對(duì)其進(jìn)行適當(dāng)?shù)臄U(kuò)展實(shí)現(xiàn)NAT穿越的, 可以適用于各種網(wǎng)絡(luò)拓?fù)湎碌腘AT穿越,對(duì)部署了 Symmetric NAT的網(wǎng)絡(luò),使用TURN進(jìn)行 中轉(zhuǎn),現(xiàn)有技術(shù)中公開了申請(qǐng)?zhí)枮?01210160837. 3的中國專利"一種VoIP中基于ICE的 快速私網(wǎng)穿越方法",該方法首先進(jìn)行NAT類型檢測(cè),檢測(cè)結(jié)果為對(duì)稱型NAT環(huán)境或非對(duì)稱 型NAT環(huán)境;對(duì)于對(duì)稱型NAT環(huán)境,所述方法只針對(duì)主機(jī)候選地址和中繼候選地址的連通 性進(jìn)行檢查;對(duì)于非對(duì)稱型NAT環(huán)境,所述方法只針對(duì)主機(jī)候選地址和服務(wù)器反身候選地 址(即外網(wǎng)地址)的連通性進(jìn)行檢查,上述這種方法是在傳統(tǒng)的ICE協(xié)議上進(jìn)行了改進(jìn):即 在原RFC5425的基礎(chǔ)上,結(jié)合其應(yīng)用場(chǎng)景(即注重語音高效性的VoIP系統(tǒng)),對(duì)ICE進(jìn)行 了改進(jìn),在地址收集前增加了 NAT類型檢測(cè),這一步驟的增加,使得:非對(duì)稱NAT環(huán)境下,不 用進(jìn)行TURN地址的產(chǎn)生與?;?,減少開銷,而連通性檢查則保證了同一私網(wǎng)環(huán)境下的語音 高效傳輸;對(duì)稱NAT環(huán)境下,不用進(jìn)行STUN返回地址在NAT上的?;?,與該地址的連通性檢 查,減少了開銷與媒體連接建立成功時(shí)延,實(shí)現(xiàn)快速私網(wǎng)穿越,但這種優(yōu)化后的ICE穿越方 式不能在Symmetric NAT中實(shí)現(xiàn)P2P,未能在很大程度提高P2P成功率,且在檢測(cè)列表上的 優(yōu)化程度較小,對(duì)減少ICE的談判時(shí)間有限,ICE的談判時(shí)間指的是從ICE檢測(cè)列表形成到 通道形成需要的時(shí)間,因此研究一種實(shí)用性更好、適用性更強(qiáng)的NAT穿越方式來實(shí)現(xiàn)即時(shí) 網(wǎng)絡(luò)音視頻通信P2P顯得非常有意義。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明要解決的技術(shù)問題,在于提供一種基于SIP和ICE的音視頻通信方法,提高 P2P成功率,減少ICE談判時(shí)間,從而提高音視頻通信效率。
[0005] 本發(fā)明是這樣實(shí)現(xiàn)的:一種基于SIP和ICE的音視頻通信方法,所述方法需提供端 口分配模塊,所述端口分配模塊用于為客戶端分配規(guī)律的內(nèi)網(wǎng)端口,所述方法包括如下步 驟: 步驟10、通話開始,客戶端向服務(wù)器發(fā)起端口分配請(qǐng)求,得到服務(wù)器中端口分配模塊分 配的八個(gè)內(nèi)網(wǎng)端口號(hào),所述八個(gè)內(nèi)網(wǎng)端口號(hào)包括4個(gè)主機(jī)候選地址端口號(hào)和4個(gè)內(nèi)網(wǎng)留洞 端口號(hào); 步驟20、啟動(dòng)ICE,并探測(cè)本方NAT類型并收集本方候選地址信息; 步驟30、通信雙方將各自獲取到的NAT類型和候選地址信息進(jìn)行交換,得到對(duì)方的NAT 類型,將對(duì)方的NAT類型和本方的NAT類型合并成一個(gè)NAT組合類型,同時(shí),判斷對(duì)方NAT 類型是否為SymmetricNAT或ConeNAT,若是,則計(jì)算對(duì)方預(yù)測(cè)端口,所述ConeNAT包括 FullconeNAT、PortRestrictedConeNAT和RestrictedConeNAT,否則,直接進(jìn)入步驟 40 ; 步驟40、根據(jù)NAT組合類型選擇相應(yīng)的候選地址信息進(jìn)行配對(duì),生成檢測(cè)列表; 步驟50、根據(jù)檢測(cè)列表進(jìn)行連通性測(cè)試,建立通道。
[0006] 進(jìn)一步的,所述步驟10具體包括: 步驟11、通話開始,客戶端與服務(wù)器建立TCP長連接,向服務(wù)器中的端口分配模塊請(qǐng)求 分配客戶端所處內(nèi)網(wǎng)的端口資源; 步驟12、端口分配模塊收到請(qǐng)求后,從資源池中查詢客戶端所處內(nèi)網(wǎng)中未使用的端口 資源號(hào),并選擇未使用的端口資源號(hào)中最小的端口資源號(hào)分配給客戶端,所述端口資源號(hào) 為0~2015之間的整數(shù),每個(gè)端口資源號(hào)對(duì)應(yīng)32個(gè)端口號(hào),即端口資源號(hào)num包含的端口范 圍關(guān)
[0007] 步驟13、客戶端從服務(wù)器的響應(yīng)中取出端口資源號(hào)num。,并由該端口資源號(hào)num。 計(jì)算出相應(yīng)的八個(gè)內(nèi)網(wǎng)端口號(hào)P〇rtl~port8,計(jì)算方式如下:由端口資源號(hào)num。,得到對(duì)應(yīng) 的32個(gè)端口號(hào)的范圍
搭該32個(gè)端口號(hào)按從大 到小的順序分成8個(gè)組al~a8,每組包括4個(gè)連續(xù)的端口號(hào),其中前4個(gè)組al~a4依次分配 給音頻RTP、音頻RTCP、視頻RTP和視頻RTCP,后4個(gè)組a5~a8作為內(nèi)網(wǎng)留洞端口,依次分 配給音頻RTP、音頻RTCP、視頻RTP和視頻RTCP,選取8個(gè)組al~a8中每組的最大端口組成 八個(gè)內(nèi)網(wǎng)端口 portl~port8,在選取的端口被其他程序占用時(shí),則從該組中其余3個(gè)端口中 選擇一個(gè)進(jìn)行替代。
[0008] 進(jìn)一步的,所述步驟20中獲取本方NAT類型的具體步驟包括: 步驟21、進(jìn)行測(cè)試1,若測(cè)試1有響應(yīng),則進(jìn)入步驟22,否則,判為UDP網(wǎng)絡(luò)阻塞,進(jìn)入步 驟30 ; 步驟22、判斷客戶端收到的返回消息中該客戶端的外網(wǎng)IP和端口與該客戶端的主機(jī) IP和端口是否一致,若是,則進(jìn)入步驟23,否則進(jìn)入步驟24 ; 步驟23、進(jìn)行測(cè)試2,若測(cè)試2有響應(yīng),則判定為位于對(duì)稱UDP防火墻后,進(jìn)入步驟30, 否則,判為處于公網(wǎng)上,進(jìn)入步驟30; 步驟24、進(jìn)行測(cè)試2,若測(cè)試2有響應(yīng),則判定為Full cone NAT,進(jìn)入步驟30,否則,進(jìn) 入步驟25 ; 步驟25、進(jìn)行測(cè)試3,判斷客戶端收到的返回消息中該客戶端的外網(wǎng)IP和端口與步驟 22中測(cè)試1響應(yīng)后得到的該客戶端的外網(wǎng)IP和端口是否一致,若是,則進(jìn)入步驟26,否則, 判為Symmetric NAT,進(jìn)入步驟30; 步驟26、進(jìn)行測(cè)試4,若測(cè)試4有響應(yīng),則判為RestrictedConeNAT,進(jìn)入步驟30,否 貝丨J,判為 PortRestrictedConeNAT,進(jìn)入步驟 30; 上述測(cè)試1、測(cè)試2、測(cè)試3和測(cè)試4按NAT類型探測(cè)的先后順序進(jìn)行定義的。
[0009] 進(jìn)一步的,所述測(cè)試1為:客戶端向Stun服務(wù)器的第一 IP和第一端口發(fā)送請(qǐng)求, 要求stun服務(wù)器收到請(qǐng)求后,用第一 IP和第一端口進(jìn)行響應(yīng); 所述測(cè)試2為:客戶端向stun服務(wù)器的第一 IP和第一端口發(fā)送請(qǐng)求,要求stun服務(wù) 器收到請(qǐng)求后,用第二IP和第二端口進(jìn)行響應(yīng); 所述測(cè)試3為:客戶端向stun服務(wù)器的第二IP和第二端口發(fā)送請(qǐng)求,要求stun服務(wù) 器收到請(qǐng)求后,用第二IP和第二端口進(jìn)行響應(yīng); 所述測(cè)試4為:客戶端向stun服務(wù)器的第一 IP和第一端口發(fā)送請(qǐng)求,要求stun服務(wù) 器收到請(qǐng)求后,用第一 IP和第二端口進(jìn)行響應(yīng)。
[0010] 進(jìn)一步的,所述步驟30中通信雙方將各自獲取到的NAT類型和候選地址信息進(jìn)行 交換的具體方式為:客戶端將本方NAT類型與本方候選地址信息封裝進(jìn)SIP的消息體SDP 中進(jìn)行交換,所述候選地址信息包括主機(jī)候選地址信息、服務(wù)器中繼候選地址信息和服務(wù) 器反身候選地址信息。
[0011] 進(jìn)一步的,所述步驟30中計(jì)算對(duì)方預(yù)測(cè)端口的具體步驟包括: A1、設(shè)p〇rt9~p〇rtl2為獲取到的對(duì)方服務(wù)器反身候選地址信息中的外網(wǎng)端口, portl3~portl6為對(duì)方留洞端口在Symmetric NAT下映射的端口,判斷對(duì)方是否為 Symmetric NAT,若是,則進(jìn)入步驟A2 ;否則進(jìn)入步驟A3 ; A2、判斷對(duì)方外網(wǎng)端口 port9~portl2分別與對(duì)方內(nèi)網(wǎng)分配的portl~port4端 口是否對(duì)應(yīng)一致,若是,則得到對(duì)方預(yù)測(cè)端口為{p-16, p-20, p-24, p-28},其中,
并設(shè)置標(biāo)志位,進(jìn)入步驟40,否則,判斷對(duì)方外網(wǎng)端 口 port9~portl2是否成一公差為h的等差數(shù)列,若是,則得到對(duì)方預(yù)測(cè)端口為{portl2+h, portl2+2h,portl2+3h,portl2+4h},并設(shè)置標(biāo)志位,進(jìn)入步驟40,否則,隨機(jī)給定4個(gè)1024 到65535之間的整數(shù)作為對(duì)方預(yù)測(cè)端口,進(jìn)入步驟40; A