本發(fā)明涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,具體涉及一種媒體數(shù)據(jù)傳輸方法及裝置。
背景技術(shù):
近年來計(jì)算機(jī)網(wǎng)絡(luò)的爆炸式發(fā)展,特別是大量多媒體實(shí)時(shí)業(yè)務(wù)的廣泛應(yīng)用,對(duì)傳統(tǒng)的以傳輸控制協(xié)議(Transmission Control Protocol,TCP)為主的傳輸層協(xié)議提出了新的挑戰(zhàn)。大部分多媒體應(yīng)用對(duì)時(shí)延很敏感,但卻具有一定的容錯(cuò)機(jī)制,能夠容忍少量的報(bào)文丟失。此類應(yīng)用要求傳輸協(xié)議開銷小、響應(yīng)快,并且不必保證傳輸完全可靠。此外,抖動(dòng)也是對(duì)多媒體應(yīng)用有較大影響的問題,而TCP擁塞控制使用的加性增加乘性減少(Additive IncreaseMultiplicative Decrease,AIMD)策略,會(huì)引起發(fā)送速率很大的抖動(dòng)。目前多媒體實(shí)時(shí)應(yīng)用多采用UDP協(xié)議來傳輸,但由于UDP協(xié)議缺乏擁塞控制機(jī)制,當(dāng)基于TCP、UDP的應(yīng)用共享網(wǎng)絡(luò)帶寬時(shí),TCP流因具有擁塞退避機(jī)制而導(dǎo)致“饑餓”,而UDP將不公平地獲得大量帶寬,同時(shí)可能導(dǎo)致網(wǎng)絡(luò)擁塞,影響Internet的魯棒性,因此隨著UDP協(xié)議的應(yīng)用在Internet所占的比例的增加,其不足之處逐漸暴露。
針對(duì)這個(gè)問題,TCP友好速率控制算法(TCP Friendly Rate Control,TFRC)應(yīng)運(yùn)而生。TFRC是一種適合于多媒體傳輸,并具有擁塞退避機(jī)制,能夠與TCP協(xié)議公平分享帶寬的傳輸協(xié)議。在同等條件下,TFRC流具有與TCP流近似相同的吞吐量,因此,可以“公平地”與TCP共享網(wǎng)絡(luò)帶寬。另一方面,TFRC吞吐量變化穩(wěn)定、抖動(dòng)較小,因此更加適合電話、流媒體等對(duì)傳輸速率的平滑性要求較高的應(yīng)用。
TFRC是一種基于接收端的機(jī)制,其基本思想是在接收端檢測網(wǎng)絡(luò)的擁塞信號(hào)丟包事件頻率,并將信號(hào)反饋給發(fā)送端。而發(fā)送端利用以丟包事件頻率為變量的吞吐率公式來調(diào)整發(fā)送速率,以適應(yīng)網(wǎng)絡(luò)擁塞的狀況,同時(shí)保證協(xié)議的友好性和發(fā)送速率的平滑性。
現(xiàn)有基于TFRC的UDP網(wǎng)絡(luò)傳輸框架通過檢測丟包事件頻率來估計(jì)網(wǎng)絡(luò)可用帶寬,其丟包事件頻率計(jì)算方法將所有丟包事件都?xì)w咎于網(wǎng)絡(luò)擁塞,但是在實(shí)際應(yīng)用中,即使沒有出現(xiàn)網(wǎng)絡(luò)擁塞,流媒體數(shù)據(jù)的傳輸也不可能百分之百的精確完成。特別在移動(dòng)網(wǎng)絡(luò)條件下,鏈路多徑衰弱、外源干擾、移動(dòng)切換等原因,都有可能導(dǎo)致出現(xiàn)隨機(jī)鏈路丟包,這樣的丟包會(huì)導(dǎo)致TFRC協(xié)議盲目減小發(fā)送速率,影響傳輸協(xié)議的吞吐率。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例公開了一種媒體數(shù)據(jù)傳輸方法及裝置,可針對(duì)不同的丟包類型進(jìn)行不同的流媒體數(shù)據(jù)傳輸方式調(diào)整,保證較高的數(shù)據(jù)吞吐率,提高流媒體數(shù)據(jù)的傳輸質(zhì)量。
本發(fā)明實(shí)施例第一方面公開一種媒體數(shù)據(jù)傳輸方法,包括:
獲取用于表示當(dāng)前網(wǎng)絡(luò)狀態(tài)的網(wǎng)絡(luò)參數(shù);
根據(jù)所述網(wǎng)絡(luò)參數(shù)確定當(dāng)前網(wǎng)絡(luò)的丟包類型,所述丟包類型包括擁塞丟包或者隨機(jī)鏈路丟包;
基于所述丟包類型,調(diào)整當(dāng)前網(wǎng)絡(luò)流媒體數(shù)據(jù)的傳輸方式。
本發(fā)明實(shí)施例第二方面公開一種媒體數(shù)據(jù)傳輸裝置,包括:
獲取模塊,用于獲取用于表示當(dāng)前網(wǎng)絡(luò)狀態(tài)的網(wǎng)絡(luò)參數(shù);
確定模塊,用于根據(jù)所述網(wǎng)絡(luò)參數(shù)確定當(dāng)前網(wǎng)絡(luò)的丟包類型,所述丟包類型包括擁塞丟包或者隨機(jī)鏈路丟包;
調(diào)整模塊,用于基于所述丟包類型,調(diào)整當(dāng)前網(wǎng)絡(luò)流媒體數(shù)據(jù)的傳輸方式。
本發(fā)明實(shí)施例中,獲取用于表示當(dāng)前網(wǎng)絡(luò)狀態(tài)的網(wǎng)絡(luò)參數(shù),根據(jù)網(wǎng)絡(luò)參數(shù)確定當(dāng)前網(wǎng)絡(luò)的丟包類型,該丟包類型包括擁塞丟包或者隨機(jī)鏈路丟包,基于該丟包類型,調(diào)整當(dāng)前網(wǎng)絡(luò)流媒體數(shù)據(jù)的傳輸方式,通過這種方式,可針對(duì)不同的丟包類型進(jìn)行不同的流媒體數(shù)據(jù)傳輸方式調(diào)整,保證較高的數(shù)據(jù)吞吐率,提高流媒體數(shù)據(jù)的傳輸質(zhì)量。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例公開的一種媒體數(shù)據(jù)傳輸方法的流程圖;
圖2是本發(fā)明實(shí)施例公開的一種擁塞丟包和隨機(jī)鏈路丟包對(duì)比圖;
圖3是本發(fā)明實(shí)施例提供的一種丟包對(duì)抗方案框架圖;
圖4是本發(fā)明實(shí)施例公開的一種媒體數(shù)據(jù)傳輸裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例公開了一種媒體數(shù)據(jù)傳輸方法及裝置可以應(yīng)用于基于TFRC的UDP網(wǎng)絡(luò)傳輸框架中,TFRC是一種基于接收端的機(jī)制,其基本思想是在接收端檢測網(wǎng)絡(luò)的擁塞信號(hào)丟包事件頻率,并將信號(hào)反饋給發(fā)送端。而發(fā)送端利用以丟包事件頻率和往返時(shí)延及重傳超時(shí)時(shí)間為變量的吞吐率公式來調(diào)整發(fā)送速率,以適應(yīng)網(wǎng)絡(luò)擁塞的狀況,同時(shí)保證協(xié)議的友好性和發(fā)送速率的平滑性。協(xié)議使用的吞吐量方程如下:
其中,RTT為往返時(shí)延,RTO為重傳超時(shí)時(shí)間,p為丟包事件頻率。在計(jì)算發(fā)送速率前,必須首先得到以上參數(shù)。其中,由于接收端并不對(duì)每個(gè)收到的數(shù)據(jù)包發(fā)送應(yīng)答,因此丟包事件頻率必須由接收端統(tǒng)計(jì)。而RTT和RTO既可以在發(fā)送端測量也可以在接收端測量。目前TFRC協(xié)議的實(shí)現(xiàn)是由發(fā)送端測量RTT和RTO,接收端統(tǒng)計(jì)丟包事件頻率并反饋給發(fā)送端,發(fā)送端根據(jù)以上參數(shù)計(jì)算合理的發(fā)送速率。
現(xiàn)有的TFRC協(xié)議是基于一個(gè)基本假設(shè),那就是所有丟包事件都由網(wǎng)絡(luò)擁塞造成的路由排隊(duì)造成。但在實(shí)際應(yīng)用,特別是無線移動(dòng)網(wǎng)絡(luò)環(huán)境下,受限于網(wǎng)絡(luò)服務(wù)提供商和信道質(zhì)量,許多丟包與網(wǎng)絡(luò)擁塞沒有直接關(guān)系,而這種非擁塞丟包可以使用重傳或者冗余編碼等策略進(jìn)行補(bǔ)救。但是在這種環(huán)境下,TFRC算法中計(jì)算出來的丟包事件頻率會(huì)非常大,從而導(dǎo)致發(fā)送速率迅速下降,嚴(yán)重影響流媒體網(wǎng)絡(luò)傳輸吞吐率,進(jìn)而破壞產(chǎn)品體驗(yàn)。
針對(duì)這個(gè)問題,本發(fā)明實(shí)施例提出了一種針對(duì)TFRC流媒體傳輸協(xié)議的隨機(jī)鏈路丟包以及擁塞丟包檢測策略。通過這個(gè)方法,我們可以在TFRC的丟包事件頻率計(jì)算環(huán)節(jié)剔除隨機(jī)鏈路丟包,只留下由網(wǎng)絡(luò)擁塞造成的丟包進(jìn)行計(jì)算。從而排除不必要的環(huán)境干擾,有效提升流媒體系統(tǒng)在高丟包環(huán)境下的傳輸能力。并且在檢測到是隨機(jī)鏈路丟包時(shí),進(jìn)一步采取對(duì)應(yīng)的補(bǔ)救措施進(jìn)行補(bǔ)救,提高網(wǎng)絡(luò)吞吐率。
請(qǐng)參閱圖1,圖1是本發(fā)明實(shí)施例公開的一種媒體數(shù)據(jù)傳輸方法的流程圖。如圖1所示,該方法可以包括以下步驟。
S100、獲取用于表示當(dāng)前網(wǎng)絡(luò)狀態(tài)的網(wǎng)絡(luò)參數(shù);
本發(fā)明實(shí)施例中,發(fā)送設(shè)備獲取用于表示當(dāng)前網(wǎng)絡(luò)狀態(tài)的網(wǎng)絡(luò)參數(shù),以確定當(dāng)前網(wǎng)絡(luò)丟包是隨機(jī)鏈路丟包或者擁塞丟包,對(duì)于不是擁塞丟包導(dǎo)致的丟包事件,予以剔除,不用于丟包事件頻率計(jì)算,從而不會(huì)盲目減少發(fā)送設(shè)備的發(fā)送速率。
可選的,所述網(wǎng)絡(luò)參數(shù)包括當(dāng)前網(wǎng)絡(luò)時(shí)延參數(shù)、當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢參數(shù)以及當(dāng)前網(wǎng)絡(luò)丟包率參數(shù)中的至少一種。依據(jù)香農(nóng)定理,信源的發(fā)送速率必須小于或等于信道容量。因此,當(dāng)信源帶寬遠(yuǎn)大于鏈路帶寬形成帶寬瓶頸時(shí),路由器處理數(shù)據(jù)包時(shí)在瓶頸網(wǎng)絡(luò)節(jié)點(diǎn)排隊(duì)等待,造成網(wǎng)絡(luò)擁塞。網(wǎng)絡(luò)出現(xiàn)擁塞一般表現(xiàn)為數(shù)據(jù)丟失,時(shí)延增加,吞吐量下降,嚴(yán)重時(shí)甚至?xí)?dǎo)致“擁塞崩潰”,直觀反應(yīng)為發(fā)送設(shè)備到接收設(shè)備往返時(shí)延和丟包率上升。而往返時(shí)延和丟包率的上升幅度和速率又取決于瓶頸鏈路帶寬、路由隊(duì)列平均長度、路由丟包策略及網(wǎng)絡(luò)結(jié)構(gòu)等因素,沒有一個(gè)固定的模式。
如圖2所示,圖中左、右圖分別為擁塞丟包和隨機(jī)鏈路丟包的表現(xiàn),第一行為發(fā)送速率變化趨勢圖,第二行為往返時(shí)延(Round-Trip Time,RTT)變化趨勢圖,第三行為丟包率大小的變化趨勢圖。從圖中可以看出擁塞丟包出現(xiàn)的時(shí)候往往伴隨著較大的RTT和劇烈的丟包率變化,而隨機(jī)鏈路丟包發(fā)生時(shí),RTT和丟包率都相對(duì)而言較平穩(wěn)。在本發(fā)明實(shí)施例中,使用上述當(dāng)前網(wǎng)絡(luò)RTT、當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢參數(shù)以及當(dāng)前網(wǎng)絡(luò)丟包率參數(shù)作為判斷是否處于擁塞狀態(tài)的依據(jù)。
S101、根據(jù)所述網(wǎng)絡(luò)參數(shù)確定當(dāng)前網(wǎng)絡(luò)的丟包類型,所述丟包類型包括擁塞丟包或者隨機(jī)鏈路丟包;
本發(fā)明實(shí)施例中,根據(jù)上述當(dāng)前網(wǎng)絡(luò)時(shí)延參數(shù)、當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢參數(shù)以及當(dāng)前網(wǎng)絡(luò)丟包率參數(shù)中的至少一種網(wǎng)絡(luò)參數(shù)確定當(dāng)前網(wǎng)絡(luò)的丟包類型,該丟包類型包括擁塞丟包或者隨機(jī)鏈路丟包,若為隨機(jī)鏈路丟包,則不會(huì)將該丟包事件作為TFRC中丟包頻率計(jì)算過程中。
可選的,若網(wǎng)絡(luò)參數(shù)包括當(dāng)前網(wǎng)絡(luò)時(shí)延參數(shù);
所述根據(jù)所述網(wǎng)絡(luò)參數(shù)確定當(dāng)前網(wǎng)絡(luò)的丟包類型,包括:
若所述當(dāng)前網(wǎng)絡(luò)時(shí)延參數(shù)大于第一閾值,則確定當(dāng)前網(wǎng)絡(luò)的丟包類型為擁塞丟包;
若所述當(dāng)前網(wǎng)絡(luò)時(shí)延參數(shù)小于或者等于所述第一閾值,則確定當(dāng)前網(wǎng)絡(luò)的丟包類型為隨機(jī)鏈路丟包。
本發(fā)明實(shí)施例中,網(wǎng)絡(luò)時(shí)延參數(shù)可以包括單向時(shí)延或者RTT,這里以RTT為例進(jìn)行說明,當(dāng)RTT升高到第一閾值以上時(shí),認(rèn)為當(dāng)前系統(tǒng)處于擁塞狀態(tài),即是當(dāng)前網(wǎng)絡(luò)的丟包類型為擁塞丟包,若RTT小于或者等于第一閾值,則確定當(dāng)前網(wǎng)絡(luò)丟包類型為隨機(jī)鏈路丟包。
為了排除網(wǎng)絡(luò)物理延時(shí)的干擾,系統(tǒng)在每一次傳輸中維護(hù)一個(gè)最小時(shí)延變量rtt_min,在每個(gè)數(shù)據(jù)包的確認(rèn)(Acknowledgement,ACK)字符反饋到發(fā)送設(shè)備的時(shí)候,記錄其RTT,若RTT小于rtt_min,則rtt_min=RTT。若當(dāng)前RTT>rtt_min+δ,則認(rèn)為當(dāng)前網(wǎng)絡(luò)處于擁塞狀態(tài)。
閾值δ由網(wǎng)絡(luò)瓶頸帶寬、路由隊(duì)列長度和數(shù)據(jù)包大小共同決定,設(shè)路由平均隊(duì)列長度為L_q,帶寬為bw,包大小為s,則RTT能夠上升的最大幅度為rtt_inc=(L_q×s)/bw。一般而言,在出現(xiàn)擁塞的場景中,接收設(shè)備的接收速率recv_rate≈網(wǎng)絡(luò)可用帶寬bw,故RTT上升最大幅度為rtt_inc≈(L_q×s)/(recv_rate),以此可以設(shè)置閾值δ=(L_q×s)/(2recv_rate)。
在真實(shí)系統(tǒng)中,我們難以得知路由隊(duì)列長度,可以保守估計(jì)隊(duì)列長度為50,根據(jù)Bigo Live流媒體傳輸系統(tǒng)中的最大碼率和平均包大小,我們設(shè)置δ=300ms作為一個(gè)保守的閾值,對(duì)RTT異常增大的行為進(jìn)行判斷。
可選的,若網(wǎng)絡(luò)參數(shù)包括當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢參數(shù);
所述根據(jù)所述網(wǎng)絡(luò)參數(shù)確定當(dāng)前網(wǎng)絡(luò)的丟包類型,包括:
若當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢為上升趨勢,則確定當(dāng)前網(wǎng)絡(luò)的丟包類型為擁塞丟包;
若當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢為下降趨勢或者平穩(wěn)趨勢,則確定當(dāng)前網(wǎng)絡(luò)的丟包類型為隨機(jī)鏈路丟包。
本發(fā)明實(shí)施例中,網(wǎng)絡(luò)參數(shù)可以包括當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢參數(shù),如圖2所示,圖2的第三行的圖即是擁塞丟包和隨機(jī)鏈路丟包的丟包率變化趨勢圖,如圖所示,擁塞丟包的丟包率變化趨勢圖是劇烈變化,而隨機(jī)鏈路丟包的丟包率變化趨勢圖是平穩(wěn)變化。
具體可選的,系統(tǒng)維護(hù)近200ms或近20個(gè)數(shù)據(jù)包的丟包率信息,并實(shí)時(shí)檢測其是否處于上升狀態(tài)。若檢測到丟包率處于上升狀態(tài),則認(rèn)為當(dāng)前網(wǎng)絡(luò)處于擁塞狀態(tài),當(dāng)前的丟包事件為擁塞丟包;若檢測到丟包率處于平穩(wěn)狀態(tài),則認(rèn)為當(dāng)前網(wǎng)絡(luò)是隨機(jī)鏈路丟包。為了排除丟包率抖動(dòng)帶來的影響,我們先對(duì)丟包率進(jìn)行時(shí)域低通濾波,濾波方式為:
pktLoss=0.05×pktLoss_t+0.95×pktLoss
設(shè)pktLoss(n)=A×pktLoss(n-1)+w(n),其中pktLoss(n)為n時(shí)刻的pktLoss值,A為狀態(tài)轉(zhuǎn)移參量,w(n)為過程噪聲,w(n)服從N(0,Q)的高斯分布。由此設(shè)計(jì)卡爾曼濾波器估計(jì)每一步中w(n)的值,當(dāng)w(n)>閾值σ,認(rèn)為pktLoss處于上升狀態(tài),判斷為網(wǎng)絡(luò)擁塞,即是擁塞丟包;反之若w(n)<-σ,則認(rèn)為pktLoss處于下降過程,網(wǎng)絡(luò)沒有出現(xiàn)擁塞,丟包為隨機(jī)鏈路丟包;若w(n)∈(-σ,σ),則可以認(rèn)為pktLoss處于平穩(wěn)狀態(tài),網(wǎng)絡(luò)沒有出現(xiàn)擁塞,丟包為隨機(jī)鏈路丟包。需要說明的是,卡爾曼(Kalman)濾波是一種高效率的遞歸濾波器(自回歸濾波器),它能夠從一系列的不完全包含噪聲的測量中,估計(jì)動(dòng)態(tài)系統(tǒng)的狀態(tài)。
在不同的網(wǎng)絡(luò)環(huán)境下,丟包率波動(dòng)的幅度和速率也會(huì)有所不同,Kalman濾波器的閾值σ需要針對(duì)網(wǎng)絡(luò)環(huán)境做自適應(yīng)調(diào)整。調(diào)整策略可被歸納為“快升慢降”:若w(n)∈(-σ,σ),則σ以較慢的速度下降,否則σ以較快的速度上升。這樣的處理方式是讓濾波器在不同的網(wǎng)絡(luò)環(huán)境下都能夠有效檢測出pktLoss的上升/下降過程。
可選的,若網(wǎng)絡(luò)參數(shù)包括當(dāng)前網(wǎng)絡(luò)丟包率參數(shù);
所述根據(jù)所述網(wǎng)絡(luò)參數(shù)確定當(dāng)前網(wǎng)絡(luò)的丟包類型,包括:
若所述當(dāng)前網(wǎng)絡(luò)丟包率大于第二閾值,則確定當(dāng)前網(wǎng)絡(luò)丟包的丟包類型為擁塞丟包;
若所述當(dāng)前網(wǎng)絡(luò)丟包率小于或者等于所述第二閾值,則確定當(dāng)前網(wǎng)絡(luò)丟包的丟包類型為隨機(jī)鏈路丟包。
本發(fā)明實(shí)施例中,對(duì)于流媒體網(wǎng)絡(luò)傳輸系統(tǒng)而言,少量的隨機(jī)鏈路丟包可以通過丟包重傳或者冗余編碼進(jìn)行較好恢復(fù),不會(huì)嚴(yán)重影響流媒體對(duì)端播放質(zhì)量。但是在非常嚴(yán)重丟包的網(wǎng)絡(luò)鏈路下,現(xiàn)有技術(shù)很難解決高丟包造成的丟幀、超時(shí)等問題。所以本發(fā)明實(shí)施例在實(shí)際的流媒體傳輸系統(tǒng)中沒有辦法,也沒有必要保證極高丟包率下的傳輸效果。設(shè)丟包率閾值(即第二閾值)為θ_p,當(dāng)檢測到丟包率大小pktLoss>θ_p時(shí),則有必要降低當(dāng)前發(fā)送速率,這時(shí)候出現(xiàn)的丟包事件也被認(rèn)為是擁塞丟包,被計(jì)入丟包事件頻率計(jì)算。優(yōu)選的,參考Bigo Live的重傳和冗余編碼策略,系統(tǒng)中θ_p設(shè)為50%。若當(dāng)前網(wǎng)絡(luò)丟包率大于該第二閾值時(shí),則確定當(dāng)前網(wǎng)絡(luò)丟包為擁塞丟包,并被計(jì)入丟包事件頻率計(jì)算,若當(dāng)前網(wǎng)絡(luò)丟包率小于或者等于該第二閾值時(shí),則確定當(dāng)前網(wǎng)絡(luò)丟包為隨機(jī)鏈路丟包。
需要說明的是,可以根據(jù)上述三種網(wǎng)絡(luò)參數(shù)(當(dāng)前網(wǎng)絡(luò)時(shí)延參數(shù)、當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢參數(shù)以及當(dāng)前網(wǎng)絡(luò)丟包率參數(shù))中至少一種確定丟包類型,比如可以根據(jù)其中一個(gè)網(wǎng)絡(luò)參數(shù)進(jìn)行確定丟包類型,也可以根據(jù)三個(gè)網(wǎng)絡(luò)參數(shù)中的兩兩組合確定丟包類型,或者也可以根據(jù)三個(gè)網(wǎng)絡(luò)參數(shù)確定丟包類型。
如圖3所示,即是本發(fā)明實(shí)施例提供的一種丟包類型檢測流程圖,需要說明的是,圖中的檢測流程僅為其中一種檢測流程,不構(gòu)成對(duì)本發(fā)明的限定,如圖所示,丟包事件檢測模塊首先檢測RTT是否正常,即是檢測RTT是否大于第一閾值,若大于丟包第一閾值,即是RTT表現(xiàn)不正常,則將丟包事件計(jì)入丟包事件頻率計(jì)算模塊進(jìn)行丟包事件頻率計(jì)算,從而調(diào)整發(fā)送速率;若RTT小于或者等于第一閾值,則判斷丟包率是否平穩(wěn),若丟包率不平穩(wěn),則說明是擁塞丟包,將丟包事件計(jì)入丟包事件頻率計(jì)算模塊進(jìn)行丟包事件頻率計(jì)算,從而調(diào)整發(fā)送速率;若丟包頻率平穩(wěn),則繼續(xù)檢測丟包率是否較低,若丟包率比較大,大于第二閾值,則將其確定為擁塞丟包,計(jì)入丟包事件頻率計(jì)算模塊進(jìn)行丟包事件頻率計(jì)算,從而調(diào)整發(fā)送速率;若丟包率比較小,則直接將其確定為隨機(jī)鏈路丟包,丟棄丟包事件,并按照隨機(jī)鏈路丟包進(jìn)行后續(xù)處理。
S102,基于所述丟包類型,調(diào)整當(dāng)前網(wǎng)絡(luò)流媒體數(shù)據(jù)的傳輸方式。
可選的,基于不同的丟包類型,調(diào)整當(dāng)前網(wǎng)絡(luò)流媒體數(shù)據(jù)傳輸方式包括:
若所述丟包類型為擁塞丟包,則調(diào)整當(dāng)前網(wǎng)絡(luò)流媒體數(shù)據(jù)的發(fā)送速率;
若所述丟包類型為隨機(jī)鏈路丟包,則采用冗余編碼策略對(duì)當(dāng)前網(wǎng)絡(luò)流媒體數(shù)據(jù)進(jìn)行編碼。
本發(fā)明實(shí)施例中,若丟包類型為擁塞丟包,則根據(jù)TFRC協(xié)議的如下計(jì)算公式調(diào)整發(fā)送設(shè)備的發(fā)送速率。
若丟包類型為隨機(jī)鏈路丟包,則采用冗余編碼策略對(duì)當(dāng)前網(wǎng)絡(luò)流媒體數(shù)據(jù)進(jìn)行編碼,從而減小因鏈路影響帶來的丟包。
本發(fā)明實(shí)施例中,獲取用于表示當(dāng)前網(wǎng)絡(luò)狀態(tài)的網(wǎng)絡(luò)參數(shù),根據(jù)網(wǎng)絡(luò)參數(shù)確定當(dāng)前網(wǎng)絡(luò)的丟包類型,該丟包類型包括擁塞丟包或者隨機(jī)鏈路丟包,基于該丟包類型,調(diào)整當(dāng)前網(wǎng)絡(luò)流媒體數(shù)據(jù)的傳輸方式,通過這種方式,可針對(duì)不同的丟包類型進(jìn)行不同的流媒體數(shù)據(jù)傳輸方式調(diào)整,保證較高的數(shù)據(jù)吞吐率,提高流媒體數(shù)據(jù)的傳輸質(zhì)量。
請(qǐng)參閱圖4,圖4是本發(fā)明實(shí)施例公開的一種數(shù)據(jù)傳輸裝置的結(jié)構(gòu)圖。
如圖4所示,該數(shù)據(jù)傳輸裝置包括:
獲取模塊100,用于獲取用于表示當(dāng)前網(wǎng)絡(luò)狀態(tài)的網(wǎng)絡(luò)參數(shù);
本發(fā)明實(shí)施例中,發(fā)送設(shè)備獲取用于表示當(dāng)前網(wǎng)絡(luò)狀態(tài)的網(wǎng)絡(luò)參數(shù),以確定當(dāng)前網(wǎng)絡(luò)丟包是隨機(jī)鏈路丟包或者擁塞丟包,對(duì)于不是擁塞丟包導(dǎo)致的丟包事件,予以剔除,不用于丟包事件頻率計(jì)算,從而不會(huì)盲目減少發(fā)送設(shè)備的發(fā)送速率。
可選的,所述網(wǎng)絡(luò)參數(shù)包括當(dāng)前網(wǎng)絡(luò)時(shí)延參數(shù)、當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢參數(shù)以及當(dāng)前網(wǎng)絡(luò)丟包率參數(shù)中的至少一種。依據(jù)香農(nóng)定理,信源的發(fā)送速率必須小于或等于信道容量。因此,當(dāng)信源帶寬遠(yuǎn)大于鏈路帶寬形成帶寬瓶頸時(shí),路由器處理數(shù)據(jù)包時(shí)在瓶頸網(wǎng)絡(luò)節(jié)點(diǎn)排隊(duì)等待,造成網(wǎng)絡(luò)擁塞。網(wǎng)絡(luò)出現(xiàn)擁塞一般表現(xiàn)為數(shù)據(jù)丟失,時(shí)延增加,吞吐量下降,嚴(yán)重時(shí)甚至?xí)?dǎo)致“擁塞崩潰”,直觀反應(yīng)為發(fā)送設(shè)備到接收設(shè)備往返時(shí)延和丟包率上升。而往返時(shí)延和丟包率的上升幅度和速率又取決于瓶頸鏈路帶寬、路由隊(duì)列平均長度、路由丟包策略及網(wǎng)絡(luò)結(jié)構(gòu)等因素,沒有一個(gè)固定的模式。
如圖2所示,圖中左、右圖分別為擁塞丟包和隨機(jī)鏈路丟包的表現(xiàn),第一行為發(fā)送速率變化趨勢圖,第二行為往返時(shí)延(Round-Trip Time,RTT)變化趨勢圖,第三行為丟包率大小的變化趨勢圖。從圖中可以看出擁塞丟包出現(xiàn)的時(shí)候往往伴隨著較大的RTT和劇烈的丟包率變化,而隨機(jī)鏈路丟包發(fā)生時(shí),RTT和丟包率都相對(duì)而言較平穩(wěn)。在本發(fā)明實(shí)施例中,使用上述當(dāng)前網(wǎng)絡(luò)RTT、當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢參數(shù)以及當(dāng)前網(wǎng)絡(luò)丟包率參數(shù)作為判斷是否處于擁塞狀態(tài)的依據(jù)。
確定模塊101,用于根據(jù)所述網(wǎng)絡(luò)參數(shù)確定當(dāng)前網(wǎng)絡(luò)的丟包類型,所述丟包類型包括擁塞丟包或者隨機(jī)鏈路丟包;
本發(fā)明實(shí)施例中,根據(jù)上述當(dāng)前網(wǎng)絡(luò)時(shí)延參數(shù)、當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢參數(shù)以及當(dāng)前網(wǎng)絡(luò)丟包率參數(shù)中的至少一種網(wǎng)絡(luò)參數(shù)確定當(dāng)前網(wǎng)絡(luò)的丟包類型,該丟包類型包括擁塞丟包或者隨機(jī)鏈路丟包,若為隨機(jī)鏈路丟包,則不會(huì)將該丟包事件作為TFRC中丟包頻率計(jì)算過程中。
可選的,所述網(wǎng)絡(luò)參數(shù)包括當(dāng)前網(wǎng)絡(luò)時(shí)延參數(shù);所述確定模塊101具體用于:
若所述當(dāng)前網(wǎng)絡(luò)時(shí)延參數(shù)大于第一閾值,則確定當(dāng)前網(wǎng)絡(luò)的丟包類型為擁塞丟包;
若所述當(dāng)前網(wǎng)絡(luò)時(shí)延參數(shù)小于或者等于所述第一閾值,則確定當(dāng)前網(wǎng)絡(luò)的丟包類型為隨機(jī)鏈路丟包。
本發(fā)明實(shí)施例中,網(wǎng)絡(luò)時(shí)延參數(shù)可以包括單向時(shí)延或者RTT,這里以RTT為例進(jìn)行說明,當(dāng)RTT升高到第一閾值以上時(shí),認(rèn)為當(dāng)前系統(tǒng)處于擁塞狀態(tài),即是當(dāng)前網(wǎng)絡(luò)的丟包類型為擁塞丟包,若RTT小于或者等于第一閾值,則確定當(dāng)前網(wǎng)絡(luò)丟包類型為隨機(jī)鏈路丟包。
為了排除網(wǎng)絡(luò)物理延時(shí)的干擾,系統(tǒng)在每一次傳輸中維護(hù)一個(gè)最小時(shí)延變量rtt_min,在每個(gè)數(shù)據(jù)包的確認(rèn)(Acknowledgement,ACK)字符反饋到發(fā)送設(shè)備的時(shí)候,記錄其RTT,若RTT小于rtt_min,則rtt_min=RTT。若當(dāng)前RTT>rtt_min+δ,則認(rèn)為當(dāng)前網(wǎng)絡(luò)處于擁塞狀態(tài)。
閾值δ由網(wǎng)絡(luò)瓶頸帶寬、路由隊(duì)列長度和數(shù)據(jù)包大小共同決定,設(shè)路由平均隊(duì)列長度為L_q,帶寬為bw,包大小為s,則RTT能夠上升的最大幅度為rtt_inc=(L_q×s)/bw。一般而言,在出現(xiàn)擁塞的場景中,接收設(shè)備的接收速率recv_rate≈網(wǎng)絡(luò)可用帶寬bw,故RTT上升最大幅度為rtt_inc≈(L_q×s)/(recv_rate),以此可以設(shè)置閾值δ=(L_q×s)/(2recv_rate)。
在真實(shí)系統(tǒng)中,我們難以得知路由隊(duì)列長度,可以保守估計(jì)隊(duì)列長度為50,根據(jù)Bigo Live流媒體傳輸系統(tǒng)中的最大碼率和平均包大小,我們設(shè)置δ=300ms作為一個(gè)保守的閾值,對(duì)RTT異常增大的行為進(jìn)行判斷。
可選的,所述網(wǎng)絡(luò)參數(shù)包括當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢參數(shù);所述確定模塊101具體用于:
若當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢為上升趨勢,則確定當(dāng)前網(wǎng)絡(luò)的丟包類型為擁塞丟包;
若當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢為下降趨勢或者平穩(wěn)趨勢,則確定當(dāng)前網(wǎng)絡(luò)的丟包類型為隨機(jī)鏈路丟包。
本發(fā)明實(shí)施例中,網(wǎng)絡(luò)參數(shù)可以包括當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢參數(shù),如圖2所示,圖2的第三行的圖即是擁塞丟包和隨機(jī)鏈路丟包的丟包率變化趨勢圖,如圖所示,擁塞丟包的丟包率變化趨勢圖是劇烈變化,而隨機(jī)鏈路丟包的丟包率變化趨勢圖是平穩(wěn)變化。
具體可選的,系統(tǒng)維護(hù)近200ms或近20個(gè)數(shù)據(jù)包的丟包率信息,并實(shí)時(shí)檢測其是否處于上升狀態(tài)。若檢測到丟包率處于上升狀態(tài),則認(rèn)為當(dāng)前網(wǎng)絡(luò)處于擁塞狀態(tài),當(dāng)前的丟包事件為擁塞丟包;若檢測到丟包率處于平穩(wěn)狀態(tài),則認(rèn)為當(dāng)前網(wǎng)絡(luò)是隨機(jī)鏈路丟包。為了排除丟包率抖動(dòng)帶來的影響,我們先對(duì)丟包率進(jìn)行時(shí)域低通濾波,濾波方式為:
pktLoss=0.05×pktLoss_t+0.95×pktLoss
設(shè)pktLoss(n)=A×pktLoss(n-1)+w(n),其中pktLoss(n)為n時(shí)刻的pktLoss值,A為狀態(tài)轉(zhuǎn)移參量,w(n)為過程噪聲,w(n)服從N(0,Q)的高斯分布。由此設(shè)計(jì)卡爾曼濾波器估計(jì)每一步中w(n)的值,當(dāng)w(n)>閾值σ,認(rèn)為pktLoss處于上升狀態(tài),判斷為網(wǎng)絡(luò)擁塞,即是擁塞丟包;反之若w(n)<-σ,則認(rèn)為pktLoss處于下降過程,網(wǎng)絡(luò)沒有出現(xiàn)擁塞,丟包為隨機(jī)鏈路丟包;若w(n)∈(-σ,σ),則可以認(rèn)為pktLoss處于平穩(wěn)狀態(tài),網(wǎng)絡(luò)沒有出現(xiàn)擁塞,丟包為隨機(jī)鏈路丟包。需要說明的是,卡爾曼(Kalman)濾波是一種高效率的遞歸濾波器(自回歸濾波器),它能夠從一系列的不完全包含噪聲的測量中,估計(jì)動(dòng)態(tài)系統(tǒng)的狀態(tài)。
在不同的網(wǎng)絡(luò)環(huán)境下,丟包率波動(dòng)的幅度和速率也會(huì)有所不同,Kalman濾波器的閾值σ需要針對(duì)網(wǎng)絡(luò)環(huán)境做自適應(yīng)調(diào)整。調(diào)整策略可被歸納為“快升慢降”:若w(n)∈(-σ,σ),則σ以較慢的速度下降,否則σ以較快的速度上升。這樣的處理方式是讓濾波器在不同的網(wǎng)絡(luò)環(huán)境下都能夠有效檢測出pktLoss的上升/下降過程。
可選的,所述網(wǎng)絡(luò)參數(shù)包括當(dāng)前網(wǎng)絡(luò)丟包率參數(shù);所述確定模塊101具體用于:
若所述當(dāng)前網(wǎng)絡(luò)丟包率大于第二閾值,則確定當(dāng)前網(wǎng)絡(luò)丟包的丟包類型為擁塞丟包;
若所述當(dāng)前網(wǎng)絡(luò)丟包率小于或者等于所述第二閾值,則確定當(dāng)前網(wǎng)絡(luò)丟包的丟包類型為隨機(jī)鏈路丟包。
本發(fā)明實(shí)施例中,對(duì)于流媒體網(wǎng)絡(luò)傳輸系統(tǒng)而言,少量的隨機(jī)鏈路丟包可以通過丟包重傳或者冗余編碼進(jìn)行較好恢復(fù),不會(huì)嚴(yán)重影響流媒體對(duì)端播放質(zhì)量。但是在非常嚴(yán)重丟包的網(wǎng)絡(luò)鏈路下,現(xiàn)有技術(shù)很難解決高丟包造成的丟幀、超時(shí)等問題。所以本發(fā)明實(shí)施例在實(shí)際的流媒體傳輸系統(tǒng)中沒有辦法,也沒有必要保證極高丟包率下的傳輸效果。設(shè)丟包率閾值(即第二閾值)為θ_p,當(dāng)檢測到丟包率大小pktLoss>θ_p時(shí),則有必要降低當(dāng)前發(fā)送速率,這時(shí)候出現(xiàn)的丟包事件也被認(rèn)為是擁塞丟包,被計(jì)入丟包事件頻率計(jì)算。優(yōu)選的,參考Bigo Live的重傳和冗余編碼策略,系統(tǒng)中θ_p設(shè)為50%。若當(dāng)前網(wǎng)絡(luò)丟包率大于該第二閾值時(shí),則確定當(dāng)前網(wǎng)絡(luò)丟包為擁塞丟包,并被計(jì)入丟包事件頻率計(jì)算,若當(dāng)前網(wǎng)絡(luò)丟包率小于或者等于該第二閾值時(shí),則確定當(dāng)前網(wǎng)絡(luò)丟包為隨機(jī)鏈路丟包。
需要說明的是,可以根據(jù)上述三種網(wǎng)絡(luò)參數(shù)(當(dāng)前網(wǎng)絡(luò)時(shí)延參數(shù)、當(dāng)前網(wǎng)絡(luò)丟包率變化趨勢參數(shù)以及當(dāng)前網(wǎng)絡(luò)丟包率參數(shù))中至少一種確定丟包類型,比如可以根據(jù)其中一個(gè)網(wǎng)絡(luò)參數(shù)進(jìn)行確定丟包類型,也可以根據(jù)三個(gè)網(wǎng)絡(luò)參數(shù)中的兩兩組合確定丟包類型,或者也可以根據(jù)三個(gè)網(wǎng)絡(luò)參數(shù)確定丟包類型。
如圖3所示,即是本發(fā)明實(shí)施例提供的一種丟包類型檢測流程圖,需要說明的是,圖中的檢測流程僅為其中一種檢測流程,不構(gòu)成對(duì)本發(fā)明的限定,如圖所示,丟包事件檢測模塊首先檢測RTT是否正常,即是檢測RTT是否大于第一閾值,若大于丟包第一閾值,即是RTT表現(xiàn)不正常,則將丟包事件計(jì)入丟包事件頻率計(jì)算模塊進(jìn)行丟包事件頻率計(jì)算,從而調(diào)整發(fā)送速率;若RTT小于或者等于第一閾值,則判斷丟包率是否平穩(wěn),若丟包率不平穩(wěn),則說明是擁塞丟包,將丟包事件計(jì)入丟包事件頻率計(jì)算模塊進(jìn)行丟包事件頻率計(jì)算,從而調(diào)整發(fā)送速率;若丟包頻率平穩(wěn),則繼續(xù)檢測丟包率是否較低,若丟包率比較大,大于第二閾值,則將其確定為擁塞丟包,計(jì)入丟包事件頻率計(jì)算模塊進(jìn)行丟包事件頻率計(jì)算,從而調(diào)整發(fā)送速率;若丟包率比較小,則直接將其確定為隨機(jī)鏈路丟包,丟棄丟包事件,并按照隨機(jī)鏈路丟包進(jìn)行后續(xù)處理。
調(diào)整模塊102,用于基于所述丟包類型,調(diào)整當(dāng)前網(wǎng)絡(luò)流媒體數(shù)據(jù)的傳輸方式。
可選的,所述調(diào)整模塊102具體用于:
若所述丟包類型為擁塞丟包,則調(diào)整當(dāng)前網(wǎng)絡(luò)流媒體數(shù)據(jù)的發(fā)送速率;
若所述丟包類型為隨機(jī)鏈路丟包,則采用冗余編碼策略對(duì)當(dāng)前網(wǎng)絡(luò)流媒體數(shù)據(jù)進(jìn)行編碼。
本發(fā)明實(shí)施例中,若丟包類型為擁塞丟包,則根據(jù)TFRC協(xié)議的如下計(jì)算公式調(diào)整發(fā)送設(shè)備的發(fā)送速率。
若丟包類型為隨機(jī)鏈路丟包,則采用冗余編碼策略對(duì)當(dāng)前網(wǎng)絡(luò)流媒體數(shù)據(jù)進(jìn)行編碼,從而減小因鏈路影響帶來的丟包。
本發(fā)明實(shí)施例中,獲取用于表示當(dāng)前網(wǎng)絡(luò)狀態(tài)的網(wǎng)絡(luò)參數(shù),根據(jù)網(wǎng)絡(luò)參數(shù)確定當(dāng)前網(wǎng)絡(luò)的丟包類型,該丟包類型包括擁塞丟包或者隨機(jī)鏈路丟包,基于該丟包類型,調(diào)整當(dāng)前網(wǎng)絡(luò)流媒體數(shù)據(jù)的傳輸方式,通過這種方式,可針對(duì)不同的丟包類型進(jìn)行不同的流媒體數(shù)據(jù)傳輸方式調(diào)整,保證較高的數(shù)據(jù)吞吐率,提高流媒體數(shù)據(jù)的傳輸質(zhì)量。
本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:閃存盤、只讀存儲(chǔ)器(Read-Only Memory,ROM)、隨機(jī)存取器(Random Access Memory,RAM)、磁盤或光盤等。
以上對(duì)本發(fā)明實(shí)施例公開的一種客戶端播放控制方法及客戶端進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。