專(zhuān)利名稱(chēng):一種高效流媒體傳輸方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)傳輸技術(shù)領(lǐng)域,特別涉及一種在流媒體實(shí)時(shí)傳輸中包括數(shù)據(jù)分包和組包方法以及重傳機(jī)制的高效流媒體傳輸方法。
背景技術(shù):
在視頻點(diǎn)播、在線視頻直播這種實(shí)時(shí)性要求高的流媒體應(yīng)用中,往往采用UDP(User Datagram Protocol,用戶(hù)數(shù)據(jù)包協(xié)議)的傳輸方法來(lái)保證傳輸速度,但是由于UDP傳輸?shù)牟豢煽啃詭?lái)網(wǎng)絡(luò)的丟包,從而造成視頻質(zhì)量差,影響通信效果。目前,廣泛使用的一種UDP防丟包技術(shù)是Reliable UDP,這種技術(shù)是在出現(xiàn)丟包的情況下,接收端通過(guò)應(yīng)用層協(xié)議到發(fā)送端重新請(qǐng)求丟失的包,這種方法雖然能夠防止丟包,但是Reliable UDP在實(shí)時(shí)上會(huì)有一些損失,并且邏輯處理復(fù)雜。
發(fā)明內(nèi)容
本發(fā)明旨在至少解決現(xiàn)有技術(shù)中存在的技術(shù)問(wèn)題,特別創(chuàng)新地提出了一種高效流媒體傳輸方法。為了實(shí)現(xiàn)本發(fā)明的上述目的,本發(fā)明提供了一種高效流媒體傳輸方法,其包括如下步驟:S1:對(duì)接收端進(jìn)行初始化;S2:發(fā)送端對(duì)每幀的數(shù)據(jù)進(jìn)行分包并傳輸;S3:接收端對(duì)接收到的分包進(jìn)行選擇,所述接收端設(shè)置有接收緩沖區(qū),所述接收端將采用的分包存儲(chǔ)在所述接收緩沖區(qū)中;S4:解碼模塊對(duì)所述接收緩沖區(qū)中的分包進(jìn)行組包和重傳。本發(fā)明的流媒體傳輸方法邏輯處理簡(jiǎn)單、實(shí)時(shí)性強(qiáng),不僅支持流媒體的實(shí)時(shí)傳輸功能,還具有容錯(cuò)和恢復(fù)功能。在本發(fā)明的一種優(yōu)選實(shí)施例中,解碼模塊獲取系統(tǒng)當(dāng)前的時(shí)間作為當(dāng)前的播放時(shí)間,并根據(jù)緩沖時(shí)間將接收緩沖區(qū)的分包劃分為組包區(qū)、重傳區(qū)和最新分包區(qū)。在組包區(qū),掃描每個(gè)分包,如果能夠成功組包,則發(fā)送到顯示模塊,否則,丟棄該數(shù)據(jù)包的所有分包;在重傳區(qū),掃描每個(gè)分包,如果發(fā)現(xiàn)位于重傳區(qū)的某個(gè)數(shù)據(jù)包存在缺失的分包,則向服務(wù)器發(fā)送信號(hào),重傳該分包;在最新分包區(qū),不作任何處理。本發(fā)明將接收緩沖區(qū)的數(shù)據(jù)分包劃分為不同的分區(qū),邏輯處理更加簡(jiǎn)單,實(shí)時(shí)性更強(qiáng),能夠更廣泛地應(yīng)用于實(shí)時(shí)流媒體應(yīng)用中。本發(fā)明的附加方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過(guò)本發(fā)明的實(shí)踐了解到。
本發(fā)明的上述和/或附加的方面和優(yōu)點(diǎn)從結(jié)合下面附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中:圖1是本發(fā)明高效流媒體傳輸方法的流程圖;圖2是本發(fā)明一種優(yōu)選實(shí)施方式中基于UDP的實(shí)時(shí)流媒體框架;圖3是接收緩沖區(qū)各個(gè)功能分區(qū)的示意圖。
具體實(shí)施例方式下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類(lèi)似的標(biāo)號(hào)表示相同或類(lèi)似的元件或具有相同或類(lèi)似功能的元件。下面通過(guò)參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對(duì)本發(fā)明的限制。圖2示出了本發(fā)明一種優(yōu)選實(shí)施方式中基于UDP的實(shí)時(shí)流媒體框架,該流媒體框架包括發(fā)送端、接收端和解碼模塊,基于該實(shí)時(shí)流媒體框架,本發(fā)明提供了一種高效流媒體傳輸方法,如圖1所示,其包括如下步驟:S1:對(duì)接收端進(jìn)行初始化;S2:發(fā)送端對(duì)每幀的數(shù)據(jù)進(jìn)行分包并傳輸;S3:接收端對(duì)接收到的分包進(jìn)行選擇,該接收端設(shè)置有接收緩沖區(qū),接收端將采用的分包存儲(chǔ)在接收緩沖區(qū)中;S4:解碼模塊對(duì)接收緩沖區(qū)中的分包進(jìn)行組包和重傳。在本實(shí)施方式中,該高效流媒體傳輸方法具體為:第一步:對(duì)接收端進(jìn)行初始化,包括對(duì)接收端的緩沖時(shí)間Ts,接收端的起始播放時(shí)間TO和接收端的上次播放時(shí)間Tp進(jìn)行初始化。具體是設(shè)置流媒體的接收端的緩沖時(shí)間Ts,流媒體接收端的起始播放時(shí)間TO和上次播放時(shí)間Tp,在本實(shí)施例中,按照接收端收到的第一個(gè)數(shù)據(jù)包的時(shí)間作為起始時(shí)間。如圖2所示,由于UDP傳輸是非可靠的,并且存在丟包和分包亂序到達(dá)的情況,在本實(shí)施方式中,可以在流媒體的接收端設(shè)置接收緩沖區(qū),以方便后續(xù)的解碼模塊進(jìn)行相應(yīng)的處理。在本實(shí)施方式中,解碼模塊設(shè)置視頻的幀率為f,通過(guò)接收到的視頻流的任一數(shù)據(jù)包中獲取。
第二步:發(fā)送端對(duì)每幀的數(shù)據(jù)進(jìn)行分包并傳輸。由于采用UDP傳輸,在網(wǎng)絡(luò)傳輸中可能存在丟包和分包亂序到達(dá)的情況。如果對(duì)每幀的數(shù)據(jù)包直接進(jìn)行傳輸,在網(wǎng)絡(luò)層會(huì)自動(dòng)進(jìn)行分包和組包,如果有一個(gè)分包丟失,則整個(gè)數(shù)據(jù)包丟失,重傳整個(gè)數(shù)據(jù)包的代價(jià)非常大。在本實(shí)施方式中,在網(wǎng)絡(luò)情況不是特別的理想的情況下,對(duì)每幀的數(shù)據(jù)可以在應(yīng)用層進(jìn)行分包,如果存在丟包則只需要對(duì)特定的分包進(jìn)行重傳。采用分包和重傳的機(jī)制能夠更好的保證視頻傳輸?shù)馁|(zhì)量。在本實(shí)施方式中,分包前,每幀的數(shù)據(jù)包含的信息包括時(shí)間戳和幀號(hào),進(jìn)行分包后,每個(gè)分包包含的信息包括該分包對(duì)應(yīng)的數(shù)據(jù)幀的時(shí)間戳,該分包對(duì)應(yīng)的數(shù)據(jù)幀的幀號(hào)、總分包數(shù)、該分包的ID。例如,如果數(shù)據(jù)幀的時(shí)間戳為T(mén),幀號(hào)為F,可以切分成K個(gè)分包,那么相應(yīng)的分包的信息組合為〈T,F(xiàn),K, 1>,<T, F,K, 2>,…,<Τ, F,K, K〉。發(fā)送端依次將K個(gè)分包發(fā)送到接收端。在本實(shí)施方式中,每個(gè)分包的大小為一個(gè)MTU。第三步:接收端對(duì)接收到的分包進(jìn)行選擇,該接收端設(shè)置有接收緩沖區(qū),接收端將采用的分包存儲(chǔ)在接收緩沖區(qū)中。在這個(gè)過(guò)程中,如果接收到的分包的時(shí)間戳小于接收端上次播放時(shí)間與接收端緩沖時(shí)間之差,則直接丟棄;如果接收到的分包的時(shí)間戳不小于接收端上次播放時(shí)間與接收端緩沖時(shí)間之差,則將該分包有序插入到接收緩沖區(qū)隊(duì)列中,若接收緩沖區(qū)隊(duì)列中存在重復(fù)的分包,則將該接收到的分包直接丟棄。具體是:接收端每次從發(fā)送端接收到一個(gè)分包后,并獲得了該分包的時(shí)間戳Ti,若該分包滿(mǎn)足如下公式(I)則直接丟棄。Ti < Tp-Ts(I)其中,Tp為接收端上次播放時(shí)間,Ts為接收端緩沖時(shí)間,。滿(mǎn)足公式(I)說(shuō)明時(shí)間戳在該包之前的數(shù)據(jù)包在解碼模塊已經(jīng)播放顯示了,該分包不再具有任何作用,直接丟棄。若不滿(mǎn)足公式(I),則分包按照〈幀號(hào),分包ID> 二元組的關(guān)鍵碼有序插入到接收端的接收緩沖區(qū)中,分包按照〈幀號(hào),分包ID>的二元組進(jìn)行有序排列,具體可以是但不限于采用幀號(hào)和分包ID由小到大或由大到小的順序排列。在將分包插入到接收緩沖區(qū)隊(duì)列過(guò)程中,如果發(fā)現(xiàn)存在〈幀號(hào),分包ID> 二元組一樣的分包,則說(shuō)明該分包已存在,現(xiàn)在接收到的分包是服務(wù)器重傳的分包,直接丟棄即可。第四步:解碼模塊對(duì)接收緩沖區(qū)中的分包進(jìn)行組包和重傳。在本實(shí)施方式中,解碼模塊每隔一定的時(shí)間對(duì)接收緩沖區(qū)中的分包進(jìn)行組包和重傳。具體的組包和重傳的方法為:首先,解碼模塊獲取系統(tǒng)當(dāng)前的時(shí)間作為當(dāng)前的播放時(shí)間,并根據(jù)緩沖時(shí)間Ts將緩沖區(qū)的分包劃分為組包區(qū)、重傳區(qū)和最新分包區(qū)。具體的分割方法為,獲取系統(tǒng)當(dāng)前的時(shí)間T作為當(dāng)前播放時(shí)間,將時(shí)間戳小于T-Ts的分包集定義為組包區(qū);將時(shí)間戳位于區(qū)間(T-Ts7T)內(nèi),即時(shí)間戳小于T且大于或等于T-Ts的分包集定義為重傳區(qū),其他分包的集合為最新分包區(qū)。然后,對(duì)各個(gè)分區(qū)進(jìn)行相應(yīng)的處理,在組包區(qū),掃描每個(gè)分包,如果能夠成功組包,則發(fā)送到顯示模塊,否則,丟棄該數(shù)據(jù)包的所有分包。例如,對(duì)于幀號(hào)為F的數(shù)據(jù)包,其所有的分包都已經(jīng)接收到,則可以完整的組成一個(gè)數(shù)據(jù)包,發(fā)送給顯示模塊。否則,將該數(shù)據(jù)包的所有不完整的分包全部丟棄。在重傳區(qū),掃描每個(gè)分包,如果發(fā)現(xiàn)位于重傳區(qū)的某個(gè)數(shù)據(jù)包存在缺失的分包,則向服務(wù)器發(fā)送信號(hào),重傳該分包,例如,對(duì)于幀號(hào)為F的數(shù)據(jù)包,如果某個(gè)分包缺失,則接收端給流媒體服務(wù)器發(fā)送信號(hào),讓服務(wù)器重傳該分包。在最新分包區(qū),不作任何處理。最后,更新接收端上次播放時(shí)間Tp為當(dāng)前播放時(shí)間T。在對(duì)各分包進(jìn)行處理后,解碼模塊將所有成功組好的數(shù)據(jù)包發(fā)送給顯示模塊進(jìn)行顯不O本發(fā)明的流媒體傳輸方法不僅支持流媒體的實(shí)時(shí)傳輸功能,還具有容錯(cuò)和恢復(fù)功能。其將接收緩沖區(qū)的數(shù)據(jù)分包劃分為不同的分區(qū),邏輯處理更加簡(jiǎn)單,實(shí)時(shí)性更強(qiáng),能夠更廣泛地應(yīng)用于實(shí)時(shí)流媒體應(yīng)用中。在本說(shuō)明書(shū)的描述中,參考術(shù)語(yǔ)“一個(gè)實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述 意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本發(fā)明的至少一個(gè)實(shí)施例或示例中。在本說(shuō)明書(shū)中,對(duì)上述術(shù)語(yǔ)的示意性表述不一定指的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任何的一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。
盡管已經(jīng)示出和描述了本發(fā)明的實(shí)施例,本領(lǐng)域的普通技術(shù)人員可以理解:在不脫離本發(fā)明的原理和宗g的情況下可以對(duì)這些實(shí)施例進(jìn)行多種變化、修改、替換和變型,本發(fā)明的范圍由權(quán)利要求及其等同物限定。
權(quán)利要求
1.一種高效流媒體傳輸方法,其特征在于,包括如下步驟: S1:對(duì)接收端進(jìn)行初始化; S2:發(fā)送端對(duì)每幀的數(shù)據(jù)進(jìn)行分包并傳輸; S3:接收端對(duì)接收到的分包進(jìn)行選擇,所述接收端設(shè)置有接收緩沖區(qū),所述接收端將采用的分包存儲(chǔ)在所述接收緩沖區(qū)中; S4:解碼模塊對(duì)所述接收緩沖區(qū)中的分包進(jìn)行組包和重傳。
2.按權(quán)利要求1所述的高效流媒體傳輸方法,其特征在于,在所述步驟SI中,對(duì)接收端的緩沖時(shí)間、接收端的起始播放時(shí)間和接收端上次播放時(shí)間進(jìn)行初始化。
3.按權(quán)利要求1所述的高效流媒體傳輸方法,其特征在于,在所述步驟S2中,對(duì)每幀的數(shù)據(jù)在應(yīng)用層進(jìn)行分包。
4.按權(quán)利要求1或3所述的高效流媒體傳輸方法,其特征在于,在所述步驟S2中,每幀的數(shù)據(jù)包含的信息包括時(shí)間戳和幀號(hào),進(jìn)行分包后,每個(gè)分包包含的信息包括所述分包對(duì)應(yīng)的數(shù)據(jù)幀的時(shí)間戳、所述分包對(duì)應(yīng)的數(shù)據(jù)幀的幀號(hào)、總分包數(shù)、所述分包的ID。
5.按權(quán)利要求1所述的高效流媒體傳輸方法,其特征在于,在所述接收緩沖區(qū)中,分包按照〈幀號(hào),分包ID>的二元組進(jìn)行有序排列。
6.按權(quán)利要求1或5所述的高效流媒體傳輸方法,其特征在于,在所述步驟S3中,如果接收到的分包的時(shí)間戳小于接收端上次播放時(shí)間與接收端緩沖時(shí)間之差,則直接丟棄;如果接收到的分包的時(shí)間戳不小于接收端上次播放時(shí)間與接收端緩沖時(shí)間之差,則將所述分包有序插入到接收緩沖區(qū)中,若接收緩沖區(qū)隊(duì)列中存在重復(fù)的分包,則將所述接收到的分包直接丟棄。
7.按權(quán)利要求1所述的高效流媒體傳輸方法,其特征在于,在所述步驟S4中,解碼模塊對(duì)接收緩沖區(qū)中的分包進(jìn)行組包和重傳的方法為: 541:解碼模塊獲取系統(tǒng)當(dāng)前的時(shí)間作為當(dāng)前的播放時(shí)間,并根據(jù)緩沖時(shí)間將接收緩沖區(qū)的分包劃分為組包區(qū)、重傳區(qū)和最新分包區(qū); 542:在組包區(qū),掃描每個(gè)分包,如果能夠成功組包,則發(fā)送到顯示模塊,否則,丟棄該數(shù)據(jù)包的所有分包; 在重傳區(qū),掃描每個(gè)分包,如果發(fā)現(xiàn)位于重傳區(qū)的某個(gè)數(shù)據(jù)包存在缺失的分包,則向服務(wù)器發(fā)送信號(hào),重傳該分包; 在最新分包區(qū),不作任何處理。
8.按權(quán)利要求7所述的高效流媒體傳輸方法,其特征在于,將接收緩沖區(qū)的分包劃分為組包區(qū)、重傳區(qū)和最新分包區(qū)的方法為: 時(shí)間戳小于T-Ts的分包的集合為組包區(qū),時(shí)間戳位于區(qū)間(T-Ts,T)的分包的集合為重傳區(qū),其他分包的集合為最新分包區(qū),其中,T為系統(tǒng)當(dāng)前的時(shí)間,Ts為接收端的緩沖時(shí)間。
全文摘要
本發(fā)明提出了一種高效流媒體傳輸方法,其包括如下步驟對(duì)接收端進(jìn)行初始化;發(fā)送端對(duì)每幀的數(shù)據(jù)進(jìn)行分包并傳輸;接收端對(duì)接收到的分包進(jìn)行選擇,該接收端設(shè)置有接收緩沖區(qū),接收端將采用的分包存儲(chǔ)在接收緩沖區(qū)中;解碼模塊對(duì)接收緩沖區(qū)中的分包進(jìn)行組包和重傳。本發(fā)明的流媒體傳輸方法邏輯處理簡(jiǎn)單、實(shí)時(shí)性強(qiáng),不僅支持流媒體的實(shí)時(shí)傳輸功能,還具有容錯(cuò)和恢復(fù)功能。
文檔編號(hào)H04N21/6437GK103096183SQ201310046549
公開(kāi)日2013年5月8日 申請(qǐng)日期2013年2月5日 優(yōu)先權(quán)日2013年2月5日
發(fā)明者戴瓊海, 張磊 申請(qǐng)人:清華大學(xué)