本發(fā)明屬于視頻傳輸技術(shù)領(lǐng)域,涉及基于mpeg-dash協(xié)議的流媒體視頻或音頻的傳輸,具體涉及一種基于mpeg-dash協(xié)議的動態(tài)自適應碼率選擇方法。
背景技術(shù):
目前,隨著網(wǎng)絡(luò)帶寬的不斷增加,人們對媒體信息的需求也在不斷增長。據(jù)cisco公司在年五月發(fā)布的報告中顯示,到2017年,媒體流量將占據(jù)整個網(wǎng)絡(luò)流量的86%,各類媒體應用將成為人們信息化生活中不可或缺的一部分。當前各種多媒體應用層出不窮,它們?yōu)槿藗兲峁┘纛l,視頻,圖文于一體的綜合體驗。人們期望獲得更快速,更流暢,更高質(zhì)量的媒體服務(wù)體驗,如何滿足這一需求成為當今流媒體技術(shù)的一大難點。
流媒體技術(shù)指的是采用流式傳輸方式傳輸媒體數(shù)據(jù)的技術(shù),它的主要特點由服務(wù)器向用戶連續(xù)、實時地傳送媒體數(shù)據(jù)。在采用流媒體技術(shù)的系統(tǒng)中,用戶無需等待全部數(shù)據(jù)下載完成即可進行播放,即實現(xiàn)邊下載邊播放的效果,大大降低了用戶啟動時間和對用戶側(cè)緩存大小的需求。傳統(tǒng)的rtp/rtsp流媒體技術(shù)采用udp協(xié)議進行數(shù)據(jù)傳輸,因此僅能提供不可靠的傳輸。此外由于rtp/rtsp流媒體技術(shù)需要特定的流媒體服務(wù)器,導致部署成本較高。針對這些問題,http動態(tài)自適應流媒體(dash,dynamicadaptivestreamingoverhttp)技術(shù)成為近年來流媒體界的新寵。該技術(shù)釆用http/tcp協(xié)議架構(gòu),為用戶提供可靠的數(shù)據(jù)傳輸。同時該技術(shù)使用的是80端口,因此可以輕松穿越防火墻。再者,dash技術(shù)可以重用普通的web服務(wù)器,部署成本低。最后,該技術(shù)支持同一媒體內(nèi)容不同質(zhì)量級別的媒體表示,尤其是移動端用戶可以根據(jù)設(shè)備能力、緩存區(qū)大小和實時網(wǎng)絡(luò)帶寬情況實時調(diào)整請求的媒體質(zhì)量級別,具備動態(tài)自適應的特點。因此,dash技術(shù)得到了各類廠商和標準化組織的廣泛關(guān)注,有望成為下一代主流流媒體技術(shù)。
但是mpeg-dash協(xié)議只定義了mpd文件結(jié)構(gòu)以及流媒體切片格式,并沒有規(guī)定客戶端選擇切片文件的流程或機制,在某種程度上基于dash協(xié)議的動態(tài)自適應碼率選擇方法的好壞直接決定了流媒體傳輸效率的高低和用戶的觀看體驗,所以基于dash協(xié)議的動態(tài)自適應碼率選擇方法有著很大的研究和發(fā)展空間,而現(xiàn)在還未有類似技術(shù)出現(xiàn)。
技術(shù)實現(xiàn)要素:
為實現(xiàn)上述目的,本發(fā)明提供一種基于mpeg-dash協(xié)議的動態(tài)自適應碼率選擇方法,實現(xiàn)了在流暢播放的前提下盡可能的提高視頻質(zhì)量,極大的增強了用戶觀看體驗。
本發(fā)明所采用的技術(shù)方案是,基于mpeg-dash協(xié)議的動態(tài)自適應碼率選擇方法,具體按照以下步驟進行:
步驟1,建立服務(wù)器與客戶端的http連接;
步驟2,客戶端向服務(wù)器發(fā)送httpget請求,請求下載mpd文件并存儲;
步驟3,服務(wù)器收到客戶端的請求后對客戶端進行響應發(fā)送mpd文件,客戶端對mpd文件進行下載并對下載的mpd文件進行解析;為了使視頻可以盡快開始播放,根據(jù)解析mpd文件所得到的視頻分片的url所對應的碼率范圍先以最小碼率下載一部分視頻切片,服務(wù)器收到請求后給客戶端發(fā)送視頻切片文件,客戶端對切片文件進行下載;
步驟4,對步驟3下載視頻切片時的網(wǎng)絡(luò)帶寬進行計算,統(tǒng)計和記錄并運用卡爾曼濾波預測法對下載下一個視頻分片時的網(wǎng)絡(luò)帶寬進行預測;
步驟5,根據(jù)步驟4所得到的預測帶寬并結(jié)合當前緩存區(qū)視頻切片剩余情況對下載下一個視頻切片的碼率做出選擇;
步驟6,若視頻切片沒有全部下載完成則跳轉(zhuǎn)到步驟4-5,繼續(xù)執(zhí)行預測和下載過程,否則退出循環(huán)過程,方法結(jié)束。
進一步的,所述步驟1的具體過程是:
步驟11:創(chuàng)建一個url對象;
步驟12:創(chuàng)建一個http鏈接;
步驟13:使用io流獲取數(shù)據(jù)。
進一步的,所述步驟2的具體過程是:
步驟21:判斷mpd文件是否存在,若存在則返回1否則返回0;
步驟22:文件不存在時對文件進行下載;
步驟23:對下載完成的文件進行存儲。
進一步的,所述步驟3的具體過程是:
步驟31:獲取mpd文件中representation元素的指定屬性,只需要獲取id,width,height三個屬性;
步驟32:獲取mpd文件中每個等級視頻切片的url;
步驟33:根據(jù)解析mpd文件所得url地址選取最小碼率的視頻切片進行下載。
進一步的,所述步驟4的具體過程是:
步驟41:獲取已下載分片的網(wǎng)絡(luò)帶寬bn:
其中:tn(e)表示第n個切片下載完成的時間;tn(s)表示第n個切片開始下載的時間;r(n)表示第n個切片所選的碼率;θ表示每個切片播放持續(xù)的時間,其值為2秒;bn是第n個切片的網(wǎng)絡(luò)下載帶寬值;
步驟42:建立系統(tǒng)狀態(tài)方程和量測方程:
其中:bn+1是第n+1個切片的預測下載帶寬值;yn+1是n+1個切片帶寬量測值;a是狀態(tài)轉(zhuǎn)移矩陣,反映了系統(tǒng)從第n個切片的下載帶寬到第n+1個的狀態(tài)變化;un是第n個切片的控制向量;b是控制分配矩陣;qn和rn+1分別是系統(tǒng)噪聲和測量噪聲,qn的統(tǒng)計特性e[qn]=0,rn+1的統(tǒng)計特性e[rn+1]=0;h為觀測矩陣;
步驟43:由第n個分片的最優(yōu)帶寬值
步驟44:由上一次的誤差協(xié)方差pn和系統(tǒng)噪聲qn的協(xié)方差q預測新的誤差協(xié)方差
其中q為系統(tǒng)噪聲qn的協(xié)方差,類型屬于高斯白噪聲;
步驟45:計算卡爾曼增益
其中r為測量噪聲rn+1的協(xié)方差;
步驟46:對
此時
步驟47:若切片尚未全部下載完成則繼續(xù)步驟48,否則退出整個預測過程;
步驟48:為下一步估計第n+2個切片的最優(yōu)帶寬值的迭代進行更新操作,即更新pn+1值:
pn+1是第n+1個切片的最優(yōu)帶寬偏差;
步驟49,跳轉(zhuǎn)到步驟43,一直重復至到步驟47終結(jié)。
進一步的,所述步驟5的具體過程是:
步驟51:若視頻分片未全部下載完成,即仍然存在預測帶寬,則執(zhí)行步驟52,否則下載過程結(jié)束;
步驟52:
為了確保緩存區(qū)不出現(xiàn)上溢及下溢,同時確保緩沖區(qū)可以有效抵消帶寬波動所造成的預測不準確帶來的播放停滯或緩沖區(qū)上溢的可能性,現(xiàn)對緩沖區(qū)設(shè)置兩個時間閥值qmin和qmax,根據(jù)緩沖區(qū)設(shè)置的閥值和已經(jīng)存在的分片數(shù)以及預測帶寬來決定所要選取的碼率值。
進一步的,所述步驟52的具體過程是:
步驟521:
計算第n個分片sn下載完成后緩沖區(qū)剩余的時長:
t(tn(e))=t(tn(s))+θ-(tn(e)-tn(s))(8)
其中t(tn(e))表示第n個分片下載完后緩沖區(qū)時長,同時也是開始下載第n+1個切片時緩沖區(qū)的時長,t(tn(s))表示開始下載第n個分片時緩沖區(qū)的時長,同時也是下載完第n-1個分片時緩沖區(qū)的時長;
步驟522:
當t(tn+1(s))<qmin時緩存區(qū)的切片有用完的可能性,為了確保緩沖區(qū)有足夠的視頻切片必須保證t(tn+1(e))≥qmin,則其碼率需滿足:
ψ無含義,僅將公式等號左面計算得到的值記為ψ,第n+1片所選取的碼率r(n+1)值為max(r(1),ψ),但是由于碼率值是一系列離散值,所以在保證視頻播放流暢的前提下最終的碼率值為距離max(r(1),ψ)最近的向下取定的碼率值,其中r(1)為視頻切片生成時的最小碼率;
步驟523:
當t(tn+1(s))>qmax時緩沖區(qū)有了足夠的切片,繼續(xù)下載有上溢出的可能性,為了確保緩沖區(qū)不上溢保證t(tn+1(e))≤qmax,則其碼率需要滿足:
ξ無含義,僅將公式等號左面得到的值記為ξ;
情況一:r(p)≥ξ為了保證視頻畫面盡可能小的抖動,選取的碼率值為ξ,同時由于碼率值是一系列離散值,所以在保證視頻播放流暢的前提下最終的碼率值為距離ξ最近的向上取定的碼率值;
情況二:r(p)<ξ時,繼續(xù)下載必定會出現(xiàn)緩存區(qū)上溢,為了避免這種情況發(fā)生則啟動睡眠機制,即下載會被暫停一段時間,暫停過后重新計算第n個分片sn下載完成后緩沖區(qū)剩余的時長,繼續(xù)進行碼率判決,其中r(p)為視頻切片生成時的最大碼率;
步驟524:
當qmin≤t(tn+1(s))≤qmax時,緩沖區(qū)的分片數(shù)在一個最優(yōu)的范圍中,碼率的取值范圍為:
為了減少碼率波動,碼率值與上一個切片碼率值保持相同即可:r(n+1)=r(n)。
本發(fā)明的有益效果:本發(fā)明是基于dash協(xié)議的動態(tài)碼率自適應選擇算法,涉及到了帶寬預測和緩存區(qū)管理,實現(xiàn)了視頻質(zhì)量隨網(wǎng)絡(luò)情況的動態(tài)改變。算法采用了卡爾曼濾波來預測帶寬,極大的提高了預測精度,并將預測出的帶寬與緩存區(qū)限制條件相結(jié)合,最終確定待下載切片的碼率并下載該碼率的切片文件。保證了在流暢播放的前提下盡可能的提高視頻播放質(zhì)量,極大的增強了用戶觀看體驗。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實施例的客戶端與服務(wù)器的連接交互過程圖。
圖2是本發(fā)明實施例的mpd結(jié)構(gòu)示意圖。
圖3是本發(fā)明實施例的碼率自適應算法的流程圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
如圖1所示,本發(fā)明實施例提供了一種基于mpeg-dash協(xié)議的動態(tài)自適應碼率選擇方法,其中包括以下功能:建立服務(wù)器與客戶端的http連接、下載與存儲mpd文件、解析mpd文件、碼率自適應選擇。
思路如下:首先建立服務(wù)器與客戶端的http連接,當連接建立完成后客戶端從服務(wù)器下載mpd文件并對其進行存儲和解析;其次為了縮短緩沖時間盡快進行視頻的播放,和為后續(xù)帶寬預測積累原始數(shù)據(jù),根據(jù)解析mpd文件所得到的碼率范圍先以最小碼率下載一部分視頻切片并對下載該部分視頻切片時的網(wǎng)絡(luò)帶寬進行計算、統(tǒng)計和記錄,并運用卡爾曼濾波預測法對下載下一個視頻分片時的網(wǎng)絡(luò)帶寬進行預測;最后根據(jù)上面所得到的預測帶寬和當前緩存區(qū)視頻切片剩余情況對下載下一個視頻切片的碼率做出選擇,從而使所播放視頻質(zhì)量動態(tài)的適應不同網(wǎng)路情況。
具體來說按照以下步驟進行:
步驟1,
首先建立服務(wù)器與客戶端的http連接;由于dash在應用層是以http作為傳輸協(xié)議的,而http在傳輸層是基于tcp協(xié)議的,所以客戶端與服務(wù)器的會話需要建立連接。
其建立服務(wù)器與客戶端的http連接的具體過程為:
步驟11:創(chuàng)建一個url對象;
步驟12:創(chuàng)建一個http鏈接;
步驟13:使用io流獲取數(shù)據(jù)。
步驟2,
然后客戶端向服務(wù)器發(fā)送httpget請求,請求下載mpd文件并存儲。
具體過程為:
步驟21:判斷mpd文件是否存在,若存在則返回1否則返回0;
步驟22:文件不存在時對文件進行下載;
步驟23:對下載完成的文件進行存儲。
步驟3,
服務(wù)器收到客戶端的請求后對客戶端進行響應發(fā)送mpd文件,客戶端對mpd文件進行下載并對下載的mpd文件進行解析;為了使視頻可以盡快開始播放,根據(jù)解析mpd文件所得到的視頻分片的url所對應的碼率范圍先以最小碼率下載一部分視頻切片,服務(wù)器收到請求后給客戶端發(fā)送視頻切片文件,客戶端對切片文件進行下載。mpd文件的結(jié)構(gòu)如圖2所示。
具體過程為:
步驟31:獲取mpd文件中representation元素的指定屬性,這里只需要獲取id,width,height三個屬性即可;
步驟32:獲取mpd文件中每個等級視頻切片的url;
步驟33:根據(jù)解析mpd文件所得url地址選取最小碼率的視頻切片進行下載。
步驟4,
對步驟3下載視頻切片時的網(wǎng)絡(luò)帶寬進行計算,統(tǒng)計和記錄并運用卡爾曼濾波預測法對下載下一個視頻分片時的網(wǎng)絡(luò)帶寬進行預測。
圖3是碼率自適應選擇算法的流程圖,當客戶端對mpd文件進行下載并解析后雖然得到了視頻文件的url,但是為了使用戶得到更好的視聽體驗還不能直進行下載,必須要經(jīng)過碼率自適應選擇策略。
其具體步驟如下:
步驟41:獲取已下載分片的網(wǎng)絡(luò)帶寬bn:
其中:tn(e)表示第n個切片下載完成的時間;tn(s)表示第n個切片開始下載的時間;r(n)表示第n個切片所選的碼率;θ表示每個切片播放持續(xù)的時間,這里,每個切片播放持續(xù)的時間都相同,在進行視頻切割封裝時都切成相同的時間長度其值為2秒;bn是第n個切片的網(wǎng)絡(luò)下載帶寬值。
步驟42:建立系統(tǒng)狀態(tài)方程和量測方程:
其中:bn+1是第n+1個切片的預測下載帶寬值;yn+1是n+1個切片帶寬量測值;a是狀態(tài)轉(zhuǎn)移矩陣,反映了系統(tǒng)從第n個切片的下載帶寬到第n+1個的狀態(tài)變化;un是第n個切片的控制向量;b是控制分配矩陣;qn和rn+1分別是系統(tǒng)噪聲和測量噪聲,qn的統(tǒng)計特性e[qn]=0,rn+1的統(tǒng)計特性e[rn+1]=0;h為觀測矩陣。
步驟43:由第n個分片的最優(yōu)帶寬值
步驟44:由上一次的誤差協(xié)方差pn和系統(tǒng)噪聲qn的協(xié)方差q預測新的誤差協(xié)方差
其中q為系統(tǒng)噪聲qn的協(xié)方差,其類型屬于高斯白噪聲;
步驟45:計算卡爾曼增益
其中r為測量噪聲rn+1的協(xié)方差;
步驟46:對
此時
步驟47:若切片尚未全部下載完成則繼續(xù)步驟48,否則退出整個預測過程。
步驟48:為下一步估計第n+2個切片的最優(yōu)帶寬值的迭代進行更新操作,即更新pn+1值:
pn+1是第n+1個切片的最優(yōu)帶寬偏差;
步驟49,跳轉(zhuǎn)到步驟43,一直重復至到步驟47終結(jié)。
步驟5:根據(jù)步驟4所得到的預測帶寬并結(jié)合當前緩存區(qū)視頻切片剩余情況對下載下一個視頻切片的碼率做出選擇,具體過程為:
步驟51:若視頻分片未全部下載完成,即仍然存在預測帶寬,則執(zhí)行步驟52,否則下載過程結(jié)束。
步驟52:
為了確保緩存區(qū)不出現(xiàn)上溢及下溢,同時確保緩沖區(qū)可以有效抵消帶寬波動所造成的預測不準確帶來的播放停滯或緩沖區(qū)上溢的可能性,現(xiàn)對緩沖區(qū)設(shè)置兩個時間閥值qmin和qmax,根據(jù)緩沖區(qū)設(shè)置的閥值和已經(jīng)存在的分片數(shù)以及預測帶寬來決定所要選取的碼率值。
其中,步驟52具體為:
步驟521:
計算第n個分片sn下載完成后緩沖區(qū)剩余的時長:
t(tn(e))=t(tn(s))+θ-(tn(e)-tn(s))(8)
其中t(tn(e))表示第n個分片下載完后緩沖區(qū)時長(同時也是開始下載第n+1個切片時緩沖區(qū)的時長),t(tn(s))表示開始下載第n個分片時緩沖區(qū)的時長(同時也是下載完第n-1個分片時緩沖區(qū)的時長)。
步驟522:
當t(tn+1(s))<qmin時緩存區(qū)的切片有用完的可能性,為了確保緩沖區(qū)有足夠的視頻切片必須保證t(tn+1(e))≥qmin,則其碼率需滿足:
ψ并無含義,僅將公式等號左面計算得到的值記為ψ。第n+1片所選取的碼率r(n+1)值應該為max(r(1),ψ),但是由于碼率值是一系列離散值,所以在保證視頻播放流暢的前提下最終的碼率值為距離max(r(1),ψ)最近的向下取定的碼率值。其中r(1)為視頻切片生成時的最小碼率。
步驟523:
當t(tn+1(s))>qmax時緩沖區(qū)有了足夠的切片,繼續(xù)下載有上溢出的可能性,為了確保緩沖區(qū)不上溢必須保證t(tn+1(e))≤qmax,則其碼率需要滿足:
ξ同理并無具體含義,僅將公式等號左面得到的值記為ξ;
情況一:r(p)≥ξ為了保證視頻畫面盡可能小的抖動,選取的碼率值應該為ξ,同時由于碼率值是一系列離散值,所以在保證視頻播放流暢的前提下最終的碼率值為距離ξ最近的向上取定的碼率值。
情況二:r(p)<ξ時,繼續(xù)下載必定會出現(xiàn)緩存區(qū)上溢,為了避免這種情況發(fā)生則啟動睡眠機制,即下載會被暫停一段時間,暫停過后重新計算第n個分片sn下載完成后緩沖區(qū)剩余的時長,繼續(xù)進行碼率判決。其中r(p)為視頻切片生成時的最大碼率。
步驟524:
當qmin≤t(tn+1(s))≤qmax時,緩沖區(qū)的分片數(shù)在一個最優(yōu)的范圍中,碼率的取值范圍為:
為了減少碼率波動,碼率值與上一個切片碼率值保持相同即可:r(n+1)=r(n)。
步驟6:若視頻切片沒有全部下載完成則跳轉(zhuǎn)到步驟4-5,繼續(xù)執(zhí)行預測和下載過程,否則退出循環(huán)過程,方法結(jié)束。
本發(fā)明在帶寬預測時采用了卡爾曼濾波預測的方法,由于該方法的原理遵從預測—修正的重復迭代過程,所以保證了其帶寬預測精度;其次,由于移動客戶端存在存儲容量不足的實際情況,這種情況極可能導致緩存區(qū)發(fā)生“溢出”現(xiàn)象,當緩存區(qū)發(fā)生下溢出時,會使得視頻播放出現(xiàn)停滯,當發(fā)生上溢出時,又不能充分利用帶寬資源提高視頻播放質(zhì)量。為了解決這個問題又加入了緩存區(qū)控制策略,并通過將帶寬預測與緩存區(qū)控制相結(jié)合的方法來預測待下載視頻切片的碼率,這樣可以使得所選切片碼率既能滿足客戶端緩存實際情況,減少由緩存區(qū)溢出帶來的問題,優(yōu)先保證了視頻流暢播放,又可以使所選碼率符合網(wǎng)絡(luò)帶寬實際變化情況,保證視頻質(zhì)量,極大的增強了用戶觀看體驗。
以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內(nèi)。