專利名稱:一種視頻編解碼方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及視頻編解碼技術(shù),特別涉及一種視頻編解碼方法及裝置。
背景技術(shù):
目前,利用RTP (Real-time Transport Protocol,實(shí)時(shí)傳送協(xié)議)進(jìn)行實(shí)時(shí)視頻 傳輸是業(yè)界最普遍使用的方法,但是由于RTP是基于UDP (User Datagram Protocol,用
戶數(shù)據(jù)包協(xié)議)的,它提供的是簡(jiǎn)單不可靠的數(shù)據(jù)傳送服務(wù),因此不可避免地會(huì)經(jīng)常出 現(xiàn)網(wǎng)絡(luò)丟包現(xiàn)象。一旦丟包現(xiàn)象發(fā)生,目前通常采用的處理方法有如下兩種繼續(xù)發(fā)送 數(shù)據(jù)或停止發(fā)送數(shù)據(jù)。若采用第一種方法,繼續(xù)將后續(xù)的視頻數(shù)據(jù)送入解碼器解碼并顯 示,這時(shí)圖像有運(yùn)動(dòng),但是很可能出現(xiàn)馬賽克的現(xiàn)象;另外如果采用第二種方法,即暫 時(shí)停止后續(xù)受影響數(shù)據(jù)的接收或解碼,這樣一來雖然不會(huì)出現(xiàn)馬賽克現(xiàn)象,但是由于數(shù) 據(jù)傳輸停止了,因此視頻也就會(huì)有短暫的停頓。一個(gè)GOP (Group of Pictures,畫面組)就是一組連續(xù)的畫面,MPEG編碼將
畫面(即幀)分為I、P、B三種,I是內(nèi)部編碼幀,P是前向預(yù)測(cè)幀,B是雙向內(nèi)插幀。 如果要進(jìn)行實(shí)時(shí)視頻傳輸,只需利用到I幀中的IDR幀和P幀兩種幀類型,其中,IDR幀 使用幀內(nèi)預(yù)測(cè)編碼,它不需依賴于其它任何幀,H.264標(biāo)準(zhǔn)中會(huì)定期產(chǎn)生IDR幀,在視 頻丟包的情況下可以用來同步圖像;P幀利用前向預(yù)測(cè)編碼,編碼效率和壓縮比都比IDR 幀要高,但是P幀需要利用到處于同一 G0P內(nèi)并且在它之前的P幀作參考進(jìn)行編碼,如 果當(dāng)前的P幀丟失很可能造成后續(xù)P幀的解碼偏差,從而導(dǎo)致馬賽克現(xiàn)象的出現(xiàn)。在這 種情況下(即如果發(fā)生丟包現(xiàn)象),一定要等到IDR幀的出現(xiàn)才能同步圖像。
發(fā)明內(nèi)容
為解決上述問題,本發(fā)明提供一種視頻編解碼方法及裝置,能夠動(dòng)態(tài)選擇P幀 的參考幀,不需要總是利用之前的P幀作為參考幀,在不穩(wěn)定的網(wǎng)絡(luò)狀況下能夠盡可能 的提高視頻的流暢性和質(zhì)量。本發(fā)明的一種視頻編解碼方法,包括以下步驟 步驟S1,接收反饋RTCP消息包;
步驟S2,根據(jù)RTCP消息包獲取丟包率;
步驟S3,計(jì)算參考幀,首先將P幀分為P*幀以及P’幀
a),每個(gè)P’幀選擇在該P(yáng)’幀之前并且在同一畫面組G0P之內(nèi)的P幀作為參考幀;
b),P*幀的參考幀的選擇具體如下
根據(jù)預(yù)先設(shè)定的不同的丟包率所對(duì)應(yīng)的跨越規(guī)則,計(jì)算出一個(gè)畫面組G0P內(nèi)的所有 P*幀以及對(duì)應(yīng)的P*幀的參考幀,上述跨越規(guī)則遵循如下約定跨越的程度隨著丟包率的 增大而增大;
步驟S4,根據(jù)步驟S3中得到的參考幀進(jìn)行編碼; 步驟S5,進(jìn)行解碼操作后輸出顯示,并反饋RTCP消息包。
本發(fā)明還提供一種視頻編解碼裝置,包括編碼端以及解碼端;
編碼端用于接收解碼端的反饋RTCP消息包,獲取丟包率,根據(jù)預(yù)定規(guī)則計(jì)算參考 幀,編碼后將數(shù)據(jù)進(jìn)行發(fā)送;根據(jù)預(yù)定規(guī)則計(jì)算參考幀的過程具體如下將P幀分為P* 幀以及P’幀a),每個(gè)P’幀選擇在該P(yáng)’幀之前并且在同一畫面組GOP之內(nèi)的P幀 作為參考幀;b),根據(jù)預(yù)先設(shè)定的不同的丟包率所對(duì)應(yīng)的跨越規(guī)則,計(jì)算出一個(gè)畫面組 GOP內(nèi)的所有P*幀以及對(duì)應(yīng)的P*幀的參考幀,上述跨越規(guī)則遵循如下約定跨越的程 度隨著丟包率的增大而增大;
解碼端用于將接收到的數(shù)據(jù)進(jìn)行解碼操作后輸出顯示,并反饋RTCP消息包給編碼端。從以上方案可以看出,由于參考幀根據(jù)網(wǎng)絡(luò)狀況的好壞采取不同程度向前跨越 的機(jī)制,P幀不再全部利用同一 GOP內(nèi)并且在它之前的P幀作為參考幀以進(jìn)行編碼,因 此有效降低了由于當(dāng)前P幀的丟失所造成的后續(xù)P幀的解碼偏差以致出現(xiàn)馬賽克現(xiàn)象的概 率;且參考幀的前向跨越的程度隨著丟包率的增大而增大,增大了丟包的恢復(fù)概率。另 外,當(dāng)發(fā)生丟包現(xiàn)象后,也不必再按照通常情況下一定要等到IDR幀的出現(xiàn)才能同步圖 像,一定程度上解決了 P幀的應(yīng)用局限性。而且本發(fā)明的視頻編解碼方法及裝置,能夠 有效增強(qiáng)碼流抗丟包的性能,在不穩(wěn)定的網(wǎng)絡(luò)帶寬下能夠盡可能的提高視頻流暢性和質(zhì) 量。
圖1為本發(fā)明一種視頻編解碼方法流程圖2為具體實(shí)施方式
中動(dòng)態(tài)選擇P參考幀的實(shí)例示意圖。
具體實(shí)施例方式本發(fā)明提供了一種視頻編解碼方法及裝置,能夠解決現(xiàn)有視頻編解碼技術(shù)中P 幀總是需要利用在它之前的P幀作參考幀以進(jìn)行編碼,以致當(dāng)前P幀的丟失可能造成的后 續(xù)P幀的解碼偏差的問題。下面結(jié)合附圖詳細(xì)描述本發(fā)明的技術(shù)方案,如圖1所示為一種視頻編解碼方法 的處理流程圖。步驟S1,由于使用RTP協(xié)議來傳輸視頻,那么編碼端會(huì)收到來自解碼端的反饋 RTCP消息包,RTCP消息包類型主要有
SR發(fā)送報(bào)告,當(dāng)前活動(dòng)發(fā)送者發(fā)送、接收統(tǒng)計(jì); RR接收?qǐng)?bào)告,非活動(dòng)發(fā)送者接收統(tǒng)計(jì); SDES 源描述項(xiàng),包括CNAME ; BYE 表示結(jié)束; APP 應(yīng)用特定函數(shù)。我們這里用到了來自解碼端的RR消息包,從消息包中我們可以得出解碼端應(yīng)收 數(shù)據(jù)包和實(shí)際收數(shù)據(jù)包的信息。步驟S2,根據(jù)反饋RTCP消息包中的應(yīng)收數(shù)據(jù)包和實(shí)收數(shù)據(jù)包的信息計(jì)算當(dāng)前 解碼端的丟包率,具體公式如下(應(yīng)收數(shù)據(jù)包-實(shí)際收數(shù)據(jù)包)/應(yīng)收數(shù)據(jù)包*100%。
步驟S3,計(jì)算一個(gè)GOP內(nèi)所有參考幀的位置(即序號(hào))。為了描述方便,我 們定義其中一種P幀為P*幀,除了 P*幀以外的其它所有P幀稱為P’幀,P’幀選擇參 考幀的方法與現(xiàn)有技術(shù)相同,即選擇在該P(yáng)’幀之前的并且在同一 GOP內(nèi)的P幀作為參 考幀,但是如果P幀總是利用在它之前的P幀作參考幀以進(jìn)行編碼,會(huì)導(dǎo)致當(dāng)前P幀的丟 失可能造成的后續(xù)P幀的解碼偏差。因此本發(fā)明引入P*幀的概率,提供了一種動(dòng)態(tài)選擇 P*幀的參考幀的方法,P*幀的參考幀的選擇過程具體如下
根據(jù)預(yù)先設(shè)定的不同的丟包率所對(duì)應(yīng)的跨越規(guī)則,計(jì)算出一個(gè)GOP內(nèi)的所有P*幀以 及對(duì)應(yīng)的P*幀的參考幀,上述跨越規(guī)則遵循如下約定跨越的程度隨著丟包率的增大而 增大。作為一個(gè)較好的實(shí)施例,在滿足它所必須遵循的規(guī)則的前提下,上述的跨越規(guī) 則可以如下設(shè)置
當(dāng) 0%<= X <5% 時(shí)F={i|0<i<N,且 i Mod 3=0},且 M=i_3 ; 當(dāng) 5%<= x <10% 時(shí)F={i|0<i<N,且 i Mod 5=0},且 M=i_5 ; 當(dāng) 10%<= x <15% 時(shí)F={i|0<i<N,且 i Mod 7=0},且 M=i_7 ; 當(dāng) 15%<= x <20% 時(shí)F={i|0<i<N,且 i Mod 9=0},且 M=i_9 ; 當(dāng) 20%<=x 時(shí)F={i|0<i<N,且 iModll=0},且 M=i_ll;
其中,N表示一個(gè)GOP的長(zhǎng)度,x表示丟包率的大小,F(xiàn)表示P*幀的幀號(hào)集合,M 表示P*幀對(duì)應(yīng)的參考幀的幀號(hào)。例如,假設(shè)步驟S2中得到的丟包率的大小為5%,GOP長(zhǎng)度N為30,即x落 在[5%,10%)這個(gè)區(qū)間,根據(jù)上述公式,可以計(jì)算P*幀出現(xiàn)的幀序?yàn)?、10、15、20、 25,相應(yīng)P*幀所對(duì)應(yīng)的參考幀的幀號(hào)0、5、10、15、20。若丟包率x的大小為16%,而GOP的長(zhǎng)度仍N為30,可知x落在[15%,20%) 這個(gè)區(qū)間,按照上述的公式,可以計(jì)算出P*幀出現(xiàn)的幀號(hào)為9、18、27,相應(yīng)P*幀所對(duì) 應(yīng)的參考幀的幀號(hào)0、9、18。由上可知,本發(fā)明所設(shè)定的跨越規(guī)則是根據(jù)網(wǎng)絡(luò)狀況的好壞采取參考幀不同程 度向前跨越的機(jī)制,且參考幀的前向跨越的程度隨著丟包率的增大而增大,這樣設(shè)置是 為了有效增大丟包的恢復(fù)概率。步驟S4,根據(jù)獲取到的參考幀進(jìn)行編碼。如圖2所示,第0幀是IDR幀,進(jìn)行 幀內(nèi)預(yù)測(cè)編碼,無需參考幀;第1幀到第4幀都為P’幀,使用的參考幀都指向前一幀, 第5幀為P*幀,使用的參考幀為第0幀,即IDR幀。第6幀到第8幀都為P’幀,使 用的參考幀都指向前一幀,第9幀為P*幀,使用第5幀作為參考幀……本實(shí)施例中,采 用代表最新技術(shù)水平的視頻編碼格式之一的H.264標(biāo)準(zhǔn)進(jìn)行編碼,每編完一幀就將數(shù)據(jù)通 過RTP協(xié)議傳輸?shù)浇獯a端。步驟S5,解碼端進(jìn)行解碼操作后輸出顯示,并反饋RTCP消息包給編碼端,以 便編碼端能夠及時(shí)進(jìn)行相應(yīng)調(diào)整。本發(fā)明還提供一種視頻編解碼裝置,包括編碼端以及解碼端;
編碼端的功能是接收解碼端的反饋RTCP消息包,獲取丟包率,根據(jù)預(yù)定規(guī)則計(jì)算參 考幀,編碼后將數(shù)據(jù)進(jìn)行發(fā)送;根據(jù)預(yù)定規(guī)則計(jì)算參考幀的過程具體如下將P幀分為 P*幀以及P’幀a),每個(gè)P’幀選擇在該P(yáng)’幀之前并且在同一 GOP之內(nèi)的P幀作為參考幀;b),根據(jù)預(yù)先設(shè)定的不同的丟包率所對(duì)應(yīng)的跨越規(guī)則,計(jì)算出一個(gè)GOP內(nèi)的所 有P*幀以及對(duì)應(yīng)的P*幀的參考幀,上述跨越規(guī)則遵循如下約定跨越的程度隨著丟包率 的增大而增大。解碼端的功能是將接收到的數(shù)據(jù)進(jìn)行解碼操作后輸出顯示,并反饋RTCP消息包 給編碼端。通過上述方案可以看出,由于參考幀可以根據(jù)當(dāng)前網(wǎng)絡(luò)狀況的好壞采取不同程 度向前跨越的機(jī)制,P幀不再全部利用同一GOP內(nèi)并且在它之前的P幀作為參考幀以進(jìn)行 編碼,因此有效降低了由于當(dāng)前P幀的丟失所造成的后續(xù)P幀的解碼偏差以致出現(xiàn)馬賽克 現(xiàn)象的概率;且參考幀的前向跨越的程度隨著丟包率的增大而增大,增大了丟包的恢復(fù) 概率。另外,當(dāng)發(fā)生丟包現(xiàn)象后,即就算參考幀之前的P幀出現(xiàn)丟包,只要參考幀正確 接收后就能夠繼續(xù)播放視頻,這樣就不必再按照通常情況下一定要等到IDR幀的出現(xiàn)才 能同步圖像了,一定程度上解決了P幀的應(yīng)用局限性,使P幀在網(wǎng)絡(luò)傳輸中的應(yīng)用范圍更 廣。而且本發(fā)明的視頻編解碼方法及裝置,由于采用動(dòng)態(tài)選擇參考幀的方法,能夠有效 增強(qiáng)碼流抗丟包的性能,在不穩(wěn)定的網(wǎng)絡(luò)帶寬下能夠盡可能的提高視頻流暢性和質(zhì)量。以上所述的本發(fā)明實(shí)施方式,并不構(gòu)成對(duì)本發(fā)明保護(hù)范圍的限定。任何在本發(fā) 明的精神和原則之內(nèi)所作的修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的權(quán)利要求保 護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種視頻編解碼方法,其特征在于,包括以下步驟 步驟Si,接收反饋RTCP消息包;步驟S2,根據(jù)所述RTCP消息包獲取丟包率;步驟S3,計(jì)算參考幀,首先將P幀分為P*幀以及P’幀a),所述每個(gè)P’幀選擇在該P(yáng)’幀之前并且在同一畫面組GOP之內(nèi)的P幀作為參 考幀;b),所述P*幀的參考幀的選擇具體如下根據(jù)預(yù)先設(shè)定的不同的丟包率所對(duì)應(yīng)的跨越規(guī)則,計(jì)算出一個(gè)畫面組GOP內(nèi)的所有 P*幀以及對(duì)應(yīng)的P*幀的參考幀,所述跨越規(guī)則遵循如下約定跨越的程度隨著所述丟包 率的增大而增大;步驟S4,根據(jù)步驟S3中得到的參考幀進(jìn)行編碼;步驟S5,進(jìn)行解碼操作后輸出顯示,并反饋所述RTCP消息包。
2.根據(jù)權(quán)利要求1所述的視頻編解碼方法,其特征在于,步驟S2具體為所述RTCP 消息包中包括應(yīng)收數(shù)據(jù)包和實(shí)收數(shù)據(jù)包的信息,所述獲取丟包率的公式如下(應(yīng)收數(shù) 據(jù)包_實(shí)收數(shù)據(jù)包)/應(yīng)收數(shù)據(jù)包*100%。
3.根據(jù)權(quán)利要求2所述的視頻編解碼方法,其特征在于,步驟S3中所述跨越規(guī)則具 體如下當(dāng) 0%<= χ <5% 時(shí)F={i|0<i<N,且 i Mod 3=0},且 M=i_3 ; 當(dāng) 5%<= χ <10% 時(shí)F={i|0<i<N,且 i Mod 5=0},且 M=i_5 ; 當(dāng) 10%<= χ <15% 時(shí)F={i|0<i<N,且 i Mod 7=0},且 M=i_7 ; 當(dāng) 15%<= χ <20% 時(shí)F={i|0<i<N,且 i Mod 9=0},且 M=i_9 ; 當(dāng) 20%<=x 時(shí)F={i|0<i<N,且 iModll=0},且 M=i_ll;其中,N表示一個(gè)畫面組GOP的長(zhǎng)度,χ表示所述丟包率的大小,F(xiàn)表示所述P*幀 的幀號(hào)集合,M表示所述P*幀對(duì)應(yīng)的參考幀的幀號(hào)。
4.根據(jù)權(quán)利要求1所述的視頻編解碼方法,其特征在于,步驟S4中采用H.264標(biāo)準(zhǔn) 進(jìn)行編碼。
5.—種視頻編解碼裝置,其特征在于,包括編碼端以及解碼端;所述編碼端用于接收所述解碼端的反饋RTCP消息包,獲取丟包率,根據(jù)預(yù)定的規(guī) 則計(jì)算參考幀,編碼后將數(shù)據(jù)進(jìn)行發(fā)送;根據(jù)所述規(guī)則計(jì)算參考幀的具體過程如下將 P幀分為P*幀以及P’幀a),所述每個(gè)P’幀選擇在該P(yáng)’幀之前并且在同一畫面組 GOP之內(nèi)的P幀作為參考幀;b),根據(jù)預(yù)先設(shè)定的不同的丟包率所對(duì)應(yīng)的跨越規(guī)則,計(jì) 算出一個(gè)畫面組GOP內(nèi)的所有P*幀以及對(duì)應(yīng)的P*幀的參考幀,所述跨越規(guī)則遵循如下 約定跨越的程度隨著所述丟包率的增大而增大;所述解碼端用于將所述數(shù)據(jù)進(jìn)行解碼操作后輸出顯示,并反饋所述RTCP消息包。
全文摘要
本發(fā)明提供一種視頻編解碼方法及裝置,本發(fā)明的方法包括以下步驟接收反饋RTCP消息包;獲取丟包率;計(jì)算參考幀,首先將P幀分為P*幀以及P’幀a),每個(gè)P’幀選擇在該P(yáng)’幀之前并且在同一畫面組GOP之內(nèi)的P幀作為參考幀;b),根據(jù)預(yù)先設(shè)定的不同的丟包率所對(duì)應(yīng)的跨越規(guī)則,計(jì)算出一個(gè)GOP內(nèi)的所有P*幀以及對(duì)應(yīng)的P*幀的參考幀,上述跨越規(guī)則遵循如下約定跨越的程度隨著丟包率的增大而增大;根據(jù)得到的參考幀進(jìn)行編碼;解碼后輸出顯示,并反饋RTCP消息包。本發(fā)明的方法及裝置,能夠動(dòng)態(tài)選擇P幀的參考幀,不需要總是利用之前的P幀作為參考幀,在不穩(wěn)定的網(wǎng)絡(luò)狀況下能夠盡可能的提高視頻的流暢性和質(zhì)量。
文檔編號(hào)H04N21/6437GK102014286SQ20101059856
公開日2011年4月13日 申請(qǐng)日期2010年12月21日 優(yōu)先權(quán)日2010年12月21日
發(fā)明者石金川 申請(qǐng)人:廣東威創(chuàng)視訊科技股份有限公司