本發(fā)明涉及網(wǎng)絡(luò)音頻傳輸技術(shù),具體涉及一種語音直播過程中音頻數(shù)據(jù)完整性的保障方法。
背景技術(shù):
現(xiàn)場直播節(jié)目極大地提高了人們獲取信息的便利程度。隨著網(wǎng)絡(luò)基礎(chǔ)設(shè)施的健全和互聯(lián)網(wǎng)產(chǎn)品的日益豐富,網(wǎng)絡(luò)直播也逐漸發(fā)展起來,人們能夠從互聯(lián)網(wǎng)上直接收看體育賽事、重大慶典會(huì)議、商貿(mào)展覽等。
通常的直播過程中,出于對直播實(shí)時(shí)性的考慮,往往會(huì)忽略對于直播的視頻、音頻信息的完整性的保障。然而,在許多文字與語音密集的場景中,比如會(huì)議直播、庭審記錄、新聞采訪、人物訪談等,用戶會(huì)更加的注重信息的完整性,信息的完整性、正確性反而會(huì)比時(shí)效性更加重要。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對上述情況,設(shè)計(jì)并實(shí)現(xiàn)了一種數(shù)據(jù)完整性的保障方法,用于在音頻直播時(shí),保障音頻數(shù)據(jù)在傳輸過程中的數(shù)據(jù)完整性,保證了采集到的音頻信息與最終發(fā)布的音頻信息的一致性。
本發(fā)明提供的語音直播過程中音頻數(shù)據(jù)完整性的保障方法,通過下面技術(shù)手段實(shí)現(xiàn):
(一)客戶端采用設(shè)定的數(shù)據(jù)包格式發(fā)送數(shù)據(jù);其中,發(fā)送數(shù)據(jù)的數(shù)據(jù)包中包含的字段有數(shù)據(jù)包長度、數(shù)據(jù)偏移量、序列號、音頻流開始時(shí)間、音頻流總長度和音頻數(shù)據(jù);
(二)服務(wù)器采用設(shè)定的數(shù)據(jù)包格式返回應(yīng)答報(bào)文;其中,應(yīng)答報(bào)文的數(shù)據(jù)包中包含的字段有數(shù)據(jù)包類型、確認(rèn)序列號和已確認(rèn)音頻流長度;
(三)服務(wù)器在收到客戶端發(fā)送來的數(shù)據(jù)包后,首先解析數(shù)據(jù)包頭部,然后進(jìn)行數(shù)據(jù)包完整性判斷;若數(shù)據(jù)包完整,繼續(xù)判斷數(shù)據(jù)包是否是期望接收的數(shù)據(jù),若是,按照解析得到的數(shù)據(jù)偏移量將音頻數(shù)據(jù)寫入音頻文件,在寫入成功后,設(shè)置應(yīng)答報(bào)文中的確認(rèn)序列號s為解析得到的序列號n加1;若數(shù)據(jù)包不完整或者不是期望接收的數(shù)據(jù),設(shè)置應(yīng)答報(bào)文中的確認(rèn)序列號s為解析得到的序列號n,最后服務(wù)器發(fā)送應(yīng)答報(bào)文給客戶端;客戶端根據(jù)應(yīng)答報(bào)文中的確認(rèn)序列號發(fā)送對應(yīng)的數(shù)據(jù)包給服務(wù)器。
進(jìn)行完整性判斷方法是:比較實(shí)際收到的數(shù)據(jù)包長度是否與解析得到的數(shù)據(jù)包長度字段的值一致,若一致,說明數(shù)據(jù)包完整,若不一致,說明數(shù)據(jù)包不完整。
判斷數(shù)據(jù)包是否是期望接收的數(shù)據(jù)的方法是:比對接收到的數(shù)據(jù)包中數(shù)據(jù)偏移量的值是否與服務(wù)器上的已確認(rèn)音頻流長度的大小相等,如果是,表明該數(shù)據(jù)包是期望接收的數(shù)據(jù),如果不相等,表明該數(shù)據(jù)包不是期望接收的數(shù)據(jù)。
相對于現(xiàn)有技術(shù),本發(fā)明的優(yōu)點(diǎn)與積極效果在于:
(1)在網(wǎng)絡(luò)傳輸過程中使用本發(fā)明方法,在網(wǎng)絡(luò)鏈接出現(xiàn)中斷、網(wǎng)絡(luò)切換、網(wǎng)絡(luò)信號弱、丟包率高等情況下,保證傳輸?shù)臄?shù)據(jù)完整性。
(2)本發(fā)明方法的實(shí)現(xiàn)是在網(wǎng)絡(luò)傳輸?shù)膽?yīng)用層上,可以適應(yīng)各種底層網(wǎng)絡(luò)傳輸協(xié)議,包括寬帶網(wǎng)絡(luò)、無線網(wǎng)絡(luò)、移動(dòng)2G、3G、4G網(wǎng)絡(luò)等。
(3)采用本發(fā)明方法在保證數(shù)據(jù)完整性的同時(shí),兼顧了數(shù)據(jù)傳輸?shù)臅r(shí)效性,已經(jīng)在實(shí)際語音直播過程中得到驗(yàn)證。
附圖說明
圖1是應(yīng)用本發(fā)明的數(shù)據(jù)完整性保障方法的數(shù)據(jù)流圖;
圖2是本發(fā)明的數(shù)據(jù)完整性保障方法的實(shí)現(xiàn)原理圖;
圖3是采用本發(fā)明方法的客戶端數(shù)據(jù)傳輸流程圖;
圖4是采用本發(fā)明方法的服務(wù)器數(shù)據(jù)接收流程圖。
具體實(shí)施方式
下面將結(jié)合附圖和實(shí)施例對本發(fā)明作進(jìn)一步的詳細(xì)說明。
本發(fā)明方法可以應(yīng)用在直播平臺(tái)的數(shù)據(jù)傳輸過程中,其工作數(shù)據(jù)流如圖1所示。圖1展示了一般的直播系統(tǒng)的構(gòu)成模塊,以及本發(fā)明方法在原有系統(tǒng)中的實(shí)現(xiàn)位置。直播系統(tǒng)在客戶端通過音頻采集設(shè)備采集音頻,經(jīng)過編碼與壓縮,將音頻數(shù)據(jù)上傳到服務(wù)器,服務(wù)器上進(jìn)行音頻數(shù)據(jù)接收并存入文件系統(tǒng)。從客戶端音頻數(shù)據(jù)上傳到服務(wù)器音頻數(shù)據(jù)接收過程中,應(yīng)用本發(fā)明方法,以保障音頻數(shù)據(jù)在傳輸過程中的數(shù)據(jù)完整性。
本發(fā)明的語音直播過程中音頻數(shù)據(jù)完整性的保障方法的實(shí)現(xiàn)原理,如圖2所示。
首先,說明本發(fā)明發(fā)送數(shù)據(jù)和應(yīng)答報(bào)文的報(bào)文格式。
客戶端發(fā)送數(shù)據(jù)的數(shù)據(jù)包格式中包含的各字段的含義如下:
數(shù)據(jù)包長度:該數(shù)據(jù)包的總長度,單位是字節(jié);
數(shù)據(jù)偏移量:該數(shù)據(jù)包包含的音頻流文件基于總音頻流文件的起始字節(jié)位置,單位是字節(jié);
序列號:該數(shù)據(jù)包的序列號,從0開始計(jì)數(shù);
音頻流開始時(shí)間:該數(shù)據(jù)包包含的音頻流的播放起始時(shí)間,單位是毫秒;
音頻流總長度:當(dāng)前已錄制文件的總大小,單位是字節(jié);
音頻數(shù)據(jù):實(shí)際壓縮好的音頻流數(shù)據(jù),是字節(jié)流的形式。
服務(wù)器確認(rèn)的應(yīng)答報(bào)文的數(shù)據(jù)包格式中包含的各字段的含義如下:
數(shù)據(jù)包類型:該數(shù)據(jù)包的類型,在這里是“upload”,表示是對于上傳數(shù)據(jù)的確認(rèn);
確認(rèn)序列號:表示期望下次收到的數(shù)據(jù)包的序列號;
已確認(rèn)音頻流長度:表示服務(wù)器已經(jīng)接收到的音頻流的長度,單位是字節(jié)。
如圖2所示,數(shù)據(jù)傳輸過程中,完整的音頻數(shù)據(jù)的上傳過程如下:首先客戶端發(fā)送一個(gè)數(shù)據(jù)包,服務(wù)器收到數(shù)據(jù)包后,解析頭部信息,獲得數(shù)據(jù)包長度、數(shù)據(jù)偏移量等各字段的值。首先,判斷收到的數(shù)據(jù)包長度是否與數(shù)據(jù)包頭部中數(shù)據(jù)包長度字段的值一致,如果一致,說明接收到的數(shù)據(jù)包完整,按照數(shù)據(jù)偏移量將字節(jié)流寫入音頻文件,寫入成功后,設(shè)置應(yīng)答報(bào)文中的確認(rèn)序列號為對應(yīng)收到的數(shù)據(jù)包的序列號加1,然后服務(wù)器返回應(yīng)答報(bào)文給客戶端,通知客戶端發(fā)送下一個(gè)數(shù)據(jù)包。若數(shù)據(jù)包頭部中的數(shù)據(jù)包長度字段的值與實(shí)際接收到的數(shù)據(jù)包長度不一致,說明接收到的數(shù)據(jù)包不完整,則設(shè)置應(yīng)答報(bào)文中的確認(rèn)序列號為對應(yīng)收到的數(shù)據(jù)包的序列號,發(fā)送應(yīng)答報(bào)文給客戶端,讓客戶端重新發(fā)送該數(shù)據(jù)包。
本發(fā)明通過服務(wù)器維護(hù)的確認(rèn)序列號s與客戶端維護(hù)的序列號n來共同推進(jìn)數(shù)據(jù)的發(fā)送。當(dāng)服務(wù)器檢查數(shù)據(jù)包完整時(shí),設(shè)置確認(rèn)序列號s=n+1,當(dāng)服務(wù)器檢查數(shù)據(jù)包不完整時(shí),設(shè)置確認(rèn)序列號s=n??蛻舳烁鶕?jù)收到的應(yīng)答報(bào)文,更新序列號n=s,發(fā)送對應(yīng)序列號的數(shù)據(jù)包給服務(wù)器。如此重復(fù)上述過程,直到客戶端發(fā)送數(shù)據(jù)完畢,結(jié)束傳輸過程,斷開網(wǎng)絡(luò)連接。
該機(jī)制可以解決傳輸過程中,上傳和確認(rèn)數(shù)據(jù)包丟失引發(fā)的數(shù)據(jù)缺失問題。例如,如果客戶端發(fā)送序列號為1的數(shù)據(jù)包后,時(shí)隔7秒沒有收到服務(wù)端對于該數(shù)據(jù)包的確認(rèn),則重新發(fā)送該數(shù)據(jù)包。該機(jī)制還可以應(yīng)對網(wǎng)絡(luò)狀況不好的情況下,由于網(wǎng)絡(luò)連接斷開而引發(fā)的數(shù)據(jù)丟失問題。當(dāng)網(wǎng)絡(luò)狀況變好,可以重新建立網(wǎng)絡(luò)連接后,服務(wù)端對于客戶端發(fā)送的第一個(gè)數(shù)據(jù)包的確認(rèn)會(huì)返回當(dāng)前已經(jīng)收到的音頻文件大小,客戶端將以此位置為數(shù)據(jù)偏移開始發(fā)送數(shù)據(jù)包。
更具體地,客戶端發(fā)送數(shù)據(jù)包的工作流程,如圖3所示,實(shí)現(xiàn)步驟如下:
步驟1.1,初始標(biāo)記序列號n=0,已發(fā)送數(shù)據(jù)長度length1=0。序列號n代表音頻數(shù)據(jù)在音頻流文件中位置序號。
步驟1.2,判斷是否有新的音頻數(shù)據(jù)需要傳輸,即判斷本地錄制產(chǎn)生的音頻文件大小與已發(fā)送數(shù)據(jù)長度length1數(shù)值是否相等,數(shù)值相等表示無新數(shù)據(jù)產(chǎn)生,不相等表示有新的數(shù)據(jù)需要傳輸;若有新數(shù)據(jù),繼續(xù)執(zhí)行步驟1.3,若否無新數(shù)據(jù),轉(zhuǎn)步驟1.5執(zhí)行。
步驟1.3,以n為序列號,將當(dāng)前數(shù)據(jù)打包,發(fā)送數(shù)據(jù)包給服務(wù)器。
步驟1.4等待服務(wù)器響應(yīng),并檢測是否超時(shí),若超時(shí),執(zhí)行步驟1.5,否則,更新序列號n和已發(fā)送數(shù)據(jù)長度length1,然后繼續(xù)轉(zhuǎn)步驟1.2執(zhí)行。此處,更新n為接收到的應(yīng)答報(bào)文中的確認(rèn)序列號s,更新length1為接收到的應(yīng)答報(bào)文中已確認(rèn)音頻流長度length2的值。
步驟1.5,判斷直播過程是否結(jié)束,若是,結(jié)束數(shù)據(jù)傳輸,否則繼續(xù)轉(zhuǎn)步驟1.2執(zhí)行。
服務(wù)器接收數(shù)據(jù)的工作流程,如圖4所示,實(shí)現(xiàn)步驟如下:
步驟2.1,服務(wù)器等待客戶端發(fā)送來的數(shù)據(jù)包,若在一定時(shí)間內(nèi)未收到數(shù)據(jù)包,檢查鏈接是否斷開,若是,結(jié)束數(shù)據(jù)接收過程,否則繼續(xù)等待客戶端發(fā)送數(shù)據(jù)包。
步驟2.2,當(dāng)接收到客戶端發(fā)送來的數(shù)據(jù)包時(shí),校驗(yàn)數(shù)據(jù)包是否完整,若不完整,執(zhí)行步驟2.4;若數(shù)據(jù)包完整,繼續(xù)判斷數(shù)據(jù)包是否是期望接收的數(shù)據(jù),若是,執(zhí)行步驟2.3,否則,執(zhí)行步驟2.4。
檢驗(yàn)數(shù)據(jù)包是否完整的方式就是,比對實(shí)際數(shù)據(jù)包大小與解析得到的數(shù)據(jù)包頭中數(shù)據(jù)包大小字段的值是否相等,若相等則說明數(shù)據(jù)包完整,否則說明數(shù)據(jù)包不完整。
判斷數(shù)據(jù)包是否是期望接收的數(shù)據(jù)是指,比對接收到的數(shù)據(jù)包中數(shù)據(jù)偏移量的值是否與服務(wù)器上的已確認(rèn)音頻流長度length2的大小相等,如果是,表明該數(shù)據(jù)包是期望接收的數(shù)據(jù),如果不相等,表明該數(shù)據(jù)包不是期望接收的數(shù)據(jù)。
步驟2.3,按照數(shù)據(jù)偏移量將字節(jié)流寫入音頻文件,設(shè)置確認(rèn)序列號s=n+1,并更新已確認(rèn)音頻流長度length2的值,然后將應(yīng)答包返回給客戶端。
步驟2.4,設(shè)置確認(rèn)序列號s=n,保持已確認(rèn)音頻流長度length2不變,然后將應(yīng)答包返回給客戶端,然后繼續(xù)等待客戶端發(fā)送數(shù)據(jù)包,轉(zhuǎn)步驟2.1執(zhí)行。