一種基于ptt公網(wǎng)集群對講系統(tǒng)的數(shù)據(jù)傳輸方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信領(lǐng)域,尤其涉及一種基于ΡΤΤ公網(wǎng)集群對講系統(tǒng)的數(shù)據(jù)傳輸方法。
【背景技術(shù)】
[0002]PTT (Push To Talk)公網(wǎng)集群對講系統(tǒng)業(yè)務(wù)本質(zhì)上是采用中國移動GPRS/EDGE/TD-CDMA通信網(wǎng)絡(luò)作為服務(wù)系統(tǒng)與終端用戶業(yè)務(wù)交互的橋梁,中國電信、移動、聯(lián)通是國內(nèi)三大運營商,其GPRS/EDGE網(wǎng)絡(luò)的穩(wěn)定性、覆蓋率、網(wǎng)絡(luò)速率、自然延伸至3G、4G環(huán)境都已經(jīng)非常成熟。
[0003]基于2.5G、3G及4G網(wǎng)絡(luò)的無線IP技術(shù),是將語音信號轉(zhuǎn)換成數(shù)據(jù)包經(jīng)過網(wǎng)絡(luò)傳輸,最后再將數(shù)據(jù)包轉(zhuǎn)換成語音傳遞出來完成一次通話,也就是以數(shù)字交換的形式實現(xiàn)語音通信。和傳統(tǒng)的移動電話不同的是,公網(wǎng)集群PTT業(yè)務(wù)使用簡單的半雙工通信方式工作。也就是說,PTT在通話的時候,雙方只占用一個頻率,分時借用使用半雙工通信方式工作,一個語音通道要么送話要么收話。在同一時間只能有一人說話,主叫方只要按一個鍵即可向一個人或一組人發(fā)起通話請求,無需撥號和等待對方摘機,話路立即接通,迅速建立起談話群組。由于這個過程是單向的,所以公網(wǎng)集群PTT在同一時間內(nèi)只能有一人說話,其它人只能聽。
[0004]但是,現(xiàn)有的數(shù)據(jù)包格式復(fù)雜,從而使得打包、解包方式繁瑣,影響響應(yīng)速度,同時保密性不佳,不利于實際應(yīng)用。
【發(fā)明內(nèi)容】
[0005]本發(fā)明所要解決的技術(shù)問題在于,提供一種基于PTT公網(wǎng)集群對講系統(tǒng)的數(shù)據(jù)傳輸方法,格式簡單、保密性佳。
[0006]為了解決上述技術(shù)問題,本發(fā)明提供了一種基于PTT公網(wǎng)集群對講系統(tǒng)的數(shù)據(jù)傳輸方法,包括:建立第一終端與第二終端之間的TCP連接;所述第一終端向所述第二終端發(fā)送TCP數(shù)據(jù)包;所述第二終端響應(yīng)所述TCP數(shù)據(jù)包;所述TCP數(shù)據(jù)包的格式為:主長度信息字段、標(biāo)志字段、可變字段及CRC字段,所述主長度信息字段用于記錄通信長度,所述標(biāo)志字段用于標(biāo)識使用命令類型,所述可變字段用于記錄傳輸數(shù)據(jù),所述CRC字段用于校驗傳輸數(shù)據(jù)是否正確。
[0007]所述上述方案的改進(jìn),所述通信長度為主長度信息字段的長度、標(biāo)志字段的長度及可變字段的長度之和。
[0008]所述上述方案的改進(jìn),所述主長度信息字段的長度為4個字節(jié),所述標(biāo)志字段的長度為1個字節(jié),所述CRC字段的長度為4個字節(jié)。
[0009]所述上述方案的改進(jìn),所述第二終端響應(yīng)TCP數(shù)據(jù)包的步驟包括:判斷所述TCP數(shù)據(jù)包的主長度信息字段是否接收完畢;若所述主長度信息字段已接收完畢,則根據(jù)所述主長度信息字段計算所述TCP數(shù)據(jù)包的總長度;根據(jù)所述總長度判斷所述TCP數(shù)據(jù)包的傳輸數(shù)據(jù)是否接收完畢;若所述傳輸數(shù)據(jù)已接收完畢,計算CRC值并判斷所述CRC值與所述TCP數(shù)據(jù)包的CRC字段是否一致;若一致,則響應(yīng)所述TCP數(shù)據(jù)包,若不一致,則丟棄所述TCP數(shù)據(jù)包。
[0010]所述上述方案的改進(jìn),所述的基于PTT公網(wǎng)集群對講系統(tǒng)的數(shù)據(jù)傳輸方法,還包括所述第一終端向所述第二終端發(fā)送UDP數(shù)據(jù)包,所述UDP數(shù)據(jù)包的格式為RTP頭及實際數(shù)據(jù)。
[0011]所述上述方案的改進(jìn),所述UDP數(shù)據(jù)包包括語音數(shù)據(jù)包、FEC數(shù)據(jù)包及心跳包。
[0012]所述上述方案的改進(jìn),所述語音數(shù)據(jù)包的格式為:UDP包頭部標(biāo)示、類型標(biāo)示、序號、時間戳、用戶ID、幀標(biāo)識、碼率及語音數(shù)據(jù)。
[0013]所述上述方案的改進(jìn),所述FEC數(shù)據(jù)包的格式為:UDP包頭部標(biāo)示、類型標(biāo)示、序號、媒體包長度、用戶ID及FEC數(shù)據(jù)。
[0014]所述上述方案的改進(jìn),所述心跳包的格式為:UDP包頭部標(biāo)示、類型標(biāo)示、第一標(biāo)識、第二標(biāo)識及用戶ID。
[0015]實施本發(fā)明,具有如下有益效果:
本發(fā)明采用獨特的TCP數(shù)據(jù)包格式,所述TCP數(shù)據(jù)包的格式為:主長度信息字段、標(biāo)志字段、可變字段及CRC字段,格式簡單,保密性強。
[0016]同時,采用該格式形成獨特的解包方式,提高響應(yīng)速度,可避免數(shù)據(jù)傳輸中的半包、粘包所造成的數(shù)據(jù)接收異常。
[0017]另外,本發(fā)明還采用獨特的UDP數(shù)據(jù)包格式,所述UDP數(shù)據(jù)包包括語音數(shù)據(jù)包、FEC數(shù)據(jù)包及心跳包。其中,語音數(shù)據(jù)包的格式為:UDP包頭部標(biāo)示、類型標(biāo)示、序號、時間戳、用戶ID、幀標(biāo)識、碼率及語音數(shù)據(jù),可實現(xiàn)語音數(shù)據(jù)的有效傳輸;FEC數(shù)據(jù)包的格式為:UDP包頭部標(biāo)示、類型標(biāo)示、序號、媒體包長度、用戶ID及FEC數(shù)據(jù),能有效縮小隨機丟包的丟包率;心跳包的格式為:UDP包頭部標(biāo)示、類型標(biāo)示、第一標(biāo)識、第二標(biāo)識及用戶ID,可讓服務(wù)器維系鏈路,并且用來確認(rèn)客戶端是否意外掉電,死機等。
【附圖說明】
[0018]圖1是本發(fā)明基于PTT公網(wǎng)集群對講系統(tǒng)的數(shù)據(jù)傳輸方法的第一實施例流程圖;圖2是本發(fā)明基于PTT公網(wǎng)集群對講系統(tǒng)的數(shù)據(jù)傳輸方法的第二實施例流程圖。
【具體實施方式】
[0019]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明作進(jìn)一步地詳細(xì)描述。僅此聲明,本發(fā)明在文中出現(xiàn)或即將出現(xiàn)的上、下、左、右、前、后、內(nèi)、外等方位用詞,僅以本發(fā)明的附圖為基準(zhǔn),其并不是對本發(fā)明的具體限定。
[0020]圖1是本發(fā)明基于PTT公網(wǎng)集群對講系統(tǒng)的數(shù)據(jù)傳輸方法的第一實施例流程圖,包括:
S101,建立第一終端與第二終端之間的TCP連接。
[0021]需要說明的是的,所述第一終端及第二終端可以為客戶端也可以為服務(wù)器。若第一終端為客戶端時,則第二終端為服務(wù)器;若第一終端為服務(wù)器,則第二終端為客戶端。
[0022]S102,所述第一終端向所述第二終端發(fā)送TCP數(shù)據(jù)包。
[0023]客戶端可以主動向服務(wù)器發(fā)送TCP數(shù)據(jù)包,服務(wù)器也可以主動向客戶端發(fā)送TCP數(shù)據(jù)包。
[0024]所述TCP數(shù)據(jù)包的格式為:主長度信息字段、標(biāo)志字段、可變字段及CRC字段。
[0025]其中:
所述主長度信息字段的長度為4個字節(jié),用于記錄通信長度,可確保每次通信接收到的數(shù)據(jù)大小一致,避免數(shù)據(jù)傳輸中的半包、粘包所造成的數(shù)據(jù)接收異常;具體地,所述通信長度為主長度信息字段的長度、標(biāo)志字段的長度及可變字段的長度之和。
[0026]所述標(biāo)志字段的長度為1個字節(jié),用于標(biāo)識使用命令類型。
[0027]所述可變字段用于記錄傳輸數(shù)據(jù);可變字段的長度和格式都不固定,可根據(jù)實際情況填充,可使用protobuf (protobuf是結(jié)構(gòu)化信息傳遞的工具)自動生成的數(shù)據(jù)。
[0028]所述CRC字段的長度為4個字節(jié),用于校驗傳輸數(shù)據(jù)是否正確。
[0029]例如,客戶端要向服務(wù)器通訊,若實際要發(fā)送的數(shù)據(jù)為“Hello”,假設(shè)其命令字段為0x21,CRC校驗碼為0x12345。那么本次通訊的通信長度為4 + 1 + 5 = 10 (字節(jié)),其中4為主長度信息字段的長度,1為標(biāo)志字段的長度,5為可變字段“Hello”的長度??傞L度為:通信長度與CRC字段的長度之和,S卩10 + 4 = 14 (字節(jié))。因此,本次發(fā)送的數(shù)據(jù)為:0x00,0x00,0x00,OxOE,0x21,0x48,0x65,0x6C,0x6C,0x6F,0x00,0x01,0x23,0x45。
[0030]S103,所述第二終端響應(yīng)所述TCP數(shù)據(jù)包。
[0031 ] 具體地,所述第二終端響應(yīng)TCP數(shù)據(jù)包的步驟包括:
A1,判斷所述TCP數(shù)據(jù)包的主長度信息字段是否接收完畢,即判斷所接收的主長度信息字段是否大于4字節(jié)。
[0032]A2,若所述主長度信息字段已接收完畢,則根據(jù)所述主長度信息字段計算所述TCP數(shù)據(jù)包的總長度(主長度信息字段中所記錄的通信長度+CRC字段的長度=總長度)。
[0033]A3,根據(jù)所述總長度判斷所述TCP數(shù)據(jù)包的傳輸數(shù)據(jù)是否接收完畢。
[0034]A4,若所述傳輸數(shù)據(jù)已接收完畢,計算CRC值并判斷所述CRC值與所述TCP數(shù)據(jù)包的CRC字段是否一致,若所述傳輸數(shù)據(jù)未接收完畢,則繼續(xù)等待接收。
[0035]A5,若一致,則響應(yīng)所述TCP數(shù)據(jù)包,若不一致,則丟棄所述TCP數(shù)據(jù)包。第二終端根據(jù)標(biāo)示字段進(jìn)行響應(yīng)。
[0036]圖2是本發(fā)明基于PTT公網(wǎng)集群對講系統(tǒng)的數(shù)據(jù)傳輸方法的第二實施例流程圖,包括:
S201,建立第一終端與第二終端之間的TCP連接。
[0037]需要說明的是的,所述第一終端及第二終端可以為客戶端也可以為服務(wù)器。若第一終端為客戶端時,則第二終端為服務(wù)器;若第一終端為服務(wù)器,則第二終端為客戶端。
[0038]S202,所述第一終端向所述第二終端發(fā)送TCP數(shù)據(jù)包。
[0039]客