亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

實時視頻傳輸?shù)膸捳{(diào)整的制作方法

文檔序號:11681674閱讀:223來源:國知局
實時視頻傳輸?shù)膸捳{(diào)整的制造方法與工藝

相關(guān)申請的交叉引用

本申請是美國專利申請《帶反向信道消息管理的視頻編碼及解碼》(申請?zhí)?4/982698,2015年12月29日提交)的部分延續(xù)案申請(continuation-in-part),而前述專利申請本身又是美國專利申請《帶反向信道消息管理的視頻處理的方法和系統(tǒng)》(申請?zhí)?4/867143,2015年9月28日提交)的部分延續(xù)案申請。前述兩份申請書的全部內(nèi)容,特此通過引用并入本文。

本發(fā)明涉及視頻編碼及解碼,更具體地,涉及在實時視頻傳輸中使用反向信道消息進行初始帶寬估計和帶寬調(diào)整的視頻編碼和解碼。



背景技術(shù):

數(shù)字視頻位流可被編碼后有效地把視頻壓縮成數(shù)字位流,所述數(shù)字位流可存儲于非瞬時數(shù)字媒介或通過有限帶寬的通信信道進行流傳輸。然而,在視頻位流的傳輸或存儲過程中,可能會發(fā)生丟包或其他錯誤,從而導(dǎo)致所述位流解碼的錯誤??捎玫男诺缼挷粫r改變的情況也屬常見,導(dǎo)致實時視頻傳輸?shù)膯栴}。



技術(shù)實現(xiàn)要素:

有鑒于此,本發(fā)明公開了帶反向信道消息管理的視頻編碼及解碼的系統(tǒng)、方法和設(shè)備的各個方面。

一方面,本發(fā)明公開了一種調(diào)整帶寬的方法,用于向一個接收器傳輸一個視頻位流,包括:

由一個發(fā)送器,以系列數(shù)據(jù)包的形式傳輸所述視頻位流的第一部分,所述第一部分用一個當前位率編碼;

由所述發(fā)送器,從所述接收器接收一條反向信道消息,所述反向信道消息包括由所述接收器在收到所述系列數(shù)據(jù)包后確定的接收端帶寬參數(shù),所述接收端帶寬參數(shù)包括以下至少一項:累計時間差參數(shù)、接收位率參數(shù)、丟包率參數(shù)、帶寬指標參數(shù)和前向糾錯比率參數(shù);

由所述發(fā)送器,用處理器調(diào)整所述當前位率,用于根據(jù)所述接收端帶寬參數(shù)來編碼所述視頻位流;

向所述接收器傳輸所述視頻位流的第二部分,所述第二部分用所述經(jīng)調(diào)整的當前位率編碼。

另一方面,本發(fā)明公開了一種調(diào)整帶寬的方法,用于從一個發(fā)送器接收一個視頻位流,包括:

由一個接收器,接收所述視頻位流的第一部分所關(guān)聯(lián)的一個或多個數(shù)據(jù)包,而第一部分用一個當前位率編碼并以系列數(shù)據(jù)包的形式傳輸;

基于收到的所述一個或多個數(shù)據(jù)包,由所述接收器用處理器確定接收端帶寬參數(shù),所述接收端帶寬參數(shù)包括以下至少一項:累計時間差參數(shù)、接收位率參數(shù)、丟包率參數(shù)、帶寬指標參數(shù)和前向糾錯比率參數(shù);

從所述一個或多個數(shù)據(jù)包,解碼所述視頻位流的經(jīng)編碼的所述第一部分;

在收到所述一個或多個數(shù)據(jù)包后,向所述發(fā)送器傳輸一條或多條反向信道消息,而每條都包括所述接收端帶寬參數(shù);

從所述發(fā)送器接收所述視頻位流的用經(jīng)調(diào)整的當前位率編碼的第二部分,所述經(jīng)調(diào)整的當前位率是在收到所述一條或多條反向信道消息后基于所述接收端帶寬參數(shù)來確定。

本發(fā)明的上述及其他方面,將通過對以下實施例、所附權(quán)利要求書和附圖的詳細描述。

附圖說明

本發(fā)明在結(jié)合附圖閱讀時,可以從以下的詳細描述中得到最好的理解。需要強調(diào)的是,根據(jù)通常的做法,附圖的各種特征不是按比例的。相反,為解釋清楚,所述各種特征的尺寸被任意地放大或縮小。本發(fā)明的公開材料提到所附附圖時,類似的參照數(shù)字在所有視圖中指代類似的部分。在附圖中:

圖1a是依本公開的一些實施例提供的一個視頻編碼及解碼系統(tǒng)的示意圖;

圖1b是可以依本公開的一些實施例使用的一個計算設(shè)備的示意圖;

圖2是依本公開的一些實施例提供的一個視頻位流的結(jié)構(gòu)示意圖;

圖3是依本公開的一些實施例提供的一個視頻壓縮系統(tǒng)的結(jié)構(gòu)示意圖;

圖4是依本公開的一些實施例提供的一個視頻解壓系統(tǒng)的結(jié)構(gòu)示意圖;

圖5a是依本公開的一些實施例提供的用于傳輸一個視頻位流的初始帶寬估計的示例性流程的流程圖;

圖5b是依本公開的一些實施例提供的用于傳輸一個視頻位流的初始帶寬估計的另一示例性流程的流程圖;

圖5c是依本公開的一些實施例提供的用于接收一個視頻位流的初始帶寬估計的示例性流程的流程圖;

圖6a是依本公開的一些實施例提供的用于傳輸一個視頻位流的調(diào)整帶寬的示例性流程的流程圖;

圖6b是依本公開的一些實施例提供的生成一個包括供發(fā)送器使用的接收器端參數(shù)的反向信道消息的示例性流程的流程圖;

圖6c是依本公開的一些實施例提供的用于傳輸一個視頻位流的調(diào)整帶寬的示例性流程的流程圖;

圖6d是依本公開的一些實施例提供的用于接收一個視頻位流的調(diào)整帶寬的示例性流程的流程圖;

圖6e是依本公開的一些實施例提供的用于傳輸及接收一個視頻位流的調(diào)整帶寬的示例性流程的流程圖;

圖7是依本公開的一些實施例提供的一個包括反向信道消息管理器的視頻編碼及解碼系統(tǒng)的結(jié)構(gòu)示意圖;

圖8是依本公開的一些實施例提供的一個編碼及解碼基準幀選擇的示意圖;

圖9是依本公開的一些實施例提供的一個視頻基準幀結(jié)構(gòu)的示意圖。

具體實施方式

數(shù)字視頻可以被用于娛樂、視頻會議、廣告和通常的信息共享。用戶對數(shù)字視頻質(zhì)量的期望會很高,因為用戶希望在帶寬有限的共享互聯(lián)網(wǎng)傳播的視頻與在專用有線頻道傳播的視頻具有同樣高的空間和時間質(zhì)量。例如,數(shù)字視頻編碼可以壓縮數(shù)字視頻的位流,以允許高質(zhì)量的數(shù)字視頻在具有有限帶寬的網(wǎng)絡(luò)進行傳輸。例如,數(shù)字視頻質(zhì)量可以定義為輸出的解壓及解碼的數(shù)字視頻在何種程度上與輸入的數(shù)字視頻匹配。

視頻編碼和解碼統(tǒng)合各種技術(shù)用以壓縮和解壓數(shù)字視頻流,得以在有限帶寬能力的網(wǎng)絡(luò)中傳輸高質(zhì)量的數(shù)字視頻流。這些技術(shù)可以將數(shù)字視頻流處理為一系列的數(shù)字數(shù)據(jù)塊,并處理這些數(shù)據(jù)塊以壓縮用于傳輸或存儲,并且在收到數(shù)據(jù)塊后,解壓縮所述數(shù)據(jù)塊以重建原始數(shù)字視頻流。這種壓縮及解壓序列可能是“有損”的;“有損”的意義是指所述解壓的數(shù)字視頻可能不完全匹配所述輸入的數(shù)字視頻。例如,這可以通過測量所述輸入視頻流的像素數(shù)據(jù)及對應(yīng)的所述經(jīng)編碼、傳輸和解碼的視頻流的像素數(shù)據(jù)之區(qū)別來測定。一個數(shù)字視頻流通過編碼及解碼所述數(shù)字視頻流所引入的失真程度,可被認為是壓縮程度的一個函數(shù),從而所述解碼視頻的質(zhì)量可被認為是所述傳輸帶寬的一個函數(shù)。

本發(fā)明公開的實施例,可以通過調(diào)整所發(fā)送的視頻位流的位率(bitrate)以匹配其傳輸所經(jīng)的網(wǎng)絡(luò)或信道的能力,允許經(jīng)壓縮的視頻位流在“嘈雜”或易發(fā)潛在錯誤的網(wǎng)絡(luò)中傳輸。一些實施例可以在傳輸壓縮數(shù)字視頻位流之前測試網(wǎng)絡(luò),通過發(fā)送一個或多個數(shù)據(jù)包到解碼器并分析返回的數(shù)據(jù)包,以確定所述數(shù)字視頻的最佳壓縮比。例如,一個數(shù)據(jù)包可以包括一條或多條消息。數(shù)據(jù)包也可以包括視頻或音頻數(shù)據(jù),無論是否攜帶消息。一些實施例可以通過分析由所述解碼器發(fā)送到所述編碼器的包含有關(guān)網(wǎng)絡(luò)的信息的數(shù)據(jù)包,周期性地重新測試網(wǎng)絡(luò)。調(diào)節(jié)所述位率可以提高或降低相較于所述輸入的數(shù)字視頻流的所述解碼視頻位流的所述空間和時間質(zhì)量,其中,較高的位率可以支持更高質(zhì)量的數(shù)字視頻。

本發(fā)明公開的實施例還可以通過在壓縮視頻位流中添加前向糾錯(forwarderrorcorrection,fec)數(shù)據(jù)包,以在嘈雜網(wǎng)絡(luò)中傳輸所述壓縮視頻位流。fec數(shù)據(jù)包對數(shù)字視頻位流中的部分或全部信息,以包含在位流中的額外數(shù)據(jù)包的形式進行冗余編碼。通過處理所述的額外數(shù)據(jù)包,解碼器可檢測數(shù)字視頻流中丟失或損壞的信息,并可在某些情況下,用所述額外數(shù)據(jù)包中的所述冗余數(shù)據(jù)重建所述丟失或損壞的數(shù)據(jù)。根據(jù)如上所述的由所述編碼器接收到的網(wǎng)絡(luò)信息包,一些實施例可以調(diào)整與fec有關(guān)的參數(shù)。動態(tài)調(diào)整所述fec參數(shù),可以在傳輸?shù)臄?shù)字視頻數(shù)據(jù)和fec數(shù)據(jù)之間分配可用的網(wǎng)絡(luò)帶寬,以允許在給定網(wǎng)絡(luò)條件下每單位時間內(nèi)傳輸最多有質(zhì)量的圖像。

本發(fā)明公開的實施例可以改變編碼器和fec參數(shù),以允許在數(shù)字視頻位流傳輸所經(jīng)的網(wǎng)絡(luò)的給定條件下,傳輸可能的最高品質(zhì)的數(shù)字視頻。改變這些參數(shù)也可以影響解碼的視頻流的質(zhì)量,因為它們可以導(dǎo)致播放中的解碼視頻的樣子產(chǎn)生迅速的變化。通過分析參數(shù)變化的趨勢和預(yù)測參數(shù)值的變化,一些實施例可以控制編碼器和fec參數(shù)的所述變化以避免視頻質(zhì)量的快速改變。

圖1a是視頻編碼和解碼系統(tǒng)10的示意圖,一些實施例可以在圖中提供。在一個示例中,計算設(shè)備12可以包括硬件的內(nèi)部配置,包括一個處理器如中央處理單元(cpu)18和一個數(shù)字數(shù)據(jù)存儲器如存儲器20。例如,cpu18可以是用于控制計算設(shè)備12的控制器,也可以是微處理器、數(shù)字信號處理器、場效可編程邏輯門陣列(fpga)、布置于定制的專用集成電路(asic)上的離散電路元件或者任意其他數(shù)字數(shù)據(jù)處理器。例如,cpu18可以通過存儲器總線、電線、電纜、無線連接或任意其他連接而連接到存儲器20。存儲器20可以作為或包含只讀存儲器(rom)、隨機存取存儲器(ram)、光存儲器、磁存儲器諸如磁盤或磁帶、非易失性存儲卡、云存儲,或者任意其他合適的數(shù)字數(shù)據(jù)存儲設(shè)備或設(shè)備的方式或組合。存儲器20可存儲cpu18使用的數(shù)據(jù)和程序指令。計算設(shè)備12也有其他合適的可能的實現(xiàn)方式。例如,計算設(shè)備12的處理可以分布在以多個網(wǎng)絡(luò)16通信的多個設(shè)備上進行。圖1中,計算設(shè)備12可以是一個編碼計算設(shè)備,即包括一個編碼器的計算設(shè)備。如下文詳述,編碼計算設(shè)備12可以整合編碼器元件300和流程600a,而流程600a可整合硬件與軟件元件以及相關(guān)聯(lián)的方法來實現(xiàn)編碼設(shè)備12。

在一個實例中,網(wǎng)絡(luò)16可以連接計算設(shè)備12和計算設(shè)備14,用于編碼和解碼視頻流。例如,所述視頻流可以在計算設(shè)備12上進行編碼,經(jīng)編碼的視頻流可以在計算設(shè)備14上解碼。網(wǎng)絡(luò)16可以包括任意一個或多個適于即時應(yīng)用的網(wǎng)絡(luò),諸如有線或無線的局域或廣域網(wǎng)、虛擬專用網(wǎng)、蜂窩電話數(shù)據(jù)網(wǎng)絡(luò),或任意其他有線或無線的,對硬件、軟件、通信協(xié)議的配置,以適用于圖例中的從計算設(shè)備12向計算設(shè)備14傳送視頻位流,并從計算設(shè)備14傳送關(guān)于所述網(wǎng)絡(luò)的參數(shù)至計算設(shè)備12。

計算設(shè)備14可以包括cpu18和存儲器20,類似于以上討論的系統(tǒng)10的組件。如下文詳述,計算設(shè)備14可以是一個解碼計算設(shè)備14,其可以整合解碼器元件400和流程500c,而流程500c可整合硬件與軟件元件以及相關(guān)聯(lián)的方法來實現(xiàn)解碼設(shè)備14。例如,計算設(shè)備14可配置用于顯示視頻流。連接到計算/解碼設(shè)備14的顯示器25可以有各種實現(xiàn)方式,包括液晶顯示器(lcd)、陰極射線管(crt)、有機或非有機發(fā)光二極管顯示器(led)、等離子體顯示器、或任意其他用以向用戶顯示機器可讀的視頻信號的機制。例如,計算設(shè)備14可配置用于顯示由計算設(shè)備14的解碼器解碼的所述視頻位流的渲染。

編碼器和解碼器系統(tǒng)10有其他可能的實施方式。除了計算設(shè)備12和計算設(shè)備14,圖1還展示了額外的計算設(shè)備26,其分別具有一個或多個cpu30及存儲器32。這些計算設(shè)備可包括服務(wù)器,以及移動電話,移動電話也可以諸如創(chuàng)建、編碼、解碼、存儲、轉(zhuǎn)發(fā)或顯示數(shù)字視頻流。這些計算設(shè)備在處理能力和存儲器可用性方面可具有不同的能力,包括用于創(chuàng)建視頻的設(shè)備,如視頻攝像機,和用于顯示視頻的設(shè)備。

圖1b是一個計算設(shè)備100(如圖1a所示的設(shè)備12、14和26)的示例性內(nèi)部配置的框圖。如前所述,設(shè)備100可采用包括多個計算單元的計算系統(tǒng)的形式,或單一計算單元的形式,如移動電話、平板計算機、膝上型計算機、筆記本電腦,臺式計算機,服務(wù)器計算機等。

計算設(shè)備100可包括多個組件,如圖1b所示。cpu(或處理器)18可以是中央處理單元(如微處理器),且可包括一個或多個處理器,其中每個處理器具有一個或多個處理內(nèi)核。又或者,cpu18可包括另一類型的單個或多個設(shè)備,其能夠操縱或處理現(xiàn)存的或以后開發(fā)的信息。當存在多個處理設(shè)備時,它們可以以任何方式進行互連,包括硬連線或聯(lián)網(wǎng)(包括無線聯(lián)網(wǎng))的方式。因此,cpu18的操作可以分布在多個機器上,所述多個機器可以直接對接或通過一個局域網(wǎng)或其他網(wǎng)絡(luò)連接。cpu18可以是通用處理器或?qū)S锰幚砥鳌?/p>

隨機存取存儲器(randomaccessmemory,ram)42是可用作內(nèi)存儲器的任意合適的非永久存儲設(shè)備。ram42可包括可執(zhí)行指令和數(shù)據(jù),以供cpu18即時訪問。ram42通常包括一個或多個動態(tài)隨機存取存儲器(dynamicram,dram)模塊,如雙倍數(shù)據(jù)速率同步動態(tài)隨機存取存儲器(doubledateratesynchronousdram,ddrsdram)??商娲?,ram42可包括另一類型的單個或多個設(shè)備,其能夠存儲數(shù)據(jù)以供現(xiàn)存的或以后開發(fā)的cpu18處理。cpu18可以通過總線112訪問和操作數(shù)據(jù)。cpu18可以利用高速緩存(cache)120作為局部快速內(nèi)存,用以操作數(shù)據(jù)和指令。

存儲器44可以是只讀存儲器(readonlymemory,rom)、磁盤驅(qū)動器、固態(tài)驅(qū)動器、閃存、相變存儲器(phase-changememory,pcm)或設(shè)計為保持數(shù)據(jù)一段時間的任何形式的非易失性存儲器,尤其是斷電的情況下。存儲器44可包括可執(zhí)行指令48和應(yīng)用文件/數(shù)據(jù)52,以及其他數(shù)據(jù)。例如,可執(zhí)行指令48可以包括一個操作系統(tǒng)以及一個或多個應(yīng)用程序,其可全部或部分加載到ram42(包括基于ram的可執(zhí)行指令46和應(yīng)用文件/數(shù)據(jù)50)并由cpu18執(zhí)行。可執(zhí)行指令48可以組織成設(shè)計為執(zhí)行本文所述的各種功能的可編程模塊或算法、功能程序、代碼及代碼段。

本文所用的術(shù)語“模塊”,可以使用硬件、軟件或兩者組合來實現(xiàn)。模塊既可以是一個較大實體的一部分,本身也可以細分成子實體。如果一個模塊用軟件實現(xiàn),該軟件可以實現(xiàn)為算法組件,包括存儲在存儲器中的程序指令,所述指令設(shè)計為在處理器上執(zhí)行。術(shù)語“模塊”不要求編碼結(jié)構(gòu)是任何具體的形式,并且不同模塊的功能方面既可以是獨立的,也可以重疊并由共同的程序指令來執(zhí)行。例如,第一模塊和第二模塊可以使用一組公共的程序指令,而在實現(xiàn)所述第一和第二模塊的相應(yīng)和/或共同指令之間沒有明顯的邊界。

所述操作系統(tǒng)可以是一個小型設(shè)備(如智能手機或平板電腦)或大型設(shè)備(如大型計算機)的操作系統(tǒng)。例如,所述應(yīng)用程序可以包括網(wǎng)絡(luò)瀏覽、網(wǎng)絡(luò)服務(wù)器和/或數(shù)據(jù)庫服務(wù)器。例如,應(yīng)用文件52可以包括用戶檔案、數(shù)據(jù)庫目錄和配置信息。在一些實施例中,存儲器44包括指令以執(zhí)行本文所述的發(fā)現(xiàn)技術(shù)。存儲器44可包括一個或多個設(shè)備,并可以利用一種或多種類型的存儲器(如固態(tài)存儲器或磁存儲器)。

計算設(shè)備100還可以包括一個或多個輸入/輸出設(shè)備,如網(wǎng)絡(luò)通信單元108和接口130,接口130可以具備有線通信組件或無線通信組件190,其可以經(jīng)總線112連接到cpu18。網(wǎng)絡(luò)通信單元108可以利用任意種類的標準化網(wǎng)絡(luò)協(xié)議,如以太網(wǎng)、tcp/ip及不再舉例的許多協(xié)議,在設(shè)備之間實現(xiàn)通信。接口130可以包括一個或多個利用以太網(wǎng)、電力線通訊(powerlinecommunication),plc、wifi無線網(wǎng)、紅外線、gprs/gsm、cdma等的收發(fā)器。

用戶界面25可以包括顯示器、位置輸入裝置(如鼠標、觸摸板、觸摸屏或類似物)、鍵盤或其他形式的用戶輸入和輸出設(shè)備。用戶界面25可經(jīng)總線112對接到處理器18。特別地,圖形用戶界面(graphicaluserinterface,gui)25是允許人們與一個設(shè)備進行圖形化交互的用戶界面。它可以被分解為輸入部、輸出部以及可管理、處理及與輸入和輸出部交互的處理器。輸入部可以接受部件創(chuàng)建的輸入,如鼠標、觸摸板、觸摸屏或類似物。gui的輸出部可以生成在某種形式的顯示器上可顯示的輸入,如陰極射線管(cathode-raytube,crt)、液晶顯示器(liquidcrystaldisplay,lcd),以及發(fā)光二極管(lightemittingdiode,led)顯示器,如有機發(fā)光二極管(organiclightemittingdiode,oled)顯示器。顯示器一般形成網(wǎng)格化像素,每個像素都可以采用不同的明度及選用不同的顏色值,組合在一起后在顯示器上排列以形成各種更高級別的實體(以像素區(qū)域為單位)。這些像素區(qū)域可以形成圖標、時窗、按鈕、光標、控制元件、文本和其他顯示的實體。顯示器利用圖形設(shè)備界面,其通常包括專門設(shè)計用于與顯示器的硬件交互的圖形處理器,并且可以接受來自其他處理器的高級指令,以減少對它們的依賴。圖形設(shè)備界面通常擁有自己的存儲器作為緩沖區(qū),也允許圖形處理器操縱所存儲的數(shù)據(jù)。從而,顯示器的操作通常包括由圖形處理器訪問存儲在存儲器的指令和數(shù)據(jù),以修改用戶顯示器上的像素區(qū)域。

客戶端和服務(wù)器100的內(nèi)部配置或架構(gòu)也可能有其他實現(xiàn)形式。例如,服務(wù)器可以省略顯示器25。ram42或存儲器44可以分布在多臺機器上,如基于網(wǎng)絡(luò)的存儲器或在多臺執(zhí)行客戶端或服務(wù)器的操作的機器內(nèi)的存儲器。雖然被本文描述為單個總線,總線112可以由多條總線構(gòu)成,其可以通過各種橋、控制器和/或適配器彼此連接。計算設(shè)備100可包含任何數(shù)量的傳感器和探測器用來監(jiān)控設(shè)備100本身或其周圍的環(huán)境;或可以包含一個位置識別單元160,如gps或其他類型的定位裝置。計算設(shè)備100也可以包含一個電源170(如電池),以使該單元可以獨立運作。這些都可以通過總線112與cpu/處理器18進行通信。

圖2是待編碼及隨后解碼的視頻位流200的框圖。視頻流200可以包括視頻序列202。視頻序列202是視頻流在時間上連續(xù)的子集,也稱為圖像組(groupofpictures,gop)。視頻序列202可以包括多個相鄰的數(shù)幀204。盡管圖中數(shù)幀204只描繪了四個幀,視頻序列202可包括任意數(shù)目的相鄰幀。數(shù)幀204的單個實例表示為單幀206。進一步劃分單幀206可以產(chǎn)生一系列的區(qū)塊208。在本例中,區(qū)塊208可以包含對應(yīng)于單幀206內(nèi)的一個n×m像素域的數(shù)據(jù),比如對應(yīng)像素的亮度和色度數(shù)據(jù)。區(qū)塊208可以是任意合適的尺寸,例如128×128像素組或所述像素組中的任意矩形子集。

圖3是依照公開的實施方式展示的編碼器300的框圖。編碼器300可在計算設(shè)備中實現(xiàn),諸如計算設(shè)備12。編碼器300可以編碼輸入視頻流200。編碼器300包括數(shù)個級來執(zhí)行前向路徑的各個功能,以產(chǎn)生經(jīng)編碼和/或壓縮的位流322:幀內(nèi)預(yù)測級302、模式?jīng)Q定級304、幀間預(yù)測級306、變換及量化級308、濾波級314和熵編碼級310。編碼器300還可以包括一個重建路徑,以重建用于預(yù)測和編碼未來區(qū)塊的幀。在圖3中,編碼器300包括逆量化及逆變換級312和可用于存儲視頻數(shù)據(jù)中多個幀的幀存儲器316,以重建用于預(yù)測的區(qū)塊。編碼器300的其他變體結(jié)構(gòu)也可用于編碼視頻流200。

視頻流200用于編碼時,其中每個幀(例如圖2中的單幀206)以區(qū)塊為單位進行處理。每個區(qū)塊可以從左上方的區(qū)塊開始,以光柵掃描的順序單獨進行處理。在幀內(nèi)預(yù)測級302,針對視頻流200的區(qū)塊,幀內(nèi)預(yù)測的殘差區(qū)塊可被確定。通過檢查先前處理的相鄰區(qū)塊以確定所述相鄰區(qū)塊的像素值是否類似于當前區(qū)塊,幀內(nèi)預(yù)測可以預(yù)測區(qū)塊的內(nèi)容。因為視頻流200以光柵掃描順序進行處理,光柵掃描順序中領(lǐng)先于當前區(qū)塊出現(xiàn)的區(qū)塊可用于處理所述當前區(qū)塊。光柵掃描順序中出現(xiàn)于給定區(qū)塊之前的區(qū)塊之所以可用于幀內(nèi)預(yù)測,是因為它們也可在解碼器中使用,鑒于它們也將首先被重建。如果相鄰區(qū)塊與當前區(qū)塊足夠相似,則所述相鄰區(qū)塊可被用作預(yù)測區(qū)塊,并在操作318中從當前區(qū)塊中減去該預(yù)測區(qū)塊,以形成殘差區(qū)塊,并且表示當前區(qū)塊是幀內(nèi)預(yù)測的信息,可以包含在所述視頻位流里。

視頻流200也可以在幀間預(yù)測級306進行幀間預(yù)測。幀間預(yù)測包含形成殘差區(qū)塊,其通過從時間相鄰幀轉(zhuǎn)換像素以形成可從當前區(qū)塊中減去(操作318)的預(yù)測區(qū)塊。時間相鄰幀可存儲于幀存儲器316并在幀間預(yù)測級306被訪問,以形成可以傳遞給模式?jīng)Q定級304的殘差區(qū)塊——在級304中,幀內(nèi)預(yù)測產(chǎn)生的殘差區(qū)塊可以和幀間預(yù)測產(chǎn)生的殘差區(qū)塊進行比較。模式?jīng)Q定級304可確定用何種預(yù)測模式——幀間或幀內(nèi)——來預(yù)測當前區(qū)塊。例如,在某些實施方式中,可以使用率失真值(ratedistortionvalue)來確定使用何種預(yù)測模式。

率失真值的確定,可以通過計算用特定編碼參數(shù)(例如預(yù)測模式)編碼的視頻位流中的每單位時間的位元的數(shù)目,即位率,并結(jié)合計算輸入視頻流的區(qū)塊和解碼視頻流的時間上和空間上相同的區(qū)塊之間的差異。因為編碼器300是“有損”的,所述解碼視頻流區(qū)塊的像素值可以不同于所述輸入視頻流區(qū)塊的像素值。例如,為了確定最佳的參數(shù)值,可以改變編碼參數(shù)以比較相應(yīng)的率失真值。

在相減操作318中,由模式?jīng)Q定級304確定的殘差區(qū)塊可從當前區(qū)塊中減去,并傳遞到變換及量化級308。由于殘差區(qū)塊的值可以小于當前區(qū)塊的值,變換及量化后的殘差區(qū)塊具有的值可以比變換及量化后的當前區(qū)塊少,因而可以在視頻位流中通過較少的變換系數(shù)來表示?;趨^(qū)塊的變換的實例包括karhunen-loève變換(karhunen-loèvetransformation,klt),離散余弦變換(discretecosinetransform,dct)和奇異值分解(singularvaluedecomposition,svd),僅舉幾例。在一個實施例中,dct將區(qū)塊變換到頻域。在dct變換的例子中,變換系數(shù)的值是基于空間頻率,直流系數(shù)(dc系數(shù))或其他最低頻率的系數(shù)在矩陣的左上角,最高頻率的系數(shù)在矩陣的右下角。

變換及量化級308轉(zhuǎn)換所述變換系數(shù)為離散量子值,它可被稱為量化變換系數(shù)。量化可以減少以變換系數(shù)代表的離散狀態(tài)的數(shù)目,同時少量降低圖像質(zhì)量,如果量化是在空間域而不是變換域中進行的話。量化后的變換系數(shù)可以通過熵編碼級310進行熵編碼。熵編碼是一種可逆的、無損的算術(shù)編碼方案,它可以減少視頻位流中的位元的數(shù)目,并在解碼時不會在所述位流中引起變化。熵編碼后的系數(shù)與其他用于解碼所述區(qū)塊的信息一起,諸如使用的預(yù)測類型、運動矢量、量化器的值和濾波強度等,被輸出為壓縮的位流322。

圖3里的虛線所示的重建路徑,可用于幫助確保編碼器300和解碼器400(參照下文圖4)都使用相同的基準幀來形成幀內(nèi)預(yù)測區(qū)塊。重建路徑執(zhí)行的功能類似于下文詳述的解碼過程所執(zhí)行的功能,包括:在逆量化及逆變換級312進行去量化和逆變換所述量化的變換系數(shù),并在加法操作320中與模式?jīng)Q定級304產(chǎn)生的殘差區(qū)塊一起,創(chuàng)建重建區(qū)塊。環(huán)路濾波級314可應(yīng)用于重建的區(qū)塊以減少失真,例如區(qū)塊效應(yīng),因為解碼器400可以在過濾所述重建的視頻流之前對其采樣以形成基準幀。例如,圖3展示,環(huán)路濾波級314發(fā)送環(huán)路濾波參數(shù)至熵編碼器310,與輸出的視頻位流322進行組合,以允許解碼器400使用和編碼器300相同的環(huán)路濾波參數(shù)。

編碼器300的其他變體可用于編碼壓縮的位流322。編碼器300的各級可以以不同的順序進行處理,或者可以無需改變其目的而組合成更少的級或分拆為更多的級。例如,不基于變換的編碼器300可以無需變換級而直接量化殘差區(qū)塊信號。在另一實施例中,編碼器300可以將變換及量化級308拆分為單一的操作。

圖4是依本公開的實施方式的各方面描述的解碼器400的框圖。在一個實施例中,解碼器400可以在計算設(shè)備14上實現(xiàn)。解碼器400包括以下級來執(zhí)行各種功能,以從壓縮位流322產(chǎn)生輸出視頻流418:熵解碼級402,逆量化及逆變換級404,幀內(nèi)預(yù)測級408,幀間預(yù)測級412,加法器410,模式?jīng)Q定級406和一個幀存儲器414。解碼器400的其他結(jié)構(gòu)變體也可以用于解碼壓縮位流322。例如,逆量化及逆變換級404可以被表示為兩個獨立的級。

接收的視頻位流322可以通過熵解碼器402進行熵解碼。熵解碼器402執(zhí)行編碼器300在級310執(zhí)行的熵編碼的逆過程,以還原所述視頻位流到熵編碼前的原始狀態(tài)。所述還原的視頻位流可以進行逆量化和逆變換,類似于逆量化及逆變換級312的方式。逆量化及逆變換級404可以還原視頻位流的殘差區(qū)塊322。注意,由于編碼器300和解碼器400能表示有損編碼,所述還原的殘差區(qū)塊的像素值可不同于輸入視頻流200中相同的時間和空間位置的殘差區(qū)塊。

在逆量化及逆變換級404還原殘差區(qū)塊之后,通過在加法器410中加入所述殘差區(qū)塊的預(yù)測區(qū)塊,所述視頻位流的殘差區(qū)塊可被大致還原到其預(yù)測前的狀態(tài)。加法器410從模式?jīng)Q定級406處接收用于加到殘差區(qū)塊的所述預(yù)測區(qū)塊。模式?jīng)Q定級406可經(jīng)由編碼器300解釋所述輸入視頻位流322包含的參數(shù),例如,確定是使用幀內(nèi)還是幀間預(yù)測以還原視頻位流322的區(qū)塊。模式?jīng)Q定級406對輸入視頻位流322也可以執(zhí)行計算來確定對特定的區(qū)塊使用何種預(yù)測。作為解碼器,通過對相同的數(shù)據(jù)執(zhí)行相同的計算,模式?jīng)Q定級406可以針對預(yù)測模式做出與編碼器300相同的決定,從而減少了為指示要用的預(yù)測模式而在視頻位流中傳輸位元的需要。

模式?jīng)Q定級406可以同時從幀內(nèi)預(yù)測級408和幀間預(yù)測級412接收預(yù)測區(qū)塊。因為幀內(nèi)預(yù)測區(qū)塊以光柵掃描順序處理,幀內(nèi)預(yù)測級408可以從加法器410輸出的所述還原視頻流接收區(qū)塊以用作預(yù)測區(qū)塊;并且由于幀內(nèi)預(yù)測使用的區(qū)塊是編碼器300在還原殘差區(qū)塊之前以光柵掃描順序選擇的,幀內(nèi)預(yù)測級408可以按需提供預(yù)測區(qū)塊。如上面關(guān)于編碼器300的討論,幀間預(yù)測級412從儲存在幀存儲器414的幀中創(chuàng)建預(yù)測區(qū)塊。幀存儲器414從環(huán)路濾波器416接收經(jīng)其濾波的還原區(qū)塊。環(huán)路濾波可以去除基于區(qū)塊的預(yù)測技術(shù)所引入的區(qū)塊效應(yīng),如本文所述的編碼器300和解碼器400所用。

幀間預(yù)測級412可以使用幀存儲器414里經(jīng)環(huán)路濾波器416濾波的幀,以使用編碼器300用過的相同數(shù)據(jù)形成預(yù)測區(qū)塊。盡管使用有損壓縮,對預(yù)測使用相同的數(shù)據(jù)可使解碼器400重建的區(qū)塊具有接近對應(yīng)輸入?yún)^(qū)塊的像素值。模式?jīng)Q定級406從幀間預(yù)測級412接收的預(yù)測區(qū)塊可以傳遞到加法器410,以還原視頻位流322的區(qū)塊。經(jīng)環(huán)路濾波器416濾波后,還原的視頻流418可以從解碼器400輸出。解碼器400的其他變體可用于解碼壓縮位流322。例如,解碼器400可以不經(jīng)環(huán)路濾波級416產(chǎn)生輸出視頻流418。

在建立真正的視頻或音頻連接之前估計可用帶寬是很有價值的,這樣,編碼器可以用適當?shù)奈宦蕘砭幋a。例如,初始帶寬估計可以在接收器端使用數(shù)據(jù)包列(datapackagetrain)完成。然而,這種估算往往是不準確的。根據(jù)本公開的實施例,可以使用發(fā)送器和接收器兩側(cè)的數(shù)據(jù)共同估算帶寬,以提高準確性。

在從編碼計算設(shè)備12向解碼計算設(shè)備14傳輸視頻位流322之前或期間,從解碼計算設(shè)備14向編碼計算設(shè)備12發(fā)送的消息,可被稱為反向信道消息。本公開的實施方式可以通過消息(如反向信道消息)的傳輸和處理來確定網(wǎng)絡(luò)帶寬所關(guān)聯(lián)的網(wǎng)絡(luò)參數(shù),用于優(yōu)化編碼參數(shù)。如下所述,圖5a-6d將用更多細節(jié)說明帶寬估計。

根據(jù)本公開的實施方式,圖5a是為傳輸一個視頻位流而估計一個初始帶寬的示例性流程500a的流程圖。例如,流程500a可以由一個發(fā)送器,如編碼計算設(shè)備12(如編碼器300),來執(zhí)行。圖5a中的流程圖展示了包括在流程500a里的若干操作。實現(xiàn)流程500a的操作,可以包括在本文,或者多于或少于本文所述。例如,操作可以組合或劃分而改變執(zhí)行的操作的數(shù)目。流程500a的所述操作可以按本文包括的順序或不同的順序來執(zhí)行,且仍然實現(xiàn)流程500a的意圖。

流程500a可以在發(fā)送器(如編碼計算裝置12/編碼器300)和接收器(如解碼運算裝置14/解碼器400)間的呼叫建立期間或建立之后發(fā)生,或者在任何其他合適的階段(如在視頻已中斷一段時間后重新啟動)。例如,呼叫可以包括一條或多條消息,用以在發(fā)送器和接收器之間建立視頻傳輸連接。例如,所述一條或多條消息可以包括在編碼流程和解碼流程間交換的呼叫和應(yīng)答消息,這將在下文結(jié)合操作一起進行詳細描述。

在步驟502a中,發(fā)送器可以確定發(fā)送器和接收器間的往返延遲/時間(roundtriptime,rtt)。例如,發(fā)送器可以向接收器發(fā)送一系列數(shù)據(jù)包作為呼叫消息。收到呼叫消息時,接收器可以形成應(yīng)答或確認(acknowledge,ack)消息并進一步形成數(shù)據(jù)包從接收器發(fā)送到發(fā)送器,而在其基礎(chǔ)上可以如下文所述來確定往返延遲。

例如,發(fā)送器可以向接收器發(fā)送一些數(shù)據(jù)包p(0)、p(1)、p(2)……并將每個數(shù)據(jù)包的發(fā)送時間記錄為ts(0)、ts(1)、ts(2)……例如,發(fā)送的數(shù)據(jù)包可以是小的數(shù)據(jù)包(如呼叫消息)。接收器可以接收所述數(shù)據(jù)包中的任何一個(如p(0))并向發(fā)送器確認收悉(如通過發(fā)送一條或多條確認消息)。發(fā)送器在收到確認(如確認消息)的任一項時,可以檢查接收時間tr(0)、tr(1)….發(fā)送器和接收器間的系統(tǒng)往返時間/延時可以計算為在發(fā)送和確認接收相同編號的數(shù)據(jù)包之間的時間差,如rtt=tr(i)–ts(i),其中i=0,1,….

在步驟504a中,從第一時間點(t0)開始,基于預(yù)定的編碼位率,發(fā)送器可以發(fā)送具有包大小(以字節(jié)為單位的“psize”)的系列數(shù)據(jù)包。

例如,所述系列數(shù)據(jù)包可以包括數(shù)據(jù)(如編碼的視頻數(shù)據(jù)),或使用隨機數(shù)據(jù)裝包的偽數(shù)據(jù)包。例如,所述數(shù)據(jù)可以包括用于初始帶寬估計的數(shù)據(jù),并且可以被發(fā)送為在編碼流程和解碼流程間交換的呼叫和應(yīng)答消息。任何設(shè)備都可以發(fā)送呼叫和應(yīng)答消息兩者。例如,在涉及將編碼視頻數(shù)據(jù)打包成系列數(shù)據(jù)包(如通過圖5b中的流程500b)的實施例中,通過計算設(shè)備12,編碼的視頻位流可以使用編碼器300進行編碼,并經(jīng)由網(wǎng)絡(luò)16發(fā)送。例如,在接收器端,圖5c的流程500c可以用解碼器400來解碼用于帶寬估計的數(shù)據(jù)包。

例如,發(fā)送器可以發(fā)送一系列的、總數(shù)為n+k(標號為0,1,2,...,n+k-1)的、大小為psize的數(shù)據(jù)包。每個數(shù)據(jù)包在一段等待時間(td)后發(fā)送??晒浪愕淖畲髱捜Q于數(shù)據(jù)包大小psize和發(fā)送速度(1/td)。假設(shè)發(fā)送數(shù)據(jù)包0的時刻為t0,一旦數(shù)據(jù)包標號大于或等于n,接收器就基于收到的數(shù)據(jù)包總數(shù)及數(shù)據(jù)包大小計算收到的總位元(btotal)。

如上所述,例如,用于初始帶寬估計的數(shù)據(jù)可以包括在編碼流程和解碼流程500間交換的呼叫和應(yīng)答消息。“數(shù)據(jù)包”和“消息”在此可以互換使用。例如,呼叫和應(yīng)答消息可以實現(xiàn)為一系列的數(shù)據(jù)包,其被“填充”用于帶寬估計的數(shù)據(jù)(帶寬估計可以在呼叫建立之前或之后進行)。例如,用于帶寬估計的數(shù)據(jù)可以包括“啞”(dummy)數(shù)據(jù),其可以是作為經(jīng)填充的呼叫消息的形式的隨機數(shù)據(jù),或“真實的”編碼視頻數(shù)據(jù)——如第一個視頻幀(通常被編碼為“i幀”)、第一批視頻幀、用戶定義的幀集、以及能以一定時間間隔發(fā)送的、可用于估計帶寬的“真實的”編碼視頻數(shù)據(jù)。

例如,呼叫和應(yīng)答消息可以是伴隨編碼視頻位流的帶外(outofband)數(shù)據(jù)包,獨立數(shù)據(jù)的數(shù)據(jù)包,或作為編碼視頻位流的一部分而發(fā)送的數(shù)據(jù)包。相同或不同的消息類型,可分別用于初始帶寬估計和以后的帶寬調(diào)整。

在一些公開的實施例中,跟蹤呼叫和應(yīng)答消息可以通過給每個數(shù)據(jù)包(包括所述呼叫和應(yīng)答消息)分配一個唯一的數(shù)據(jù)包號碼(也稱為“序號”),所述序號可以從某個數(shù)字(如“0”)開始、并對每個視頻流增加1。每個數(shù)據(jù)包還可以包括一個時標(timestamp),其也可以從某個數(shù)字(如“0”)開始、并對用由計算設(shè)備12或14發(fā)送的一定的各數(shù)據(jù)包以一定時間間隔(如一或幾毫秒)增加。所述消息可以作為系列數(shù)據(jù)包發(fā)送,其中每一個都具有所述序號和所述時標,且數(shù)據(jù)包尺寸都為psize。所述時標可以是到達時標或發(fā)送時標,這取決于是發(fā)送器還是接收器在計算時標。psize可以使用預(yù)定的(編碼器)位率來確定,例如“maxbitrate”。例如,“maxbitrate”可以是一個預(yù)定的最大視頻位率,其可被預(yù)存在流程500a(或其他實施例中的500b-d、600a-d)所關(guān)聯(lián)的配置文件中、并在需要時取還。取決于網(wǎng)絡(luò)條件,“maxbitrate”可被調(diào)整,以指示用于傳輸一個視頻的最大允許位率。

在一些實施例中,psize可以作為預(yù)定編碼器位率的函數(shù)來確定,其中,當預(yù)定編碼位率增高超過一個閾值時,psize增加。例如,根據(jù)以下規(guī)則,psize可以基于“maxbitrate”來確定:

通過以這種方式設(shè)置psize,網(wǎng)絡(luò)帶寬可以在發(fā)送任何呼叫和應(yīng)答消息之前來估計,從而防止網(wǎng)絡(luò)慢時因過快發(fā)送過多數(shù)據(jù)包而造成呼叫和應(yīng)答消息擁塞網(wǎng)絡(luò)。這樣做的目的是無需長時間擁塞網(wǎng)絡(luò)而估計帶寬。例如,當網(wǎng)絡(luò)很慢時,過快發(fā)送過多數(shù)據(jù)包是希望避免的。另一方面,足夠快地發(fā)送數(shù)據(jù)包以確定真正的帶寬又是很重要的。

網(wǎng)絡(luò)帶寬可以在建立呼叫的過程中進行估計。當呼叫被連接時,視頻編碼器可以用估計的帶寬初始編碼所述視頻位流,從而避免不合理占用可用的網(wǎng)絡(luò)帶寬。如果有足夠數(shù)量的、包括呼叫及應(yīng)答消息的數(shù)據(jù)包由編碼計算設(shè)備12經(jīng)網(wǎng)絡(luò)16發(fā)送、并由解碼計算設(shè)備14接收,呼叫及應(yīng)答消息可被用來確定真實的網(wǎng)絡(luò)帶寬。對于任意帶寬高于100kbps的網(wǎng)絡(luò),流程500a(或其他實施例中的500b–d、600a-d)的設(shè)計可以應(yīng)對單向三倍的預(yù)期位率,又不會長時間擁塞所述網(wǎng)絡(luò)。

在步驟506a中,在第二時間點(tc),所述發(fā)送器從接收器接收一條消息,其包括一個指示接收器收到的總位元數(shù)(btotal)的參數(shù)。例如,btotal可以根據(jù)數(shù)據(jù)包的大小(psize)和發(fā)送速度(1/td)來確定。在一些實施例中,接收器可以發(fā)送多條(用于容錯,消息可能會丟失)包含btotal的消息至發(fā)送器。例如,所述消息可以發(fā)送為反向信道消息,這將在下面進一步討論(如圖6b和圖7)。所述發(fā)送器接收任一含有參數(shù)btotal的消息并檢查當前時間tc。

在一些實施例中,在收到至少一個其序號大于或等于一個預(yù)定序號的數(shù)據(jù)包后,btotal可被接收器確定,而無需考慮任何在收到所述至少一個具有所述序號的數(shù)據(jù)包之后收到的數(shù)據(jù)包。這將在圖5c中進一步說明。例如,一旦接收器收到任何其序號大于或等于n的數(shù)據(jù)包,它將確定收到的總位元數(shù),而不考慮之后收到的任何其他數(shù)據(jù)包。數(shù)字n可以被設(shè)置為處于最小序號(如0)和所述系列數(shù)據(jù)包的最大序號(如,n+k-1)之間的任何數(shù)字。

在步驟508a中,基于所接收的參數(shù)、所述第一和第二時間點以及所述往返延遲,發(fā)送器可以確定一個初始估計帶寬。在一些實施例中,估計的帶寬(“best”)可以按照下列公式計算:

best=btotal/((tc–t0)–rtt)

在步驟510a中,發(fā)送器用所述初始估計帶寬發(fā)送視頻位流到接收器。例如,所述視頻位流可用所述初始估計帶寬進行編碼。

在一些實施例中,可以基于所述視頻數(shù)據(jù)來估計帶寬,而且一個預(yù)定的音頻帶寬可被添加到視頻信道。

在一些實施例中,一旦帶寬得以估計,在配置文件中的發(fā)送器的初始參數(shù)可以基于可用帶寬及其他參數(shù)(如初始數(shù)據(jù)包丟失率以及往返時間)重新計算。例如,諸如自適應(yīng)編碼長度(adaptivecodinglength)、fec率(fec_ratio)、視頻編碼器位率、分辨率和幀率等參數(shù)都可以基于所述初始估計重新初始化。例如,初始估計可以包括以下三個參數(shù)中的一個或多個:(估計的)帶寬、丟包率(packetlossratio)和往返時間(rtt)。

在一些實施例中,初始帶寬估計可以在呼叫應(yīng)答期間使用呼叫-應(yīng)答消息來完成(例如,在呼叫“振鈴”時且通話建立前)。呼叫-應(yīng)答消息可用填充數(shù)據(jù),通過預(yù)定大小和定時信息來數(shù)據(jù)包化,以使接收器收到這些消息時可以估計帶寬。例如,填充數(shù)據(jù)可以通過隨機數(shù)生成器產(chǎn)生,以避免網(wǎng)絡(luò)協(xié)議壓縮。

對于數(shù)據(jù)包結(jié)構(gòu)的設(shè)計,所述包含呼叫和應(yīng)答消息的數(shù)據(jù)包可以用一個序號和時標作為開端,然后以填充數(shù)據(jù)填充到預(yù)定尺寸。例如,所述填充數(shù)據(jù)可以是精確的psize字節(jié)(呼叫/應(yīng)答消息數(shù)據(jù)隨后的所有數(shù)據(jù))。例如,填充數(shù)據(jù)的前兩個字可用于所述序號和時標(如,以無符號整型的格式)。

在一個說明性示例中,序號開始于“0”,并針對每一個發(fā)送的數(shù)據(jù)包增加1。時標也可從零開始,且數(shù)據(jù)包可在它們各自的發(fā)送時間被標記時標。類似于以上描述,可以有兩組呼叫消息和兩組應(yīng)答消息。第一組可以由25個相同的數(shù)據(jù)包構(gòu)成,而第二組可以由10個數(shù)據(jù)包構(gòu)成。

在所述說明性示例中,可以由發(fā)送器產(chǎn)生兩組呼叫和應(yīng)答消息。例如,發(fā)送器可以發(fā)送n+k個尺寸為psize的數(shù)據(jù)包序列(序號為0、1、2、...、n+k-1),n=25和k=10。

第一組25個呼叫信息(如25個相同的數(shù)據(jù)包)可由編碼計算設(shè)備12創(chuàng)建并以(大致)相同的時間間隔每100毫秒進行發(fā)送。在帶寬比maxbitrate更高的網(wǎng)絡(luò)中,網(wǎng)絡(luò)帶寬可被估計為maxbitrate。第一組的25個數(shù)據(jù)包之后,例如,編碼計算設(shè)備12能夠延遲一段時間——如約400毫秒(大于發(fā)送所述數(shù)據(jù)包的時間差)——再在大約100毫秒內(nèi)(10毫秒一個)發(fā)送第二組的10個數(shù)據(jù)包。如果網(wǎng)絡(luò)帶寬不足,傳輸所有數(shù)據(jù)包(此例中共35個)會花費更長的時間。例如,一個100kbps的信道需要約一秒鐘來傳輸每個400字節(jié)的所述35個數(shù)據(jù)包,而相同的信道需要約三秒鐘來傳輸每個1200字節(jié)的所述35個數(shù)據(jù)包。選擇正確的數(shù)據(jù)包大小可以避免更長的延遲。

依據(jù)psize(依前例所討論,400、800或1200字節(jié)),一組25個以大約100毫秒的間隔送出的數(shù)據(jù)包可以代表一個最大位率:

maxbitrate=25×8×psize/0.1={0.8mbps,1.6mbps,2.4mbps}

在此例中,能被確定的最大位率,可用psize的值估計為0.8mbps、1.6mbps或2.4mbps。帶寬比maxbitrate更高的任何網(wǎng)絡(luò)將只被估計為maxbitrate。

發(fā)送和接收第一和第二組數(shù)據(jù)包所需的時間可以用來指示網(wǎng)絡(luò)帶寬。例如,假設(shè)每個數(shù)據(jù)包為400個字節(jié)(psize=400),一個100kbps的網(wǎng)絡(luò)可能花費大約一秒鐘來傳輸35個包括在第一和第二組的數(shù)據(jù)包。在1200字節(jié)(psize=1200)時,相同網(wǎng)絡(luò)可能需要花費約三秒鐘。發(fā)送和接收呼叫及應(yīng)答消息數(shù)據(jù)包可在視頻流的開端進行,這意味著用戶需要等待,直到呼叫和應(yīng)答消息在視頻開始之前被處理。

在本例中,當建立呼叫或第一視頻位流開始時,接收器可以開始接收和存儲數(shù)據(jù)包,并持續(xù)到接收到序號為n——本例中n為25(或任意大于25的序號)——的數(shù)據(jù)包,或一個預(yù)定的時間窗口/預(yù)定時段(如三秒鐘)結(jié)束/流逝。在本例中,在第25號數(shù)據(jù)包之前或在所述時間窗口內(nèi)未收到的任意數(shù)據(jù)包,可被認為已丟失且不被計入btotal。在本例中,可以用以下等式來計算估計的帶寬:

bandwidth=(24–nloss)×psize/(tlast–tfirst)

在這里,帶寬以kbps計算,nloss是第一組n(如25)個數(shù)據(jù)包中丟包的總數(shù)。這并不包括在第二組10個數(shù)據(jù)包中丟失的任何數(shù)據(jù)包。tlast是緊鄰序號25的數(shù)據(jù)包之前(不含丟失的包)最后一個數(shù)據(jù)包的到達時標,其可以毫秒測量;tfirst是第一個收到的數(shù)據(jù)包的到達時間(其可以毫秒測量)。注意,被用來確定帶寬的是所述第一個數(shù)據(jù)包和所述最后一個數(shù)據(jù)包的到達時間的相對差值,因為傳輸所述第一個數(shù)據(jù)包所需的時間無法得知。

圖5b是依本公開的一些實施例提供的使用真實視頻數(shù)據(jù)進行初始帶寬估計的另一示例性流程500b的流程圖,流程500b可用于一個發(fā)送器傳輸一個視頻位流。這些步驟類似于圖5a中的步驟,應(yīng)結(jié)合圖5a中的描述來理解。

在步驟502b中,發(fā)送器編碼視頻位流的第一部分;例如,其可包括一個第一幀(如一個i-幀)和零個或多個其他幀(如幀間預(yù)測幀,比如p-幀、b-幀或pb-幀)。

例如,視頻位流可由編碼計算設(shè)備12進行編碼并傳輸?shù)浇獯a計算設(shè)備14,且編碼的位流可包含一個用一個基準幀編碼的幀,所述基準幀選自按顯示順序先于所述幀的多個基準幀。如下所述,所述多個基準幀可以包括一個良基準幀。所述良基準幀是所述編碼器已知無錯誤的一個基準幀。在一些實施例中,為使一個基準幀為良基準幀,其本身解碼所需的多個基準幀也不含任何錯誤。

在步驟504b中,從第一時間點起,發(fā)送器以系列視頻數(shù)據(jù)包的形式傳輸視頻位流的經(jīng)編碼的第一部分,所述數(shù)據(jù)包具有基于預(yù)定的編碼位率的大小。例如,發(fā)送器可以在發(fā)送器和接收器之間傳輸用于建立呼叫的一條或多條呼叫消息。

在步驟506b中,在第二時間點,發(fā)送器從接收器接收一條消息,其包括一個指示所述接收器接收的位元總數(shù)的參數(shù)(btotal)。接收器從所述發(fā)送器接收視頻位流數(shù)據(jù)包,其來自于以系列數(shù)據(jù)包的形式傳輸?shù)乃鲆曨l位流的經(jīng)編碼的第一部分,并將該數(shù)據(jù)送入解碼器400用于解碼。然后,接收器發(fā)送消息(如反向信道的消息,比如應(yīng)答消息)到發(fā)送器;例如,所述消息可以包括(多個)參數(shù)(如btotal)。例如,收到由發(fā)送器發(fā)送的呼叫消息后,接收器可以發(fā)送一條或多條應(yīng)答消息。

如圖5a所討論,由發(fā)送器或接收器發(fā)送的每個數(shù)據(jù)包(如呼叫和應(yīng)答消息)可以包括一個序號、一個時標等。例如,一旦接收器收到其序號大于或等于預(yù)定序號的數(shù)據(jù)包,接收器可基于接收器收到的位元總數(shù)來確定參數(shù)(如btotal),而不考慮任何之后收到的數(shù)據(jù)包。

在一些實施例中,消息還可以包括良/劣基準數(shù)據(jù),將如下討論。例如,所述良/劣基準數(shù)據(jù)可以指示從所述視頻位流的經(jīng)編碼的第一部分解碼的至少一個幀是否被正確地從一個良基準幀解碼。例如,所述消息可以是反向信道消息。發(fā)送器接受任何含有參數(shù)btotal消息,并檢查當前時間tc。

在步驟508b中,基于所述收到的(多個)參數(shù)(如btotal)、所述第一和第二時間點以及發(fā)送器和接收器間的所述往返延遲(未在圖5b中示出但在圖5a的步驟502a中示出),發(fā)送器確定一個初始估計帶寬。本步驟類似于如圖5a中描述的步驟508a。

在一些實施例中,所接收的參數(shù)可以包括所述良/劣基準數(shù)據(jù)以及其他數(shù)據(jù)。例如,根據(jù)所述良/劣基準數(shù)據(jù),可以判斷所述視頻的解碼的第一部分是否包括至少一個良基準幀。如果是,所述視頻位流的第二部分可以由發(fā)送器使用所述至少一個良基準幀以及所述初始估計帶寬來編碼。如果沒有良基準幀,編碼器300(發(fā)送器)可以使用由發(fā)送器估計的初始帶寬來編碼并重新發(fā)送完整的視頻位流,其包括所述視頻位流的第一部分和第二部分。

在一些實施例中,所選中的基準幀可以選自多個當前幀按顯示順序之前的基準幀。所述多個先前基準幀可以包括至少一個良基準幀,其定義為所述編碼器已知的、可被無錯誤解碼的一個基準幀。例如,選中基準幀可以是一個良基準幀,而這個良基準幀可用于編碼當前幀。又例如,作為選中基準幀的良基準幀可用于編碼包括當前幀的一定數(shù)目的連續(xù)幀,在這種情況下,用同一良基準幀編碼的連續(xù)幀的所述數(shù)目,可以基于一個或多個以下數(shù)據(jù)自適應(yīng)地選取:丟包率、帶寬數(shù)據(jù),和fec強度。例如,fec強度可以基于從解碼計算設(shè)備14接收到的用于編碼視頻位流322的數(shù)據(jù),由一個fec編碼器所確定;而基于所接收的數(shù)據(jù)(例如反饋信息),所述fec編碼器可以自適應(yīng)地改變fec強度和數(shù)據(jù)包大小。在一些實施例中,操作704中確定的編碼參數(shù)可以基于一個或多個以下數(shù)據(jù)被更新:fec強度、位率,和用同一良基準幀編碼的連續(xù)幀的數(shù)目。

在步驟510b中,發(fā)送器傳輸使用初始估計帶寬編碼的視頻位流的第二部分。在一些實施例中,發(fā)送器可以基于所估計的帶寬重啟編碼器。如果某些圖像在解碼器被正確地解碼(如上所述,基于收自接收器的消息所包含的所述良/劣基準數(shù)據(jù)),發(fā)送器可以使用該正確的(“良”)基準幀進行預(yù)測。但是,如果沒有好的圖像作基準,發(fā)送器可以從關(guān)鍵幀開始重新編碼。

在一些實施例中,編碼計算設(shè)備12(發(fā)送器)可以使用基于計算設(shè)備14(接收器)發(fā)送的應(yīng)答消息所確定的編碼參數(shù)來編碼視頻位流的第二部分,所述接收器在接收所述視頻位流的第一部分或一些帶外發(fā)送(如圖5a例)的隨機數(shù)據(jù)包后發(fā)送所述應(yīng)答消息。編碼參數(shù)可以包括多個參數(shù),其可被輸入到編碼流程以在帶寬和糾錯方面調(diào)整所產(chǎn)生的輸出位流。例如,編碼參數(shù)可以包括但不僅限于位率、fec率、基準幀選擇和關(guān)鍵幀選擇。又例如,編碼參數(shù)可以包括基于帶寬數(shù)據(jù)確定的估計帶寬,所述帶寬數(shù)據(jù)包括于上述接收的數(shù)據(jù)中。公開的實施方式可以調(diào)整編碼參數(shù)以匹配網(wǎng)絡(luò)帶寬、丟包率以及往返時間,從而優(yōu)化編碼流程,以在給定網(wǎng)絡(luò)帶寬、丟包率及往返時間下在解碼計算設(shè)備14上提供最高質(zhì)量的解碼視頻。

如在上述圖5a中所述,所述系列數(shù)據(jù)包的傳輸,可以發(fā)生在建立發(fā)送器和接收器間的呼叫流程之中、建立呼叫之后、或任何其他階段、或在另一個時間。類似地,例如,下述的流程500c的執(zhí)行,可以發(fā)生在建立發(fā)送器和接收器間的呼叫流程之中、或在發(fā)送器和接收器間的呼叫流程建立之后、或發(fā)送器和接收器間傳輸視頻位流的流程之中。

圖5c是依本公開的一些實施例提供的初始帶寬估計的示例性流程500c的流程圖,其可用于一個接收器接收一個視頻位流。例如,流程500c可以由解碼計算設(shè)備14(如解碼器400)來執(zhí)行。圖5c中的流程圖示出了包括在流程500c的幾個步驟。流程500c可以用本文中所包含的、或用多于或少于這里包含的步驟來完成。例如,多個步驟可被組合或分割以改變所執(zhí)行的步驟的數(shù)目。流程500c的步驟可以以本文所包含的或不同的順序來執(zhí)行,并且仍然實現(xiàn)流程500c的意圖。

流程500c開始于步驟502c,其中,由接收器接收由發(fā)送器發(fā)送的系列數(shù)據(jù)包所關(guān)聯(lián)的一個或多個數(shù)據(jù)包,其可用于初始帶寬估計。所謂“接收”,我們可指輸入、獲取、讀取、訪問或以任何方式接收用于初始帶寬估計的數(shù)據(jù)的行為。用于初始帶寬估計的所接收的數(shù)據(jù)可以包括一個或多個數(shù)據(jù)包,其具有一個數(shù)據(jù)包大小psize,而其又可以根據(jù)預(yù)定的編碼位率(如最大位率“maxbitrate”)來確定,如圖5a所述。在一些實施例中(如圖5a所述的實施例),所述一個或多個數(shù)據(jù)包可以是由發(fā)送器以系列數(shù)據(jù)包形式發(fā)送的填充數(shù)據(jù)的數(shù)據(jù)包。在一些其他實施例中(如圖5b),所述一個或多個數(shù)據(jù)包可以關(guān)聯(lián)于視頻位流的經(jīng)編碼的第一部分,而視頻位流由發(fā)送器以系列數(shù)據(jù)包的形式發(fā)送。

在步驟504c中,基于所接收的用于初始帶寬估計的數(shù)據(jù),接收器可以根據(jù)預(yù)定的規(guī)則確定多個參數(shù)。由接收器所確定的參數(shù)也被稱為接收端(解碼器端)參數(shù)。例如,所述接收端參數(shù)可以包括一個指示接收器收到的位元總數(shù)的參數(shù)(btotal)。

例如,流程500c可以利用接收的呼叫消息的時間和大小來確定接收端參數(shù)(如信道參數(shù))。如上所述,每個呼叫消息可以在被創(chuàng)建時被標記時標。此外,流程500可以給每個數(shù)據(jù)包標記一個額外的時標來表明它被收到的時間,并發(fā)回帶有接收時標的應(yīng)答消息。

對于初始帶寬估計,如之前在圖5a所述,接收器在收到每個數(shù)據(jù)包時打上一個時標(接收時標是數(shù)據(jù)包到達端口時的時間,與數(shù)據(jù)包內(nèi)含的時標不同——這是發(fā)送時標)。在相同的說明性示例中,收到25號(或任何大于25的數(shù)據(jù)包序號)數(shù)據(jù)包時,或最長時間窗口/預(yù)定時段(如預(yù)定的三秒時窗)達到/流逝時,未到達的數(shù)據(jù)包可被視為已丟失。平均帶寬可由以下規(guī)則來計算:

bandwidth=((25-1)–nloss)×psize/(tlast–tfirst);

(以kbps為單位)

其中:

nloss=前25個(0-24)數(shù)據(jù)包中丟包的總數(shù)。其不包括后10個數(shù)據(jù)包(25-34)中的丟包數(shù)。

tlast=緊鄰25號數(shù)據(jù)包之前(不含丟失的包)最后一個數(shù)據(jù)包的到達時標。單位:毫秒(ms)

tfirst=第一個收到的數(shù)據(jù)包的到達時標。單位:毫秒(ms)

以上,第一個數(shù)據(jù)包不用于計算帶寬,因為時標是到達時間,這意味著數(shù)據(jù)包已經(jīng)收到。

任選地,在一些實施例中,如果步驟502c所述一個或多個數(shù)據(jù)包是用視頻位流的經(jīng)編碼的第一部分所生成(例如,見圖5b中例),在步驟505c中,接收器從所述一個或多個數(shù)據(jù)包解碼所述視頻位流的經(jīng)編碼的第一部分。

在步驟506c中,流程500c可以將在步驟504c中確定的接收端參數(shù)傳輸?shù)桨l(fā)送器。所述參數(shù)可以以一條或多條消息的形式傳輸,其中每條都包含所述參數(shù)(如btotal)。網(wǎng)絡(luò)參數(shù)可包括前文或后文所述的帶寬指標(bandwidthindicator)、累積時間差參數(shù)(tdacc)、接收位率(rbitrate)和丟包率(packetlossratio)。在步驟504c中確定的網(wǎng)絡(luò)參數(shù)可經(jīng)由反向信道消息被發(fā)送到編碼計算設(shè)備12上。例如,反向信道消息可由控制器708上的反向信道消息管理器722發(fā)送。關(guān)于控制器708和反向信道消息管理器722的進一步細節(jié)詳見后文與圖7相關(guān)的描述。

在一些實施例中,包括指示收到的位元總數(shù)的參數(shù)(btotal)的多條消息(為容錯,消息可能會丟失)可被傳輸?shù)桨l(fā)送器。例如,流程500c可以使用類似于傳輸呼叫消息數(shù)據(jù)包的技術(shù)、以數(shù)據(jù)包的形式傳輸應(yīng)答消息。例如,接收器可以暫停,直到——例如——25個數(shù)據(jù)包已被發(fā)送或三秒鐘結(jié)束。例如,此時解碼計算設(shè)備可以暫停發(fā)送數(shù)據(jù)包;而編碼計算設(shè)備12(發(fā)送器或編碼器300)可以利用收到的應(yīng)答消息數(shù)據(jù)包來確定網(wǎng)絡(luò)帶寬和其他參數(shù)(如丟包率)。在編碼計算設(shè)備12基于應(yīng)答消息確定編碼參數(shù)(如初始估計帶寬)期間,編碼計算設(shè)備可以暫停向解碼計算設(shè)備14傳輸視頻位流數(shù)據(jù)。在這段時間內(nèi),解碼計算設(shè)備可保持在就緒狀態(tài),準備接收并解碼視頻位流。

例如,接收端參數(shù)可以包括收到的位元總數(shù)(btotal)、丟包率、往返延遲、接收位率、帶寬數(shù)據(jù)、指示基準幀是好(良)是壞(劣)的數(shù)據(jù),或以上的任意組合。傳輸?shù)慕邮斩藚?shù)可以用于編碼計算設(shè)備12確定編碼參數(shù)。意圖發(fā)揮這種作用的其他數(shù)據(jù)并不限于本文所述。

例如,在允許編碼計算設(shè)備得以確定網(wǎng)絡(luò)帶寬的暫停之后,在步驟506c中,解碼計算設(shè)備14(接收器或解碼器400)可以形成應(yīng)答消息,并創(chuàng)建和以一定間隔(如10毫秒的時間間隔)發(fā)送包括應(yīng)答消息的數(shù)據(jù)包。一旦編碼計算設(shè)備收到應(yīng)答消息數(shù)據(jù)包并估計出網(wǎng)絡(luò)帶寬和數(shù)據(jù)包損失,編碼參數(shù)可被重新計算,以反映可用帶寬(如初始估計帶寬或經(jīng)調(diào)整的帶寬)、丟包率以及往返時間。例如,編碼參數(shù)可以在發(fā)送器上被重新計算,計算可基于所估計的帶寬、丟包率、往返時間、自適應(yīng)編碼長度、fec率、視頻編碼位率、空間分辨率(幀大小)、時間分辨率(幀率)等中的一個或多個。這些用于計算估計帶寬的參數(shù)中的某些可以由發(fā)送器確定,而某些可以從接收器接收。另外,也可以使用接收端參數(shù)而不用任何發(fā)送端參數(shù)。

在步驟508c中,接收器從發(fā)送器接收一個用初始估計帶寬編碼的視頻位流,所述初始估計帶寬是基于指示收到的位元總數(shù)的參數(shù)所確定。例如,可用的其他參數(shù)包括以上描述的任何參數(shù),如帶寬、丟包率等等。在一些實施例中,如果步驟502c所述一個或多個數(shù)據(jù)包是用視頻位流的經(jīng)編碼的第一部分所生成,接收器可以接收視頻位流的第二部分,而其使用由發(fā)送器基于指示收到的位元總數(shù)的參數(shù)所確定的初始估計帶寬編碼。如在圖5b中所述,如果從所述視頻位流的第一部分沒有解碼出良基準幀,所述第一和第二部分可被編碼并傳輸。

在步驟510c中,流程500c可以解碼視頻位流。任選地,流程500c可返回到步驟504c,以基于收到并解碼的視頻位流322的部分繼續(xù)確定網(wǎng)絡(luò)參數(shù),如上所述。通過不時確定網(wǎng)絡(luò)參數(shù)(例如,根據(jù)視頻位流322的部分的數(shù)據(jù)包所打上的時標),接收視頻位流322的部分時可能改變的網(wǎng)絡(luò)帶寬可以被檢測到。例如,編碼計算設(shè)備12可以是一個移動中的主叫移動電話,而解碼計算設(shè)備14可以是也在移動中的接收端移動電話,其可能會受到不斷變化的網(wǎng)絡(luò)條件(包括網(wǎng)絡(luò)帶寬的變化)的影響。

步驟510c之后,如果解碼計算設(shè)備14仍在接收視頻位流322的數(shù)據(jù),流程500c可返回到步驟508c以接收下一個視頻位流。如果流程500c確定沒有在解碼計算設(shè)備14上收到更多視頻位流322的數(shù)據(jù),流程500可以結(jié)束。

在一些實施例中,如上所述,用接收端參數(shù)編碼的視頻位流的第一部分(如“真實的”視頻數(shù)據(jù))可由解碼器400從編碼器300接收,然后解碼所述視頻位流的第一部分,并用控制器708確定所述視頻位流的第一部分相關(guān)的接收端參數(shù)。接收端參數(shù)可以作為反饋信息從控制器708傳輸?shù)骄幋a器300,以控制編碼器300。解碼器400從編碼器300接收并解碼視頻位流的第二部分,其中視頻位流的第二部分是用發(fā)送端(編碼器端)參數(shù)進行編碼。

在一些實施例中,例如,初始帶寬估計的執(zhí)行可以發(fā)生在通話過程的不同階段、使用不同類型的數(shù)據(jù)/信息,包括但不限于真實視頻數(shù)據(jù)或真實視頻數(shù)據(jù)之外的數(shù)據(jù)(“填充數(shù)據(jù)”),如上所述。

在一些實施例中,可以創(chuàng)建分離的消息,以在視頻會話期間傳輸初始帶寬估計數(shù)據(jù)及帶寬估計/調(diào)整數(shù)據(jù)。

圖6a-6e示出了依本公開的一些實施例提供在視頻位流的傳輸中進行帶寬調(diào)整的示例性流程。當編碼計算設(shè)備12傳輸視頻位流322時,如果視頻位流322的編碼位率確定自一個比網(wǎng)絡(luò)實際帶寬更高的估計帶寬,網(wǎng)絡(luò)延遲將會增加。這可以通過檢測網(wǎng)絡(luò)延遲來確定,而從網(wǎng)絡(luò)延遲計算帶寬是相當簡單的。更困難的是檢測到比所述估計帶寬更高的實際帶寬。如果沒有可靠高效的方法來檢測比估計帶寬更高的實際帶寬,解碼器動態(tài)檢測到的網(wǎng)絡(luò)帶寬就只能隨著時間下降而永遠不會上升。

帶寬檢測可以基于以下假設(shè):如果位率(如,基于估計帶寬)高于可用帶寬,網(wǎng)絡(luò)延遲將成比例地增加;而如果估計帶寬低于可用帶寬,網(wǎng)絡(luò)延遲將不會增加。例如,如果位率為200kbps而可用帶寬為100kbps,傳輸一秒鐘的視頻將需要兩秒鐘,或者不得不丟棄一些數(shù)據(jù)包。如果預(yù)期帶寬為200kbps而可用帶寬高于200kbps,傳輸一秒鐘的視頻將需要一秒鐘。這可以通過比較視頻位流322的數(shù)據(jù)包中包含的時標和視頻位流322在解碼處理設(shè)備14接收到時創(chuàng)建的本地時標來確定。對應(yīng)時標間的相對差異可以指示最高估計帶寬是否已達到。

通過不時檢測網(wǎng)絡(luò)帶寬的變化,如下圖6a-6e所述的實施例可以在視頻位流的部分正在傳送的期間,自適應(yīng)地響應(yīng)網(wǎng)絡(luò)帶寬上升或降低的變化,其傳送的速率高到足以克服網(wǎng)絡(luò)帶寬的變化而維持視頻質(zhì)量,又不因發(fā)送過多消息而過度降低帶寬。這些實施例可以在檢測到網(wǎng)絡(luò)帶寬降低時降低位率,并在網(wǎng)絡(luò)延遲符合估計時小量提高位率。以這種方式,通過上述手段反復(fù)采樣網(wǎng)絡(luò)帶寬、并每次在網(wǎng)絡(luò)表現(xiàn)符合估計時小量調(diào)整編碼參數(shù)(如編碼位率),所述網(wǎng)絡(luò)的最高帶寬可以在相當短的時間內(nèi)確定下來。

圖6a是依本公開的一些實施例提供的為傳輸一個視頻位流到一個接收器而調(diào)整帶寬的示例性流程的流程圖。例如,流程600a可以由編碼計算設(shè)備12(發(fā)送器)來執(zhí)行。圖6a中的流程圖示出了包括在流程600a的幾個步驟。流程600a可以用本文中所包含的、或用多于或少于這里包含的步驟來完成。例如,多個步驟可被組合或分割以改變所執(zhí)行的步驟的數(shù)目。流程600a的步驟可以以本文所包含的或不同的順序來執(zhí)行,并且仍然實現(xiàn)流程600a的意圖。

在一些實施例中,帶寬調(diào)整可以只用通過一個接收器(如解碼器400)確定的接收端參數(shù)。在一些實施例中,帶寬調(diào)整可以同時使用接收端和發(fā)送端參數(shù)。

在步驟602a中,發(fā)送器傳輸用于帶寬估計的信息到解碼設(shè)備(接收器)。在一些實施例中,發(fā)送器能夠傳輸視頻位流322的第一部分,其使用一個當前位率進行編碼并被打包成系列數(shù)據(jù)包。例如,呼叫信息可以作為視頻位流322的一部分傳輸,并由解碼計算設(shè)備14接收。解碼計算設(shè)備可基于收到的呼叫消息來確定接收端參數(shù),并經(jīng)由反向信道將應(yīng)答消息發(fā)回到編碼計算設(shè)備12。

在步驟604a中,發(fā)送器可以接收反向信道消息,包括由接收器確定的接收端參數(shù)。例如,收到的反向信道消息可包括由接收器在收到所述系列數(shù)據(jù)包后所確定的接收端參數(shù)。例如,接收端帶寬參數(shù)可以包括累積時間差參數(shù)(tdacc)、接收位率參數(shù)、丟失率參數(shù),帶寬指示參數(shù)、fec率參數(shù),和/或指示基準幀良/劣的數(shù)據(jù),或以上的任何組合。收到的反向信道消息內(nèi)含的數(shù)據(jù)可供編碼計算設(shè)備12確定編碼參數(shù)。意圖發(fā)揮這種作用的其他數(shù)據(jù)并不限于本文所述。

在一些實施例中,接收端參數(shù)可包括一個良基準幀或者任何可選用于編碼的基準幀,視當時的編碼效率和帶寬條件而定。例如,編碼計算設(shè)備12可以在不同的基準幀選項之間以及每組中使用同一基準幀的幀的不同數(shù)目之間切換,以便根據(jù)反饋信息更好地調(diào)整適應(yīng)當前的網(wǎng)絡(luò)狀況。編碼參數(shù)可以包括多個參數(shù),其可被輸入到編碼流程以在帶寬和糾錯方面調(diào)整所產(chǎn)生的輸出位流。例如,編碼參數(shù)可以包括但不僅限于位率、fec率、基準幀選擇和關(guān)鍵幀選擇。

在一些實施例中,包括接收端參數(shù)的反向信道消息可以通過圖6b中所示的流程來生成,如下所述。

圖6b是依本公開的一些實施例提供的生成一個反向信道消息的示例性流程600b的流程圖,所述反向信道消息包括被發(fā)送器用于調(diào)整編碼參數(shù)的接收器端參數(shù)。

帶寬估計可以通過使用一個基于解碼計算設(shè)備14的本地時間的滑動時窗(slidingwindow)來動態(tài)地執(zhí)行。所述時窗的長度可以是兩秒或依程序提供給流程600a的任意其他預(yù)定的時窗長度。示例性流程600b開始于步驟602b,其中,當?shù)谝粋€數(shù)據(jù)包到達(或被其到達所觸發(fā))接收器端口時,時間刻度(timescale)基可被初始化。時間刻度基的初始化如下:

t0=第一個數(shù)據(jù)包被接收時的本地時間(使用同一刻度)

trtp0=第一個視頻數(shù)據(jù)包的實時傳輸協(xié)議(real-timeprotocol,rtp)時標

在步驟604b中,接收器檢查兩秒時窗(twindow)中的首個和末個數(shù)據(jù)包的同步源(synchronizationsource,ssrc)標識。如果它們相同,則步驟繼續(xù)至創(chuàng)建帶寬估計消息;否則,接收器重置t0和trtp0的值,以便與新的ssrc的首個數(shù)據(jù)包同步,且不發(fā)送消息(這樣rtp時標的基也改變了)。

在步驟606b中,接收器可以(以接收器本地時間)抓取所述兩秒時窗中的首個數(shù)據(jù)包和末個數(shù)據(jù)包的rtp時標間隔(trgap)。假設(shè)首個和末個數(shù)據(jù)包的時標分別為tr0和tr1,則trgap=tr1–tr0。用90khz時鐘或更高精度的計時器,twindow=2*90000(轉(zhuǎn)換到rtp時標的同一時間刻度)。

一個或多個參數(shù),如網(wǎng)絡(luò)帶寬指標、累積時間差及接收位率(rbitrate),可以由接收器在步驟6082b、6084b、6086b分別確定。其他參數(shù)也可以被接收器確定,并包括在發(fā)到發(fā)送器的反向信道消息中。

網(wǎng)絡(luò)帶寬指標(“帶寬指標”)可以由接收器在步驟6082b算出,作為實時傳輸協(xié)議(rtp)時間間隔(tgap)和預(yù)定的時窗時間(twindow)的函數(shù)。在一些實施例中,網(wǎng)絡(luò)帶寬指標可以計算為twindow對tgap的一個比值,而其可根據(jù)以下規(guī)則指示當前網(wǎng)絡(luò)條件:

bandwidthindicator<1:指標表明因網(wǎng)絡(luò)帶寬不足引起的網(wǎng)絡(luò)延遲上升。

bandwidthindicator=1:指標表明網(wǎng)絡(luò)能夠無礙傳輸所述視頻。帶寬有可能適應(yīng)更高位率。

bandwidthindicator>1:指標表明數(shù)據(jù)包比實時更快地突發(fā)到達。這可能表明網(wǎng)絡(luò)擁塞正在緩解。例如,這可能是停止文件下載或解除帶寬限制手段的結(jié)果。數(shù)據(jù)包的突發(fā)到達也可能表明網(wǎng)絡(luò)過度跳動(excessivelyjittery)。絕大多數(shù)網(wǎng)絡(luò)跳動的條件下,帶寬指標將接近1。

在操作6084b中,可以計算rtp時間和本地時間之間累積的時間差tdacc,根據(jù)以下公式:

tdacc=(tr1–trtp0)–(tcurrent–t0)

其中:

tr1=當前時窗中末個數(shù)據(jù)包的時標

trtp0=與所述末個數(shù)據(jù)包有相同ssrc的整個序列的首個數(shù)據(jù)包的時標

tcurrent=當前本地時間

t0=所述首個數(shù)據(jù)包被接收時的本地時間

累計時間差tdacc的持續(xù)增長可以指示所述網(wǎng)絡(luò)帶寬不足以傳輸所述視頻位流。例如,當探測不到延遲的小量增加時,這可以用來校正對所述兩秒時窗的調(diào)整。

在步驟6086b中,實際接收位率(rbitrate)可計算為在當前時窗收到的數(shù)據(jù)包(包括fec數(shù)據(jù)包)的總位元數(shù)除以當前時窗的本地時間的總時長(本例中為兩秒)。

此外,數(shù)據(jù)包的總數(shù)(ptotal)和丟失的數(shù)據(jù)包的總數(shù)(plost)可以通過校檢數(shù)據(jù)包序號來檢查。例如,可以通過用最末的rtp序號減去最初的rtp序號,并與接收到的包的計數(shù)作比較。ptotal和plost可以用來確定丟包率packetlossratio。

在步驟610b中,反向信道消息可以在同一消息中包括一個或多個如下參數(shù):帶寬指標、tdacc、rbitrate和packetlossratio。然后,所述反向信道消息可以被發(fā)送到發(fā)送器/編碼器并依照2015年9月28日提交的美國專利申請?zhí)?4/867143(“143申請”)中所述的方式被用于設(shè)置發(fā)送器/編碼器中的參數(shù),143申請的全文通過引用在此并入本文。

回到圖6a,任選地,在步驟606a中,流程600a可確定發(fā)送端參數(shù)。例如,從解碼計算設(shè)備14收到反向信道消息后,編碼計算設(shè)備12可以分析所述反向信道消息,并可以結(jié)合其他消息及存儲的參數(shù)(包括統(tǒng)計)來確定用于編碼視頻位流322的第二部分的發(fā)送端參數(shù)。在一些實施例中,基于如步驟502a所述的發(fā)送端發(fā)送和接收系列數(shù)據(jù)包的時標差,發(fā)送器能夠確定發(fā)送端參數(shù)(如往返延遲)。

當僅用接收端參數(shù)來調(diào)整帶寬時,步驟606a可以省略。在這些實施例中,發(fā)送器將基于所述接收端參數(shù)來調(diào)整當前位率(帶寬)。例如,接收端參數(shù)可以包括一個或多個如上所述的參數(shù),如tdacc、btotal、rbitrate、帶寬指示、fec率、丟包率等。

在步驟608a中,發(fā)送器調(diào)整用于編碼視頻位流的當前位率。在一些實施例中,所述調(diào)整可以僅基于步驟604a中所述的收到的接收端參數(shù)。在一些實施例中,所述調(diào)整可以基于收到的接收端參數(shù)和由發(fā)送器確定的發(fā)送端參數(shù),如接收端帶寬指標和往返延遲數(shù)據(jù),如在步驟606a中所述。僅用接收端參數(shù)調(diào)整編碼參數(shù)(如用于編碼視頻位流的當前位率)的一個例子,可見圖6c示出的流程600c。

圖6c是依本公開的一些實施例提供的為編碼視頻位流而調(diào)整(當前)位率的示例性流程600c的流程圖。例如,當前位率的動態(tài)調(diào)整可以基于流程500a-500c及600a-b中所述的參數(shù)。例如,流程600c可以由編碼計算設(shè)備12來執(zhí)行。圖6c所示的流程圖展示了包括在流程600c中的若干步驟。實現(xiàn)流程600c的步驟,可以包括在本文,或者多于或少于本文所述。例如,多個步驟可被組合或分割以改變所執(zhí)行的步驟的數(shù)目。流程600c的步驟可以以本文所包含的或不同的順序來執(zhí)行,并且仍然實現(xiàn)流程600c的意圖。

如上所述,前向糾錯(fec)是一種糾錯技術(shù),它在一個視頻位流的數(shù)據(jù)包中增加額外的數(shù)據(jù)包,以允許接收器恢復(fù)丟失或損壞的數(shù)據(jù)包而無需重傳所述數(shù)據(jù)包的數(shù)據(jù)。輸出視頻位流的每個數(shù)據(jù)包,可以通過零個或多個fec包的數(shù)據(jù)來保護,例如:所述輸出視頻位流的一個數(shù)據(jù)包可能未被fec包的數(shù)據(jù)保護,也可能被多個fec包所保護,取決于所述數(shù)據(jù)包在解碼視頻位流中所預(yù)定的重要性。例如,相對于一個中間幀的代表像素數(shù)據(jù)的系數(shù),包含運動矢量的數(shù)據(jù)包可被更多的fec包數(shù)據(jù)保護。例如,使用fec包保護視頻位流的數(shù)據(jù)包的流程可被若干參數(shù)控制,如fec比率參數(shù)(fec_ratio),其描述的是視頻位流的數(shù)據(jù)包和fec包之間的比率。

流程600c開始于步驟602c,其假設(shè)fec_ratio被設(shè)定為用于保護當前視頻位流322的當前值,當前的編碼器位率被設(shè)置為ebitrate,允許的預(yù)定最高位率為maxbitrate。

在步驟602c中,流程600c測試fec_ratio是否為0;如果是,就在步驟604c中設(shè)定變量sbitrate=ebitrate。

在步驟606c中,如果fec_ratio不為0,設(shè)定sbitrate=ebitrate(1+1/fec_ratio)。所達到的效果是,當前位率的增量正比于fec保護的量。

在步驟608c中,例如,收到的網(wǎng)絡(luò)帶寬指標(也稱為“網(wǎng)絡(luò)帶寬”或“bwidthi”)被歸一化到0,并測試其是否小于一個小值(如0.05),且同時測試當前累積時間差(tdacc)是否也小于一個小值(如200毫秒)。

如果以上條件同時滿足(如同時為“真“),則意味著網(wǎng)絡(luò)可以正常處理當前位率,因此在步驟614c中流程600c可以小額(如5%)提高估計的位率,例如,通過設(shè)置變量newbitrate=sbitrate*bwidthi*1.05。

如果在步驟608c的測試為假,則在步驟610c中進一步測試帶寬指標bwidthi是否大于1.1;如果是,則如前文所述,所述網(wǎng)絡(luò)可能處在快速突發(fā)傳輸中,因此在步驟616c中流程600c可以通過設(shè)置變量newbitrate=sbitrate*1.1——即增高10%的位率——來探測網(wǎng)絡(luò)帶寬是否有所增加。

如果在步驟610c中確定bwidthi<1.1,則意味著網(wǎng)絡(luò)的延遲在上升,因此步驟612c通過設(shè)置newbitrate=sbitrate*bwidthi來調(diào)低位率。

在步驟618c中,估計位率被設(shè)定為ebitrate=newbitrate/(1+1/fec_ratio),以補償前向糾錯要添加到位流中的附加位元。

在步驟620c中,累積延遲被測試是否大于或等于200毫秒的預(yù)期值。

如果是,則意味著網(wǎng)絡(luò)延遲正在上升,因此在步驟622c中估計位率ebitrate被設(shè)定為其值的90%。

如果在步驟620c中所述網(wǎng)絡(luò)延遲小于其估計值,則在步驟624c中測試ebitrate是否大于允許的最大值maxbitrate。如果是,則其在步驟626c中被降低到等于maxbitrate。

繼上述步驟后,流程600c可以返回到圖6a的步驟608a以完成流程600a。

用經(jīng)調(diào)整的編碼參數(shù)——如調(diào)整后位率(基于帶寬估計),流程600a可以編碼視頻位流322的第二部分(未示出)。在一些實施例中,編碼計算設(shè)備12確定用于編碼視頻位流322的當前幀的一個選中基準幀。在一些實施例中,所選中的基準幀可以選自多個當前幀按顯示順序之前的基準幀。所述多個先前基準幀可以包括至少一個良基準幀,其定義為所述編碼器已知的、可被無錯誤解碼的一個基準幀。例如,選中基準幀可以是一個良基準幀,而這個良基準幀可用于編碼當前幀。又例如,作為選中基準幀的良基準幀可用于編碼包括當前幀的一定數(shù)目的連續(xù)幀,在這種情況下,用同一良基準幀編碼的連續(xù)幀的所述數(shù)目,可以基于一個或多個以下數(shù)據(jù)自適應(yīng)地選取:丟包率、帶寬數(shù)據(jù),和fec強度。例如,fec強度可以基于從解碼計算設(shè)備14接收到的用于編碼視頻位流322的數(shù)據(jù),由一個fec編碼器所確定;而基于所接收的數(shù)據(jù)(例如反饋信息),所述fec編碼器可以自適應(yīng)地改變fec強度和數(shù)據(jù)包大小。在一些實施例中,操作704中確定的編碼參數(shù)可以基于一個或多個以下數(shù)據(jù)被更新:fec強度、位率,和用同一良基準幀編碼的連續(xù)幀的數(shù)目。在一些實施例中,視頻流322的當前幀使用所選擇的基準幀和編碼參數(shù)進行編碼。在一些實施例中,編碼過程可在以下描述中闡述。

例如,視頻位流322的第一部分可被編碼并作為視頻位流322的部分傳輸,再由解碼計算設(shè)備14接收。解碼計算設(shè)備14能夠基于收到的消息確定接收端參數(shù),并通過反向信道(如反向信道消息)將消息發(fā)回編碼計算設(shè)備12。例如,編碼的計算設(shè)備12可以接收接收端參數(shù)并計算調(diào)整后的編碼參數(shù),然后用所確定的下一批編碼參數(shù)編碼視頻位流322的第二部分。視頻位流322的第二部分的編碼可以基于接收端參數(shù)以及——任選地——發(fā)送端參數(shù)。被編碼后,視頻位流322的第二部分可以由編碼計算設(shè)備12經(jīng)由網(wǎng)絡(luò)16傳輸?shù)浇獯a計算設(shè)備14。例如,解碼的計算設(shè)備可以確定接收端參數(shù)并通過反向信道信息向編碼計算設(shè)備12發(fā)回所確定的接收端參數(shù)。

在步驟610a中,發(fā)送器將用調(diào)整后的編碼參數(shù)(如調(diào)整后的當前位率)編碼的視頻位流的第二部分傳輸?shù)浇邮掌?。在一些實施例中,流?00a可以通過回到步驟604a而繼續(xù),步驟604a可以接收下一批用于下次帶寬調(diào)整的反向信道消息,直到停止傳輸視頻。

仍在圖6a中,通過回到步驟604a,基于收到的反向信道消息(包括接收端參數(shù)),發(fā)送器可以確定是否需要額外調(diào)整帶寬。如果為真,流程600a可以繼續(xù)到可選步驟606a以確定下一批發(fā)送端參數(shù),如同帶寬調(diào)整需要接收端和發(fā)送端參數(shù)的情形;或者流程600a可以繼續(xù)到步驟608a再一次調(diào)整帶寬,如同帶寬調(diào)整只需要接收端參數(shù)的情形。如上所述,確定編碼參數(shù)的頻率將決定流程600a可以多快、多順地響應(yīng)網(wǎng)絡(luò)帶寬的變化,且不因增加反向信道消息而顯著降低網(wǎng)絡(luò)帶寬。如果流程600a確定沒有余存的視頻流數(shù)據(jù),則流程600a可以就此結(jié)束。

在一些實施例中,編碼計算設(shè)備12(發(fā)送器)可以在使用已知的良基準幀和使用任一基準幀(例如當前幀的前一幀)之間切換。例如,所述選擇可以基于編碼效率和質(zhì)量之間的權(quán)衡。例如,選擇任一基準幀(例如當前幀的前一幀)時,編碼效率更好,但由于傳輸過程中發(fā)生的錯誤,經(jīng)解碼的視頻質(zhì)量可能更低。

圖6d是依本公開的一些實施例提供的調(diào)整帶寬的示例性流程的流程圖,所述流程可由一個接收器用于接收一個視頻位流。帶寬調(diào)整流程類似于圖6a-c的說明,而我們的描述集中在由接收器執(zhí)行的操作。流程600d包括步驟602d-610d,其對應(yīng)于流程600a中的步驟602a-610a。

在步驟602d中,接收器接收視頻位流的第一部分所關(guān)聯(lián)的一個或多個數(shù)據(jù)包,所述視頻位流用當前位率編碼并傳輸為系列數(shù)據(jù)包。在一些實施例中,所述一個或多個數(shù)據(jù)包可由發(fā)送器在步驟602a中發(fā)送。

在步驟604d中,接收器基于收到的一個或多個數(shù)據(jù)包確定接收端帶寬參數(shù)。在一些實施例中,例如,如果接收端參數(shù)是在帶寬調(diào)整中用到的唯一信息,接收端帶寬參數(shù)可以包括累積時間差參數(shù)、接收位率參數(shù)、丟包率參數(shù)、帶寬指示參數(shù)及fec比率參數(shù)。

在步驟606d中,接收器從所述一個或多個數(shù)據(jù)包中解碼視頻位流的經(jīng)編碼的第一部分。

在步驟608d中,在收到一個或多個數(shù)據(jù)包后,接收器向發(fā)送器傳輸一條或多條反向信道消息,其中每條都包括接收端帶寬參數(shù)。

在步驟610d中,接收器從發(fā)送器接收用調(diào)整后的當前位率進行編碼的視頻位流的第二部分。在一些實施例中(如,見圖6a),可由發(fā)送器在收到所述一條或多條反向信道消息后、基于接收端帶寬參數(shù)來確定調(diào)整后的當前位率。在另一些實施例中(如,見圖6e),可由發(fā)送器在收到所述一條或多條反向信道消息后、基于接收端帶寬參數(shù)和發(fā)送端數(shù)據(jù)來確定調(diào)整后的當前位率,在所述發(fā)送端數(shù)據(jù)在收到所述一條或多條反向信道消息后被確定。

在一些實施例中,在步驟610d后,流程600d可以回到步驟604d,以根據(jù)收到的視頻的第二部分的數(shù)據(jù)包來確定下一批接收端帶寬參數(shù),直到視頻停止傳輸。

在一些實施例中,由于音頻和視頻占據(jù)同一帶寬的事實,動態(tài)帶寬估計可以僅基于視頻信道,而音頻信道帶寬abandwidth可以預(yù)先固定在一個速率上(如100kbps)。因此,用于帶寬調(diào)整的反向信道消息可以僅僅參考視頻信道帶寬(如果帶寬小于音頻信道帶寬,其被設(shè)置為零)。

vbandwidth=bandwidth-abandwidth;

vbandwidth是反向信道消息中用以控制編碼器/接收器參數(shù)設(shè)定的參數(shù)。

圖6e是依本公開的一些實施例提供的為傳輸及接收一個視頻位流而調(diào)整帶寬的示例性流程600e的流程圖。流程600e示出了同時涉及發(fā)送器(如編碼計算設(shè)備12)和接收器(如解碼運算設(shè)備14)的動態(tài)帶寬調(diào)整流程600e。

在視頻會話期間,網(wǎng)絡(luò)條件(包括帶寬)可以改變,而發(fā)送器需要動態(tài)調(diào)整編碼位率。這個例子同時使用了發(fā)送器端和接收器端的信息來作出調(diào)整。

例如,使用如上所述的數(shù)據(jù)包的發(fā)送時間和應(yīng)答時間,發(fā)送器可以在步驟602e中計算當前往返時間/延時(currentrtt),在步驟604e中計算平均往返時間/延遲(averagertt),并在步驟606e中計算本地最小往返時間/延遲(localminimalrtt)。localminimalrtt是在呼叫會話的某段時間內(nèi)最小的rtt,直到因滿足某些條件(如達到一個最小位率等)而被復(fù)位。

例如,接收器在步驟608e中計算帶寬指標bandwidthindicator,并如上所述在步驟610e中計算累計時間差指標accumulatedindicator(tdacc)。bandwidthindicator和accumulatedindicator可以在步驟612e中以消息的形式通過反向信道消息從接收器端發(fā)送到發(fā)送器端。由發(fā)送器和接收器兩者算出的值在步驟614e中可用于動態(tài)修改發(fā)送參數(shù)。然后在步驟616e中,基于修改后的參數(shù),視頻位流從發(fā)送器發(fā)送到接收器,而視頻信號最后在步驟618e中由接收器處理。

根據(jù)公開的實施例,圖7是包括反向信道消息管理器的示例性編解碼器700的框圖。編解碼器700可以實現(xiàn)上文圖5a-5c和圖6a-6d所述的流程500c-500d和600a-600d。編解碼器700可以用計算設(shè)備12、14實現(xiàn)。編解碼器700可以編碼視頻流200或解碼視頻位流322,取決于它在運行時受到的指示。編解碼器700可以用錄制器702采集視頻流200的數(shù)據(jù)。通過實時數(shù)據(jù)采集——例如用攝像機,或通過讀取視頻流的數(shù)據(jù)——例如從存儲設(shè)備或網(wǎng)絡(luò),錄制器702可以采集未壓縮的視頻流數(shù)據(jù)。

當編解碼器700作為編碼器工作時,錄制器702可以將未壓縮的視頻流200傳遞到編碼器封裝器704。編碼器封裝器704可以檢查所述輸入的未壓縮的視頻流200,從反向信道控制器708接收參數(shù)(如反向信道消息),并從非易失性存儲設(shè)備讀取儲存的參數(shù)和統(tǒng)計信息以確定編碼參數(shù),再將編碼參數(shù)與視頻流200一起發(fā)送到編碼器706。編碼器706可以是類似于圖3中編碼器300的編碼器。編碼器706可以用所述接收到的編碼器參數(shù)來編碼視頻流200,以產(chǎn)生一個編碼視頻位流322,而其具有由反向信道控制器708選擇的估計位率。編碼器可以將包含在所述編碼視頻位流中的所述數(shù)據(jù)包傳遞到前向糾錯(fec)編碼器716,716可以創(chuàng)建,并依據(jù)包括諸如fec比率的fec編碼參數(shù)添加fec數(shù)據(jù)包到輸出的視頻位流中。隨后,fec編碼器可以將包括在輸出視頻位流中的數(shù)據(jù)包經(jīng)網(wǎng)絡(luò)718傳遞到數(shù)據(jù)傳出模塊720進行傳輸。

當編解碼器700作為解碼器工作時,可以通過數(shù)據(jù)傳入模塊712,從網(wǎng)絡(luò)718接收含在經(jīng)編碼的視頻位流322中的數(shù)據(jù)包,并傳遞到前向糾錯(fec)解碼器726。fec解碼器可以將fec數(shù)據(jù)包從傳入的視頻位流中去除,并在需要并可行時,還原丟失或損壞的數(shù)據(jù)包。例如,fec解碼器可以將有關(guān)丟失或無法恢復(fù)數(shù)據(jù)包的信息發(fā)送到良/劣信息提供器714。然后,fec解碼器可以將視頻位流322與解碼器參數(shù)一起發(fā)送到解碼器封裝器732。解碼器封裝器可以檢查視頻位流,并將參數(shù)信息——例如時標和數(shù)據(jù)包序號——返回至解碼器狀態(tài)回調(diào)724。解碼器730可以是類似于圖4中解碼器400的解碼器。解碼器730可以根據(jù)所述傳遞的解碼器參數(shù)解碼所述視頻位流322,并將解碼后的視頻流輸出到渲染器728;而在728中,所述視頻流在渲染后,例如,可被顯示在連接至解碼計算設(shè)備14的一個顯示設(shè)備上,或存儲到一個非易失性存儲設(shè)備中。

除了編碼和解碼視頻數(shù)據(jù),編解碼器700可以包括反向信道消息管理器722,而其可以是控制器(也可稱“反向信道控制器”)708的一部分。如上所述,反向信道消息管理器722負責(zé)創(chuàng)建、傳輸和接收消息(如呼叫及應(yīng)答消息)。運行于編碼模式時,反向信道消息管理器722可以通過數(shù)據(jù)傳出模塊720將呼叫消息傳送到網(wǎng)絡(luò)718,并通過數(shù)據(jù)傳入模塊718從網(wǎng)絡(luò)718接收應(yīng)答消息。所接收到的應(yīng)答消息,可以通過帶寬估計模塊710進行分析,以確定網(wǎng)絡(luò)參數(shù)。例如,在一些上述實施例中,所述網(wǎng)絡(luò)參數(shù)可以包括以下一項或多項:btotal、帶寬指標、tdacc、r位率、數(shù)據(jù)包lossratio以及其他參數(shù);上述參數(shù)可以用于帶寬估計(如初始帶寬估計)或調(diào)整。所述參數(shù)可以包含于反向信道消息(如呼叫和應(yīng)答消息)。反向信道消息管理器722可以通過傳入端口712和傳出端口720接收和發(fā)送反向信道信息(如呼叫和應(yīng)答消息),并通過解碼器狀態(tài)回調(diào)724和帶寬估計模塊710,針對用于設(shè)置編碼器參數(shù)的所述網(wǎng)絡(luò)參數(shù),管理其計算和收集。運行于解碼模式時,反向信道消息管理器724可以通過傳入端口712從網(wǎng)絡(luò)718接收呼叫消息,用帶寬估計模塊710確定網(wǎng)絡(luò)參數(shù),并創(chuàng)建應(yīng)答消息,以通過傳出端口720傳輸?shù)骄W(wǎng)絡(luò)718。

基于所接收和計算出的網(wǎng)絡(luò)參數(shù),帶寬估計模塊710可以估計可用的網(wǎng)絡(luò)帶寬;所述網(wǎng)絡(luò)參數(shù)包括往返延遲、解碼器端接收位率、丟包率和解碼器端帶寬指標(包括帶寬指標和累積指標)。帶寬估計模塊710的示例流程已經(jīng)在圖5a-5c、6a-6e中進行了討論。例如,由控制器708確定的編碼參數(shù)可以包括fec強度、位率、基準幀的數(shù)目和供使用的基準幀。根據(jù)控制器708確定的編碼參數(shù),fec編碼器可以自適應(yīng)地改變fec強度和數(shù)據(jù)包大小。

編解碼器700的一個特點,是其有能力為適應(yīng)變化的網(wǎng)絡(luò)條件而動態(tài)地改變用于幀內(nèi)預(yù)測的基準幀的數(shù)目。

圖8示出的是編碼器802正在輸入視頻流200以待編碼成視頻位流322。視頻編碼器802可使用某個數(shù)目818個的基準幀r1,r2,...,rn,即812、814、816,來編碼視頻位流322。使用更多基準幀可以提高所傳輸視頻位流的質(zhì)量,但也可能需要更大的網(wǎng)絡(luò)帶寬。調(diào)整要用的基準幀的數(shù)目為818,可以將傳輸所需基準幀的數(shù)目匹配到可用的網(wǎng)絡(luò)帶寬。視頻解碼器804可以調(diào)節(jié)解碼的基準幀r1,r2,...,rn即820、822、824的數(shù)目826,用于解碼視頻位流322,以匹配編碼器802用來編碼所述視頻位流的基準幀的所述數(shù)目;所述匹配可以根據(jù)從編碼器802接收描述幀的數(shù)目的參數(shù)及關(guān)聯(lián)于所述基準幀的其他數(shù)據(jù),而所述接收可以直接經(jīng)由所述視頻位流或經(jīng)由反向信道消息來進行。

根據(jù)公開的實施例,圖9示出了選擇基準幀的一個例子。圖9示出的視頻流900包括幀群組m1,m2和m3。群組m1包括一個幀內(nèi)編碼的基準幀i及其若干預(yù)測幀p。預(yù)測幀p可用包含在i的信息和編碼在所述視頻位流中的預(yù)測信息重建。群組m2包括首幀pi,而pi幀是用解碼器緩存中已知的良基準幀編碼而成。如果解碼器(接收器)可以無錯誤地解碼一個基準幀,所述基準幀是一個良基準幀。在一些實施例中,為使一個基準幀為良基準幀,其所依賴的基準幀也必須沒有任何錯誤。如果編碼器已知所述良基準幀無錯,則所述良基準幀是一個已知良基準幀。良基準幀不必須是一個i幀,且可以從先前(正確地)解碼的幀被重建,例如從群組m1的幀i。這意味著,針對群組m2傳輸一個獨立的i幀并無必要。例如,一旦解碼器(接收器)確定pi是在解碼器緩存中的良好基準幀,就可以向編碼器(發(fā)送器)指示pi是編碼器的良基準幀,而指示可以直接在所述位流中或通過反向信道消息來進行。因此,所述編碼器(發(fā)送器)得知pi是良基準幀,且可以用于預(yù)測后續(xù)幀。同樣地,幀群組m3包含一個pi幀,而其也可以從一個由運行時反向信道消息提示的已知良基準幀重建,因此無需傳輸獨立的i幀以重建群組m3的預(yù)測幀p。如圖9中的省略號所示,該方案可以繼續(xù)用于更多群組的幀。

通過反向信道消息控制器708中的反向信道消息管理器722,視頻編碼器可使用來自解碼器的反饋信息來確定應(yīng)當用哪個幀來編碼。例如,一個良基準幀或任一基準幀可以針對編碼而被選定,取決于其時的編碼效率和帶寬條件。例如,為了更好地適應(yīng)當前網(wǎng)絡(luò)條件,編碼計算設(shè)備12可以基于反饋信息,在基準幀的不同選項中切換,也可以切換使用同一基準幀的各圖像群組中幀的不同數(shù)目。

例如,針對編碼視頻位流322的一個當前幀,編碼器(發(fā)送器)可以在使用已知良基準幀和使用任一基準幀(例如當前幀的前一幀)之間切換。例如,所述選擇可以基于編碼效率和質(zhì)量之間的權(quán)衡。例如,選擇任一基準幀(例如當前幀的前一幀)時,編碼效率更好,但由于傳輸過程中發(fā)生的錯誤,經(jīng)解碼的視頻質(zhì)量可能更低。

當所選的基準幀是一個良基準幀時,同一良基準幀可用于編碼,例如,一定數(shù)目的包括當前幀的連續(xù)幀。使用同一良基準幀編碼的連續(xù)幀的數(shù)目(如圖9中的m2、m3)可以基于以下因素自適應(yīng)地選擇:丟包率、帶寬數(shù)據(jù)、fec強度,或上述的任意組合。如在圖9中,各群組中幀的數(shù)目,如m1,m2,m3...mi,可以在幀邊界動態(tài)地變化,并且各群組m1,m2,m3...mi的值可以通過以下因素確定:丟包率、帶寬、fec強度,或上述的任意組合。例如,基于以下因素,編碼參數(shù)可以被更新:fec強度、位率、使用同一良基準幀編碼的連續(xù)幀的數(shù)目,或上述的任意組合。

在一些實施例中,fec強度可以基于從解碼計算設(shè)備接收到的用于編碼視頻位流的數(shù)據(jù),由一個fec編碼器所確定;而基于接收自所述解碼計算設(shè)備的用于編碼所述視頻位流的數(shù)據(jù)(例如反饋信息),所述fec編碼器可以自適應(yīng)地改變fec強度和數(shù)據(jù)包大小。例如,所述用于編碼視頻位流的數(shù)據(jù)(例如反饋信息),可以進一步包括丟包率、往返延遲、接收位率、帶寬數(shù)據(jù)、指示一個基準幀屬良或劣的數(shù)據(jù),等等。例如,所述編碼參數(shù)可以包括估計帶寬,而其確定是基于在反饋信息中接收到的所述帶寬數(shù)據(jù)。

以上描述的編碼和解碼的實施例說明了一些示例性的編碼和解碼技術(shù)。然而,“編碼”和“解碼”,如同在權(quán)利要求中使用時一樣,可以意指壓縮、解壓縮、轉(zhuǎn)換,或任意其他處理或變化數(shù)據(jù)。

計算設(shè)備12和/或計算設(shè)備14的實現(xiàn)方式,以及存儲其上和/或由其執(zhí)行的算法、方法、指令等,可以實現(xiàn)為硬件、軟件或兩者的任意組合。例如,所述硬件可以包括計算機、知識產(chǎn)權(quán)(ip)核心、專用集成電路(asic)、可編程邏輯陣列、光學(xué)處理器、可編程邏輯控制器、微代碼、微控制器、服務(wù)器、微處理器、數(shù)字信號處理器或任意其他適合的電路。在權(quán)利要求中,術(shù)語“處理器”或單獨或組合地包括任意上述硬件。術(shù)語“信號”和“數(shù)據(jù)”可互換使用。此外,計算設(shè)備12和計算設(shè)備14的各部分無須以相同的方式實現(xiàn)。

此外,例如,在一個實施例中,計算設(shè)備12或計算設(shè)備14可用通用計算機/處理器及計算機程序?qū)崿F(xiàn);且在執(zhí)行時,所述計算機程序執(zhí)行任意上述相應(yīng)的方法、算法和/或指令。此外,例如,也可以另外使用專用計算機/處理器,而其可以包含專用硬件用于執(zhí)行本文所述的任意所述方法、算法、或指令。

計算設(shè)備12和計算設(shè)備14可以,例如,在一個屏幕錄制(screencasting)系統(tǒng)的計算機上實現(xiàn)。另外,計算設(shè)備12可以在服務(wù)器上實現(xiàn),而計算設(shè)備14可以在獨立于服務(wù)器的設(shè)備上實現(xiàn),諸如手機或其他手持式通信裝置。在這個例子中,計算設(shè)備12可以使用編碼器300將內(nèi)容編碼為一個編碼的視頻信號,并發(fā)送所述編碼的視頻信號到通信設(shè)備。反過來,所述通信設(shè)備可以使用解碼器400解碼所述編碼的視頻信號。另外,通信設(shè)備也可以解碼本地存儲在所述通信設(shè)備上的內(nèi)容,例如非由計算設(shè)備12傳送的內(nèi)容。計算設(shè)備12和計算設(shè)備14也可以有其他合適的實施方案。例如,計算設(shè)備14可以是大致固定的個人計算機而非便攜通信設(shè)備,和/或包括編碼器300的設(shè)備還可以包括解碼器400。

本文所述的全部或部分方面可用帶計算程序的通用計算機/處理器來實現(xiàn);其在執(zhí)行時,可實現(xiàn)任意在此描述的各方法、算法和/或指令。例如,可以額外地或可替代地使用專用計算機/處理器,其可包含專用硬件用于執(zhí)行任意本文描述的方法、算法或指令。

本文所述的計算設(shè)備(及存儲其上和/或由其執(zhí)行的算法、方法、指令等)可以在硬件、軟件或兩者組合上實現(xiàn)。例如,硬件可以包括知識產(chǎn)權(quán)(intellectualproperty,ip)核心、應(yīng)用專用集成電路(application-specificintegratedcircuits,asics)、可編程邏輯陣列、光學(xué)處理器、可編程邏輯控制器、微代碼、固件、微控制器、服務(wù)器、微處理器、數(shù)字信號處理器,或任何其他合適的電路。在權(quán)利要求中,術(shù)語“處理器”應(yīng)被理解為包括單獨或組合使用的任意前述裝置。術(shù)語“信號”和“數(shù)據(jù)”可互換使用。此外,計算設(shè)備的各部分不必以相同的方式來實現(xiàn)。

例如,一個或多個計算設(shè)備可以包括一個asic或可編程邏輯陣列(如場效可編程邏輯門陣列,field-programmablegatearray,fpga)等配置為用來執(zhí)行一個或多個本文描述或要求保護的操作的專用處理器。一個示例性fpga可包括邏輯模塊和隨機存取存儲器(ram)模塊的集合,可單獨配置和/或互連配置,以使fpga執(zhí)行某些功能。某些fpga也可含有其他通用或?qū)S玫哪K。一個示例性fpga可以基于硬件定義語言(hardwaredefinitionlanguage,hdl)設(shè)計進行編程,如超高速集成電路(veryhighspeedintegratedcircuit,vhsic)硬件描述語言或者verilog。

本文的實施例可用功能塊組件和各種處理步驟來描述。所公開的方法和順序,可以單獨或以任何組合來執(zhí)行。功能塊可以通過任何數(shù)量的執(zhí)行指定功能的硬件和/或軟件組件來實現(xiàn)。例如,所描述的實施例可以使用各種集成電路組件,如存儲器元件、處理元件、邏輯元件、查找表等,其可以在一個或多個微處理器或其他控制設(shè)備的控制下執(zhí)行多種功能。類似地,所描述的實施例的元件使用軟件編程或軟件元件實現(xiàn)時,本發(fā)明可以使用任何編程或腳本語言來實現(xiàn),如c、c++、java、匯編等;各種算法的實現(xiàn)可以結(jié)合任意組合的數(shù)據(jù)結(jié)構(gòu)、對象、過程、例程或其他編程元素。功能方面可以用在一個或多個處理器上執(zhí)行的算法來實現(xiàn)。此外,本發(fā)明的實施例可以采用任意數(shù)量的常規(guī)技術(shù),用于電子學(xué)配置、信號處理和/或控制、數(shù)據(jù)處理等。術(shù)語“機制”和“元件”屬廣義使用,且不限于機械的或物理的實施例或方面,但可包括結(jié)合處理器等的軟件例程。

上述公開內(nèi)容的各方面或方面的一些部分可以以計算機程序產(chǎn)品的形式存在,而其可以從比如計算機可用或計算機可讀介質(zhì)中讀寫。計算機可用或計算機可讀介質(zhì)可以是任何設(shè)備;例如,其可以有形地包含、存儲、通信或經(jīng)任何處理器或通過連接到任何處理器傳輸程序或數(shù)據(jù)結(jié)構(gòu)以供使用。例如,所述介質(zhì)可以是電子、磁、光、電磁或半導(dǎo)體器件。其他合適的介質(zhì)也可以使用。這樣的計算機可用或計算機可讀介質(zhì)可以被稱為非易失性存儲器或介質(zhì),并且可以包括隨機存取存儲器或其他可能會隨時間而改變的易失性存儲器或存儲設(shè)備。除非另有說明,本文中所描述的裝置的存儲器不必在物理上包含于該裝置,但可以由裝置遠程訪問,且不必與可能被物理包含于該裝置的其他存儲器鄰近。

任何本文中描述的作為示例執(zhí)行的單個或組合功能,可以用機器可讀指令來實現(xiàn),而其形式可以為任一或任意組合的前述計算硬件的操作代碼。計算代碼可以實現(xiàn)為一個或多個模塊的形式,通過所述形式單個或組合功能可以作為計算工具來執(zhí)行,而在本文所述的方法和系統(tǒng)的操作中,每個模塊的輸入和輸出數(shù)據(jù)可被傳遞到/自一個或多個其他模塊。

信息、數(shù)據(jù)和信號可以使用多種不同的技術(shù)和工藝來表示。例如,任何數(shù)據(jù)、指令、命令、信息、信號、位元、符號和本文引用的芯片,可以通過電壓、電流、電磁波、磁場或磁性粒子、光場或光學(xué)粒子、其他物品或前述的任意組合來表示。

本說明書包含各種標題和副標題以增強可讀性,并幫助在說明書中尋找和索引材料的過程。這些標題和副標題并非意圖,且不應(yīng)被用于,影響權(quán)利要求的解釋或以任何方式限制權(quán)利要求的范圍。本文所示和所述的具體實現(xiàn)方式是本公開的說明性實施例,且不意在以任何方式限制本公開的范圍。

本文引用的所有參考文獻,包括出版物、專利申請和專利,在此通過引用以同等程度并入本文;每個參考文獻視同被單獨、明確地指明并通過引用并入本文且以其整體在此闡述。

上述實施方式已經(jīng)依序描述,以便容易理解、且不限制本公開。相反,本公開旨在覆蓋包含在所附權(quán)利要求書的范圍內(nèi)的各種修改和等同布置,所附權(quán)利要求書的范圍在法律范圍內(nèi)應(yīng)被賦予最寬泛的解釋,以包含所有上述修改和等同結(jié)構(gòu)。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1