實(shí)時(shí)視頻流編碼器和實(shí)時(shí)視頻流編碼方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種實(shí)時(shí)視頻流編碼器和實(shí)時(shí)視頻流編碼方法。該實(shí)時(shí)視頻流編碼器包括:第一編碼模塊,用于對(duì)待編碼視頻中的圖像進(jìn)行第一次編碼,其中,待編碼視頻依次由第1至Z幀圖像組成;以及第二編碼模塊,用于在第一編碼模塊完成對(duì)第X至X+N-1幀圖像的編碼后,對(duì)第X幀圖像進(jìn)行第二次編碼,其中,第X幀圖像為第1至Z幀圖像中的任一幀圖像,N為第一預(yù)設(shè)幀數(shù)且N<Z,其中,第一編碼模塊還用于在第二編碼模塊對(duì)第X幀圖像進(jìn)行編碼時(shí),對(duì)第X+N幀圖像進(jìn)行編碼。通過(guò)本發(fā)明,提高了實(shí)時(shí)視頻流編碼器的編碼質(zhì)量。
【專(zhuān)利說(shuō)明】實(shí)時(shí)視頻流編碼器和實(shí)時(shí)視頻流編碼方法【技術(shù)領(lǐng)域】[0001]本發(fā)明涉及圖像編碼領(lǐng)域,具體而言,涉及一種實(shí)時(shí)視頻流編碼器和實(shí)時(shí)視頻流 編碼方法。【背景技術(shù)】[0002]碼率控制算法是視頻編碼技術(shù)中的核心內(nèi)容之一,它的目的是為視頻內(nèi)容的不同 部分分配適當(dāng)?shù)谋忍刂?,從而使編碼視頻的整體質(zhì)量達(dá)到最優(yōu)。H.264編碼標(biāo)準(zhǔn)中通過(guò)量化 系數(shù)QP (quantization parameter)來(lái)調(diào)節(jié)編碼質(zhì)量與編碼壓縮比的關(guān)系,QP越大,表示 對(duì)圖像預(yù)測(cè)殘差的DCT系數(shù)進(jìn)行量化時(shí)的量化步長(zhǎng)越大、使用的比特?cái)?shù)越少,則DCT系數(shù)的 量化誤差越大,從而導(dǎo)致編碼質(zhì)量越差、編碼壓縮比越大、視頻碼率越小。與之相反,QP較 小則意味著編碼質(zhì)量較好且視頻碼率較大。碼率控制算法通過(guò)調(diào)整視頻碼流中各個(gè)幀和各 個(gè)宏塊的QP來(lái)在視頻內(nèi)容的各部分之間分配可使用的比特?cái)?shù),從而在視頻碼率受限的情 況下達(dá)到最優(yōu)的編碼質(zhì)量。[0003]一般而言,碼率控制算法通過(guò)對(duì)視頻內(nèi)容進(jìn)行特征分析來(lái)為每個(gè)幀或宏塊選擇 恰當(dāng)?shù)腝P。對(duì)于碼率控制而言,視頻內(nèi)容最重要的特征是碼率與量化參數(shù)的關(guān)系,以R-Q (Rate-Quantization)模型表示。一般而言,視頻內(nèi)容越復(fù)雜、運(yùn)動(dòng)越劇烈,貝Ij采用相同的 QP時(shí)所使用的比特?cái)?shù)越多。碼率控制算法在各幀/宏塊中通過(guò)R-Q模型在目標(biāo)比特?cái)?shù)與 QP之間建立聯(lián)系,從而達(dá)到為特定的目標(biāo)比特值選擇恰當(dāng)QP或?yàn)樘囟ǖ腝P計(jì)算其預(yù)期比 特值的目的。[0004]碼率控制算法從復(fù)雜度上一般分為基于一次編碼的和基于二次編碼的。在基于一 次編碼的碼率控制算法中,由于編碼器只進(jìn)行一次搜索和編碼運(yùn)算,所以需要在搜索之前 通過(guò)一定的算法選定QP值,然后依照此QP值進(jìn)行搜索和編碼。在基于二次編碼的碼率控 制方法中,首先使用正常的或簡(jiǎn)化的搜索和碼率控制方法對(duì)整個(gè)待編碼視頻序列進(jìn)行第一 次編碼,然后通過(guò)對(duì)第一次編碼的結(jié)果進(jìn)行分析進(jìn)行全序列的最優(yōu)比特分配和QP分配,并 按該QP進(jìn)行第二次編碼。[0005]無(wú)論基于一次還是二次編碼,碼率控制算法一般分為幾個(gè)層次,由高至低依次為 圖片組(GOP)層、幀層、宏塊組(basic unit)層和宏塊層,每一層的碼率控制算法將視頻分 割為大小不同的部分,為每一部分分配恰當(dāng)?shù)哪繕?biāo)比特并依R-Q模型來(lái)設(shè)定其QP。一般的 碼率控制方法流程如圖1所示,圖中的每個(gè)循環(huán)對(duì)應(yīng)于一組或一幀圖像,或者一組或一個(gè) 宏塊。[0006]不同的碼率控制方法中存在不同的反饋機(jī)制等優(yōu)化措施以提高其性能和質(zhì)量,具 體流程可能與圖1有一定區(qū)別,但從功能上進(jìn)行劃分的話(huà)主要如圖1中一樣分為三部分:[0007](I)分配目標(biāo)比特?cái)?shù)。分配目標(biāo)比特?cái)?shù)主要依據(jù)信道所要求的帶寬限制按當(dāng)前視 頻內(nèi)容所占時(shí)間比例進(jìn)行分配,并考慮不同的幀類(lèi)型(I幀、P幀、B幀)以及各幀中不同的 編碼復(fù)雜度,且需要滿(mǎn)足編碼器傳輸緩存區(qū)的填充狀態(tài)既不發(fā)生上溢也不發(fā)生下溢。[0008]對(duì)于基于一次編碼的碼率控制方法,由于其無(wú)法知道當(dāng)前幀之后的各幀特性,從而無(wú)法從全序列的角度進(jìn)行最優(yōu)的比特分配,而只能基于已完成編碼的各幀來(lái)分配比特 數(shù),因此當(dāng)視頻內(nèi)容特性變化劇烈的時(shí)候,有可能會(huì)有各幀之間比特分配不合理的情況發(fā)生。[0009]有的基于預(yù)分析的一次編碼碼率控制方法會(huì)預(yù)先讀取當(dāng)前幀之后若干幀的內(nèi)容 進(jìn)行預(yù)分析,從而得到當(dāng)前幀之后若干幀的粗略特性,從而當(dāng)各幀特性變化劇烈時(shí)實(shí)現(xiàn)更 合理的幀間比特分配。但是,預(yù)分析功能讀取未來(lái)幀的幀數(shù)一般較少,而且預(yù)分析功能本身 由于不進(jìn)行實(shí)際編碼,其得到的未來(lái)幀的特性的準(zhǔn)確度也不太高。[0010]基于二次編碼的比特分配是最準(zhǔn)確的。二次編碼的含義是先對(duì)全部待編碼視頻內(nèi) 容進(jìn)行第一次編碼,從而可以得到每一幀圖像的編碼特性,因此只要按照各個(gè)幀的編碼復(fù) 雜度進(jìn)行比特分配,就可以達(dá)到使各幀編碼質(zhì)量基本均衡的目的。[0011](2)計(jì)算R-Q模型。計(jì)算R-Q模型需要知道目前所編碼幀的R-Q特性,它是碼率控 制方法中對(duì)編碼質(zhì)量影響最大的步驟。得到R-Q特性主要有以下三種方式:[0012]第一種方法,也是最簡(jiǎn)單的方法,是利用視頻中連續(xù)各幀的內(nèi)容一般會(huì)比較相似 的特點(diǎn),用前一個(gè)或幾個(gè)已編碼幀的R-Q特性計(jì)算當(dāng)前幀的R-Q模型,即根據(jù)前一幀或幾幀 的QP值和實(shí)際編碼比特值,作為本幀的QP值和實(shí)際編碼比特值的預(yù)測(cè)關(guān)系,然后建立本幀 的QP值與預(yù)期編碼比特值的R-Q關(guān)系模型。可見(jiàn),當(dāng)當(dāng)前幀與前幾幀十分相似時(shí),這種方 法具有一定的準(zhǔn)確性,但是當(dāng)當(dāng)前幀與前幾幀相似度較差,如運(yùn)動(dòng)劇烈或內(nèi)容變化較多時(shí), 這種方法得到的R-Q模型不能準(zhǔn)確地反映當(dāng)前幀的R-Q特性。[0013]第二種方法比第一種稍復(fù)雜,它通過(guò)對(duì)當(dāng)前幀進(jìn)行預(yù)分析來(lái)得到當(dāng)前幀的近似的 編碼特性,以之來(lái)計(jì)算當(dāng)前幀的R-Q模型。所使用的預(yù)分析方法主要是衡量圖像的運(yùn)動(dòng)強(qiáng) 度或者編碼復(fù)雜度,所使用的方法包括但不限于幀間相似度檢測(cè)以及針對(duì)下采樣過(guò)的當(dāng)前 幀圖像進(jìn)行粗略的幀間預(yù)測(cè)和幀內(nèi)預(yù)測(cè)。這種方法得到的R-Q模型的精確度不再依賴(lài)于當(dāng) 前幀與前幾幀的特性相似度,在各幀之間的差異較大時(shí)也能以合理的方式計(jì)算R-Q關(guān)系, 因此能得到比第一種方法中更為準(zhǔn)確的R-Q模型。但是由于預(yù)分析方法只是粗略的估計(jì), 其本身的精度是限制這種方法中R-Q模型精度的最主要方面。[0014]第三種方法就是進(jìn)行二次編碼。通過(guò)對(duì)各幀進(jìn)行第一次編碼,得到各幀編碼時(shí)所 用的QP值及對(duì)應(yīng)的實(shí)際使用比特?cái)?shù),就可以得到每一幀在R-Q模型曲線上的一個(gè)真實(shí)點(diǎn)。 這種方法所得到的R-Q模型精度是前兩種所不能相提并論的。[0015](3)計(jì)算QP。在這個(gè)步驟中,根據(jù)為當(dāng)前幀分配的目標(biāo)比特?cái)?shù),通過(guò)R-Q模型的換 算來(lái)得到當(dāng)前幀/宏塊組為了按照目標(biāo)比特進(jìn)行編碼所應(yīng)使用的QP值,之后便以按照此QP 進(jìn)行搜索和編碼,并輸出實(shí)際編碼碼流。在基于二次編碼的碼率控制方法中,第一次編碼按 照第一次編碼中碼率控制方法所計(jì)算出的QP進(jìn)行,之后在第二次編碼中重新計(jì)算目標(biāo)比 特?cái)?shù)和QP并編碼出實(shí)際輸出碼流,第一次編碼時(shí)所用的QP對(duì)于實(shí)際輸出碼流并沒(méi)有直接 的作用。但是,第二次編碼所用的QP與第一次編碼的QP越接近,第二次編碼所使用的R-Q 模型就越精確,第二次編碼的編碼質(zhì)量就越高,所以第一次編碼時(shí)的碼率控制質(zhì)量對(duì)于最 終輸出的碼流質(zhì)量也是很重要的。[0016]綜上所述,基于二次編碼的碼率控制能在相同的壓縮率下得到明顯高于基于一次 編碼的平均編碼質(zhì)量和最小的編碼質(zhì)量波動(dòng),但是由于其要求先對(duì)整個(gè)待編碼序列進(jìn)行一 次編碼,因此在時(shí)序上不符合編碼實(shí)時(shí)流的基本要求,從而在大多數(shù)場(chǎng)合包括實(shí)時(shí)流編碼器、轉(zhuǎn)碼器等設(shè)備中僅使用基于一次編碼的碼率控制方法,只在對(duì)編碼質(zhì)量要求較高且不要求實(shí)時(shí)輸出的場(chǎng)合,如壓制DVD等使用基于二次編碼的碼率控制方法。[0017]因而,現(xiàn)有的實(shí)時(shí)視頻流編碼器中僅使用一次編碼碼率控制方法,而這些方法由于先驗(yàn)信息有限而不能實(shí)現(xiàn)最優(yōu)的比特分配,從而不能達(dá)到很高的編碼質(zhì)量。[0018]針對(duì)相關(guān)技術(shù)中實(shí)時(shí)視頻流編碼器編碼質(zhì)量低的問(wèn)題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0019]本發(fā)明的主要目的在于提供一種實(shí)時(shí)視頻流編碼器和實(shí)時(shí)視頻流編碼方法,以解決實(shí)時(shí)視頻流編碼器編碼質(zhì)量低的問(wèn)題。[0020]為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的一個(gè)方面,提供了一種實(shí)時(shí)視頻流編碼器。[0021]根據(jù)本發(fā)明的實(shí)時(shí)視頻流編碼器包括:第一編碼模塊,用于對(duì)待編碼視頻中的圖像進(jìn)行第一次編碼,其中,待編碼視頻依次由第I至Z幀圖像組成;以及第二編碼模塊,用于在第一編碼模塊完成對(duì)第X至X+N-ι幀圖像的編碼后,對(duì)第X幀圖像進(jìn)行第二次編碼,其中,第X幀圖像為第I至Z幀圖像中的任一幀圖像,N為第一預(yù)設(shè)幀數(shù)且N〈Z,其中,第一編碼模塊還用于在第二編碼模塊對(duì)第X幀圖像進(jìn)行編碼時(shí),對(duì)第X+N幀圖像進(jìn)行編碼。[0022]進(jìn)一步地,該實(shí)時(shí)視頻流編碼器還包括:預(yù)分析模塊,用于對(duì)待編碼視頻的圖像進(jìn)行預(yù)分析,其中,第一編碼模塊還用于在預(yù)分析模塊完成對(duì)第X至X+M-1幀圖像的預(yù)分析后,對(duì)第X幀圖像進(jìn)行編碼,其中,M為第二預(yù)設(shè)幀數(shù)且N〈M〈Z,預(yù)分析模塊還用于在第一編碼模塊對(duì)第X幀圖像進(jìn)行編碼時(shí),對(duì)第X+M幀圖像進(jìn)行預(yù)分析。[0023]進(jìn)一步地,該實(shí)時(shí)視頻流編碼器還包括:第一緩存器,用于存儲(chǔ)M幀圖像及M幀圖像的預(yù)分析結(jié)果;以及第二緩存器,用于存儲(chǔ)N幀圖像及N幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果,其中,預(yù)分析模塊還用于對(duì)第X幀圖像進(jìn)行預(yù)分析后,將第X幀圖像及第X幀圖像的預(yù)分析結(jié)果移入第一緩存器;第一緩存器還用于在接收到第X幀圖像后,判斷當(dāng)前存儲(chǔ)圖像幀數(shù)是否大于M,以及在當(dāng)前存儲(chǔ)圖像幀數(shù)大于M時(shí),將第X-M幀圖像及第X-M幀圖像的預(yù)分析結(jié)果移出;第一編碼模塊還用于對(duì)第X幀圖像進(jìn)行編碼后,將第X幀圖像及第X 幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果移入第二緩存器;以及第二緩存器還用于在接收到第X幀圖像后,判斷當(dāng)前存儲(chǔ)圖像幀數(shù)是否大于N,以及在當(dāng)前存儲(chǔ)圖像幀數(shù)大于N時(shí),將第 X-N幀圖像及第X-N幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果移出。[0024]進(jìn)一步地,第一編碼模塊還用于根據(jù)第X至X+M-1幀圖像的預(yù)分析結(jié)果和第X-1 幀圖像的第一次編碼結(jié)果對(duì)第X幀圖像進(jìn)行編碼;以及第二編碼模塊還用于根據(jù)第X至 X+N+M-1幀圖像的預(yù)分析結(jié)果、第X至X+N-1幀圖像的第一次編碼結(jié)果和第X-1幀圖像的第二次編碼結(jié)果對(duì)第X幀圖像`行編碼。[0025]進(jìn)一步地,10^ M ^ 40,50 ^ N ^ 200。[0026]為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的另一方面,提供了一種實(shí)時(shí)視頻流編碼方法。[0027]根據(jù)本發(fā)明的實(shí)時(shí)視頻流編碼方法包括:對(duì)待編碼視頻中的第X至X+N-1幀圖像進(jìn)行第一次編碼,其中,待編碼視頻依次由第I至Z幀圖像組成,第X幀圖像為第I至Z幀圖像中的任一幀圖像,N為第一預(yù)設(shè)幀數(shù)且N〈Z ;以及在得到第X至X+N-1幀圖像的第一次編碼結(jié)果后,對(duì)第X幀圖像進(jìn)行第二次編碼,其中,對(duì)第X幀圖像進(jìn)行第二次編碼的同時(shí),對(duì)第X+N幀圖像進(jìn)行第一次編碼。[0028]進(jìn)一步地,對(duì)第X幀圖像進(jìn)行第一次編碼之前,該方法還包括:對(duì)第X至X+M-1幀圖像進(jìn)行預(yù)分析,其中,M為第二預(yù)設(shè)幀數(shù)且N〈M〈Z,其中,對(duì)第X幀圖像進(jìn)行第一次編碼的同時(shí),對(duì)第X+M幀圖像進(jìn)行預(yù)分析。[0029]進(jìn)一步地,該方法還包括:通過(guò)第一緩存器存儲(chǔ)M幀圖像及M幀圖像的預(yù)分析結(jié)果;以及通過(guò)第二緩存器存儲(chǔ)N幀圖像及N幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果,其中, 對(duì)第X幀圖像進(jìn)行預(yù)分析后,將第X幀圖像及第X幀圖像的預(yù)分析結(jié)果移入第一緩存器;在第一緩存器接收到第X幀圖像后,判斷當(dāng)前存儲(chǔ)圖像幀數(shù)是否大于M,以及在當(dāng)前存儲(chǔ)圖像幀數(shù)大于M時(shí),將第X-M幀圖像及第X-M幀圖像的預(yù)分析結(jié)果移出;對(duì)第X幀圖像進(jìn)行編碼后,將第X幀圖像及第X幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果移入第二緩存器;以及在第二緩存器接收到第X幀圖像后,判斷當(dāng)前存儲(chǔ)圖像幀數(shù)是否大于N,以及在當(dāng)前存儲(chǔ)圖像幀數(shù)大于N時(shí),將第X-N幀圖像及第X-N幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果移出。[0030]進(jìn)一步地,對(duì)第X幀圖像進(jìn)行第一次編碼包括:根據(jù)第X至X+M-1幀圖像的預(yù)分析結(jié)果和第X-1幀圖像的第一次編碼結(jié)果對(duì)第X幀圖像進(jìn)行第一次編碼;對(duì)第X幀圖像進(jìn)行第二次編碼包括:根據(jù)第X至X+N+M-1幀圖像的預(yù)分析結(jié)果、第X至X+N-ι幀圖像的第一次編碼結(jié)果和第X-1幀圖像的第二次編碼結(jié)果對(duì)第X幀圖像進(jìn)行第二次編碼。[0031]進(jìn)一步地,10≤M≤40,50≤N≤200。[0032]通過(guò)本發(fā)明,采用包括以下部分的實(shí)時(shí)視頻流編碼器:用于對(duì)待編碼視頻中的圖像進(jìn)行第一次編碼的第一編碼模塊;以及用于在第一編碼模塊完成對(duì)第X至X+N-1幀圖像的編碼后,對(duì)第X幀圖像進(jìn)行第二次編碼的第二編碼模塊,其中,第一編碼模塊對(duì)第X+N 幀圖像進(jìn)行編碼的同時(shí),第二編碼模塊對(duì)第X幀圖像進(jìn)行編碼,也即第一編碼模塊領(lǐng)先第二編碼模塊N幀且與第二編碼模塊同時(shí)進(jìn)行編碼,從而第二編碼模塊在對(duì)某一幀進(jìn)行編碼時(shí),能夠利用該幀后N幀的第一次編碼結(jié)果,滿(mǎn)足二次編碼的條件,并且第二編碼模塊與第一編碼模塊同時(shí)進(jìn)行編碼,滿(mǎn)足實(shí)時(shí)輸出碼流信息的條件,進(jìn)而該實(shí)時(shí)視頻流編碼器不僅能夠?qū)崟r(shí)編碼,而且能夠通過(guò)二次編碼的方式進(jìn)行編碼,解決了實(shí)時(shí)視頻流編碼器編碼質(zhì)量低的問(wèn)題,進(jìn)而達(dá)到了提高實(shí)時(shí)視頻流編碼器編碼質(zhì)量的效果?!緦?zhuān)利附圖】
【附圖說(shuō)明】[0033]構(gòu)成本申請(qǐng)的一部分的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:[0034]圖1是根據(jù)相關(guān)技術(shù)的碼率控制方法的流程圖;[0035]圖2是根據(jù)本發(fā)明第一實(shí)施例的實(shí)時(shí)視頻流編碼器的框圖;[0036]圖3是根據(jù)本發(fā)明第二實(shí)施例的實(shí)時(shí)視頻流編碼器的框圖;[0037]圖4是根據(jù)本發(fā)明第二實(shí)施例的實(shí)時(shí)視頻流編碼器中視頻流轉(zhuǎn)換流程圖;[0038]圖5是根據(jù)本發(fā)明第二實(shí)施例的實(shí)時(shí)視頻流編碼器的編碼時(shí)序圖;[0039]圖6是根據(jù)本發(fā)明實(shí)施例的第二編碼模塊的碼率控制流程圖;[0040]圖7是根據(jù)本發(fā)明第一實(shí)施例的實(shí)時(shí)視頻流編碼方法的流程圖;以及[0041]圖8是根據(jù)本發(fā)明第二實(shí)施例的實(shí)時(shí)視頻流編碼方法的流程圖?!揪唧w實(shí)施方式】[0042]需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。下面將參考附圖并結(jié)合實(shí)施例來(lái)詳細(xì)說(shuō)明本發(fā)明。[0043]圖2是根據(jù)本發(fā)明第一實(shí)施例的實(shí)時(shí)視頻流編碼器的框圖,如圖2所示,該實(shí)時(shí)視頻流編碼器包括第一編碼模塊20和第二編碼模塊40。[0044]第一編碼模塊20用于對(duì)待編碼視頻中的圖像進(jìn)行第一次編碼,其中,待編碼視頻依次由第I至Z幀圖像組成,第X幀圖像為第I至Z幀圖像中的任一幀圖像,第X+1幀、第 X+2幀、…、第X+N-1幀、第X+N幀圖像分別依次為第X幀圖像后I幀、2幀、…、N-1幀、N 幀圖像,N為第一預(yù)設(shè)幀數(shù)且N〈Z。[0045]其中,第一編碼模塊20在對(duì)任一幀圖像進(jìn)行第一次編碼時(shí),可基于已完成編碼的各幀編碼結(jié)果來(lái)編碼。優(yōu)選地,也可在第一編碼模塊20之前,先對(duì)各幀各宏塊圖像進(jìn)行預(yù)分析,從而第一編碼模塊20在對(duì)任一幀圖像進(jìn)行第一次編碼時(shí),可基于已完成編碼的各幀編碼結(jié)果以及所有圖像的預(yù)分析結(jié)果來(lái)編碼;或者,在第一編碼模塊20之前,對(duì)各幀各宏塊圖像進(jìn)行預(yù)測(cè),比如利用視頻中相鄰幀內(nèi)容相似的特點(diǎn),直接使用上一幀的編碼復(fù)雜度作為當(dāng)前幀的編碼復(fù)雜度的預(yù)測(cè)值,從而第一編碼模塊20在對(duì)任一幀圖像進(jìn)行第一次編碼時(shí),可基于已完成編碼的各幀編碼結(jié)果以及預(yù)測(cè)結(jié)果來(lái)編碼。[0046]第二編碼模塊40用于在第一編碼模塊20完成對(duì)第X至X+N-1幀圖像的編碼后,對(duì)第X幀圖像進(jìn)行第二次編碼,從而在對(duì)第X幀圖像進(jìn)行第二次編碼時(shí),可基于第I至X+N-1 幀圖像中任意一幀或幾幀的第一次編碼結(jié)果以及第I至X-1幀圖像中任意一幀或幾幀的第二次編碼結(jié)果進(jìn)行第二次編碼,滿(mǎn)足二次編碼的條件。[0047]在該實(shí)施例中,實(shí)時(shí)視頻流編碼器接收到待編碼視頻后,可以根據(jù)待編碼視頻特點(diǎn)確定第一預(yù)設(shè)幀數(shù)N,或者接收用戶(hù)命令,根據(jù)用戶(hù)命令確定第一預(yù)設(shè)幀數(shù)N。在確定N 后,第一編碼模塊20便開(kāi)始對(duì)待編碼視頻中的第I幀、第2幀、…、第N幀圖像進(jìn)行第一次編碼。當(dāng)?shù)谝痪幋a模塊20完成第N幀圖像的第一次編碼后,在對(duì)第N+1幀圖像進(jìn)行第一次編碼時(shí),第二編碼模塊40開(kāi)始對(duì)第I幀圖像進(jìn)行第二次編碼,并在第二次編碼后,輸出第I 幀圖像的實(shí)際編碼。[0048]之后,以此類(lèi)推:第一編碼模塊20對(duì)第N+2幀圖像進(jìn)行第一次編碼時(shí),第二編碼模塊40對(duì)第2幀圖像進(jìn)行第二次編碼,并輸出第2幀圖像的實(shí)際編碼;第一編碼模塊20對(duì)第 N+3幀圖像進(jìn)行第一次編碼時(shí),第二編碼模塊40對(duì)第3幀圖像進(jìn)行第二次編碼,并輸出第3 幀圖像的實(shí)際編碼……,直到第二編碼模塊40輸出最后一幀,也即第Z幀圖像的實(shí)際編碼, 該實(shí)時(shí)視頻流編碼器完成對(duì)待編碼視頻的編碼并實(shí)時(shí)輸出實(shí)際編碼碼流。[0049]從中可以看出,該實(shí)時(shí)視頻流編碼器的輸入端不停地有待編碼的視頻圖像輸入, 同時(shí),輸出端不停地有編碼好的視頻碼流輸出,其中,輸出僅滯后輸入N幀,也即若干秒的延時(shí),對(duì)于實(shí)時(shí)視頻流編碼器,若干秒的延時(shí)是普遍存在且可接受的,因而,該實(shí)時(shí)視頻流編碼器符合“實(shí)時(shí)”的要求。[0050]采用該實(shí)施例提供的實(shí)時(shí)視頻流編碼器,不僅能夠?qū)崟r(shí)編碼,而且能夠通過(guò)二次編碼的方式進(jìn)行編碼,與基于一次編碼的實(shí)時(shí)視頻流編碼器相比,能夠極大地提高編碼質(zhì)量。[0051]圖3是根據(jù)本發(fā)明第二實(shí)施例的實(shí)時(shí)視頻流編碼器的框圖,如圖3所示,該實(shí)時(shí)視頻流編碼器包括預(yù)分析模塊60、第一緩存器10、第一編碼模塊20、第二緩存器30和第二編碼豐旲塊40。[0052]以對(duì)由第I至Z幀圖像組成的待編碼視頻進(jìn)行編碼為例,設(shè)第X幀圖像為第I至 Z幀圖像中的,某一幀圖像,則第X+1幀、第X+2幀、…、第X+N-ι幀、第X+N幀、…、第X+M 中貞、第X+M+1幀、…、第X+M+N-1幀以及第X+M+N幀圖像分別依次為第X幀圖像后I幀、2 幀、…、N-1幀、N幀、…、M幀、M+1幀、…、M+N-1幀以及M+N幀圖像,N為第一預(yù)設(shè)幀數(shù)且 N〈Z,M為第二預(yù)設(shè)幀數(shù)且N〈M〈Z。[0053]預(yù)分析模塊60用于對(duì)待編碼視頻的圖像進(jìn)行預(yù)分析,可通過(guò)現(xiàn)有技術(shù)中任意一種預(yù)分析方法實(shí)現(xiàn)。預(yù)分析模塊60每完成一幀圖像的預(yù)分析,將該幀圖像及該幀圖像的預(yù)分析結(jié)果存入第一緩存器10,例如:在預(yù)分析模塊60完成對(duì)第X幀圖像的預(yù)分析后,將第X 幀圖像及其預(yù)分析結(jié)果存入第一緩存器10。[0054]第一緩存器10用于存儲(chǔ)M幀圖像及M幀圖像的預(yù)分析結(jié)果。第一緩存器10每次接收到新一幀圖像以及該新一幀圖像的預(yù)分析結(jié)果后,都會(huì)判斷當(dāng)前存儲(chǔ)圖像幀數(shù)是否大于M,如果當(dāng)前存儲(chǔ)圖像幀數(shù)大于M時(shí),自動(dòng)將當(dāng)前存儲(chǔ)圖像中的第一幀圖像及其預(yù)分析結(jié)果移出,以保證第一緩存器10存儲(chǔ)的圖像幀數(shù)不超過(guò)M幀。例如:在接收到預(yù)分析模塊60 移入的第X幀圖像后,判斷當(dāng)前存儲(chǔ)圖像幀數(shù)是否大于M,以及在當(dāng)前存儲(chǔ)圖像幀數(shù)大于M 時(shí),自動(dòng)將當(dāng)前存儲(chǔ)圖像中的第一幀圖像,也即第X-M幀圖像及第X-M幀圖像的預(yù)分析結(jié)果移出。[0055]第一編碼模塊20滯后于預(yù)分析模塊M幀,對(duì)已完成預(yù)分析的圖像進(jìn)行第一次編碼,也即第一編碼模塊20滯后于預(yù)分析模塊60的幀數(shù)等于第一緩存器10中存儲(chǔ)的圖像幀數(shù)。因而,在預(yù)分析模塊60完成對(duì)第X至X+M-1幀圖像的預(yù)分析后,第一編碼模塊20對(duì)第 X幀圖像進(jìn)行編碼。優(yōu)選地,第一編碼模塊20從第一緩存器10中獲取第X幀圖像,以及第 X至X+M-1幀圖像的預(yù)分析結(jié)果,根據(jù)上一幀(也即第X-1幀)圖像的第一次編碼結(jié)果和第X 至X+M-1幀圖像的預(yù)分析結(jié)果對(duì)第X幀圖像進(jìn)行第一次編碼。第一編碼模塊20每完成一幀圖像的編碼,將該幀圖像及該幀圖像的預(yù)分析結(jié)果以及第一次編碼結(jié)果全部存入第二緩存器30,例如:在第一編碼模塊20完成對(duì)第X幀圖像的第一次編碼后,將第X幀圖像及其預(yù)分析結(jié)果以及第一次編碼結(jié)果全部存入第二緩存器30。[0056]第二緩存器30用于存儲(chǔ)N幀圖像及N幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果, 第二緩存器30每次接收到新一幀圖像以及該新一幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果后,都會(huì)判斷當(dāng)前存儲(chǔ)圖像幀數(shù)是否大于N,如果當(dāng)前存儲(chǔ)圖像幀數(shù)大于N時(shí),自動(dòng)將當(dāng)前存儲(chǔ)圖像中的第一幀圖像及其預(yù)分析結(jié)果和第一次編碼結(jié)果移出,以保證第二緩存器30 存儲(chǔ)的圖像幀數(shù)不超過(guò)N幀。例如:在接收到第一編碼模塊20移入的第X幀圖像后,判斷當(dāng)前存儲(chǔ)圖像幀數(shù)是否大于N,以及在當(dāng)前存儲(chǔ)圖像幀數(shù)大于N時(shí),自動(dòng)將當(dāng)前存儲(chǔ)圖像中的第一幀圖像,也即第X-N幀圖像及第X-N幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果移出。[0057]第二編碼模塊40滯后于第一編碼模塊N幀,對(duì)已完成第一次編碼的圖像進(jìn)行第二次編碼,也即第二編碼模塊40滯后于第一編碼模塊20的幀數(shù)等于第二緩存器30中存儲(chǔ)的圖像幀數(shù)。因而,在第一次編碼模塊20完成對(duì)第X至X+N-1幀圖像的第一次編碼后,第二編碼模塊40對(duì)第X幀圖像進(jìn)行編碼。優(yōu)選地,第二編碼模塊40從第二緩存器30中獲取第 X幀圖像,以及第X至X+N-1幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果,從第一緩存器10中獲取第χ+Ν至χ+Ν+Μ-l.幀圖像的預(yù)分析結(jié)果,從而根據(jù)上一幀(也即第X-1幀)圖像的第二次 編碼結(jié)果、第X至X+N+M-1幀圖像的預(yù)分析結(jié)果及第X至X+N-1幀圖像的第一次編碼結(jié)果 對(duì)第X幀圖像進(jìn)行第二次編碼。第二編碼模塊40每完成一幀圖像的編碼,將實(shí)際編碼信息 輸出。[0058]各模塊同時(shí)實(shí)時(shí)運(yùn)行的時(shí)序如圖4所示,預(yù)分析模塊60領(lǐng)先第一編碼模塊M幀, 即預(yù)分析模塊60完成了第I至M幀的預(yù)分析之后,第一編碼模塊20才開(kāi)始對(duì)第I幀進(jìn)行 第一次編碼。緩存器I (即第一緩存器10)存儲(chǔ)了 M幀圖像及其預(yù)分析結(jié)果。第一編碼模 塊20領(lǐng)先第二編碼模塊N幀,即第I至N幀圖像完成了第一次編碼之后,第I幀才開(kāi)始進(jìn) 行第二次編碼。緩存器2 (即第二緩存器30)存儲(chǔ)了 N幀圖像及其預(yù)分析結(jié)果、第一次編碼 結(jié)果。每處理完一幀圖像,緩存器I和緩存器2中第一幀被移出緩存器,上一級(jí)功能模塊的 最新一幀被移入緩存器,即兩個(gè)緩存器如同一個(gè)大小不變的窗口逐幀向后滑動(dòng)。[0059]由此可以看出,在對(duì)某一幀進(jìn)行第一次編碼時(shí),碼率控制方法可利用的信息包括 之前所有幀的預(yù)分析結(jié)果和第一次編碼結(jié)果,以及之后M幀的預(yù)分析結(jié)果;在對(duì)某一幀進(jìn) 行第二次編碼時(shí),碼率控制方法可利用的信息包括之前所有幀的預(yù)分析結(jié)果、第一次編碼 結(jié)果和第二次編碼結(jié)果、之后M幀的第一次編碼結(jié)果,以及之后M+N幀的預(yù)分析結(jié)果。在實(shí) 際使用中,M可設(shè)為10至40,N可設(shè)為50至200。[0060]該實(shí)施例的實(shí)時(shí)視頻流編碼器中的數(shù)據(jù)流如圖5所示,由預(yù)分析模塊讀入新的待 編碼圖像進(jìn)行預(yù)分析,之后將該圖像及預(yù)分析結(jié)果移入緩存器I ;在緩存器I已滿(mǎn)的情況 下,第一次編碼模塊從緩存器I中讀取每一個(gè)待編碼圖像及其預(yù)分析結(jié)果,進(jìn)行第一次編 碼中的碼率控制并進(jìn)行編碼,將第一次編碼結(jié)果以及之前的預(yù)分析結(jié)果、待編碼圖像一起 存入緩存器2 ;在緩存器2已滿(mǎn)的情況下,第二次編碼模塊從緩存器2中讀取每一個(gè)待編碼 圖像及其預(yù)分析結(jié)果和第一次編碼結(jié)果,進(jìn)行第二次編碼中的碼率控制并進(jìn)行編碼,最后 將第二次編碼結(jié)果作為實(shí)際編碼碼流進(jìn)行輸出。[0061]各級(jí)功能模塊之間,靠檢查緩存器是否為滿(mǎn)來(lái)保證時(shí)序的正確性,當(dāng)緩存器I不 滿(mǎn)時(shí),預(yù)分析模塊會(huì)讀入新的待編碼原始圖像進(jìn)行預(yù)分析,之后將該原始圖像和預(yù)分析結(jié) 果推入緩存器1,使緩存器I重新為滿(mǎn)以待第一次編碼模塊使用。第一次編碼模塊結(jié)束了某 一幀的編碼后,若緩存器2不滿(mǎn)則將該幀原始圖像、預(yù)分析結(jié)果和第一次編碼結(jié)果存入緩 存器2,若緩存器2為滿(mǎn)則進(jìn)行等待直到第二次編碼模塊從緩存器2中讀取了一幀數(shù)據(jù)使緩 存器2不滿(mǎn)后再將這些數(shù)據(jù)存入緩存器2。[0062]因而,在實(shí)時(shí)視頻流編碼其中,預(yù)分析模塊在處理第I至M幀時(shí),第一編碼模塊是 沒(méi)有進(jìn)行任何編碼工作。但是在這之后的所有時(shí)間中,預(yù)分析模塊都是和第一編碼模塊同 時(shí)實(shí)時(shí)運(yùn)行的。同理,在預(yù)分析模塊處理完第M+N幀之后的所有時(shí)間中,預(yù)分析模塊、第一 編碼模塊、第二編碼模塊這二個(gè)模塊是完全同時(shí)實(shí)時(shí)運(yùn)行的。[0063]該基于二次編碼的編碼器,其輸入和輸出延時(shí)為M+N幀,優(yōu)選設(shè)定M+N=120幀,在 25fps的視頻中對(duì)應(yīng)將近5秒的延時(shí),相當(dāng)于是編碼器的啟動(dòng)時(shí)間,即編碼器在啟動(dòng)時(shí)即接 收輸入視頻,約5秒后預(yù)分析模塊、第一次編碼模塊、第二次編碼模塊開(kāi)始同時(shí)實(shí)時(shí)運(yùn)行并 持續(xù)地輸出已編碼碼流。在廣電系統(tǒng)中,視頻編碼器開(kāi)機(jī)之后會(huì)7x24小時(shí)地運(yùn)行,最初幾 秒之內(nèi)的不完全運(yùn)行是可以忽略的,在之后的所有時(shí)間之內(nèi)三個(gè)模塊都是在同時(shí)運(yùn)行的, 完全符合“實(shí)時(shí)”編碼器的要求。[0064]采用該優(yōu)選實(shí)施例提供的實(shí)時(shí)視頻流編碼器,包括預(yù)分析模塊60、第一編碼模塊 20和第二編碼模塊40三級(jí)功能模塊,這三個(gè)功能模塊可以同時(shí)實(shí)時(shí)運(yùn)行,共同完成碼率控 制功能。通過(guò)設(shè)置預(yù)分析模塊60,進(jìn)一步提高編碼器的編碼質(zhì)量,同時(shí),這三級(jí)功能模塊 依次保持一定的延時(shí),以保證上一級(jí)模塊能提前處理完預(yù)設(shè)的幀數(shù)以便下一級(jí)功能模塊使 用,能夠?qū)崟r(shí)輸出編碼碼流。此外,每?jī)杉?jí)功能模塊之間存在一個(gè)緩存器,每個(gè)緩存器中緩 存了上一級(jí)功能模塊處理完畢而下一級(jí)功能模塊尚未開(kāi)始處理的各幀圖像及其處理結(jié)果 信息,保證了各級(jí)處理的數(shù)據(jù)不會(huì)丟失。[0065]優(yōu)選地,各功能模塊的實(shí)現(xiàn)方法如下:[0066](I)預(yù)分析模塊。預(yù)分析模塊中對(duì)待編碼視頻中的各幀圖像進(jìn)行了簡(jiǎn)化的幀內(nèi)預(yù) 測(cè)和幀間預(yù)測(cè)搜索,并根據(jù)搜索時(shí)得到的編碼代價(jià)來(lái)估算各幀及各宏塊的編碼復(fù)雜度。然 后,根據(jù)各幀的編碼代價(jià)以及對(duì)場(chǎng)景切換的檢測(cè)來(lái)選擇合適的幀類(lèi)型。[0067]其中,編碼代價(jià)用來(lái)表征宏塊或宏塊對(duì)采用某一種編碼方式時(shí)使用的比特?cái)?shù)以及 引入的視頻質(zhì)量損失。編碼代價(jià)越大,則需要使用的比特?cái)?shù)越多,視頻質(zhì)量損失越大;編碼 代價(jià)越小,需要的比特?cái)?shù)越少(即壓縮比越高),視頻質(zhì)量越好。視頻編碼中,使用不同的運(yùn) 動(dòng)矢量和編碼模式(即圖像分塊大小以及幀內(nèi)、幀間預(yù)測(cè)等)時(shí)都會(huì)有不同的編碼代價(jià),搜 索的目的就是通過(guò)窮舉地計(jì)算各個(gè)不同的運(yùn)動(dòng)矢量和編碼模式對(duì)應(yīng)的編碼代價(jià),來(lái)找到編 碼代價(jià)最小的運(yùn)動(dòng)矢量和編碼模式,以之編碼能得到最高的壓縮比和最好的視頻質(zhì)量。[0068]優(yōu)選地,通過(guò)SAD (Sum ofAbsolute Difference,絕對(duì)誤差和)方法來(lái)計(jì)算編碼代 價(jià),具體地,通過(guò)幀間預(yù)測(cè)或幀內(nèi)預(yù)測(cè)得到每塊圖像各像素值的一組預(yù)測(cè)值,將預(yù)測(cè)值與實(shí) 際圖像的像素值相減得到預(yù)測(cè)殘差,然后對(duì)預(yù)測(cè)殘差進(jìn)行DCT變換、量化和熵編碼。殘差值 的大小是影響視頻壓縮率和質(zhì)量的最主要因素。在進(jìn)行搜索時(shí),針對(duì)每個(gè)不同的運(yùn)動(dòng)矢量 及模式,計(jì)算整個(gè)宏塊或宏塊對(duì)的預(yù)測(cè)殘差的絕對(duì)值之和即為SAD,也即為編碼代價(jià),通過(guò) 搜索所有可能的運(yùn)動(dòng)矢量和模式,找到最小的SAD,則該SAD對(duì)應(yīng)的運(yùn)動(dòng)矢量及模式即為最 優(yōu),編碼器應(yīng)按照它來(lái)進(jìn)行編碼。[0069](2)第一編碼模塊。每一幀按照預(yù)分析中選擇的幀類(lèi)型進(jìn)行編碼。首先依照幀類(lèi) 型為各幀分配恰當(dāng)?shù)哪繕?biāo)比特?cái)?shù),按照預(yù)分析時(shí)的編碼代價(jià)對(duì)R-Q模型進(jìn)行計(jì)算,計(jì)算出 對(duì)應(yīng)該目標(biāo)比特?cái)?shù)所應(yīng)使用的QP。[0070]之后,將當(dāng)前幀和之后M幀圖像,按照當(dāng)前QP進(jìn)行編碼的預(yù)測(cè)比特?cái)?shù)填入編碼器 的傳輸虛擬緩存區(qū),并調(diào)整QP值使在未來(lái)的M幀之內(nèi)此虛擬緩存區(qū)不會(huì)發(fā)生上溢和下溢, 調(diào)整之后的QP作為當(dāng)前幀的基準(zhǔn)QP。[0071]最后,對(duì)當(dāng)前幀中的每個(gè)宏塊按照其各自的復(fù)雜度計(jì)算出獨(dú)立的QP值偏置,并對(duì) 每個(gè)宏塊按照幀級(jí)基準(zhǔn)QP和宏塊級(jí)QP偏置值的和進(jìn)行編碼。[0072]其中,虛擬緩沖區(qū)是在控制視頻碼率的時(shí)候,在編碼器中假想的模擬傳輸設(shè)備中 信號(hào)發(fā)送緩沖區(qū)的。對(duì)于要求的視頻碼率,只代表著視頻流的平均碼率,而這個(gè)碼率不可能 是完全均勻的,因此在信號(hào)傳輸設(shè)備中會(huì)存在一個(gè)發(fā)送緩沖區(qū),當(dāng)瞬間碼率較大時(shí)將來(lái)不 及發(fā)送走的碼流存在此緩沖區(qū)內(nèi),之后再按順序發(fā)送。如果視頻的平均碼率小于等于信號(hào) 傳輸設(shè)備的發(fā)送碼率,一般而言依靠這個(gè)緩沖區(qū)傳輸設(shè)備能將視頻碼流全部正確發(fā)送走。 但是,如果視頻碼率的波動(dòng)太大,在某一個(gè)瞬間的比特?cái)?shù)過(guò)多,多到發(fā)送緩沖區(qū)被填滿(mǎn),則 整個(gè)系統(tǒng)會(huì)出現(xiàn)問(wèn)題,可能造成某一段碼流無(wú)法發(fā)送;如果某一個(gè)瞬間的比特?cái)?shù)過(guò)少,緩沖區(qū)完全為空,則傳輸設(shè)備會(huì)在某個(gè)時(shí)刻沒(méi)有可發(fā)送的數(shù)據(jù),這就造成了帶寬的浪費(fèi),會(huì)使視 頻質(zhì)量降低。[0073]因此,在編碼器的碼率控制算法中,除了要控制住平均碼率,還要控制住瞬間碼率 使發(fā)送設(shè)備的緩沖區(qū)不會(huì)發(fā)生上溢或下溢。這個(gè)過(guò)程是靠在編碼器中設(shè)立一個(gè)虛擬緩沖區(qū) 來(lái)完成的。每完成對(duì)一幀的編碼(第一次編碼模塊和第二次編碼模塊均存在此過(guò)程),這一 幀的比特?cái)?shù)會(huì)被填充到虛擬緩沖區(qū),同時(shí)虛擬緩沖區(qū)會(huì)按照預(yù)設(shè)的系統(tǒng)碼率每秒推出固定 的比特?cái)?shù)。這樣,在設(shè)定的虛擬緩沖區(qū)的體積小于等于實(shí)際傳輸設(shè)備的發(fā)送緩沖區(qū)的情況 下,只要保證虛擬緩沖區(qū)不會(huì)上溢或者下溢,就可以保證實(shí)際傳輸設(shè)備的發(fā)送緩沖區(qū)不會(huì) 發(fā)生上溢或者下溢,既不會(huì)造成碼流無(wú)法發(fā)送,也不會(huì)造成帶寬浪費(fèi)。[0074]以待編碼圖像中的任一幀,即第X幀圖像為例,對(duì)第X幀圖像進(jìn)行第一次編碼的編 碼過(guò)程如下:第一編碼模塊20從第一緩沖器10中得到第X至X+M-1幀圖像及其預(yù)分析結(jié) 果,第一編碼模塊20緩存有第X-1幀的第一次編碼結(jié)果后,首先根據(jù)第X-1幀圖像的第一 次編碼結(jié)果更新R-Q模型,更新后的R-Q模型將作為第X幀以及X+M-1幀編碼預(yù)測(cè)模型使 用,同時(shí)更新剩余碼率信息。然后對(duì)第X幀和X+M-1幀按照更新后的R-Q模型進(jìn)行編碼碼 率預(yù)測(cè),得到M幀編碼碼率和,同時(shí)根據(jù)剩余碼率信息得到M幀待編碼碼率,將二者進(jìn)行比 較,按照比較結(jié)果調(diào)整本幀編碼QP值。[0075](3)第二編碼模塊。編碼每幀圖像前對(duì)圖像進(jìn)行初始化,按照第一次編碼結(jié)果,根 據(jù)R-Q模型調(diào)整本幀QP和后向N幀的QP值,重新分配每幀目標(biāo)比特?cái)?shù),務(wù)必使得幀間質(zhì)量 均衡,總比特?cái)?shù)逼近于待編碼目標(biāo)比特?cái)?shù)。第二次編碼在第一次編碼的基礎(chǔ)上進(jìn)行,有更為 準(zhǔn)確的R-Q模型數(shù)據(jù),而且R-Q模型以本幀第一次編碼信息為建模數(shù)據(jù),可以將誤差精度控 制在10%?15%內(nèi)。[0076]其中,QP調(diào)整過(guò)程如圖6所示,對(duì)當(dāng)前幀進(jìn)行第二次編碼時(shí),首先為其初始化基準(zhǔn) QP,并根據(jù)已完成第二次編碼幀的實(shí)際比特?cái)?shù)計(jì)算當(dāng)前幀及此后N幀的目標(biāo)總比特?cái)?shù)。然 后,計(jì)算若當(dāng)前幀及其后N幀均按此基準(zhǔn)QP進(jìn)行編碼時(shí)各幀的比特?cái)?shù),并檢查此N幀中虛 擬緩存區(qū)是否發(fā)生了上溢或下溢。若虛擬緩存區(qū)填充狀態(tài)在若干段幀中發(fā)生了上溢或下 溢,則在基準(zhǔn)QP的基礎(chǔ)上調(diào)整該分段中的QP使虛擬緩存區(qū)狀態(tài)正常。之后,按照各幀調(diào)整 后的新QP計(jì)算當(dāng)前幀及其后N幀的預(yù)測(cè)總比特?cái)?shù)。最后,比較此預(yù)測(cè)總比特?cái)?shù)是否與目 標(biāo)總比特?cái)?shù)偏離過(guò)遠(yuǎn),如果這個(gè)差距過(guò)大,則重新調(diào)整設(shè)定的基準(zhǔn)QP值,基準(zhǔn)QP值的調(diào)整 方向由預(yù)測(cè)總比特?cái)?shù)與目標(biāo)總比特?cái)?shù)的偏離方向決定,預(yù)測(cè)總比特?cái)?shù)過(guò)大則將在設(shè)定的QP 上增大AQP,反之則減小AQP,直至預(yù)測(cè)總比特?cái)?shù)與目標(biāo)總比特?cái)?shù)的差距在預(yù)設(shè)范圍內(nèi)停 止。記錄當(dāng)前幀的QP和目標(biāo)比特?cái)?shù),按照當(dāng)前幀的QP為當(dāng)前幀進(jìn)行第二次編碼并輸出碼 流。[0077]以待編碼圖像中的任一幀,即第X幀圖像為例,對(duì)第X幀圖像進(jìn)行第二次編碼的編 碼過(guò)程如下:第二編碼模塊20從第一緩沖器10中得到第X至第X+N幀圖像信息,第二編碼 模塊中緩存有第X-1幀圖像第二次編碼結(jié)果,首先根據(jù)第X-1幀圖像第二次編碼結(jié)果更新 剩余碼率信息,然后按照第X幀圖像至第X+N幀圖像的第一次編碼結(jié)果一次更新第X幀圖 像至第X+N幀圖像的R-Q模型,按照第X幀圖像至第X+N幀圖像的第一次編碼得到的第X 幀圖像至第X+N幀圖像SAD值計(jì)算在指定QP下需要的編碼碼率,得到N幀編碼碼率和,將 N幀編碼碼率和與根據(jù)剩余碼率得到的N幀待編碼碼率值比較,調(diào)整指定的QP值至二者匹配,將這個(gè)指定的QP值作為第X幀圖像編碼QP值。[0078]本發(fā)明實(shí)施例還提供了實(shí)時(shí)視頻流編碼方法,以下對(duì)本發(fā)明實(shí)施例所提供的實(shí)時(shí)視頻流編碼方法進(jìn)行介紹。需要說(shuō)明的是,在本發(fā)明實(shí)施例的實(shí)時(shí)視頻流編碼方法可以通過(guò)本發(fā)明實(shí)施例所提供的實(shí)時(shí)視頻流編碼器來(lái)執(zhí)行,本發(fā)明實(shí)施例的實(shí)時(shí)視頻流編碼器也可以用于執(zhí)行本發(fā)明實(shí)施例所提供的實(shí)時(shí)視頻流編碼方法。[0079]圖7是根據(jù)本發(fā)明第一實(shí)施例的實(shí)時(shí)視頻流編碼方法的流程圖,如圖7所示,該方法包括如下的步驟S102和步驟S104:[0080]步驟S102:對(duì)待編碼視頻中的第X至X+N-1幀圖像進(jìn)行第一次編碼,其中,待編碼視頻依次由第I至Z幀圖像組成,第X幀圖像為第I至Z幀圖像中的任一幀圖像,N為第一預(yù)設(shè)幀數(shù)且N〈Z。[0081]其中,在對(duì)任一幀圖像進(jìn)行第一次編碼時(shí),可基于已完成編碼的各幀編碼結(jié)果來(lái)編碼。優(yōu)選地,也可在第一次編碼之前,先對(duì)各幀各宏塊圖像進(jìn)行預(yù)分析,從而在對(duì)任一幀圖像進(jìn)行第一次編碼時(shí),可基于已完成編碼的各幀編碼結(jié)果以及所有圖像的預(yù)分析結(jié)果來(lái)編碼;或者,在第一次編碼之前,對(duì)各幀各宏塊圖像進(jìn)行預(yù)測(cè),比如利用視頻中相鄰幀內(nèi)容相似的特點(diǎn),直接使用上一幀的編碼復(fù)雜度作為當(dāng)前幀的編碼復(fù)雜度的預(yù)測(cè)值,從而在對(duì)任一幀圖像進(jìn)行第一次編碼時(shí),可基于已完成編碼的各幀編碼結(jié)果以及預(yù)測(cè)結(jié)果來(lái)編碼。[0082]步驟S104:在得到第X至X+N-1幀圖像的第一次編碼結(jié)果后,對(duì)第X幀圖像進(jìn)行第二次編碼,其中,對(duì)第X幀圖像進(jìn)行第二次編碼的同時(shí),對(duì)第X+N幀圖像進(jìn)行第一次編碼。[0083]在步驟S102完成對(duì)第X至X+N-1幀圖像的編碼后,通過(guò)步驟S104對(duì)第X幀圖像進(jìn)行第二次編碼,從而在對(duì)第X幀圖像進(jìn)行第二次編碼時(shí),可基于第I至X+N-ι幀圖像中任意一幀或幾幀的第一次編碼結(jié)果以及第I至X-1幀圖像中任意一幀或幾幀的第二次編碼結(jié)果進(jìn)行第二次編碼,滿(mǎn)足二次編碼的條件。[0084]在該實(shí)施例中,接收到待編碼視頻后,可以根據(jù)待編碼視頻特點(diǎn)確定第一預(yù)設(shè)幀數(shù)N,或者接收用戶(hù)命令,根據(jù)用戶(hù)命令確定第一預(yù)設(shè)幀數(shù)N。在確定N后,開(kāi)始對(duì)待編碼視頻中的第I幀、第2幀、…、第N幀圖像進(jìn)行第一次編碼。當(dāng)完成第N幀圖像的第一次編碼后,在對(duì)第N+1幀圖像進(jìn)行第一次編碼時(shí),開(kāi)始對(duì)第I幀圖像進(jìn)行第二次編碼,并在第二次編碼后,輸出第I幀圖像的實(shí)際編碼。[0085]之后,以此類(lèi)推:對(duì)第N+2幀圖像進(jìn)行第一次編碼時(shí),對(duì)第2幀圖像進(jìn)行第二次編碼,并輸出第2幀圖像的實(shí)際編碼;對(duì)第N+3幀圖像進(jìn)行第一次編碼時(shí),對(duì)第3幀圖像進(jìn)行第二次編碼,并輸出第3幀圖像的實(shí)際編碼……,直到輸出最后一幀,也即第Z幀圖像的實(shí)際編碼,完成對(duì)待編碼視頻的編碼并實(shí)時(shí)輸出實(shí)際編碼碼流。[0086]從中可以看出,采用該實(shí)時(shí)視頻流編碼方法的編碼器,其輸入端不停地有待編碼的視頻圖像輸入,同時(shí),輸出端不停地有編碼好的視頻碼流輸出,其中,輸出僅滯后輸入N 幀,也即若干秒的延時(shí),對(duì)于實(shí)時(shí)編碼方法,若干秒的延時(shí)是普遍存在且可接受的,因而,該實(shí)時(shí)視頻流編碼方法符合“實(shí)時(shí)”的要求。[0087]采用該實(shí)施例提供的實(shí)時(shí)視頻流編碼方法,不僅能夠?qū)崟r(shí)編碼,而且能夠通過(guò)二次編碼的方式進(jìn)行編碼,與基于一次編碼的實(shí)時(shí)視頻流編碼方法相比,能夠極大地提高編碼質(zhì)量。[0088]圖8是根據(jù)本發(fā)明第二實(shí)施例的實(shí)時(shí)視頻流編碼方法的流程圖,如圖8所示,該方法包括步驟S202至步驟S212:[0089]步驟S202:獲取待編碼視頻的一幀圖像。[0090]步驟S204:對(duì)獲取到的圖像進(jìn)行預(yù)分析,并將獲取到圖像及預(yù)分析結(jié)果存入第一 緩存器,返回步驟S202,至所有圖像預(yù)分析完畢。該步驟可通過(guò)圖3所示實(shí)施例中的預(yù)分析 模塊60實(shí)現(xiàn)。[0091]步驟S206:在第一緩存器中的圖像幀數(shù)大于M時(shí),將第一緩存器中的第一幀圖像 及該第一幀圖像的預(yù)分析結(jié)果移出第一緩存器。[0092]步驟S208:對(duì)第一緩存器移出的圖像進(jìn)行第一次編碼,并將第一緩存器移出的圖 像及預(yù)分析結(jié)果和第一次編碼得到的第一編碼結(jié)果存入第二緩存器,返回步驟S206,至所 有圖像預(yù)分析完畢。該步驟可通過(guò)圖3所示實(shí)施例中的第一編碼模塊20實(shí)現(xiàn)。[0093]在步驟S208進(jìn)行第一次編碼的同時(shí),步驟S204領(lǐng)先步驟S208共M幀圖像,對(duì)獲 取到的圖像進(jìn)行預(yù)分析,也即,當(dāng)步驟S208對(duì)第X幀圖像進(jìn)行第一次編碼時(shí),步驟S204正 在對(duì)第X+M幀圖像進(jìn)行預(yù)分析。[0094]步驟S210:在第二緩存器中的圖像幀數(shù)大于N時(shí),將第二緩存器中的第一幀圖像 及該第一幀圖像的預(yù)分析結(jié)果和第一編碼結(jié)果移出第二緩存器。[0095]步驟S212:對(duì)第二緩存器移出的圖像進(jìn)行第二次編碼,在輸出編碼結(jié)果后返回步 驟S210,至所有圖像的編碼結(jié)果全部輸出。[0096]在步驟S212進(jìn)行第二次編碼的同時(shí),步驟S208領(lǐng)先步驟S208共N幀圖像,對(duì)第 一緩存器移出的圖像進(jìn)行第一次編碼,也即,當(dāng)步驟S212對(duì)第X幀圖像進(jìn)行第二次編碼時(shí), 步驟S208正在對(duì)第X+N幀圖像進(jìn)行預(yù)分析。[0097]其中,N為第一預(yù)設(shè)幀數(shù),M為第二預(yù)設(shè)幀數(shù),且N〈M〈Z。[0098]優(yōu)選地,在步驟S208中,對(duì)第X幀圖像進(jìn)行第一次編碼包括:根據(jù)第X至X+M-1幀 圖像的預(yù)分析結(jié)果和第X-1幀圖像的第一次編碼結(jié)果對(duì)第X幀圖像進(jìn)行第一次編碼。在步 驟S212中,對(duì)第X幀圖像進(jìn)行第二次編碼包括:根據(jù)第X至X+N+M-1幀圖像的預(yù)分析結(jié)果、 第X至X+N-1幀圖像的第一次編碼結(jié)果和第X-1幀圖像的第二次編碼結(jié)果對(duì)第X幀圖像進(jìn) 行第二次編碼。[0099]采用該實(shí)施例提供的實(shí)時(shí)視頻流編碼方法,包括預(yù)分析、第一次編碼和和第二次 編碼三級(jí)編碼步驟,這三級(jí)編碼步驟可以同時(shí)實(shí)時(shí)進(jìn)行,共同完成碼率控制功能。通過(guò)預(yù)分 析步驟,進(jìn)一步提高編碼器的編碼質(zhì)量,同時(shí),這三級(jí)編碼步驟依次保持一定的延時(shí),以保 證上一級(jí)編碼步驟能提前處理完預(yù)設(shè)的幀數(shù)以便下一級(jí)編碼步驟使用,能夠?qū)崟r(shí)輸出編碼 碼流。此外,設(shè)置量個(gè)緩存器,每個(gè)緩存器中緩存了上一級(jí)步驟處理完畢而下一級(jí)步驟尚未 開(kāi)始處理的各幀圖像及其處理結(jié)果信息,保證了各級(jí)處理的數(shù)據(jù)不會(huì)丟失。[0100]從以上的描述中,可以看出,本發(fā)明實(shí)現(xiàn)了如下技術(shù)效果:將給予二次編碼的碼率 控制方法應(yīng)用于實(shí)時(shí)視頻流編碼器,在滿(mǎn)足實(shí)時(shí)輸出編碼碼流的同時(shí),提高了編碼器的編 碼質(zhì)量。[0101]采用了本發(fā)明提供的實(shí)時(shí)流編碼器,碼率控制方法由基于一次編碼的改為基于二 次編碼的,不僅提高了 H.264編碼視頻流的平均質(zhì)量,還明顯減小了實(shí)時(shí)碼率波動(dòng)和視頻 質(zhì)量波動(dòng)。與基于一次編碼的實(shí)時(shí)視頻流編碼器相比,達(dá)到相同的主觀質(zhì)量時(shí)所需碼率減 小了超過(guò)10%。[0102]需要說(shuō)明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的 計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不 同于此處的順序執(zhí)行所示出或描述的步驟。[0103]顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用 的計(jì)算裝置來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成 的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ) 在存儲(chǔ)裝置中由計(jì)算裝置來(lái)執(zhí)行,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們 中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來(lái)實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的 硬件和軟件結(jié)合。[0104]以上僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人 員來(lái)說(shuō),本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、 等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種實(shí)時(shí)視頻流編碼器,其特征在于,包括:第一編碼模塊,用于對(duì)待編碼視頻中的圖像進(jìn)行第一次編碼,其中,所述待編碼視頻依次由第I至Z幀圖像組成;以及第二編碼模塊,用于在所述第一編碼模塊完成對(duì)第X至X+N-1幀圖像的編碼后,對(duì)所述第X幀圖像進(jìn)行第二次編碼,其中,所述第X幀圖像為所述第I至Z幀圖像中的任一幀圖像, N為第一預(yù)設(shè)幀數(shù)且N〈Z,其中,所述第一編碼模塊還用于在所述第二編碼模塊對(duì)所述第X幀圖像進(jìn)行編碼時(shí), 對(duì)第X+N幀圖像進(jìn)行編碼。
2.根據(jù)權(quán)利要求1所述的實(shí)時(shí)視頻流編碼器,其特征在于,還包括:預(yù)分析模塊,用于對(duì)所述待編碼視頻的圖像進(jìn)行預(yù)分析,其中,所述第一編碼模塊還用于在所述預(yù)分析模塊完成對(duì)第X至X+M-1幀圖像的預(yù)分析后,對(duì)所述第X幀圖像進(jìn)行編碼,其中,M為第二預(yù)設(shè)幀數(shù)且N〈M〈Z,所述預(yù)分析模塊還用于在所述第一編碼模塊對(duì)所述第X幀圖像進(jìn)行編碼時(shí),對(duì)第X+M 幀圖像進(jìn)行預(yù)分析。
3.根據(jù)權(quán)利要求2所述的實(shí)時(shí)視頻流編碼器,其特征在于,還包括:第一緩存器,用于存儲(chǔ)M幀圖像及所述M幀圖像的預(yù)分析結(jié)果;以及第二緩存器,用于存儲(chǔ)N幀圖像及所述N幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果, 其中,所述預(yù)分析模塊還用于對(duì)所述第X幀圖像進(jìn)行預(yù)分析后,將所述第X幀圖像及所述第X幀圖像的預(yù)分析結(jié)果移入所述第一緩存器;所述第一緩存器還用于在接收到所述第X幀圖像后,判斷當(dāng)前存儲(chǔ)圖像幀數(shù)是否大于 M,以及在當(dāng)前存儲(chǔ)圖像幀數(shù)大于M時(shí),將第X-M幀圖像及所述第X-M幀圖像的預(yù)分析結(jié)果移出;所述第一編碼模塊還用于對(duì)所述第X幀圖像進(jìn)行編碼后,將所述第X幀圖像及所述第 X幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果移入所述第二緩存器;以及所述第二緩存器還用于在接收到所述第X幀圖像后,判斷當(dāng)前存儲(chǔ)圖像幀數(shù)是否大于 N,以及在當(dāng)前存儲(chǔ)圖像幀數(shù)大于N時(shí),將第X-N幀圖像及所述第X-N幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果移出。
4.根據(jù)權(quán)利要求3所述的實(shí)時(shí)視頻流編碼器,其特征在于,所述第一編碼模塊還用于根據(jù)第X至X+M-1幀圖像的預(yù)分析結(jié)果和所述第X-1幀圖像的第一次編碼結(jié)果對(duì)所述第X幀圖像進(jìn)行編碼;以及所述第二編碼模塊還用于根據(jù)第X至X+N+M-1幀圖像的預(yù)分析結(jié)果、第X至X+N-1幀圖像的第一次編碼結(jié)果和所述第X-1幀圖像的第二次編碼結(jié)果對(duì)所述第X幀圖像進(jìn)行編碼。
5.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的實(shí)時(shí)視頻流編碼器,其特征在于,10≤ M ≤ 40, 50 ≤ N ≤ 200。
6.一種實(shí)時(shí)視頻流編碼方法,其特征在于,包括:對(duì)待編碼視頻中的第X至X+N-1幀圖像進(jìn)行第一次編碼,其中,所述待編碼視頻依次由第I至Z幀圖像組成,所述第X幀圖像為所述第I至Z幀圖像中的任一幀圖像,N為第一預(yù)設(shè)幀數(shù)且N〈Z;以及在得到所述第X至X+N-1幀圖像的第一次編碼結(jié)果后,對(duì)所述第X幀圖像進(jìn)行第二次編碼,其中,對(duì)所述第X幀圖像進(jìn)行第二次編碼的同時(shí),對(duì)第X+N幀圖像進(jìn)行第一次編碼。
7.根據(jù)權(quán)利要求6所述的實(shí)時(shí)視頻流編碼方法,其特征在于,對(duì)所述第X幀圖像進(jìn)行第一次編碼之前,所述方法還包括:對(duì)第X至X+M-1幀圖像進(jìn)行預(yù)分析,其中,M為第二預(yù)設(shè)幀數(shù)且N〈M〈Z,其中,對(duì)所述第X幀圖像進(jìn)行第一次編碼的同時(shí),對(duì)第X+M幀圖像進(jìn)行預(yù)分析。
8.根據(jù)權(quán)利要求7所述的實(shí)時(shí)視頻流編碼方法,其特征在于,還包括:通過(guò)第一緩存器存儲(chǔ)M幀圖像及所述M幀圖像的預(yù)分析結(jié)果;以及通過(guò)第二緩存器存儲(chǔ)N幀圖像及所述N幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果,其中,對(duì)所述第X幀圖像進(jìn)行預(yù)分析后,將所述第X幀圖像及所述第X幀圖像的預(yù)分析結(jié)果移入所述第一緩存器;在所述第一緩存器接收到所述第X幀圖像后,判斷當(dāng)前存儲(chǔ)圖像幀數(shù)是否大于M,以及在當(dāng)前存儲(chǔ)圖像幀數(shù)大于M時(shí),將第X-M幀圖像及所述第X-M幀圖像的預(yù)分析結(jié)果移出; 對(duì)所述第X幀圖像進(jìn)行編碼后,將所述第X幀圖像及所述第X幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果移入所述第二緩存器;以及在所述第二緩存器接收到所述第X幀圖像后,判斷當(dāng)前存儲(chǔ)圖像幀數(shù)是否大于N,以及在當(dāng)前存儲(chǔ)圖像幀數(shù)大于N時(shí),將第X-N幀圖像及所述第X-N幀圖像的預(yù)分析結(jié)果和第一次編碼結(jié)果移出。
9.根據(jù)權(quán)利要求8所述的實(shí)時(shí)視頻流編碼方法,其特征在于,對(duì)所述第X幀圖像進(jìn)行第一次編碼包括:根據(jù)第X至X+M-1幀圖像的預(yù)分析結(jié)果和所述第X-1幀圖像的第一次編碼結(jié)果對(duì)所述第X幀圖像進(jìn)行第一次編碼;對(duì)所述第X幀圖像進(jìn)行第二次編碼包括:根據(jù)第X至X+N+M-1幀圖像的預(yù)分析結(jié)果、第 X至X+N-1幀圖像的第一次編碼結(jié)果和所述第X-1幀圖像的第二次編碼結(jié)果對(duì)所述第X幀圖像進(jìn)行第二次編碼。
10.根據(jù)權(quán)利要求6至9中任一項(xiàng)所述的實(shí)時(shí)視頻流編碼方法,其特征在于, 10≤ M≤ 40,50 ≤ N ≤ 200。
【文檔編號(hào)】H04N19/625GK103517080SQ201210211786
【公開(kāi)日】2014年1月15日 申請(qǐng)日期:2012年6月21日 優(yōu)先權(quán)日:2012年6月21日
【發(fā)明者】包佳晶, 張?zhí)烊? 張龍霄, 張剛 申請(qǐng)人:北京數(shù)碼視訊科技股份有限公司