亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種VoIP中基于TCP傳輸語音的方法及系統(tǒng)的制作方法_3

文檔序號:9923850閱讀:來源:國知局
此同一個智能手機(jī)在發(fā)送數(shù)據(jù)時為本發(fā)明中的SIP終端,而在接收數(shù)據(jù)時,則為本發(fā)明中的對端SIP終端。首先,UE(SIP軟終端)通過撥號輸入對端的IP和端口,發(fā)起通話請求。
[0056]請參照圖2,在步驟SI中,中間件單元對該數(shù)據(jù)進(jìn)行自識別邊界的編碼時,包括步驟:
[0057]Al、查詢該數(shù)據(jù)中0x00字節(jié)出現(xiàn)的位置,以字節(jié)0x00為標(biāo)識,把該數(shù)據(jù)分為若干個以0x00結(jié)尾的數(shù)據(jù)塊,然后分別把每個該數(shù)據(jù)塊作為一個輸入數(shù)據(jù);如果該數(shù)據(jù)中沒有0x00字節(jié),則把整個該數(shù)據(jù)作為一個輸入數(shù)據(jù);在本實(shí)施例中,原待發(fā)數(shù)據(jù)中包含3個字節(jié)0x00,將其分成了四個數(shù)據(jù)塊,對應(yīng)4個輸入數(shù)據(jù);
[0058]A2、使用一致開銷字節(jié)填充算法,對該輸入數(shù)據(jù)進(jìn)行編碼,把所有該輸入數(shù)據(jù)的編碼的結(jié)果進(jìn)行拼接,獲取最終的編碼數(shù)據(jù);在本實(shí)施例中,該編碼數(shù)據(jù)是將4個輸入數(shù)據(jù)對應(yīng)的編碼后結(jié)果拼接而成;
[0059]A3、在該編碼數(shù)據(jù)的首尾分別加上0x00字節(jié),作為數(shù)據(jù)邊界標(biāo)志,實(shí)現(xiàn)識別邊界的功能。
[0060]在步驟S2中,該中間件單元對從該TCP接收到的數(shù)據(jù)進(jìn)行自識別邊界的解碼時,包括步驟:
[0061]B1、尋找首尾都是0x00的該編碼數(shù)據(jù),并去除首尾的0x00字節(jié),
[0062]B2、使用一致開銷字節(jié)填充算法,對該編碼數(shù)據(jù)進(jìn)行解碼,然后根據(jù)數(shù)據(jù)頭部的類型信息判斷該編碼數(shù)據(jù)的類型;
[0063]B3、如果是信令數(shù)據(jù),則把該信令數(shù)據(jù)傳遞給信令處理模塊進(jìn)行處理,如果是語音數(shù)據(jù),則把該語音數(shù)據(jù)傳遞給語音媒體處理模塊進(jìn)行處理。上述信令處理模塊、語音媒體處理模塊屬于SIP終端。
[0064]本發(fā)明還對TCP的數(shù)據(jù)傳輸進(jìn)行了優(yōu)化,改進(jìn)了TCP對數(shù)據(jù)傳遞的過程,即當(dāng)順序隊(duì)列中沒有數(shù)據(jù),而亂序隊(duì)列中有數(shù)據(jù),則先把亂序隊(duì)列中的數(shù)據(jù)傳遞給SIP終端,同時利用中間件確定亂序數(shù)據(jù)的完整性,當(dāng)數(shù)據(jù)報(bào)完整到達(dá)之后,對數(shù)據(jù)進(jìn)行解碼,傳遞給SIP終端對應(yīng)的處理模塊,具體來說,將編碼后的該數(shù)據(jù)通過TCP傳輸?shù)皆搶Χ薙IP終端時,包括步驟:判斷該TCP的協(xié)議棧的順序隊(duì)列以及亂序隊(duì)列中有無數(shù)據(jù);如果該順序隊(duì)列中有數(shù)據(jù),則讀取該順序隊(duì)列中的數(shù)據(jù),并保存到中間件單元里對應(yīng)的中間件緩沖區(qū)中;如果該順序隊(duì)列中無數(shù)據(jù),且該亂序隊(duì)列中有數(shù)據(jù),則讀取該亂序隊(duì)列中連續(xù)的一段數(shù)據(jù),根據(jù)其偏移量,保存到對應(yīng)的中間件緩沖區(qū)中;如果該順序隊(duì)列以及亂序隊(duì)列中均無數(shù)據(jù),則說明對端SIP終端沒有傳輸數(shù)據(jù),保持等待。具體來說,在讀取該順序隊(duì)列中的數(shù)據(jù)后,TCP的協(xié)議棧把該順序隊(duì)列中的數(shù)據(jù)先添加一個5字節(jié)的頭部信息,然后拷貝到中間件緩沖區(qū);同樣在讀取該亂序隊(duì)列中連續(xù)的一段數(shù)據(jù)后,TCP的協(xié)議棧把該連續(xù)的一段數(shù)據(jù)先添加一個該5字節(jié)的頭部信息,然后拷貝到中間層接收數(shù)據(jù)緩沖區(qū);該5字節(jié)的頭部信息中的第I個字節(jié)代表此次讀取到的數(shù)據(jù)是有序的還是亂序的,后4個字節(jié)代表讀取到的數(shù)據(jù)在原始數(shù)據(jù)流中的偏移量。
[0065]在中間件單元對從該TCP接收到的數(shù)據(jù)進(jìn)行自識別邊界的解碼之前,首先檢測該中間件緩沖區(qū)中的數(shù)據(jù)是否存在以0x00開頭和結(jié)尾的連續(xù)的數(shù)據(jù)段的時候;若存在,則對該連續(xù)的數(shù)據(jù)段進(jìn)行自識別邊界的解碼,把解碼后的數(shù)據(jù)傳遞給SIP終端對應(yīng)的數(shù)據(jù)處理模塊,即將信令數(shù)據(jù)傳遞給信令處理模塊進(jìn)行處理,將語音數(shù)據(jù)傳遞給語音媒體處理模塊進(jìn)行處理。
[0066]在本發(fā)明中,待發(fā)送的數(shù)據(jù)首先經(jīng)過中間件單元編碼形成編碼數(shù)據(jù),并且在編碼數(shù)據(jù)的首尾添加0x00字節(jié)作為邊界識別標(biāo)志,然后發(fā)送到對端SIP終端。在傳輸過程中,數(shù)據(jù)有可能被路由器等設(shè)備拆分為多個數(shù)據(jù)段發(fā)送,會有丟包的情況發(fā)送,但在數(shù)據(jù)接收的時候,可以根據(jù)邊界識別標(biāo)志,尋找完整的編碼數(shù)據(jù),解碼之后傳遞給對端SIP終端。
[0067]如圖3所示,本發(fā)明提供一種VoIP中基于TCP傳輸語音的系統(tǒng),包括:SIP終端10,用于接收數(shù)據(jù)或向?qū)Χ薙IP終端發(fā)送數(shù)據(jù);中間件單元20,包括編碼模塊30與解碼模塊40,該編碼模塊30用于對該數(shù)據(jù)進(jìn)行自識別邊界的編碼,該解碼模塊40用于對從該TCP接收到的數(shù)據(jù)進(jìn)行自識別邊界的解碼;TCP單元50,用于將編碼后的該數(shù)據(jù)傳輸?shù)皆搶Χ薙IP終端,或接收對端SIP終端編碼后的數(shù)據(jù)。其中,SIP終端或?qū)Χ薙IP終端是當(dāng)前兩個正在進(jìn)行通話的SIP終端,在本發(fā)明中,將發(fā)送數(shù)據(jù)的一方定義為SIP終端,而接收數(shù)據(jù)的一方則定義為對端SIP終端。
[0068]上述SIP終端10負(fù)責(zé)信令的處理以及語音數(shù)據(jù)的獲取和封裝,中間件單元20負(fù)責(zé)把SIP終端提交過來的數(shù)據(jù)編碼和解碼,提供數(shù)據(jù)報(bào)傳輸服務(wù),調(diào)用TCP單元50進(jìn)行數(shù)據(jù)傳輸。該SIP終端10包括SIP UA模塊11(SIP信令代理模塊)、媒體處理模塊12和音頻編解碼模塊13;其中SIP UA模塊用于完成所有SIP信令的交互過程;媒體處理模塊12,用以捕獲音頻設(shè)備的音頻流,然后調(diào)用音頻編解碼模塊13進(jìn)行編碼,最終打包成實(shí)時傳輸協(xié)議RTP包發(fā)送給對端通信方;音頻編解碼模塊13,用以對所述音頻流的編解碼。
[0069]在本實(shí)施例中,該編碼模塊30包括:輸入數(shù)據(jù)子模塊31,用于查詢該數(shù)據(jù)中0x00字節(jié)出現(xiàn)的位置,以字節(jié)OxOO為標(biāo)識,把該數(shù)據(jù)分為若干個以O(shè)xOO結(jié)尾的數(shù)據(jù)塊,然后分別把每個該數(shù)據(jù)塊作為一個輸入數(shù)據(jù);如果該數(shù)據(jù)中沒有0x00字節(jié),則把整個該數(shù)據(jù)作為一個輸入數(shù)據(jù);數(shù)據(jù)編碼子模塊32,用于使用一致開銷字節(jié)填充算法,對該輸入數(shù)據(jù)進(jìn)行編碼,把所有該輸入數(shù)據(jù)的編碼的結(jié)果進(jìn)行拼接,獲取最終的編碼數(shù)據(jù);邊界標(biāo)識子模塊33,用于在該編碼數(shù)據(jù)的首尾分別加上0x00字節(jié),作為數(shù)據(jù)邊界標(biāo)志,實(shí)現(xiàn)識別邊界的功能。
[0070]該解碼模塊40包括:數(shù)據(jù)查詢子模塊41,用于尋找首尾都是0x00的該編碼數(shù)據(jù),并去除首尾的0x00字節(jié);數(shù)據(jù)解碼子模塊42,使用一致開銷字節(jié)填充算法,對該編碼數(shù)據(jù)進(jìn)行解碼,然后根據(jù)數(shù)據(jù)頭部的類型信息判斷該編碼數(shù)據(jù)的類型;如果是信令數(shù)據(jù),則把該信令數(shù)據(jù)傳遞給信令處理模塊進(jìn)行處理,如果是語音數(shù)據(jù),則把該語音數(shù)據(jù)傳遞給語音媒體處理模塊進(jìn)行處理。雖然圖中未顯示,但是該信令處理模塊、語音媒體處理模塊屬于SIP終端10。
[0071]此外,中間件單元20可以采用middleware_sendmsg接口作為發(fā)送數(shù)據(jù)的接口,用于接收該SIP終端發(fā)出的信令或語音數(shù)據(jù);該中間件單元還可以采用middleware_recvmsg接口作為接收數(shù)據(jù)的接口,用于獲取該SIP終端發(fā)出的信令或語音數(shù)據(jù)。
[0072]在本實(shí)施例中,該TCP單元50包括:判斷模塊51,用于判斷該TCP的協(xié)議棧的順序隊(duì)列以及亂序隊(duì)列中有無數(shù)據(jù);如果該順序隊(duì)列中有數(shù)據(jù),則利用該中間件單元對順序隊(duì)列中的數(shù)據(jù)進(jìn)行接收;如果該順序隊(duì)列中無數(shù)據(jù),且該亂序隊(duì)列中有數(shù)據(jù),則利用該中間件單元接收亂序隊(duì)列中一段連續(xù)的數(shù)據(jù);如果該順序隊(duì)列以及亂序隊(duì)列中均無數(shù)據(jù),則該中間件單元等待對端SIP終端發(fā)送數(shù)據(jù);字節(jié)添加模塊52,用于把該順序隊(duì)列中的數(shù)據(jù),先添加一個5字節(jié)的頭部信息,然后拷貝到中間件單元里對應(yīng)的中間件緩沖區(qū);還用于把該亂序隊(duì)列中一段連續(xù)的數(shù)據(jù),先添加一個該5字節(jié)的頭部信息,然后拷貝到對應(yīng)的中間件緩沖區(qū),其中該5字節(jié)的頭部信息中的第I個字節(jié)代表此次讀取到的數(shù)據(jù)是有序的還是亂序的,后4個字節(jié)代表讀取到的數(shù)據(jù)在原始數(shù)據(jù)流中的偏移量。
[0073]本發(fā)明提供的VoIP中基于TCP傳輸語音的方法及系統(tǒng),使用TCP來傳輸語音數(shù)據(jù),并且減少TCP的重傳機(jī)制對實(shí)時語音數(shù)據(jù)傳輸?shù)挠绊?,改善TCP傳輸語音的效果。發(fā)送數(shù)據(jù)的時候,利用中間件
當(dāng)前第3頁1 2 3 4 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1