背景技術(shù):
數(shù)字視頻流通常使用幀序列或靜止圖像來表示視頻。每個幀可以包括多個塊,其又可以包含描述像素的顏色、亮度或其它屬性的值的信息。典型視頻流中的數(shù)據(jù)量很大,并且視頻的傳輸和存儲可以使用巨大的計算或通信資源。由于視頻數(shù)據(jù)中涉及大量數(shù)據(jù),因此對于傳輸和存儲需要高性能壓縮。此外,期望能夠基于可用連接以優(yōu)化的分辨率來流傳輸質(zhì)量視頻數(shù)據(jù)。
技術(shù)實現(xiàn)要素:
本文公開了用于使用動態(tài)分辨率切換來實現(xiàn)用于對視頻流進行編碼的目標比特率的系統(tǒng)、方法和裝置的方面。根據(jù)本發(fā)明的一個方面的裝置包括至少一個處理器,其被配置為執(zhí)行在非有形存儲介質(zhì)中存儲的指令以識別視頻流的多個幀中的第一幀,以表示量化參數(shù)的第一比特率對第一幀進行編碼,響應于對第一幀進行編碼而識別關(guān)于運動搜索區(qū)域的一個或多個編碼器限制,將第一比特率與第一幀的目標比特率進行比較,并將量化參數(shù)與最小量化閾值和最大量化閾值中的一個進行比較,響應于將第一比特率與目標比特率進行比較以及將量化參數(shù)與最小量化閾值和最大量化閾值中的一個進行比較而調(diào)整至少一個編碼參數(shù),識別視頻流的第二幀,使用所調(diào)整的至少一個編碼參數(shù)以第二比特率對第二幀進行編碼,以及在輸出比特流中發(fā)送編碼的第一幀和編碼的第二幀。
根據(jù)本發(fā)明的另一個方面的裝置包括至少一個處理器,其被配置為執(zhí)行在非有形存儲介質(zhì)中存儲的指令以識別多個幀中的輸入幀,使用輸入量化參數(shù)對輸入幀進行編碼,響應于對輸入幀進行編碼而識別關(guān)于運動搜索區(qū)域的一個或多個編碼器限制,響應于對輸入幀進行編碼而生成比特數(shù),基于所述比特數(shù)和用于對輸入幀進行編碼的目標比特率來調(diào)整至少一個編碼參數(shù),通過使用所述至少一個編碼參數(shù)對輸入幀進行編碼來生成編碼的幀,以及在輸出比特流中發(fā)送所述編碼的幀。
根據(jù)本發(fā)明的另一個方面的裝置包括至少一個處理器,其被配置為執(zhí)行在非有形存儲介質(zhì)中存儲的指令,以識別多個幀中的輸入幀,以表示恒定量化參數(shù)的第一比特率對輸入幀進行編碼,響應于對輸入幀進行編碼而識別關(guān)于運動搜索區(qū)域的一個或多個編碼器限制,將第一比特率與輸入幀的最小目標比特率和最大目標比特率中的一個進行比較,響應于將第一比特率與最小目標比特率和最大目標比特率中的一個進行比較而調(diào)整至少一個編碼參數(shù),通過使用所述至少一個編碼參數(shù)對輸入幀進行編碼來生成編碼的幀,以及在輸出比特流中發(fā)送所述編碼的幀。
在實施例、所附權(quán)利要求和附圖的以下詳細描述中公開了本公開的這些和其它方面。
附圖說明
當結(jié)合附圖閱讀時,從以下詳細描述中可以最好地理解本發(fā)明。除非另有說明,否則在各個附圖中相同的附圖標號代表相同元件。
圖1a是示出用于對由于最大化的量化參數(shù)而過沖的視頻流進行編碼的目標比特率的圖。
圖1b是示出用于對由于最小化的量化參數(shù)而下沖的視頻流進行編碼的目標比特率的圖。
圖2是視頻編碼和解碼系統(tǒng)的示意圖。
圖3是可以實現(xiàn)發(fā)送站或接收站的計算設備的示例的框圖。
圖4是待編碼和隨后解碼的典型視頻流的圖。
圖5是根據(jù)本文教導的一個方面的視頻壓縮系統(tǒng)的框圖。
圖6是根據(jù)本文教導的另一個方面的視頻解壓縮系統(tǒng)的框圖。
圖7是用于在單通編碼中實現(xiàn)目標編碼比特率的過程的示例的流程圖。
圖8是用于在雙通編碼中實現(xiàn)目標編碼比特率的過程的示例的流程圖。
具體實施方式
視頻編碼器中的速率控制算法旨在當輸入數(shù)據(jù)的復雜度隨時間變化時保持編碼器產(chǎn)生恒定比特率??梢酝ㄟ^基于先前的幀已經(jīng)生成的比特量來調(diào)整每個幀的量化參數(shù)(qp)來實現(xiàn)恒定比特率。通常,較高的量化減小比特率,并且較低的量化增加比特率。量化參數(shù)指示視頻流的數(shù)據(jù)由編碼器量化的比例。也就是說,在編碼器使用較高的量化參數(shù)的情況下,量化階段涉及對于較高的量化參數(shù)的視頻數(shù)據(jù)的較高的減少以及對于較低的量化參數(shù)的視頻數(shù)據(jù)的較低的減少。所得到的量化視頻數(shù)據(jù)指示包括數(shù)據(jù)的視頻流的幀被編碼的比特率。一般來說,對于視頻流的給定幀,使用較高的量化參數(shù)將導致較低的幀比特率,并且使用較低的量化參數(shù)將導致較高的幀比特率。
然而,根據(jù)視頻序列的復雜度和編碼器的各種能力,可能存在對于編碼給定視頻流不能滿足目標比特率的情況。這可能是因為qp已經(jīng)被限制到最大值閾值(例如,其中進一步的增加通過產(chǎn)生明顯的視覺偽跡(visualartifacts)減小了關(guān)于分辨率的視頻質(zhì)量的qp的值),然而比特率仍然不夠低,導致比特率過沖。替選地,使用大qp可能導致對視頻質(zhì)量有害的編譯偽跡(codingartifacts)。類似地,如果希望在給定帶寬下優(yōu)化用戶的視頻質(zhì)量,并且qp已經(jīng)達到最小值閾值(例如,其中進一步的減小對提高關(guān)于分辨率的視頻質(zhì)量沒有效果的qp的值),則可能沒有辦法進一步提高視頻質(zhì)量。因此,用戶體驗受損。
圖1a和1b是示出用于分別對由于最大化的量化參數(shù)而過沖的和由于最小化的量化參數(shù)而下沖的視頻流進行編碼的目標比特率的圖。水平軸指示由編碼器編碼的視頻流的幀的連續(xù)進展,并且豎直軸指示在給定幀的編碼器的量化階段中使用的量化參數(shù)。用于對視頻流的幀進行編碼的最小qp閾值100和最大qp閾值102被示為相對于目標比特率104的恒定值。該圖還指示,根據(jù)被編碼的數(shù)據(jù),僅通過增加或減小qp106,可能不可獲得目標比特率104。例如由于對包括給定幀的輸入數(shù)據(jù)進行編碼的復雜度,導致幀比特率108可能波動。
如圖1所示,幀比特率108隨著視頻流的數(shù)據(jù)變得更加復雜而增加。響應于幀比特率108的增加,編碼器增加qp106以試圖維持視頻流的目標比特率104。然而,最終,qp106達到最大qp閾值102,因此不能進一步增加,但幀比特率108仍未達到目標比特率104,因為正被編碼的數(shù)據(jù)仍然太大而無法實現(xiàn)目標比特率104。這被稱為比特率過沖,因為幀比特率108仍然高于目標比特率104,盡管最大qp閾值102被限制。類似地,如圖1b所示,編碼器可以減小qp106,其中確定由于幀比特率108太低,所以未實現(xiàn)目標比特率104。然而,如果幀比特率108保持在目標比特率104以下而不管達到最小qp閾值100,則導致比特率下沖。
因此,傳統(tǒng)編碼器不能通過僅調(diào)整qp來實現(xiàn)用于編碼視頻數(shù)據(jù)的恒定比特率。此外,雖然一些編碼器可以插入用于編碼的關(guān)鍵幀,但是該解決方案對于至少在對關(guān)鍵幀進行編譯時必然導致比特率峰值的原因而言不是最優(yōu)的。相反,本公開描述了動態(tài)參考幀縮放,以通過在編碼期間切換分辨率來提高速率控制的性能。因此,例如,通過編碼器在形成其預測信號之前在內(nèi)部縮放參考幀來完成速率控制。描述了用于對視頻流進行編碼的單通和雙通編碼器。在雙通編碼器中,第一通使用恒定量化器對視頻流的幀進行編碼,并且第二通在提前已知哪些幀是復雜的而哪些是容易的情況下為每個幀優(yōu)化地分配比特。本文中描述了動態(tài)參考幀縮放的進一步細節(jié),其中初始參考其中可以實現(xiàn)它的系統(tǒng)。
圖2是視頻編碼和解碼系統(tǒng)200的示意圖。發(fā)送站202可以是例如具有諸如圖3所描述的硬件的內(nèi)部配置的計算機。然而,發(fā)送站202的其它合適的實施方式是可能的。例如,發(fā)送站202的處理可以分布在多個設備中。
網(wǎng)絡204可以連接發(fā)送站202和接收站206,用于視頻流的編碼和解碼。具體地,可以在發(fā)送站202中編碼視頻流,并且可以在接收站206中解碼所編碼的視頻流。網(wǎng)絡204可以是例如互聯(lián)網(wǎng)。網(wǎng)絡204還可以是局域網(wǎng)(lan)、廣域網(wǎng)(wan)、虛擬專用網(wǎng)絡(vpn)、蜂窩電話網(wǎng)絡、或?qū)碜园l(fā)送站202的視頻流傳送到(在此示例中)接收站206的任何其它裝置。
在一個示例中,接收站206可以是具有諸如圖3中描述的硬件的內(nèi)部配置的計算機。然而,接收站206的其它合適的實施方式是可能的。例如,接收站206的處理可以分布在多個設備中。
視頻編碼和解碼系統(tǒng)200的其它實施方式是可能的。例如,實施方式可以省略網(wǎng)絡204。在另一個實施方式中,視頻流可以被編碼,然后被存儲以用于稍后的時間傳輸?shù)浇邮照?06或具有存儲器的任何其它設備。在一個實施方式中,接收站206接收(例如,經(jīng)由網(wǎng)絡204、計算機總線和/或一些通信路徑)編碼的視頻流,并且存儲視頻流用于稍后解碼。在示例實施方式中,實時傳輸協(xié)議(rtp)用于通過網(wǎng)絡204傳輸編碼的視頻。在另一個實施方式中,可以使用除rtp之外的傳輸協(xié)議,例如基于http的視頻流傳輸協(xié)議。
當在視頻會議系統(tǒng)中使用時,例如,發(fā)送站202和/或接收站206可以包括如下所述的編碼和解碼視頻流的能力兩者。例如,接收站206可以是視頻會議參與者,其從視頻會議服務器(例如,發(fā)送站202)接收編碼的視頻比特流以進行解碼和觀看,并且進一步將其自己的視頻比特流進行編碼并發(fā)送到視頻會議服務器用于由其它參與者進行解碼和觀看。
圖3是可以實現(xiàn)發(fā)送站或接收站的計算設備300的示例的框圖。例如,計算設備300可以實現(xiàn)圖2的發(fā)送站202和接收站206中的一個或兩個。計算設備300可以是包括多個計算設備的計算系統(tǒng)的形式,或者可以是單個計算設備的形式,例如移動電話、平板計算機、膝上型計算機、筆記本計算機、臺式計算機等。
計算設備300中的cpu302可以是傳統(tǒng)的中央處理單元。替選地,cpu302可以是能夠操縱或處理現(xiàn)在存在或以后開發(fā)的信息的任何其它類型的一個設備或多個設備。盡管所公開的實施方式可以用如所示的單個處理器(例如,cpu302)來實踐,但是可以使用多于一個處理器來實現(xiàn)速度和效率方面的優(yōu)點。
在實施方式中,計算設備300中的存儲器304可以是只讀存儲器(rom)設備或隨機存取存儲器(ram)設備。任何其它合適類型的存儲設備可以用作存儲器304。存儲器304可以包括由cpu302使用總線312訪問的代碼和數(shù)據(jù)306。存儲器304還可以包括操作系統(tǒng)308和應用程序310,應用程序310包括允許cpu302執(zhí)行本文描述的方法的至少一個程序。例如,應用程序310可以包括應用1至n,其還包括執(zhí)行本文描述的方法的視頻編譯應用。計算設備300還可以包括輔助存儲器314,其可以例如是與移動計算設備一起使用的存儲卡。因為視頻通信會話可以包含大量的信息,所以它們可以全部或部分地存儲在輔助存儲器314中,并且根據(jù)處理需要被加載到存儲器304中。
計算設備300還可以包括一個或多個輸出設備,諸如顯示器318。在一個示例中,顯示器318可以是將顯示器與可操作以感測觸摸輸入的觸敏元件組合的觸敏顯示器。顯示器318可以經(jīng)由總線312耦合到cpu302。除了顯示器318之外或作為顯示器318的替選,可以提供允許用戶編程或以其它方式使用計算設備300的其它輸出設備。當輸出設備是顯示器或包括顯示器時,可以以各種方式實現(xiàn)顯示器,包括由液晶顯示器(lcd)、陰極射線管(crt)顯示器、或發(fā)光二極管(led)顯示器(諸如oled顯示器)實現(xiàn)。
計算設備300還可以包括圖像感測設備320(例如,相機)或者現(xiàn)在存在或者以后開發(fā)的可以感測圖像(諸如操作計算設備300的用戶的圖像)的任何其它圖像感測設備320,或者可以與圖像感測設備320通信。圖像感測設備320可以被定位成使得其指向操作計算設備300的用戶。在一個示例中,可以配置圖像感測設備320的位置和光軸使得視場包括與顯示器318直接相鄰并且從其可見顯示器318的區(qū)域。
計算設備300還可以包括聲音感測設備322(例如,麥克風)或者現(xiàn)在存在的或以后開發(fā)的可以感測計算設備300附近的聲音的任何其它聲音感測設備,或與之通信。聲音感測設備322可以被定位成使得它指向操作計算設備300的用戶,并且可以被配置為在用戶操作計算設備300時接收由用戶發(fā)出的聲音,例如語音或其它話語。
盡管圖3將計算設備300的cpu302和存儲器304描述為集成到單個單元中,但是可以利用其它配置。cpu302的操作可以跨越可以直接耦合的、或跨越局域網(wǎng)或其它網(wǎng)絡的多個機器(每個機器具有一個或多個處理器)而分布。存儲器304可以跨越多個機器分布,諸如基于網(wǎng)絡的存儲器或在執(zhí)行計算設備300的操作的多個機器中的存儲器。盡管這里被描繪為單個總線,但是計算設備300的總線312可以由多個總線組成。此外,輔助存儲器314可以直接耦合到計算設備300的其它組件,或者可以經(jīng)由網(wǎng)絡訪問,并且可以包括諸如存儲卡的單個集成單元或諸如多個存儲卡的多個單元。計算設備300因此可以以各種各樣的配置來實現(xiàn)。
圖4是待編碼并隨后解碼的視頻流400的示例的圖。視頻流400包括視頻序列402。在下一級,視頻序列402包括多個相鄰幀404。雖然三個幀被描繪為相鄰幀404,但是視頻序列402可以包括任何數(shù)量的相鄰幀404。然后可以將相鄰幀404進一步細分為單獨的幀,例如,幀406。在下一級,幀406可以被劃分為一系列分段或平面408。例如,分段408可以是允許并行處理的幀子集。分段408還可以是可以將視頻數(shù)據(jù)分離成單獨顏色的幀子集。例如,彩色視頻數(shù)據(jù)的幀406可以包括亮度平面和兩個色度平面。可以以不同的分辨率對分段408進行采樣。
無論幀406是否被劃分為分段408,幀406可以進一步細分為塊410,塊410可以包含對應于例如幀406中的16×16像素的數(shù)據(jù)。塊410也可以被布置為包括來自像素數(shù)據(jù)的一個或多個平面408的數(shù)據(jù)。塊410還可以是任何其它合適的大小,諸如4×4像素、8×8像素、16×8像素、8×16像素、16×16像素或更大。除非另有說明,否則術(shù)語塊和宏塊在本文中可互換使用。
圖5是根據(jù)實施方式的編碼器500的框圖。如上所述,可以諸如通過提供存儲在存儲器(例如,存儲器304)中的計算機軟件程序來在發(fā)送站202中實現(xiàn)編碼器500。計算機軟件程序可以包括機器指令,當所述機器指令由諸如cpu302的處理器執(zhí)行時使得發(fā)送站202以圖5中描述的方式對視頻數(shù)據(jù)進行編碼。編碼器500還可以被實現(xiàn)為被包括在例如發(fā)送站202中的專用硬件。在一個特別期望的實施方式中,編碼器500是硬件編碼器。編碼器500具有以下階段以在正向路徑(由實連接線所示)中執(zhí)行各種功能以使用視頻流400作為輸入來產(chǎn)生編碼或壓縮的比特流520:幀內(nèi)/幀間預測階段502、變換階段504、量化階段506、和熵編碼階段508。編碼器500還可以包括重構(gòu)路徑(由虛連接線示出)以重構(gòu)用于未來塊的編碼的幀。在圖5中,編碼器500具有以下階段來執(zhí)行重構(gòu)路徑中的各種功能:去量化階段510、逆變換階段512、重構(gòu)階段514、和環(huán)路濾波階段516。編碼器500的其它結(jié)構(gòu)變型可以用于對視頻流400進行編碼。
當視頻流400被呈現(xiàn)用于編碼時,每個幀406可以以塊為單位來處理。在幀內(nèi)/幀間預測階段502處,可以使用幀內(nèi)預測(intra-frameprediction)(也稱為幀內(nèi)預測(intraprediction))或幀間預測(inter-frameprediction)(也稱為幀間預測(interprediction))來對每一塊進行編碼。在任何情況下,可以形成預測塊。在幀內(nèi)預測的情況下,可從先前已經(jīng)編碼和重構(gòu)的當前幀中的樣本形成預測塊。在幀間預測的情況下,可從一個或多個先前建構(gòu)的參考幀中的樣本形成預測塊。
接下來,仍參考圖5,可在幀內(nèi)/幀間預測階段502處從當前塊減去預測塊以產(chǎn)生殘差塊(也稱為殘差)。變換階段504使用基于塊的變換在例如頻域中將殘差變換為變換系數(shù)。量化階段506使用量化器值或量化級別將變換系數(shù)轉(zhuǎn)換為離散量子值,其稱為量化變換系數(shù)。例如,變換系數(shù)可以除以量化器值并被截斷。然后,熵編碼階段508對量化的變換系數(shù)進行熵編碼。熵編碼的系數(shù)連同用于對塊進行解碼的其它信息(其可以包括例如所使用的預測類型、變換類型、運動矢量和量化器值)然后被輸出到壓縮的比特流520??梢允褂酶鞣N技術(shù)(例如可變長度編譯(vlc)或算術(shù)編譯)來格式化壓縮的比特流520。壓縮的比特流520還可以被稱為編碼的視頻流或編碼的視頻比特流,并且這些術(shù)語將在本文中可互換地使用。
圖5中的重構(gòu)路徑(由虛連接線示出)可以用于確保編碼器500和解碼器600(下面描述)兩者使用相同的參考幀來對壓縮比特流520進行解碼。重構(gòu)路徑執(zhí)行類似于在下面更詳細地討論的解碼處理期間發(fā)生的功能的功能,包括在去量化階段510對量化的變換系數(shù)進行去量化并且在逆變換階段512對去量化的變換系數(shù)進行逆變換以產(chǎn)生導數(shù)殘差塊(也稱為導數(shù)殘差)。在重構(gòu)階段414,可將在幀內(nèi)/幀間預測階段502處預測的預測塊添加到導數(shù)殘差以創(chuàng)建重構(gòu)塊。環(huán)路濾波階段516可以應用于重構(gòu)塊以減少諸如塊偽跡(blockingartifacts)的失真。
編碼器500的其它變型可以用于對壓縮的比特流520進行編碼。例如,基于非變換的編碼器可以針對某些塊或幀直接量化殘差信號,而不需要變換階段504。在另一個實施方式中,編碼器可使量化階段506和去量化階段510組合成單個階段。
圖6是根據(jù)另一個實施方式的解碼器600的框圖。解碼器600可以例如通過提供存儲在存儲器304中的計算機軟件程序在接收站206中實現(xiàn)。計算機軟件程序可以包括機器指令,當機器指令由諸如cpu302的處理器執(zhí)行時使得接收站206以圖6中描述的方式對視頻數(shù)據(jù)進行解碼。解碼器600還可以在包括在例如發(fā)送站202或接收站206中的硬件中實現(xiàn)。
類似于上文所論述的編碼器500的重構(gòu)路徑,解碼器600在一個示例中包括以下階段以執(zhí)行各種功能以從壓縮的比特流520產(chǎn)生輸出視頻流616:熵解碼階段602、去量化階段604、逆變換階段606、幀內(nèi)/幀間預測階段608、重構(gòu)階段610、環(huán)路濾波階段612、和去塊濾波階段614。解碼器600的其它結(jié)構(gòu)變體可用于對壓縮的比特流520進行解碼。
當呈現(xiàn)壓縮的比特流520用于解碼時,可以由熵解碼階段602對壓縮的比特流520內(nèi)的數(shù)據(jù)元素進行解碼,以產(chǎn)生量化的變換系數(shù)集。去量化階段604對量化的變換系數(shù)進行去量化(例如,通過將量化的變換系數(shù)乘以量化器值),并且逆變換階段606對去量化的變換系數(shù)進行逆變換,以產(chǎn)生導數(shù)殘差,該導數(shù)殘差可以與由在編碼器500中的逆變換階段512創(chuàng)建的相同。使用從壓縮的比特流520解碼的報頭信息,解碼器600可以使用幀內(nèi)/幀間預測階段608來創(chuàng)建與在編碼器500中創(chuàng)建的(例如,在幀內(nèi)/幀間預測階段502)預測塊相同的預測塊。在重構(gòu)階段610,可以將預測塊添加到導數(shù)殘差以創(chuàng)建重構(gòu)塊。環(huán)路濾波階段612可以應用于重構(gòu)塊以減少塊偽跡??梢詫χ貥?gòu)塊應用其它濾波。在此示例中,將去塊濾波階段614應用于重構(gòu)塊以減少塊失真,并且將結(jié)果輸出為輸出視頻流616。輸出視頻流616也可稱為解碼的視頻流,并且術(shù)語將在本文中可互換使用。解碼器600的其它變型可以用于對壓縮的比特流520進行解碼。例如,解碼器600可以在沒有去塊濾波階段614的情況下產(chǎn)生輸出視頻流616。
圖7和圖8分別是用于使用分辨率縮放以在單通和雙通編碼中實現(xiàn)恒定目標比特率的過程700和800的流程圖。過程700和800可以在諸如計算設備300的系統(tǒng)中實現(xiàn)以幫助視頻流的編碼。過程700和800可以被實現(xiàn)為例如由計算設備(諸如發(fā)送站202或接收站206)執(zhí)行的軟件程序。軟件程序可以包括存儲在諸如存儲器304的存儲器中的機器可讀指令,機器可讀指令在由諸如cpu302的處理器執(zhí)行時,使得計算設備執(zhí)行過程700或過程800中的一個。過程700和800還可以整體或部分使用硬件來實現(xiàn)。如上所述,一些計算設備可以具有多個存儲器和多個處理器,并且在這種情況下,每個過程700和800的步驟或操作可以使用不同的處理器和存儲器來分布。本文中單數(shù)形式的術(shù)語“處理器”和“存儲器”的使用包括僅具有一個處理器或一個存儲器的計算設備以及具有多個處理器或存儲器的設備,每個處理器或存儲器可以用在執(zhí)行一些步驟但不必用于執(zhí)行記載的全部步驟。
為了簡化說明,將每個過程700和800描繪和描述為一系列步驟或操作。然而,根據(jù)本公開的步驟和操作可以以各種次序和/或同時發(fā)生。另外,根據(jù)本公開的步驟或操作可以與本文未呈現(xiàn)和描述的其它步驟或操作一起發(fā)生。此外,并非所有示出的步驟或操作都需要實現(xiàn)根據(jù)所公開的主題的方法。可以對輸入信號的每個幀重復過程700或800中的一個。
參考圖7,在操作702處,通過設定目標比特率、初始qp、最小qp閾值和最大qp閾值的值,用于在單通編碼中使用分辨率縮放以實現(xiàn)相對恒定的目標比特率的過程700開始。這些值可以指示視頻流正在被編碼的初始分辨率。在操作704處,編碼器使用初始qp對視頻流的第一幀進行編碼。如果對第一幀進行編碼導致滿足目標比特率的幀比特率,則操作706通過返回到操作704來準備用于對視頻流的下一幀進行編碼的編碼器。否則,過程700繼續(xù)至操作708的觸發(fā)調(diào)整時期,其使用濾波邏輯來確定視頻數(shù)據(jù)中是否存在振蕩。如果沒有振蕩,則操作708通過返回到操作704來準備用于對視頻流的下一幀進行編碼的編碼器。否則,過程700繼續(xù)至在操作710處發(fā)起的調(diào)整時期。
在操作710處,確定幀比特率不滿足目標比特率是否是由于過沖或下沖。在幀比特率超過目標比特率(過沖)的情況下發(fā)生過沖,例如,因為qp對于視頻流正在被編碼的分辨率來說太低。在幀比特率低于目標比特率(下沖)的情況下發(fā)生下沖,例如,因為qp對于視頻流正在被編碼的分辨率來說太高。不管是否確定了過沖或下沖,在下文中將調(diào)整視頻流的一個或多個編碼參數(shù),以便提高視頻流的質(zhì)量。編碼參數(shù)可以包括在調(diào)整時對視頻流的質(zhì)量或視覺表示有影響的任何值。在實施方式中,編碼參數(shù)包括但不限于qp、視頻分辨率、最大qp閾值和最小qp閾值。以下由編碼器進行的調(diào)整取決于比特率問題是否由于過沖或下沖。
如果操作710確定存在比特率過沖,則過程700繼續(xù)至操作712,其中確定當前為qp設定的值(在操作710僅被執(zhí)行一次的情況下其可以是在操作702處設定的初始qp)是否等于當前為最大qp閾值設定的值。如果不是,則在操作714處增加qp,該操作通過返回到操作704來使用增加的qp來準備用于對視頻流的下一幀進行編碼的編碼器。然而,如果qp的值等于最大qp閾值的值,則qp不能進一步增加,因為其已經(jīng)達到相對于視頻流的分辨率的最高有效值。因此,在操作716處,過程700減小視頻流的分辨率,其包括重置最小qp閾值和最大qp閾值的值。操作716還基于分辨率的減小來減小qp的值。操作716然后通過返回到操作704,使用新分辨率和qp、最小qp閾值和最大qp閾值來準備用于對下一幀進行編碼的編碼器。
如果相反地,操作710確定存在比特率下沖,則過程700繼續(xù)至操作718,其中確定當前為qp設定的值(在操作710僅被執(zhí)行一次的情況下其可以是在操作702處設定的初始qp)是否等于當前為最小qp閾值設定的值。如果不是,則在操作720處減小qp,該操作通過返回到操作704而使用減少的qp準備用于對視頻流的下一幀進行編碼的編碼器。然而,如果qp的值等于最小qp閾值的值,則qp不能進一步減小,因為其已經(jīng)達到相對于視頻流的分辨率的最低有效值。因此,在操作722處,過程700增加視頻流的分辨率,這包括重置最小qp閾值和最大qp閾值的值。操作722還基于分辨率的增加而增加qp的值。然后,操作722通過返回到操作704,使用新分辨率和qp、最小qp閾值和最大qp閾值來準備用于對下一幀進行編碼的編碼器。
如果更高分辨率的源可用,在編碼比特率始終下沖目標比特率或者超過某個閾值次數(shù)地下沖目標比特率的情況下,另一選擇是增加視頻分辨率。例如,在用戶選擇以360p分辨率觀看視頻,但是他或她的帶寬允許以更高分辨率觀看的情況下,可以將視頻分辨率增加到用戶可以在他或她的連接上對視頻進行流傳輸?shù)淖畲蠓直媛省?/p>
在雙通編碼中,用于對視頻流的幀進行編碼的第一通包括,例如通過檢測由對與視頻流的第一幀相對應的輸入幀進行編碼生成的比特數(shù),基于恒定量化參數(shù)確定哪些幀可能太難或太容易編碼。如果所生成的比特數(shù)指示輸入幀太難或太容易,則編碼器可在編碼對應幀的第二通時調(diào)整視頻流的分辨率。以這種方式,雙通編碼可以通過在第一通期間識別下沖和過沖的潛在情況并且進行必要的調(diào)整以在第二通上有效地編碼視頻流來防止大多數(shù)下沖和過沖。下沖或過沖的量可以指示每維度需要調(diào)整分辨率的程度。
現(xiàn)在參考圖8,在操作802處,用于在雙通編碼中使用分辨率縮放以實現(xiàn)相對恒定的目標比特率的過程800通過設定目標比特率和qp的初始值而開始。在操作804處,使用所設定的目標比特率和qp值來接收和編碼輸入幀。響應于對輸入幀進行編碼,在操作806處生成比特數(shù)。比特數(shù)指示輸入幀被編碼的比特率。取決于所生成的比特的大小,過程800可繼續(xù)至用于調(diào)整視頻流的編碼參數(shù)(例如,視頻分辨率)的調(diào)整時期。在實施方式中,可以基于幀比特率是否落在指定范圍之外來進行關(guān)于是否繼續(xù)到調(diào)整時期的確定,在所述指定范圍內(nèi),改變qp導致期望的視頻質(zhì)量(例如,沒有關(guān)于分辨率的可見編譯偽跡的視頻流傳輸)。例如,如果幀比特率在目標比特率的100到200kbps內(nèi),則操作808可以確定不進行調(diào)整時期。在不進行調(diào)整的情況下,過程800繼續(xù)至操作816,其中基于先前設定的qp值來生成編碼的幀,該編碼的幀隨后在操作818處作為輸出視頻流的一部分而發(fā)送。在實施方式中,可使用標志來編譯在操作808處的確定。
如果在操作808處確定需要進行對視頻分辨率的調(diào)整,則過程800繼續(xù)至操作810,其確定調(diào)整的必要性是否是由于輸入幀編碼比特率下沖或過沖目標比特率。在過沖的情況下,在操作812處,例如通過減小視頻流的分辨率來調(diào)整一個或多個編碼參數(shù)。在下沖的情況下,在操作814處,例如通過增加視頻流的分辨率來調(diào)整一個或多個編碼參數(shù)。
在實施方式中,可以使用百分比比特率偏差的加權(quán)逆的平方根,諸如snew=√(1/(α*bdev)),來確定對視頻分辨率的調(diào)整,其中snew表示分辨率的新的縮放每維比率,α表示加權(quán)參數(shù),并且bdev表示與比特率范圍的偏差。例如,在對輸入幀進行編碼導致小于百分之二十的過沖并且加權(quán)參數(shù)被設定為一時,具有1280×720的分辨率的視頻流的輸入幀可以通過snew=√(1/(1*1.2))=0.913被縮放,從而導致1168×657的新的流傳輸分辨率。類似地,在對輸入幀進行編碼導致百分之五十的嚴重下沖時,縮放比率可變?yōu)閟new=√(1/(1*0.5))=1.414。以這種方式,可以調(diào)整分辨率視頻流,使得其以1810×1018進行編碼。將加權(quán)參數(shù)α調(diào)整為高于1可以導致新的幀比特率被編碼為更接近可接受范圍的中間值(例如,100kbps到200kbps的范圍內(nèi)的150kbps)。
在對視頻分辨率進行調(diào)整之后,過程800繼續(xù)至操作816,其中對應于輸入幀的編碼的幀被編碼為視頻流的第二通的一部分。然后,在操作818處,將編碼的幀作為輸出視頻流的一部分發(fā)送。
分辨率縮放可以提供超出上述那些的進一步的益處。例如,分辨率縮放可以提高尚未找到利用所建立的運動搜索窗口區(qū)域的用于幀間預測的可接受的運動矢量的編碼器的性能。這通常由于幀內(nèi)預測的過度使用而導致差的壓縮。通過在這種情況下縮減視頻流,因為存在較少的要編碼的像素,所以比特率減小,并且視頻流中的絕對運動量也減小。這可以提高搜索窗口的利用。
在實施方式中,并且響應于在操作810處確定下沖,操作814包括減小運動搜索區(qū)域的大小,其還可代替減小視頻分辨率或作為減小視頻分辨率的補充來完成。類似地,響應于在操作810處確定過沖,操作812包括增加運動搜索區(qū)域的大小來代替增加視頻分辨率或作為增加視頻分辨率的補充。在實施方式中,僅對于輸入幀的某些顏色分量(例如,其亮度和/或色度像素值)進行對運動搜索區(qū)域的大小的改變。
在實施方式中,例如,響應于在操作804處對輸入幀進行編碼,可以識別對于運動搜索區(qū)域的一個或多個編碼器限制。編碼器限制可以指示其中由編碼器找到的運動向量500超過閾值的情況,例如,其中視頻流包括快速移動場景,其包括超過編碼器500以給定分辨率充分表示場景的能力的運動量。在實施方式中,響應于編碼器限制指示運動向量超過閾值值,可以減小視頻流的分辨率。
在實施方式中,運動搜索區(qū)域的大小不經(jīng)受改變。例如,在編碼器500被實現(xiàn)為硬件編碼器的情況下,運動搜索區(qū)域可以被靜態(tài)地設定為n×m的大小,其中n和m可以是相同或不同的值。因此,如果視頻流的分辨率高于n×m,則運動搜索區(qū)域可以僅覆蓋輸入幀的一部分。運動搜索區(qū)域的中點位置可以例如相對于要覆蓋的輸入幀的初始部分的初始參考位置進行限定(例如,要被編碼的當前塊或片的中點位置)。然而,在實施方式中,可以減小視頻流的分辨率,以便例如通過使得運動搜索區(qū)域覆蓋輸入幀的較大部分來提高編碼器500檢測運動搜索區(qū)域內(nèi)的運動的能力。如上文所討論的,可以基于閾值或?qū)τ谶\動搜索區(qū)域的其它編碼器限制,以這種方式(例如,作為在操作808處確定是否調(diào)整編碼參數(shù)的一部分)做出減小分辨率的決定。減小分辨率導致基于輸入幀的作為結(jié)果的由運動搜索區(qū)域覆蓋的部分的參考位置來重置運動搜索區(qū)域的中點位置。類似地,在實施方式中,可以基于閾值或其它編碼器限制來增加視頻流的分辨率。例如,在分辨率低于運動搜索區(qū)域的大小(例如,其中運動搜索區(qū)域?qū)⒏采w超過整個輸入幀的情況)的情況下,編碼器500可以將視頻流的分辨率增加為等于運動搜索區(qū)域的大小。因此,運動搜索區(qū)域的中點位置將在適當時位于或保持在輸入幀的參考位置處。如本文所使用的,術(shù)語“中點”是指關(guān)于對應尺寸的中心位置。
盡管本文關(guān)于圖8的二通編碼論述了關(guān)于運動搜索區(qū)域的一個或多個編碼器限制,但是,它們還具有在單通編碼上下文中的應用,諸如關(guān)于圖7所討論的。例如,調(diào)整視頻流的第一幀的編碼參數(shù)可以包括識別對于運動搜索區(qū)域的編碼器限制(例如,作為在操作708處確定觸發(fā)調(diào)整的一部分)和基于編碼器限制減少(或增加)視頻流的分辨率。在實施方式中,以這種方式改變分辨率導致運動搜索區(qū)域的中點位置關(guān)于第一幀的作為結(jié)果由運動搜索區(qū)域覆蓋的部分的參考位置被重置。
在編碼器500是硬件編碼器的另一個實施方式中,運動搜索的參數(shù)從塊到塊和幀到幀保持相同,除了運動搜索區(qū)域的中點位置隨著正在被編碼的幀的塊改變。因此,當分辨率改變時,可以通過分辨率的改變來捕獲更多或更少的運動。例如,當存在快速運動時,由于較低分辨率在相同搜索區(qū)域內(nèi)捕獲更多運動,所以改變分辨率可以提供幀內(nèi)的某些塊的更好匹配,并因此提供較低殘差。
在過程700和800的初始操作中設定的目標比特率可以是經(jīng)受波動的可變比特率。這種波動可能由流傳輸視頻的用戶的連接速度或網(wǎng)絡連接類型的變化引起。例如,在用戶最初通過變得不可用的wifi連接來流傳輸視頻時,視頻流可以切換到lte連接。由于每個網(wǎng)絡連接類型可以指示其自己的用于在給定分辨率最佳地觀看給定視頻流的目標比特率,所以可能期望利用所公開的速率控制過程的實施方式用于可變目標比特率的單通編碼和雙通編碼。
上文所描述的編碼和解碼的方面說明編碼和解碼技術(shù)的一些示例。然而,應當理解,作為權(quán)利要求中使用的那些術(shù)語的編碼和解碼可以意味著壓縮、解壓縮、變換、或任何其它數(shù)據(jù)的處理或改變。
詞語“示例”在本文中用于表示用作示例、實例或說明。在本文中被描述為“示例”的任何方面或設計不必被解釋為相對于其它方面或設計是優(yōu)選的或有利的。相反,使用詞語“示例”旨在以具體的方式呈現(xiàn)概念。如本申請中所使用的,術(shù)語“或”旨在表示包括性的“或”而不是排他性的“或”。也就是說,除非另有說明或者從上下文中清楚,否則“x包括a或b”旨在表示任何自然的包括性排列。也就是說,如果x包括a;x包括b;或x包括a和b兩者,則在任何前述實例下滿足“x包括a或b”。此外,除非另有說明或從上下文中清楚地指示單數(shù)形式,否則本申請和所附權(quán)利要求中使用的冠詞“一”和“一個”通常應被解釋為意指“一個或多個”。此外,貫穿全文使用術(shù)語“實施方式”或“一個實施方式”并不旨在表示相同的實施例或?qū)嵤┓绞?,除非這樣描述。
發(fā)送站202和/或接收站206(以及包括由編碼器500和解碼器600存儲在其上和/或由此執(zhí)行的算法、方法、指令等等)可以在硬件、軟件或其任何組合中實現(xiàn)。硬件可以包括例如計算機、知識產(chǎn)權(quán)(ip)核、專用集成電路(asic)、可編程邏輯陣列、光學處理器、可編程邏輯控制器、微代碼、微控制器、服務器、微處理器、數(shù)字信號處理器或任何其它合適的電路。在權(quán)利要求中,術(shù)語“處理器”應當被理解為單獨地或組合地包括任何前述硬件。術(shù)語“信號”和“數(shù)據(jù)”可互換使用。此外,發(fā)送站202和接收站206的部分不一定必須以相同的方式實現(xiàn)。
此外,在一個方面,例如,發(fā)送站202或接收站206可以使用具有計算機程序的通用計算機或通用處理器來實現(xiàn),所述計算機程序在被執(zhí)行時執(zhí)行本文所述的任何相應的方法、算法和/或指令。另外或替選地,例如,可以使用可以包含用于執(zhí)行本文所述的任何方法、算法或指令的其它硬件的專用計算機/處理器。
發(fā)送站202和接收站206可以例如在視頻會議系統(tǒng)中的計算機上實現(xiàn)。替選地,發(fā)送站202可以在服務器上實現(xiàn),并且接收站206可以在與服務器分離的設備上實現(xiàn),例如手持通信設備。在這種情況下,發(fā)送站202可以使用編碼器500將內(nèi)容編碼為編碼的視頻信號,并將編碼的視頻信號發(fā)送到通信設備。繼而,通信設備然后可以使用解碼器600對編碼的視頻信號進行解碼。替選地,通信設備可以解碼本地存儲在通信設備上的內(nèi)容,例如,未由發(fā)送站202發(fā)送的內(nèi)容。其它合適的發(fā)送以及接收實現(xiàn)方案是可用的。例如,接收站206可以是通常固定的個人計算機而不是便攜式通信設備,和/或包括編碼器500的設備還可以包括解碼器600。
此外,本發(fā)明的實施方式的全部或一部分可以采用可從例如有形計算機可用或計算機可讀介質(zhì)訪問的計算機程序產(chǎn)品的形式。計算機可用或計算機可讀介質(zhì)可以是能夠例如有形地包含、存儲、傳送或傳輸所述程序以由任何處理器使用或與任何處理器結(jié)合使用的任何設備。所述介質(zhì)可以是例如電子、磁性、光學、電磁或半導體器件。其它合適的介質(zhì)也是可用的。
已經(jīng)描述了上述實施例、實施方式和方面以便容易理解本發(fā)明,并且不限制本發(fā)明。相反,本發(fā)明旨在覆蓋包括在所附權(quán)利要求的范圍內(nèi)的各種修改和等同布置,其范圍符合最寬泛的解釋,以包括法律允許的所有這樣的修改和等同結(jié)構(gòu)。