專利名稱::一種視頻序列的生成及對視頻序列進行編碼的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及通信領(lǐng)域,更具體地說,涉及一種S見頻序列的生成及對一見頻序列進行編碼的方法。
背景技術(shù):
:隨著即時通信的普及和網(wǎng)絡(luò)帶寬的提升,越來越多的網(wǎng)絡(luò)用戶利用攝像頭進行視頻聊天,但是由于網(wǎng)絡(luò)帶寬及傳輸質(zhì)量的不穩(wěn)定,造成了即時通信中視頻聊天的質(zhì)量難以保證。其中由于丟包造成視頻傳輸?shù)耐nD是目前視頻通信質(zhì)量的瓶頸之一,而這個瓶頸是由視頻序列編碼過程導(dǎo)致的。目前的視頻序列編碼都是按照時序方法進行的,如附圖1所示,是現(xiàn)有技術(shù)一的視頻序列編碼示意圖。在該視頻序列中包含"幀內(nèi)編碼幀",即I幀,以及"幀間預(yù)測幀",即P幀,其中I幀不依賴于其他幀即可獨立解碼,P幀則以前一幀作為參考幀。附圖1的編碼方式就是通過定時編碼I幀,然后依次編碼P幀來組織視頻數(shù)據(jù)的。但是這種方式存在一個明顯的缺陷,因為在對^L頻序列中的P幀編碼時,均以前一幀作為參考幀,使得視頻幀之間過于依賴,只要一個P幀丟失,那么從該P幀直到下一個I幀之間的所有P幀都無法解碼,這就會對視頻質(zhì)量造成嚴重影響。為了避免上述問題,在現(xiàn)有技術(shù)二中,如附圖2所示,是通過將插入的I幀移到周期性幀內(nèi)請求中點的位置,時間軸上在其之前的視頻圖像采用逆向編碼,在其之后的視頻圖像采用正序編碼,兩組視頻圖像都根據(jù)該插入的I幀做時域預(yù)測,從而減輕由于丟包導(dǎo)致的視頻解碼質(zhì)量下降的問題?,F(xiàn)有技術(shù)二還有另一種實現(xiàn)方式也于此類似并稍作改進,如附圖3所示,也是將I幀移到周期性幀內(nèi)請求中點的位置,但是時間軸前后的所有P幀均直接以該I幀作為參考幀,更好地減輕了丟包導(dǎo)致的視頻解碼質(zhì)量下降的問題。不過現(xiàn)有技術(shù)二也存在一定的問題,由于將I幀移到周期性幀內(nèi)請求中點的位置,因此該周期內(nèi)的第一個P幀直到該I幀都沒有開始編碼,實質(zhì)上引入了一定的延時,這種延時在網(wǎng)絡(luò)擁堵的情況下可能會非常嚴重,導(dǎo)致用戶無法觀看到順暢的視頻圖像。因此需要一種新的對視頻序列進行編碼的方法,從而在保證視頻質(zhì)量的同時能夠降低編碼延時,使視頻圖像更加流暢。
發(fā)明內(nèi)容本發(fā)明的目的在于提供一種視頻序列的生成方法,旨在解決現(xiàn)有技術(shù)在對視頻序列進行編碼時存在的延遲較高的問題。本發(fā)明的目的還在于提供一種對視頻序列進行編碼的方法,以更好地解決現(xiàn)有技術(shù)中存在的上述問題。為了實現(xiàn)發(fā)明目的,在該視頻序列的生成方法中,所述^L頻序列包括至少一個幀周期,所述幀周期包括一個幀內(nèi)編碼幀和多個幀間預(yù)測幀,其特征在于,所述幀周期還包括至少一個以所述幀內(nèi)編碼幀作為參考的映射幀,其在幀周期中的插入位置根據(jù)當前^L頻序列傳輸過程的丟包率設(shè)定。優(yōu)選地,所述映射幀的插入位置由事先存儲的數(shù)據(jù)映射表進行控制,所述數(shù)據(jù)映射表包含丟包率與映射幀插入間隔之間的映射關(guān)系。優(yōu)選地,所述映射幀的插入位置由以下函數(shù)表達式確定F(n)=floor(1.6*ln(l/loss)-l);其中,n表示當前幀距最近的幀內(nèi)編碼幀或映射幀的距離,loss為當前丟包率,ln(x)表示取x的自然對數(shù),floor(x)表示取不小于x的最小非負整數(shù)。為了更好地實現(xiàn)發(fā)明目的,還提供了一種對視頻序列進行編碼的方法,包括以下步驟A.接收端對接收到的視頻序列進行丟包率檢測,并將丟包率反饋至發(fā)送端;置;c.發(fā)送端基于插入的映射幀進行編碼,重構(gòu)視頻序列。息進行的。優(yōu)選地,所述步驟A進一步包括Al.接收端接收視頻序列的數(shù)據(jù)包,所述視頻序列中的各幀具有序號及時戳<S息5A2.接收端對數(shù)據(jù)包進行解析,并根據(jù)解析得到的序號及時戳信息計算丟包率;A3.接收端將計算出的丟包率反饋至發(fā)送端。優(yōu)選地,所述步驟B進一步包括發(fā)送端根據(jù)事先存儲的數(shù)據(jù)映射表控制映射幀的插入位置,所述數(shù)據(jù)映射表包含丟包率與映射幀插入間隔之間的映射關(guān)系。優(yōu)選地,所述步驟B進一步包括發(fā)送端根據(jù)函數(shù)表達式確定映射幀的插入位置,該函數(shù)表達式為F(n)=floor(1.6*ln(l/loss)-l);其中,n表示當前幀距最近的幀內(nèi)編碼幀或映射幀的距離,loss為當前丟包率,ln(x)表示取x的自然對數(shù),floor(x)表示取不小于x的最小非負整數(shù)。優(yōu)選地,所述步驟C進一步包括Cl.根據(jù)當前幀的位置判斷其類型是幀內(nèi)編碼幀、幀間預(yù)測幀還是映射幀;C2.根據(jù)判斷結(jié)果,對幀內(nèi)編碼幀、幀間預(yù)測幀和映射幀分別采取對應(yīng)的編碼模式編碼。優(yōu)選地,所述步驟C2進一步包括若當前幀為幀內(nèi)編碼幀,則采用幀內(nèi)編碼才莫式進^f亍編碼;若當前幀為幀間預(yù)測幀,則以前一幀作為參考并采用幀間編碼模式進行編碼;若當前幀為映射幀,則以前一個幀內(nèi)編碼幀作為參考并采用幀間編碼模式進行編碼。由上可知,本發(fā)明在對視頻序列進行編碼的過程中,與現(xiàn)有技術(shù)的區(qū)別在入位置,并基于插入的映射幀進行編碼,從而既保證了視頻圖像質(zhì)量,也降低了延時,保證了視頻圖像的流暢。圖l是現(xiàn)有技術(shù)一中視頻序列的編碼示意圖;圖2是現(xiàn)有技術(shù)二中視頻序列的編碼示意圖;圖3是現(xiàn)有技術(shù)二中視頻序列的另一編碼示意圖;圖4是本發(fā)明的一個實施例中視頻序列的編碼示意圖;圖5是本發(fā)明的一個實施例中對視頻序列進行編碼的方法流程圖;圖6是本發(fā)明的另一實施例中對視頻序列進行編碼的方法流程圖;圖7是本發(fā)明的又一實施例中對視頻序列進行編碼的方法流程圖。具體實施方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。在本發(fā)明中,首先檢測接收到的視頻序列的丟包率,并根據(jù)丟包率設(shè)定以I幀作為參考的映射幀(即RP幀)的插入位置,然后基于插入的RP幀,在編碼時對不同類型的當前幀進行編碼,從而在保證視頻圖l象質(zhì)量的同時降低了延時。圖4是本發(fā)明的一個實施例中視頻序列的編碼示意圖。該^L頻序列包括至少一個幀周期,由于各個幀周期的分布情況基本一致,因此在本實施例中僅示出了其中一個幀周期的情形。在該視頻序列的一個幀周期中,包括一個I幀和多個P幀,以及插入的以I幀作為參考的RP幀。其中I幀與RP幀之間是一對多的映射關(guān)系,即一個I幀可以為多個RP幀的參考幀,RP幀只需根據(jù)I幀就可以解碼。在本發(fā)明中,RP幀的插入位置根據(jù)視頻序列傳輸過程的丟包率來確定。在本發(fā)明的一個示例方案中,是根據(jù)當前的丟包率設(shè)定RP幀與I幀之間插入的P幀數(shù),從而確定RP幀的插入位置。例如丟包率為0時,可以完全按照原有技術(shù)編碼,不使用RP幀,相當于兩個RP幀間有無數(shù)個P幀;隨著丟包率不斷增大,則不斷減少兩個RP幀之間的P幀數(shù),最低可減小到O,即將所有P幀置換為RP幀。在一個實施例中,可通過事先存儲的數(shù)據(jù)映射表來控制其插入位置,該數(shù)據(jù)映射表包含丟包率與映射幀插入間隔之間的映射關(guān)系,其內(nèi)容如下:丟包率RP幀插入間隔0%不插入RP幀0%-3%93%-5%75%-10%10%-20%320%-50%1>50%0在另一實施例中,是通過連續(xù)函數(shù)來設(shè)定該RP幀的插入位置,該函數(shù)表達式為F(n)=floor(1.6*ln(l/loss)-l)。其中,n表示當前幀距最近的I幀或RP幀的距離,F(xiàn)(n)表示該距離與丟包率之間的函數(shù)關(guān)系,loss為當前丟包率,ln(x)表示取x的自然對數(shù),floor(x)表示取不小于x的最小非負整數(shù)。應(yīng)當說明的是,該函數(shù)還可以是其他形式,本實施例的函數(shù)表達式并不用以限定本發(fā)明的保護范圍。圖5示出了本發(fā)明的一個實施例中對視頻序列進行編碼的方法流程,具體過程如下在執(zhí)行本發(fā)明的所有步驟之前,事先存儲用以設(shè)定RP幀的插入位置的數(shù)據(jù)映射表或者函數(shù)參數(shù)。在步驟S501中,接收端對接收到的視頻序列進行丟包率檢測,并將丟包率反饋至發(fā)送端。在本發(fā)明中,丟包率的檢測可通過多種方式,在一個示例方案中,丟包率檢測是基于視頻序列中各幀的序號及時戳信息進行的,其具體過程包括(1)接收端接收視頻序列的數(shù)據(jù)包,視頻序列中的各幀具有序號及時戳信息,是在發(fā)送時由發(fā)送端所添加的,具體的添加過程可參考現(xiàn)有技術(shù);(2)接收端對數(shù)據(jù)包進行解析,并根據(jù)解析得到的序號及時戳信息計算丟包率;(3)接收端將計算出的丟包率反饋至發(fā)送端。在步驟S502中,根據(jù)丟包率設(shè)定以I幀作為參考的RP幀的插入位置。I幀與RP幀之間是一對多的映射關(guān)系,即一個I幀可以為多個RP幀的參考幀,RP幀只需根據(jù)I幀就可以解碼。在本發(fā)明中,RP幀的插入位置根據(jù)視頻序列傳輸過程的丟包率來確定。在本發(fā)明的一個示例方案中,是4艮據(jù)當前的丟包率動態(tài)設(shè)定RP幀與I幀之間插入的P幀數(shù),從而確定RP幀的插入位置。例如丟包率為0時,可以完全按照原有技術(shù)編碼,不使用RP幀,相當于兩個RP幀間有無數(shù)個P幀;隨著丟包率不斷增大,則不斷減少兩個RP幀之間的P幀數(shù),最低可減小到0,即將所有P幀置換為RP幀。在一個實施例中,可通過事先存儲的數(shù)據(jù)映射表來控制其插入位置,該數(shù)據(jù)映射表包含丟包率與映射幀插入間隔之間的映射關(guān)系,其內(nèi)容如下<table>tableseeoriginaldocumentpage9</column></row><table>在另一實施例中,是通過連續(xù)函數(shù)來設(shè)定該RP幀的插入位置,該函數(shù)如下F(n)=floor(1.6*ln(l/loss)-1);其中,n表示當前幀距最近的I幀或RP幀的距離,F(xiàn)(n)表示該距離與丟包率之間的函數(shù)關(guān)系,loss為當前丟包率,ln(x)表示取x的自然對數(shù),floor(x)表示取不小于x的最小非負整數(shù)。應(yīng)當說明的是,該函數(shù)還可以是其他形式,本實施例的函數(shù)表達式并不用以限定本發(fā)明的保護范圍。在步驟S503中,基于插入的映射幀進行編碼,重構(gòu)視頻序列。該步驟具體包括(1)根據(jù)當前幀的位置判斷其類型是I幀、P幀還是RP幀;(2)根據(jù)判斷結(jié)果,對是I幀、P幀和RP幀分別采取對應(yīng)的編碼才莫式編碼。本發(fā)明的編碼才莫式包括幀內(nèi)編碼模式和幀間編碼模式,其具體過程與現(xiàn)有技術(shù)一致。對于幀內(nèi)編碼才莫式,編碼圖像僅經(jīng)過離散余弦變換(DiscreteCosineTransform,DCT),量化器和比特流編碼器即生成編碼比特流,而不經(jīng)過預(yù)測環(huán)處理,DCT直接應(yīng)用于原始的圖像數(shù)據(jù)。對于幀間編碼模式,原始圖像首先與幀存儲器中的預(yù)測圖像進行比較,計算出運動矢量,由此運動矢量和參考幀生成原始圖像的預(yù)測圖像。而后,將原始圖像與預(yù)測像素差值所生成的差分圖像數(shù)據(jù)進行DCT變換,再經(jīng)過量化器和比特流編碼器生成輸出的編碼比特流。圖6示出了本發(fā)明的另一實施例中對視頻序列進行編碼的方法流程,該方法流程是一個具體應(yīng)用場景中的實施例,具體過程如下在本實施例中執(zhí)行所有步驟之前,事先存儲數(shù)據(jù)映射表來控制RP幀的插入位置,該數(shù)據(jù)映射表包含丟包率與RP幀插入間隔之間的映射關(guān)系,表格內(nèi)容可參考前述圖4及圖5中的表述,此處不再贅述。在步驟S601中,接收端接收視頻圖像序列的數(shù)據(jù)包,通過解析到的各幀的序號及時戳信息檢測其傳輸過程的丟包率為S。假設(shè)本實施例中丟包率S-15%。在步驟S602中,根據(jù)丟包率S,對事先存儲的數(shù)據(jù)映射表進行查詢,可知應(yīng)該設(shè)置每隔3個P幀則插入一個RP幀。在步驟S603中,根據(jù)當前幀的位置判斷其類型是I幀、P幀還是RP頓若為I幀則執(zhí)行步驟S604;若為P幀則執(zhí)行步驟S605;若為RP幀則執(zhí)行步驟S606。在步驟S604中,當前幀為I幀,則采用幀內(nèi)編碼才莫式,也即編碼圖4象僅經(jīng)過DCT,量化器和比特流編碼器即生成編碼比特流,而不經(jīng)過預(yù)測環(huán)處理,DCT直接應(yīng)用于原始的圖像數(shù)據(jù)。在步驟S605中,當前幀為P幀,則以前一幀作為參考并采用幀間編碼模式,也即原始圖像首先與幀存儲器中的預(yù)測圖像進行比較,計算出運動矢量,由此運動矢量和參考幀生成原始圖像的預(yù)測圖像。而后,將原始圖像與預(yù)測像素差值所生成的差分圖像數(shù)據(jù)進行DCT變換,再經(jīng)過量化器和比特流編碼器生成輸出的編碼比特流。在步驟S606中,當前幀為RP幀,則以前一個I幀作為參考并采用幀間編碼才莫式,具體過程與步驟S605中類似,只是參考幀有所區(qū)別。在步驟S607中,判斷是否完成編碼若是,則執(zhí)行步驟S608;若否,則轉(zhuǎn)步驟S603。在步驟S608中,將編碼后的視頻序列發(fā)送至接收端進行解碼。圖7示出了本發(fā)明的又一實施例中對浮見頻序列進4亍編碼的方法流程,該方法流程是一個具體應(yīng)用場景中的實施例,具體過程如下在本實施例中執(zhí)行所有步驟之前,事先設(shè)定好用以控制RP幀的插入位置的函數(shù)表達式中的各參數(shù)值,該函數(shù)表達式為F(n)=floor(1.6*ln(l/loss)-l)。其中,n表示當前幀距最近的I幀或RP幀的距離,F(xiàn)(n)表示該距離與丟包率之間的函數(shù)關(guān)系,loss為當前丟包率,ln(x)表示取x的自然對數(shù),floor(x)表示取不小于x的最小非負整數(shù)。在步驟S701中,接收端接收視頻圖像序列的數(shù)據(jù)包,通過解析到的各幀的序號及時戳信息檢測其傳輸過程的丟包率為S。假設(shè)本實施例中丟包率S-7%。在步驟S702中,發(fā)送端根據(jù)丟包率S和上述函數(shù)表達式計算RP幀插入間隔。在本實施例中,根據(jù)該函數(shù)表達式的計算結(jié)果是應(yīng)該設(shè)置每隔5個P幀則插入一個RP幀。在步驟S703中,才艮據(jù)當前幀的位置判斷其類型是I幀、P幀還是RP幀若為I幀則執(zhí)行步驟S704;若為P幀則執(zhí)行步驟S705;若為RP幀則執(zhí)行步驟S706。在步驟S704中,當前幀為I幀,則采用幀內(nèi)編碼模式,也即編碼圖像僅經(jīng)過DCT,量化器和比特流編碼器即生成編碼比特流,而不經(jīng)過預(yù)測環(huán)處理,DCT直接應(yīng)用于原始的圖像數(shù)據(jù)。在步驟S705中,當前幀為P幀,則以前一幀作為參考并采用幀間編碼模式,也即原始圖像首先與幀存儲器中的預(yù)測圖像進行比較,計算出運動矢量,由此運動矢量和參考幀生成原始圖像的預(yù)測圖像。而后,將原始圖像與預(yù)測像素差值所生成的差分圖像數(shù)據(jù)進行DCT變換,再經(jīng)過量化器和比特流編碼器生成輸出的編碼比特流。在步驟S706中,當前幀為RP幀,則以前一個I幀作為參考并采用幀間編碼模式,具體過程與步驟S705中類似,只是參考幀有所區(qū)別。在步驟S707中,判斷是否完成編碼若是,則執(zhí)行步驟S708;若否,則轉(zhuǎn)步驟S703。在步驟S708中,將編碼后的視頻序列發(fā)送至接收端進行解碼。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。權(quán)利要求1.一種視頻序列的生成方法,所述視頻序列包括至少一個幀周期,所述幀周期包括一個幀內(nèi)編碼幀和多個幀間預(yù)測幀,其特征在于,所述幀周期還包括至少一個以所述幀內(nèi)編碼幀作為參考的映射幀,其在幀周期中的插入位置根據(jù)當前視頻序列傳輸過程的丟包率設(shè)定。2、根據(jù)權(quán)利要求l所述的視頻序列的生成方法,其特征在于,所述映射幀的插入位置由事先存儲的數(shù)據(jù)映射表進行控制,所述數(shù)據(jù)映射表包含丟包率與映射幀插入間隔之間的映射關(guān)系。3、根據(jù)權(quán)利要求l所述的視頻序列的生成方法,其特征在于,所述映射幀的插入位置由以下函數(shù)表達式確定F(n)=floor(1.6*ln(l/loss)-1);其中,n表示當前幀距最近的幀內(nèi)編碼幀或映射幀的距離,loss為當前丟包率,ln(x)表示取x的自然對數(shù),floor(x)表示取不小于x的最小非負整數(shù)。4、一種對視頻序列進行編碼的方法,其特征在于,包括以下步驟A.接收端對接收到的視頻序列進行丟包率檢測,并將丟包率反饋至發(fā)送端;置;C.發(fā)送端基于插入的映射幀進行編碼,重構(gòu)視頻序列。5、根據(jù)權(quán)利要求4所述的對視頻序列進行編碼的方法,其特征在于,所述步驟A中的丟包率檢測是基于視頻序列中各幀的序號及時戳信息進行的。6、根據(jù)權(quán)利要求5所述的對視頻序列進行編碼的方法,其特征在于,所述步驟A進一步包括Al.接收端接收視頻序列的數(shù)據(jù)包,所述視頻序列中的各幀具有序號及時戳信息;A2.接收端對數(shù)據(jù)包進行解析,并根據(jù)解析得到的序號及時戳信息計算丟包率;A3.接收端將計算出的丟包率反饋至發(fā)送端。7、根據(jù)權(quán)利要求4所述的對視頻序列進行編碼的方法,其特征在于,所述步驟B進一步包括發(fā)送端根據(jù)事先存儲的數(shù)據(jù)映射表控制映射幀的插入位置,所述數(shù)據(jù)映射表包含丟包率與映射幀插入間隔之間的映射關(guān)系。8、根據(jù)權(quán)利要求4所述的對視頻序列進行編碼的方法,其特征在于,所述步驟B進一步包括發(fā)送端根據(jù)函數(shù)表達式確定映射幀的插入位置,該函數(shù)表達式為<formula>formulaseeoriginaldocumentpage3</formula>其中,n表示當前幀距最近的幀內(nèi)編碼幀或映射幀的距離,loss為當前丟包率,ln(x)表示取x的自然對數(shù),floor(x)表示取不小于x的最小非負整數(shù)。9、根據(jù)權(quán)利要求4所述的對視頻序列進行編碼的方法,其特征在于,所述步驟C進一步包括Cl.根據(jù)當前幀的位置判斷其類型是幀內(nèi)編碼幀、幀間預(yù)測幀還是映射幀;C2.根據(jù)判斷結(jié)果,對幀內(nèi)編碼幀、幀間預(yù)測幀和映射幀分別采取對應(yīng)的編碼才莫式編碼。10、根據(jù)權(quán)利要求9所述的對視頻序列進行編碼的方法,其特征在于,所述步驟C2進一步包括若當前幀為幀內(nèi)編碼幀,則采用幀內(nèi)編碼模式進行編碼;若當前幀為幀間預(yù)測幀,則以前一幀作為參考并采用幀間編碼模式進行編碼;若當前幀為映射幀,則以前一個幀內(nèi)編碼幀作為參考并采用幀間編碼模式進行編碼。全文摘要本發(fā)明涉及通信領(lǐng)域,提供了一種視頻序列的生成及對視頻序列進行編碼的方法。所述對視頻序列進行編碼的方法包括以下步驟A.接收端對接收到的視頻序列進行丟包率檢測,并將丟包率反饋至發(fā)送端;B.發(fā)送端根據(jù)所述丟包率設(shè)定以幀內(nèi)編碼幀作為參考的映射幀的插入位置;C.發(fā)送端基于插入的映射幀進行編碼,重構(gòu)視頻序列。本發(fā)明在對視頻序列進行編碼的過程中,與現(xiàn)有技術(shù)的區(qū)別在于根據(jù)視頻序列傳輸過程中的丟包率設(shè)定以幀內(nèi)編碼幀作為參考的映射幀的插入位置,并基于插入的映射幀進行編碼,從而既保證了視頻圖像質(zhì)量,也降低了延時,保證了視頻圖像的流暢。文檔編號H04N7/50GK101287120SQ20081006743公開日2008年10月15日申請日期2008年5月22日優(yōu)先權(quán)日2008年5月22日發(fā)明者健何申請人:騰訊科技(深圳)有限公司