專利名稱:一種網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法
技術(shù)領(lǐng)域:
本發(fā)明 涉及ー種網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法,更具體的說,尤其涉及一種自動(dòng)感知網(wǎng)速環(huán)境、并根據(jù)網(wǎng)速環(huán)境動(dòng)態(tài)調(diào)整視頻數(shù)據(jù)緩沖的網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的迅速發(fā)展,網(wǎng)絡(luò)流媒體應(yīng)用愈加廣泛。網(wǎng)絡(luò)中以流的方式傳輸?shù)拿襟w稱為流媒體,主要是指視頻、音頻等。中國互聯(lián)網(wǎng)絡(luò)信息中心2012年I月發(fā)布的《中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告》指出,“截至2011年12月底,中國網(wǎng)絡(luò)視頻用戶數(shù)量增至
3.25億,年增長率達(dá)到14. 6%,在網(wǎng)民中的使用率由上年底的62. 1%提升至63. 4%”,“(網(wǎng)絡(luò)視頻)目前已成為第五大互聯(lián)網(wǎng)應(yīng)用”。流媒體數(shù)據(jù)相較傳統(tǒng)數(shù)據(jù)有著顯著的區(qū)別及特征1)流媒體的數(shù)據(jù)量遠(yuǎn)大于傳統(tǒng)數(shù)據(jù),以視頻數(shù)據(jù)為例,典型的MPEG-I碼流為I. 5Mbps, I分鐘MPEG-I碼流的數(shù)據(jù)量約
11.25MB ;2)流媒體數(shù)據(jù)有明顯的質(zhì)量特征,如網(wǎng)絡(luò)視頻的清晰度等;3)流媒體數(shù)據(jù)有明顯的時(shí)間相關(guān)性,比如視頻中,幀間的時(shí)間間隔必須遵循用戶感知的范圍限制,否則用戶將明顯的感覺到視頻的不連貫?;谝陨咸卣?,如何使得用戶最終獲得高滿意度的網(wǎng)絡(luò)流媒體服務(wù)成為網(wǎng)絡(luò)和流媒體領(lǐng)域中ー項(xiàng)富有挑戰(zhàn)性的研究課題。目前,解決以上問題普遍的方案一般是著眼于以下幾個(gè)方面1)增加網(wǎng)絡(luò)帶寬,保證網(wǎng)絡(luò)視頻的流暢性滿足用戶需求;2)通過改進(jìn)網(wǎng)絡(luò)領(lǐng)域技木,特別是使用組播和P2P等相關(guān)技術(shù)來節(jié)約網(wǎng)絡(luò)帶寬;3)壓縮技木,即通過減少流媒體本身的數(shù)據(jù)量來適應(yīng)網(wǎng)絡(luò)帶寬的要求。以上三種解決方案都有其自身的局限性,增加網(wǎng)絡(luò)帶寬本身無法滿足不同用戶的個(gè)性化要求,而且本身帶寬成本較高;使用P2P技術(shù)可以在整體上優(yōu)化網(wǎng)絡(luò)使用效率,但不能保證每個(gè)數(shù)據(jù)接收端的視頻連貫性;使用壓縮技術(shù)無法在根本上解決帶寬不足的問題,而且會(huì)使視頻本身的質(zhì)量有所降低。在已有的視頻緩沖領(lǐng)域中,因較少關(guān)注不同視頻接收用戶的帶寬環(huán)境不一致,而造成緩沖模塊缺乏個(gè)性化特點(diǎn),無法根據(jù)不同網(wǎng)絡(luò)環(huán)境自動(dòng)調(diào)整緩沖區(qū)域大小和視頻播放速率,而使緩沖機(jī)制無法有效發(fā)揮其自身的優(yōu)勢和功能。
發(fā)明內(nèi)容
本發(fā)明為了克服上述技術(shù)問題的缺點(diǎn),提供了一種自動(dòng)感知網(wǎng)速環(huán)境、井根據(jù)網(wǎng)速環(huán)境動(dòng)態(tài)調(diào)整視頻數(shù)據(jù)緩沖的網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法。本發(fā)明的網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法,其特別之處在于,包括以下步驟a.建立緩沖隊(duì)列,在視頻接收播放設(shè)備中建立用于存儲(chǔ)視頻數(shù)據(jù)的緩沖隊(duì)列,以便對待播放的視頻數(shù)據(jù)進(jìn)行存儲(chǔ)山.接收數(shù)據(jù)井分塊,以單個(gè)或多個(gè)視頻幀為單元或者按照數(shù)據(jù)長度等分的形式將接收到的數(shù)據(jù)進(jìn)行分塊;c.存入緩沖隊(duì)列,將分塊后的數(shù)據(jù)存入緩沖隊(duì)列中;d.網(wǎng)速環(huán)境檢測,以緩沖隊(duì)列中前η個(gè)數(shù)據(jù)塊為檢測單元,通過比較前η個(gè)數(shù)據(jù)塊的接收時(shí)間與正常播放η個(gè)數(shù)據(jù)塊所需時(shí)間的大小,來對當(dāng)前網(wǎng)速進(jìn)行判斷,η為正整數(shù);e.如果網(wǎng)速滿足正常播放要求,則按照正常播放速率進(jìn)行視頻播放;f.如果網(wǎng)速不滿足正常播放要求,在滿足增加檢測單元的條件下,則在暫停播放的情況下增加檢測單元中數(shù)據(jù)塊的個(gè)數(shù)n,利用n+j代替n,j為正整數(shù);g.降低播放速率,以低于毎秒24幀的速率播放視頻數(shù)據(jù),維持這種低播放速率t時(shí)間段后,再進(jìn)行正常速率的播放。視頻接收播放設(shè)備為可以進(jìn)行視頻播放的終端設(shè)備,每個(gè)數(shù)據(jù)塊中包含一個(gè)或多個(gè)視頻幀,一般選取1-3個(gè)視頻幀;數(shù)據(jù)塊還可按照等分視頻數(shù)據(jù)長度的方式來實(shí)現(xiàn),等分后的數(shù)據(jù)塊包含的視頻長度不應(yīng)超過200毫秒。步驟d中,通過比較接收η個(gè)數(shù)據(jù)塊的耗時(shí)與正常播放η個(gè)數(shù)據(jù)塊所用時(shí)間的大小,來判斷當(dāng)前網(wǎng)速環(huán)境。步驟f中,在暫停狀態(tài)下,増加檢測單元,有效增加了緩沖隊(duì)列中數(shù)據(jù)塊的數(shù)目。步驟g中,采用較低的速率對視頻進(jìn)行播放,而不是采用暫停,使得視頻播放設(shè)備更加適應(yīng)低帶寬的網(wǎng)絡(luò)環(huán)境播放,具有更強(qiáng)適應(yīng)性。
本發(fā)明的網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法,步驟b中以單個(gè)視頻幀為一個(gè)數(shù)據(jù)塊進(jìn)行分塊;所述步驟d包括以下步驟d-Ι.判斷存入到緩沖隊(duì)列中的數(shù)據(jù)塊個(gè)數(shù)是否等于n,如果小于n,則繼續(xù)向緩沖隊(duì)列中存入數(shù)據(jù)塊,并進(jìn)行計(jì)時(shí);d-2.當(dāng)存入到緩沖隊(duì)列中的數(shù)據(jù)個(gè)數(shù)等于η吋,計(jì)算接收這η個(gè)數(shù)據(jù)所花費(fèi)的時(shí)間,設(shè)為T ;比較77 與1/24的大??;d-3.步驟d-2中,如果Th小于或等于1/24,則認(rèn)為網(wǎng)絡(luò)寬帶足夠,滿足正常播放要求;d-4.步驟d-2中,如果'77 大于1/24,則認(rèn)為網(wǎng)絡(luò)寬帶不夠,不能滿足正常播放要求。通過步驟d-1、d-2計(jì)算出了接收η個(gè)數(shù)據(jù)塊所用時(shí)間,Tin為接收單個(gè)視頻幀所用時(shí)間,1/24為正常播放ー幀所用時(shí)間;通過比較Th與1/24的大小,即可有效地實(shí)現(xiàn)對當(dāng)前網(wǎng)絡(luò)寬帶大小的判斷。本發(fā)明的網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法,所述步驟f包括以下步驟f-Ι.讀取緩沖隊(duì)列中數(shù)據(jù)塊的個(gè)數(shù);判斷數(shù)據(jù)塊的個(gè)數(shù)是否小于n,如果判斷結(jié)果為否,則按照正常速率播放視頻數(shù)據(jù)ば-2.如果步驟f-Ι中的判斷結(jié)果為是,記錄數(shù)據(jù)塊個(gè)數(shù)小于η發(fā)生的次數(shù),如果有連續(xù)k次不足η的情況發(fā)生,則利用n+j代替n ;k為大于等于2的正整數(shù)。在得出網(wǎng)絡(luò)寬帶環(huán)境不足時(shí),不是直接増加檢測單元和降低播放速率處理,而是再進(jìn)行進(jìn)一歩的判斷;當(dāng)連續(xù)k次緩沖隊(duì)列中數(shù)據(jù)塊的個(gè)數(shù)不足η個(gè)時(shí),再増加檢測單元和降低播放速率。這是因?yàn)榭紤]到網(wǎng)速的不穩(wěn)定性,可能前幾塊數(shù)據(jù)接收時(shí)網(wǎng)速暫時(shí)較慢。如果有連續(xù)k次不足η的情況發(fā)生,則視為滿足滿足増加檢測單元的條件。本發(fā)明的網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法,步驟c中所述的緩沖隊(duì)列位于視頻接收播放設(shè)備的內(nèi)存中,且緩沖隊(duì)列的大小不高于播放設(shè)備內(nèi)存的50% ;緩沖隊(duì)列為具有先進(jìn)先出功能的數(shù)組或鏈表形式的數(shù)據(jù)結(jié)構(gòu)。本發(fā)明的網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法,步驟g中降低播放速率的方法為以每秒20幀來播放視頻數(shù)據(jù)10s,然后在將播放速率調(diào)回為毎秒24幀。雖然和原來的視頻播放速率毎秒24幀相比較慢ー些,但在人體視覺感知上并沒有強(qiáng)烈影響,而且保證了視頻的連貫播放,不至于導(dǎo)致視頻中斷。
本發(fā)明的有益效果是本發(fā)明的視頻緩沖方法,可自動(dòng)感知網(wǎng)速環(huán)境,井根據(jù)網(wǎng)速環(huán)境自動(dòng)調(diào)整緩沖長度及播放速率,有效地實(shí)現(xiàn)了視頻服務(wù)系統(tǒng)最終用戶在不同網(wǎng)速環(huán)境下的自適應(yīng)帶寬播放;同時(shí)保證了視頻播放的較高連貫度,使得用戶在不同網(wǎng)絡(luò)環(huán)境下最終獲得較高滿意度的網(wǎng)絡(luò)流媒體服務(wù)。
圖I為本發(fā)明的視頻緩沖方法的流程 圖2為本發(fā)明中是否增加檢測單元長度的判斷方法流程 圖3為本發(fā)明中緩沖隊(duì)列和檢測單元的結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面結(jié)合附圖與實(shí)施例對本發(fā)明作進(jìn)ー步說明。如圖I和圖2所示,給出了本發(fā)明的視頻緩沖方法以及其中的是否增加檢測單元長度的判斷方法的流程圖,下面結(jié)合這兩個(gè)流程圖對本發(fā)明的視頻緩沖方法詳細(xì)地進(jìn)行說明。本發(fā)明的網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法,包括以下步驟
a.建立緩沖隊(duì)列,在視頻接收播放設(shè)備中建立用于存儲(chǔ)視頻數(shù)據(jù)的緩沖隊(duì)列,以便對待播放的視頻數(shù)據(jù)進(jìn)行存儲(chǔ);緩沖隊(duì)列建立在視頻接收播放設(shè)備的內(nèi)存中,其可采用先進(jìn)先出形式的數(shù)組或鏈表形式的數(shù)據(jù)結(jié)構(gòu),以不超過內(nèi)存空間的50%為宜;
b.接收數(shù)據(jù)井分塊,以單個(gè)或多個(gè)視頻幀為單元或者按照數(shù)據(jù)長度等分的形式將接收到的數(shù)據(jù)進(jìn)行分塊;一般采用I 3個(gè)視頻幀為ー個(gè)數(shù)據(jù)塊;采用視頻數(shù)據(jù)等分時(shí),形成的數(shù)據(jù)塊長度應(yīng)在200ms以內(nèi);
c.存入緩沖隊(duì)列,將分塊后的數(shù)據(jù)存入緩沖隊(duì)列中;
d.網(wǎng)速環(huán)境檢測,以緩沖隊(duì)列中前η個(gè)數(shù)據(jù)塊為檢測單元,通過比較前η個(gè)數(shù)據(jù)塊的接收時(shí)間與正常播放η個(gè)數(shù)據(jù)塊所需時(shí)間的大小,來對當(dāng)前網(wǎng)速進(jìn)行判斷,η為正整數(shù);例如η取值為5 ;
如果步驟b中以單個(gè)視頻幀為ー個(gè)數(shù)據(jù)塊進(jìn)行分塊;那么該步驟的網(wǎng)速環(huán)境檢測可以通過以下步驟來實(shí)現(xiàn)
d-Ι.判斷存入到緩沖隊(duì)列中的數(shù)據(jù)塊個(gè)數(shù)是否等于n,如果小于n,則繼續(xù)向緩沖隊(duì)列中存入數(shù)據(jù)塊,并進(jìn)行計(jì)時(shí);
d-2.當(dāng)存入到緩沖隊(duì)列中的數(shù)據(jù)個(gè)數(shù)等于η時(shí),計(jì)算接收這η個(gè)數(shù)據(jù)所花費(fèi)的時(shí)間,設(shè)為T ;比較77 與1/24的大??;
d-3.步驟d-2中,如果77 小于或等于1/24,則認(rèn)為網(wǎng)絡(luò)寬帶足夠,滿足正常播放要
求;
d-4.步驟d-2中,如果77 大于1/24,則認(rèn)為網(wǎng)絡(luò)寬帶不夠,不能滿足正常播放要求;
e.如果網(wǎng)速滿足正常播放要求,則按照正常播放速率進(jìn)行視頻播放;
f.如果網(wǎng)速不滿足正常播放要求,則在暫停播放的情況下增加檢測單元中數(shù)據(jù)塊的個(gè)數(shù)n,利用n+j代替n,j為正整數(shù);
該步驟f可以通過一下步驟來實(shí)現(xiàn)f-1.讀取緩沖隊(duì)列中數(shù)據(jù)塊的個(gè)數(shù);判斷數(shù)據(jù)塊的個(gè)數(shù)是否小于n,如果判斷結(jié)果為否,則按照正常速率播放視頻數(shù)據(jù);
f-2.如果步驟f-1中的判斷結(jié)果為是,記錄數(shù)據(jù)塊個(gè)數(shù)小于η發(fā)生的次數(shù),如果有連續(xù)k次不足η的情況發(fā)生,則利用n+j代替n ;k為大于等于2的正整數(shù);其中k、j的值可均取為2,替代前后的緩沖隊(duì)列和檢測單元的結(jié)構(gòu)示意圖如圖3所示;
經(jīng)過步驟f-Ι和f_2,在網(wǎng)速不滿足正常播放要求的情況下,不直接増加檢測單元的長度和降低播放速率,而是通過判斷緩沖隊(duì)列中是否有連續(xù)k次不足η的情況發(fā)生,來進(jìn)ー步確定當(dāng)前網(wǎng)速不足以滿足正常的播放;
g.降低播放速率,以低于毎秒24幀的速率播放視頻數(shù)據(jù),維持這種低播放速率t時(shí)間段后,再進(jìn)行正常速率的播放;采用降低播放速率而非暫定的處理方法,保證了視頻播放的 較高連貫度,使得用戶在不同網(wǎng)絡(luò)環(huán)境下最終獲得較高滿意度的網(wǎng)絡(luò)流媒體服務(wù)。其中,視頻數(shù)據(jù)接收及分塊是為整個(gè)緩沖方法提供基礎(chǔ)數(shù)據(jù);緩沖隊(duì)列入隊(duì)是為基礎(chǔ)數(shù)據(jù)提供緩沖隊(duì)列的數(shù)據(jù)結(jié)構(gòu),并為感知網(wǎng)速和動(dòng)態(tài)調(diào)整播放速率做基礎(chǔ)準(zhǔn)備;感知網(wǎng)速環(huán)境是本發(fā)明所述方法的核心,通過感知網(wǎng)速環(huán)境來判斷視頻接收端用戶所在的網(wǎng)絡(luò)帶寬,并據(jù)此進(jìn)行進(jìn)ー步的操作;根據(jù)感知網(wǎng)速環(huán)境所判斷出的結(jié)果,如果結(jié)果是當(dāng)前用戶所在網(wǎng)絡(luò)帶寬不足,則對緩沖隊(duì)列進(jìn)行調(diào)整;對緩沖隊(duì)列進(jìn)行調(diào)整后,也要對視頻讀取播放速率進(jìn)行調(diào)整,之后對視頻數(shù)據(jù)進(jìn)行讀取和播放;如果根據(jù)步驟S3判斷的結(jié)果為當(dāng)前用戶所在網(wǎng)絡(luò)帶寬滿足視頻連貫播放需求,則直接對緩沖隊(duì)列中的視頻數(shù)據(jù)進(jìn)行讀取和播放。為了更為詳盡的說明,在采用編程語言C++的情況下,以在已有的視頻會(huì)議程序中増加可以自動(dòng)感知網(wǎng)速環(huán)境并根據(jù)網(wǎng)速環(huán)境自動(dòng)調(diào)整緩沖長度及播放速率的視頻數(shù)據(jù)緩沖模塊為具體的實(shí)施例,進(jìn)行進(jìn)一步的說明。由于本發(fā)明所涉及的緩沖方法集成于已有的視頻服務(wù)系統(tǒng)接收端中,針對原有數(shù)據(jù)接收端的數(shù)據(jù)流結(jié)構(gòu)不同,采用不同的分塊方法。每個(gè)數(shù)據(jù)塊中包含有ー幀的視頻數(shù)據(jù),每個(gè)數(shù)據(jù)塊中包含的視頻播放時(shí)間長度約為41. 7毫秒(I秒/24幀)。緩沖隊(duì)列是ー種特殊的線性表,它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作。進(jìn)行插入操作的端稱為隊(duì)尾,進(jìn)行刪除操作的端稱為隊(duì)頭。在隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)中,最先插入的元素將是最先被刪除的元素;反之最后插入的元素將最后被刪除的元素,因此隊(duì)列又稱為“先進(jìn)先出”(FIFO — first in first out)的線性表。實(shí)現(xiàn)緩沖隊(duì)列數(shù)據(jù)結(jié)構(gòu)的方式可有多種,主要可以使用數(shù)組和鏈表等數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。具體地,采用鏈表作為緩沖隊(duì)列的實(shí)現(xiàn)方式,為了方便本例的實(shí)現(xiàn),可采用如下結(jié)構(gòu)體
struct node{
unsigned char bdata[30000]; int bsize ; int T; int D;
struct node 氺next;
};
struct bufferlink {node 氺front;node 氺rear;int count;
};
以上程序片段中,結(jié)構(gòu)體node代表存儲(chǔ)每一個(gè)數(shù)據(jù)分塊的節(jié)點(diǎn),節(jié)點(diǎn)除了包含視頻數(shù)據(jù)bdata、數(shù)據(jù)長度bsize和視頻長度T外,還包含鏈 表結(jié)構(gòu)中該節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)的指針next,另外D是記錄每個(gè)數(shù)據(jù)塊接收到的系統(tǒng)時(shí)間,這個(gè)參數(shù)是為感知網(wǎng)速環(huán)境所準(zhǔn)備的。結(jié)構(gòu)體bufferlink是由node組成的鏈表,該鏈表存儲(chǔ)在接收端計(jì)算機(jī)內(nèi)存中,本實(shí)施例中,count定義為1000,也就是說該鏈表最大存儲(chǔ)數(shù)據(jù)塊個(gè)數(shù)為1000個(gè),不大于本實(shí)施例運(yùn)行計(jì)算機(jī)的內(nèi)存的50%。本實(shí)施例中,數(shù)據(jù)分塊后存入緩沖隊(duì)列的程序片段如下所示 if(bufferlinkl->count==0)
{
P= (struct node 木)malloc(sizeof(struct node));for (int i=0;i〈=30000;i++)
{p->bdata[i]=vdata[i];} p->bsize=retvalue; p->T=42; p->next=NULL; bufferlinkl->front=p; bufferlinkl->rear=p; bufferlinkl_>count++;
}
else
{
P= (struct node 木)malloc(sizeof(struct node));for (int i=0;i〈=30000;i++)
{p->bdata[i]=vdata[i];} p->bsize=retvalue; p->T=42;
p->next=bufferlinkl->rear->next;bufferlinkl->rear->next=p;bufferlinkl->rear=p;bufferlinkl_>count++;
}
需要指出的一點(diǎn),由于本實(shí)施例是基于視頻采集設(shè)備按幀發(fā)送傳輸數(shù)據(jù),因此結(jié)構(gòu)體node中每個(gè)數(shù)據(jù)塊包含視頻長度都是42。不失一般性,這里介紹一下如果基于其他分塊方式,rO是如何記錄并存入緩沖隊(duì)列的。對于采用RTP/RTCP協(xié)議、RSTP協(xié)議的網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)可以直接在接收到的報(bào)文中讀出,并在存入各node中記錄,即在緩沖隊(duì)列存入時(shí)用“P->T= Timesatmp;”賦值語句替換掉上述程序片段中的“p->T=42;”。對于采用其他自編協(xié)議進(jìn)行數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)視頻服務(wù)系統(tǒng),由于采用公式m)=Size(i) (T(total)/Size (total))進(jìn)行估算,所以先將視頻總時(shí)間TotalTime和視頻數(shù)據(jù)總大小TotalSize以及當(dāng)前數(shù)據(jù)塊大小bsize讀取出來,然后可以用“p->T= p->bsize* (TotalTime/TotalSize); ”賦值語句替換掉上述程序片段中的“p_>T=42; ”。在數(shù)據(jù)接收和分塊以及存入緩沖隊(duì)列完成后,在進(jìn)行網(wǎng)速環(huán)境檢測。如圖3所示,整個(gè)緩沖隊(duì)列被分為兩部分,緩沖隊(duì)列的前η塊為判斷網(wǎng)速環(huán)境所需的檢測單元,其數(shù)據(jù)塊的數(shù)量為η。在初始狀態(tài)下,整個(gè)緩沖隊(duì)列為空隊(duì)列,在緩沖隊(duì)列存入前η個(gè)視頻數(shù)據(jù)時(shí),是不進(jìn)行以后步驟的,也就是不給播放視頻的功能提供數(shù)據(jù)。以實(shí)施例為例,實(shí)施例中ri=5。判斷條件為
while (bufTeriinKl->countノηノ
當(dāng)緩沖隊(duì)列的前η塊已被填滿后,需要計(jì)算接收到此時(shí)填滿的時(shí)間。結(jié)構(gòu)體node中,參數(shù)D的作用是當(dāng)每一個(gè)數(shù)據(jù)塊被存入緩沖隊(duì)列中時(shí),記錄當(dāng)時(shí)的系統(tǒng)時(shí)間(百毫秒級)并賦值給D。也就是說,在緩沖隊(duì)列中,每ー個(gè)節(jié)點(diǎn)接收到的時(shí)間我們都已經(jīng)記錄下來,計(jì)算前η塊數(shù)據(jù)塊填滿的時(shí)間只需要采用如下公式即可
Σ D=D (n)-D(X)
網(wǎng)速帶寬是否足夠的判斷過程是通過前η塊數(shù)據(jù)接收時(shí)間與數(shù)據(jù)正常播放所需時(shí)間的比較來實(shí)現(xiàn)的,以此來判斷網(wǎng)速情況。數(shù)據(jù)正常播放所需時(shí)間也就是前η塊數(shù)據(jù)塊中記錄的τα)之和rrcノ。如果r入則表示前η塊數(shù)據(jù)接收的時(shí)間比播放所需時(shí)
間短,當(dāng)前的網(wǎng)絡(luò)帶寬可以滿足正常播放該視頻的要求;如果Γ似rrG入則表示當(dāng)前網(wǎng)速環(huán)境不滿足正常播放該視頻的要求,需要進(jìn)ー步調(diào)整緩沖隊(duì)列及播放速率。由于數(shù)據(jù)是按幀分塊的,每秒播放24幀數(shù)據(jù),相當(dāng)于每幀播放速率為I秒/24幀^ 41. 7毫秒。如果前5塊數(shù)據(jù)是在41. 7毫秒*5=208. 5毫秒內(nèi)接收完成的,可以判斷出當(dāng)前的網(wǎng)絡(luò)環(huán)境是能夠滿足視頻播放連貫的要求的,即每秒播放24幀數(shù)據(jù)。如果前5塊數(shù)據(jù)接收時(shí)間大于208. 5毫秒,則可以判斷出當(dāng)前網(wǎng)絡(luò)環(huán)境的網(wǎng)絡(luò)帶寬無法滿足視頻連貫播放。如果判斷結(jié)果為當(dāng)前網(wǎng)絡(luò)環(huán)境符合視頻播放要求,則按照正常播放速率進(jìn)行視頻播放;如果判斷結(jié)果為當(dāng)前網(wǎng)絡(luò)帶寬不足以滿足視頻播放要求,先暫不直接調(diào)整緩沖隊(duì)列的長度,這是因?yàn)榭紤]到網(wǎng)速的不穩(wěn)定性,可能前幾塊數(shù)據(jù)接收時(shí)網(wǎng)速暫時(shí)較慢,但此時(shí)應(yīng)啟動(dòng)調(diào)整緩沖隊(duì)列長度的預(yù)處理過程。調(diào)整緩沖隊(duì)列長度的預(yù)處理過程如圖2所示。即在播放取出緩沖隊(duì)列的數(shù)據(jù)時(shí)首先進(jìn)行判斷,判斷當(dāng)前緩沖隊(duì)列中是否還有超過η個(gè)已緩沖的數(shù)據(jù)。如果仍有η個(gè)數(shù)據(jù),則繼續(xù)進(jìn)行讀取數(shù)據(jù)并播放數(shù)據(jù);如果已經(jīng)少于η塊數(shù)據(jù),則不取出數(shù)據(jù),并對這種情況發(fā)生的次數(shù)進(jìn)行計(jì)數(shù)。如果連續(xù)k次(k大于等于2,一般取k=2)無法取出數(shù)據(jù),即連續(xù)k次緩沖隊(duì)列內(nèi)數(shù)據(jù)個(gè)數(shù)都少于n,則認(rèn)為當(dāng)前網(wǎng)速環(huán)境下,已有的緩沖隊(duì)列長度不夠。在這種情況下,程序自動(dòng)調(diào)整緩沖隊(duì)列η的長度,調(diào)整后的n’ =n+j,可以取k=j。調(diào)整前后的緩沖隊(duì)列分別入圖3中的上下兩圖所示。如果連續(xù)兩次讀取數(shù)據(jù)時(shí),緩沖隊(duì)列中數(shù)據(jù)塊個(gè)數(shù)都少于5個(gè)時(shí),則暫停播放讀取數(shù)據(jù),同時(shí)調(diào)整緩沖隊(duì)列的長度n=7。 暫停播放讀取數(shù)據(jù)的過程采用ー個(gè)開關(guān)參數(shù)OK實(shí)現(xiàn),也就是OK=I時(shí)可以正常播放,OK=O時(shí),則暫停播放。具體的程序片段如下 if(0K!=0)
{
OK=O;
if(bufferlinkl->count>n)
{
q=bufferlinkl->front;
((CVideoNetDlg *)pdlg)->DisplayRemoteFrame(q->bdata, q->bsize);
OK=I;
};
else
{
n=n+j ;
}
}
調(diào)整播放視頻速率步驟,在默認(rèn)情況下,視頻數(shù)據(jù)讀取并播放的速率為每秒24幀,當(dāng)進(jìn)行完緩沖隊(duì)列調(diào)整后,如果不調(diào)整視頻數(shù)據(jù)讀取和播放的速率,則會(huì)導(dǎo)致調(diào)整后的緩沖隊(duì)列內(nèi)視頻數(shù)據(jù)塊的個(gè)數(shù)一直不足η塊,導(dǎo)致視頻暫時(shí)中斷播放,影響用戶正常觀看視頻。為此,本發(fā)明在進(jìn)行完緩沖隊(duì)列調(diào)整后,需要適當(dāng)調(diào)整視頻數(shù)據(jù)讀取及播放的速率,在不強(qiáng)烈影響用戶的視頻服務(wù)感受基礎(chǔ)上,對其進(jìn)行微量調(diào)整,即當(dāng)且僅當(dāng)在調(diào)整緩沖隊(duì)列長度之后,調(diào)整讀取的時(shí)間間隔S⑴=β S(i-V,其中依-U表示讀取的當(dāng)前數(shù)據(jù)塊與前ー個(gè)數(shù)據(jù)塊的時(shí)間間隔。對于已經(jīng)記錄了每個(gè)數(shù)據(jù)塊所包含的視頻時(shí)間長度,可以取ノニ re-1 入即可以取上一塊數(shù)據(jù)塊中所包含視頻時(shí)間長度來定義當(dāng)前快讀取的時(shí)間間隔。β表示調(diào)整系數(shù),一般取".2。在以此速率播放10秒時(shí)間后,將調(diào)整系數(shù)O在調(diào)整為1,即以調(diào)整之前的播放速率進(jìn)行數(shù)據(jù)讀取和視頻播放。具體地,默認(rèn)的播放速率為42毫秒,也就是每秒約24幀數(shù)據(jù)。由于本實(shí)施例中每一塊數(shù)據(jù)就是視頻的ー幀,所以讀取的速率也是每隔42毫秒讀取一次。當(dāng)調(diào)整完緩沖隊(duì)列后,在原視頻讀取的程序后添加如下程序,使得讀取速率變低。......
N=L 2*42;
Sleep(N);
其中,“N=L 2*42; ”表不原來甸隔42暈秒基礎(chǔ)上,調(diào)整為I. 2*42暈秒的間隔時(shí)間。這樣調(diào)整的結(jié)果使得讀取和播放速率達(dá)到每秒約20幀,雖然和原來的視頻播放速率毎秒24幀相比較慢ー些,但在人體視覺感知上并沒有強(qiáng)烈影響,而且保證了視頻的連貫播放,不至于導(dǎo)致視頻中斷。在啟動(dòng)上述程序的同時(shí)啟動(dòng)計(jì)時(shí)器,當(dāng)計(jì)時(shí)器記錄時(shí)間10秒后,將N調(diào)整為41,并關(guān)閉計(jì)時(shí)器。來使視頻數(shù)據(jù)讀取和播放的速率恢復(fù)為調(diào)整之前的狀態(tài)。經(jīng)過上述步驟的處理后,可以由原有的視頻服務(wù)系統(tǒng)接收端來讀取數(shù)據(jù)并進(jìn)行播放。也可以將本發(fā)明所述方法的緩沖隊(duì)列中數(shù)據(jù)讀取后發(fā)送給原有的視頻服務(wù)系統(tǒng)數(shù)據(jù)接收端進(jìn)行處理。具體地,在本實(shí)施例中,采用直接讀取緩沖隊(duì)列中的視頻數(shù)據(jù)后,調(diào)用原有的播放功能,進(jìn)行播放。在讀取視頻數(shù)據(jù)后,將該數(shù)據(jù)在緩沖隊(duì)列中刪除。具體的程序片段如下
q=bufferlinkl->front;
((CVideoNetDlg 氺)pdlg)->DisplayRemoteFrame(q->bdata,q->bsize);
if (bufferlinkl->front->next!=NULL) bufferlinkl->front=bufferlinkl->front->next; bufferlinkl->count—;
free;
在上述程序片段中,讀出緩沖隊(duì)列第一個(gè)數(shù)據(jù)塊后,直接調(diào)用原有的視頻播放函數(shù)DisplayRemoteFrame進(jìn)行數(shù)據(jù)播放,同時(shí)將緩沖隊(duì)列第一個(gè)數(shù)據(jù)塊刪除,并釋放其內(nèi)存,同時(shí)將原緩沖隊(duì)列第二個(gè)數(shù)據(jù)塊當(dāng)做新緩沖隊(duì)列的第一塊,以待下ー塊數(shù)據(jù)的播放。
權(quán)利要求
1.ー種網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法,其特征在于,包括以下步驟 a.建立緩沖隊(duì)列,在視頻接收播放設(shè)備中建立用于存儲(chǔ)視頻數(shù)據(jù)的緩沖隊(duì)列,以便對待播放的視頻數(shù)據(jù)進(jìn)行存儲(chǔ); b.接收數(shù)據(jù)井分塊,以單個(gè)或多個(gè)視頻幀為單元或者按照數(shù)據(jù)長度等分的形式將接收到的數(shù)據(jù)進(jìn)行分塊; c.存入緩沖隊(duì)列,將分塊后的數(shù)據(jù)存入緩沖隊(duì)列中; d.網(wǎng)速環(huán)境檢測,以緩沖隊(duì)列中前η個(gè)數(shù)據(jù)塊為檢測單元,通過比較前η個(gè)數(shù)據(jù)塊的接收時(shí)間與正常播放η個(gè)數(shù)據(jù)塊所需時(shí)間的大小,來對當(dāng)前網(wǎng)速進(jìn)行判斷,η為正整數(shù); e.如果網(wǎng)速滿足正常播放要求,則按照正常播放速率進(jìn)行視頻播放; f.如果網(wǎng)速不滿足正常播放要求,在滿足增加檢測單元的條件下,則在暫停播放的情況下增加檢測單元中數(shù)據(jù)塊的個(gè)數(shù)n,利用n+j代替n,j為正整數(shù); g.降低播放速率,則以低于每秒24幀的速率播放視頻數(shù)據(jù),維持這種低播放速率t時(shí)間段后,再進(jìn)行正常速率的播放。
2.根據(jù)權(quán)利要求I所述的網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法,其特征在于,步驟b中以單個(gè)視頻幀為ー個(gè)數(shù)據(jù)塊進(jìn)行分塊;所述步驟d包括以下步驟 d-Ι.判斷存入到緩沖隊(duì)列中的數(shù)據(jù)塊個(gè)數(shù)是否等于n,如果小于n,則繼續(xù)向緩沖隊(duì)列中存入數(shù)據(jù)塊,并進(jìn)行計(jì)時(shí); d-2.當(dāng)存入到緩沖隊(duì)列中的數(shù)據(jù)個(gè)數(shù)等于η時(shí),計(jì)算接收這η個(gè)數(shù)據(jù)所花費(fèi)的時(shí)間,設(shè)為T ;比較'Tin與1/24的大??; d-3.步驟d-2中,如果77 小于或等于1/24,則認(rèn)為網(wǎng)絡(luò)寬帶足夠,滿足正常播放要求; d-4.步驟d-2中,如果77 大于1/24,則認(rèn)為網(wǎng)絡(luò)寬帶不夠,不能滿足正常播放要求。
3.根據(jù)權(quán)利要求I或2所述的網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法,其特征在干,所述步驟f包括以下步驟 f-1.讀取緩沖隊(duì)列中數(shù)據(jù)塊的個(gè)數(shù);判斷數(shù)據(jù)塊的個(gè)數(shù)是否小于n,如果判斷結(jié)果為否,則按照正常速率播放視頻數(shù)據(jù); f-2.如果步驟f-1中的判斷結(jié)果為是,記錄數(shù)據(jù)塊個(gè)數(shù)小于η發(fā)生的次數(shù),如果有連續(xù)k次不足η的情況發(fā)生,則利用n+j代替n ;k為大于等于2的正整數(shù)。
4.根據(jù)權(quán)利要求I或2所述的網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法,其特征在于步驟c中所述的緩沖隊(duì)列位于視頻接收播放設(shè)備的內(nèi)存中,且緩沖隊(duì)列的大小不高于播放設(shè)備內(nèi)存的50% ;緩沖隊(duì)列為具有先進(jìn)先出功能的數(shù)組或鏈表形式的數(shù)據(jù)結(jié)構(gòu)。
5.根據(jù)權(quán)利要求I或2所述的網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法,其特征在干,步驟g中降低播放速率的方法為以每秒20幀來播放視頻數(shù)據(jù)10s,然后在將播放速率調(diào)回為每秒24幀。
全文摘要
本發(fā)明的網(wǎng)絡(luò)視頻服務(wù)系統(tǒng)接收端的視頻緩沖方法,包括a.建立緩沖隊(duì)列;b.接收數(shù)據(jù)并分塊;c.存入緩沖隊(duì)列;d.比較前n個(gè)數(shù)據(jù)塊的接收與播放時(shí)間的大小,判斷當(dāng)前網(wǎng)速大?。籩.如網(wǎng)速足夠,則按照正常速率播放;f.如網(wǎng)速不夠,則進(jìn)行進(jìn)一步判斷;g.降低播放速率。步驟f包括f-1.如果緩沖隊(duì)列中數(shù)據(jù)塊個(gè)數(shù)大于n,則正常播放;f-2.如果連續(xù)k次不足n,則利用n+j代替n。本發(fā)明的視頻緩沖方法,可自動(dòng)感知網(wǎng)速環(huán)境,并根據(jù)網(wǎng)速環(huán)境自動(dòng)調(diào)整緩沖長度及播放速率,有效地實(shí)現(xiàn)了視頻服務(wù)系統(tǒng)最終用戶在不同網(wǎng)速環(huán)境下的自適應(yīng)帶寬播放;同時(shí)保證了視頻播放的較高連貫度,使得用戶在不同網(wǎng)絡(luò)環(huán)境下最終獲得較高滿意度的網(wǎng)絡(luò)流媒體服務(wù)。
文檔編號H04N21/462GK102665131SQ20121012746
公開日2012年9月12日 申請日期2012年4月27日 優(yōu)先權(quán)日2012年4月27日
發(fā)明者史慧玲, 孫萌, 張新常, 張瑋, 楊美紅, 王魯 申請人:山東省計(jì)算中心