一種假設(shè)解碼器中輸入碼流緩沖區(qū)的輸入和輸出/從緩沖區(qū)獲取數(shù)據(jù)的方法及裝置、傳輸 ...的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于視頻編解碼技術(shù)領(lǐng)域,特別涉及一種假設(shè)解碼器中輸入碼流緩沖區(qū)的 輸入和輸出/從緩沖區(qū)獲取數(shù)據(jù)的方法及裝置、傳輸視頻碼流。
【背景技術(shù)】
[0002] 在驗(yàn)證視頻比特流是否符合某一視頻標(biāo)準(zhǔn)的過(guò)程中,需要將視頻輸入碼流到視頻 標(biāo)準(zhǔn)中所規(guī)定的假設(shè)解碼器進(jìn)行驗(yàn)證。假設(shè)解碼器都有一個(gè)輸入碼流緩沖區(qū),如圖1。該 緩沖區(qū)在不同標(biāo)準(zhǔn)中有不同的描述和稱呼,在MPEG-2中,被稱作視頻緩沖檢驗(yàn)器(VBV); 在AVSl中被稱作位流虛擬參考解碼器(BBV),在H. 264和HEVC中,被稱作編碼圖像緩沖區(qū) (CPB)。符合標(biāo)準(zhǔn)的視頻比特流應(yīng)不會(huì)導(dǎo)致該緩沖區(qū)發(fā)生上/下溢出。間接約束了符合標(biāo) 準(zhǔn)的視頻比特流每幀碼率的波動(dòng)。視頻比特流或標(biāo)準(zhǔn)的文本中需要傳輸或規(guī)定以下信息: 緩沖區(qū)輸入方法(其中包括比特流的輸入方式和輸入碼率),緩沖區(qū)輸出方法/從緩沖區(qū)獲 取數(shù)據(jù)的方法(其中包括每幀的數(shù)據(jù)什么時(shí)候移出緩沖區(qū)),緩沖區(qū)大小。其中,
[0003] 標(biāo)準(zhǔn)(MPEG-2,H. 263,H. 264,HEVC)中常用的緩沖區(qū)輸入方法有(以幀編碼為 例):
[0004] 1、以某一固定碼率R(通常在視頻比特流中規(guī)定R的大?。?,如圖2所示,不間斷地 輸入,或者如圖3所示,有間斷地輸入(廣播、網(wǎng)絡(luò)傳輸?shù)葢?yīng)用)
[0005] 2、如圖4所示,根據(jù)輸入碼流緩沖區(qū)的狀態(tài),決定視頻比特流的輸入(常用于基于 存儲(chǔ)設(shè)備的應(yīng)用)
[0006] 視頻比特流以R的速度輸出給碼流的輸入緩沖區(qū),
[0007] --如果緩沖區(qū)沒(méi)有充滿,數(shù)據(jù)以速率R輸入緩沖區(qū);
[0008]-如果緩沖區(qū)充滿,則數(shù)據(jù)不能進(jìn)入該緩沖區(qū)直到緩沖區(qū)中的部分?jǐn)?shù)據(jù)被移 出。
[0009] 標(biāo)準(zhǔn)(MPEG-2,H. 263,H. 264,HEVC)中常用的緩沖區(qū)輸出方法/從緩沖區(qū)獲取數(shù)據(jù) 的方法有(以幀編碼為例):
[0010] 1、圖5,第一個(gè)幀的移出時(shí)間由比特流中傳輸?shù)恼Z(yǔ)法元素(Vbv_delay)確定,相鄰 的幀的移出時(shí)間間隔固定(為幀率倒數(shù)T)
[0011] 2、如圖6,每一幀的移出時(shí)間由比特流中傳輸?shù)恼Z(yǔ)法元素(initial_cpb_ removal_delay,cpb_removal_delay)石角定。
[0012] AVS2⑶文檔的BBV緩沖區(qū)同樣定義了兩種輸入方法:
[0013] 1、第N幀圖像進(jìn)入BBV緩沖區(qū)的速率R(N)按下式計(jì)算(廣播、網(wǎng)絡(luò)傳輸?shù)葢?yīng)用); N> = 1〇
[0014] R(n}ifr.(rf/;) -r(n-r I} -r- / (/; -i-1jt - / (p.〇)
[0015]R(N)=d*N/ (T(N) -T(N+l)+t(N+l)-t(N))
[0016]式中:
[0017]cfN--從第n幀的起始碼后第I個(gè)位到第n+1幀的起始碼后第I個(gè)位之間所有的 位數(shù);
[0018]T(N)--第N幀的BbvDelay的值,單位為秒(s);
[0019]t(N)--第N幀圖像的編碼數(shù)據(jù)從BBV緩沖區(qū)移出的時(shí)間,單位為秒(s);
[0020]t(N+l)-t(N)--第N+1幀和第N幀圖像的解碼時(shí)間間隔,單位為秒(s);
[0021]R(N)--第N幀圖像進(jìn)入BBV緩沖區(qū)的速率。
[0022] 2、同圖4的緩沖區(qū)輸入方法。(常用于基于存儲(chǔ)設(shè)備的應(yīng)用)
[0023]AVS2⑶文檔緩沖區(qū)輸出方法/從緩沖區(qū)獲取數(shù)據(jù)的方法:
[0024] 在圖5的方法上增加了靈活性。如圖7.在低延時(shí)的情況下,允許大圖像n延時(shí) BbvCheckTimes移出,即t(n) =t(n_l) +T+BbvCheckTimes*T(T為幀率的倒數(shù))。其中, BbvCheckTimes為大圖像n的一個(gè)語(yǔ)法兀素;n>l。
[0025] 但是這些方法都有如下缺點(diǎn):
[0026] 對(duì)于廣播、網(wǎng)絡(luò)傳輸?shù)葢?yīng)用的緩沖區(qū)輸入方法:
[0027] 圖2,圖3所示的方法當(dāng)一幀的數(shù)據(jù)進(jìn)入編碼端的緩沖區(qū)中,一定會(huì)有數(shù)據(jù)輸出。 例如圖3所示,第三幀數(shù)據(jù)傳入編碼端的緩沖區(qū)之后,立即會(huì)有數(shù)據(jù)從編碼端的緩沖區(qū)輸 出到輸入碼流緩沖區(qū)。而實(shí)際情況中,數(shù)據(jù)傳輸由于之前已經(jīng)被中斷了,網(wǎng)絡(luò)往往無(wú)法很 快地鏈接上去傳輸數(shù)據(jù)。
[0028]AVS2的⑶的緩沖區(qū)輸入方法有以下幾個(gè)問(wèn)題:
[0029] 1.傳輸?shù)贜幀的時(shí)候,并無(wú)法知道第N+1幀的BbvDelay的值,所無(wú)法確定R(N), 或者至少得解析兩個(gè)幀的BbvDelay值;N> = 1。
[0030] 2.傳輸?shù)乃俾矢繋拇笮∫约懊繋腂bvDelay有關(guān)。而實(shí)際傳輸速率是由傳 輸信道和具體應(yīng)用決定的。如圖8,當(dāng)一個(gè)序列每幀的BbvDelay的值都一樣時(shí),R(N)完全 跟第N幀的比特?cái)?shù)有關(guān)。與實(shí)際應(yīng)用不符合;N> = 1。
[0031] 對(duì)于緩沖區(qū)輸出方法/從緩沖區(qū)獲取數(shù)據(jù)的方法:
[0032]AVS的CD文檔的緩沖區(qū)輸出方法雖然在圖5的方法上增加了靈活性,但是
[0033] 1.在非低延時(shí)的情況下,并不允許出現(xiàn)大圖像,而在實(shí)際非低延時(shí)的編碼情況中, 如果不允許出現(xiàn)大圖像,會(huì)導(dǎo)致編碼性能的下降:
[0034] 例如:編碼如下編碼結(jié)構(gòu)
[0035]B1B2B5B6
[0036]IOP3I4P7
[0037] 在14處發(fā)生了場(chǎng)景切換,14的碼率非常高,就有可能因?yàn)樾蛄蓄A(yù)留的解碼延時(shí)不 夠而導(dǎo)致14的碼流來(lái)不及傳輸。按照現(xiàn)有標(biāo)準(zhǔn)的做法只能將14的QP增高,比特?cái)?shù)和質(zhì)量 下降,使其不成為大圖像。隨之而來(lái)的是顯示順序在14之后的幀的編碼效率下降。
[0038] 如果允許14成為大圖像,就可以允許以下編碼結(jié)構(gòu):
[0039]
[0040] 雖然跳過(guò)了一幀的編碼,但是其余幀的編碼質(zhì)量都得到了保證,提高了編碼效率。
[0041] 圖6所示的緩沖區(qū)輸出方法雖然靈活性非常高,但是需要每幀都傳一個(gè)語(yǔ)法元 素,增加了傳輸?shù)谋忍財(cái)?shù)。
【發(fā)明內(nèi)容】
[0042] 本發(fā)明的目的在于針對(duì)現(xiàn)有技術(shù)的不足,提供一種假設(shè)解碼器中輸入碼流緩沖區(qū) 的輸入和輸出/從緩沖區(qū)獲取數(shù)據(jù)的方法及裝置、及對(duì)應(yīng)的傳輸視頻碼流。
[0043] 本發(fā)明的第一目的在于提出一種假設(shè)解碼器中輸入碼流緩沖區(qū)的輸出方法,包括 以下步驟:
[0044] (1)從視頻碼流中獲取第1幀從圖像起始碼的最后一個(gè)字節(jié)到開(kāi)始解碼圖像之間 要等待的時(shí)間Delay(I);
[0045] (2)由(1)中確定的等待時(shí)間Delay(I)確定第一幀圖像數(shù)據(jù)從輸入碼流緩沖區(qū)移 出的時(shí)間t(l);
[0046] (3)從視頻碼流中獲取第n幀檢測(cè)輸入碼流緩沖區(qū)的次數(shù)check_times(n);
[0047](4)根據(jù)⑵確定的序列第一幀圖像數(shù)據(jù)從輸入碼流緩沖區(qū)移出的時(shí)間t(1),以 及(3)確定的第n幀檢測(cè)輸入碼流緩沖區(qū)的次數(shù)check_times(n),確定第n幀圖像數(shù)據(jù)從 輸入碼流緩沖區(qū)移出的時(shí)間t(n) ;t(n) =t(n-l)+(BbvCheckTimes(n)+l)*緩沖區(qū)檢測(cè)時(shí) 間間隔,其中緩沖區(qū)檢測(cè)時(shí)間間隔為幀率的倒數(shù);
[0048] n>l〇
[0049] 本發(fā)明的第二目的在于提出一種假設(shè)解碼器中輸入碼流緩沖區(qū)的輸入方法,包括 以下步驟:
[0050] (1)確定編碼數(shù)據(jù)進(jìn)入輸入碼流緩沖區(qū)的速率;
[0051] (2)從視頻碼流中獲取第n幀從圖像起始碼的最后一個(gè)字節(jié)到開(kāi)始解碼圖像之間 要等待的時(shí)間Delay(n);
[0052] (3)根據(jù)第n幀從圖像起始碼的最后一個(gè)字節(jié)到開(kāi)始解碼圖像之間要等待的時(shí)間 Delay(n),以及第n幀圖像數(shù)據(jù)從輸入碼流緩沖區(qū)移出的時(shí)間t(n),確定第n幀圖像數(shù)據(jù)的 起始輸入時(shí)間為t(n) -Delay(n);
[0053] n>l〇
[0054] 優(yōu)選的,編碼數(shù)據(jù)進(jìn)入輸入碼流緩沖區(qū)的速率可以由標(biāo)準(zhǔn)規(guī)定或從碼流中獲取。
[0055]優(yōu)選的,第n幀圖像數(shù)據(jù)從輸入碼流緩沖區(qū)移出的時(shí)間t(n)可以由以下兩種方 式之一獲得:
[0056] (1)從碼流中獲得;
[0057] (2)從視頻碼流中獲取第1幀從圖像起始碼的最后一個(gè)字節(jié)到開(kāi)始解碼圖像之間 要等待的時(shí)間Delay(I);由確定的等待時(shí)間Delay(I)確定從輸入碼流緩沖區(qū)獲取序列第 一幀圖像數(shù)據(jù)的時(shí)間t(1);從視頻碼流中獲取第n幀檢測(cè)輸入碼流緩沖區(qū)的次數(shù)check_ times(n);根據(jù)t(1)以及check_times(n),確定從輸入碼流緩沖區(qū)獲取第n幀圖像數(shù)據(jù)的 時(shí)間t(n) ;t(n) =t(n-I)+(BbvCheckTimes(n)+l)*緩沖區(qū)檢測(cè)時(shí)間間隔,其中緩沖區(qū)檢 測(cè)時(shí)間間隔為幀率的倒數(shù)。
[0058] 本發(fā)明的第三目的在于提出一種從假設(shè)解碼器中輸入碼流緩沖區(qū)中獲取數(shù)據(jù)的 方法,包括以下步驟:
[0059] (1)從視頻碼流中獲取第1幀從圖像起始碼的最后一個(gè)字節(jié)