專利名稱::一種魯棒性的音頻解碼方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及數(shù)字音頻領(lǐng)域,尤其涉及一種具有魯棒性的音頻解碼方法。
背景技術(shù):
:現(xiàn)代多媒體技術(shù)不僅要滿足在存儲(chǔ)器和播放機(jī)上進(jìn)行存儲(chǔ)和播放的要求,而且還要能夠在各種網(wǎng)絡(luò)上進(jìn)行傳輸。如在AVS音頻標(biāo)準(zhǔn)中,解碼算法就規(guī)定了兩種碼流格式用于存儲(chǔ)的AASF(Avs—Audio—Storage—Format)格式和用于傳輸?shù)腁ATF(Avs_Audio_Transport_Format)格式。本發(fā)明下文所涉及的均為AATF格式的碼流。在AVS音頻傳輸碼流語法中,每一幀音頻碼流都可以作為隨機(jī)訪問接入點(diǎn),每一幀都有自己的同步字信息和其它解碼所需要的邊信息。為了保證碼流中的同步字信息不與音頻碼流信息相混淆,即保證一幀碼流中不出現(xiàn)與同步字相同的碼字,編碼器在編碼時(shí)在該碼字上加入了兩個(gè)冗余位來l吏它與同步字不相同。在AVS參考音頻解碼器中,解碼算法采用了串行隊(duì)列流水的方法,即由緩沖區(qū)Buf從外部接口將比特流讀入緩沖區(qū)中,碼流在Buf緩沖區(qū)中采用了先進(jìn)先出隊(duì)列的方法將比特流送給參考音頻解碼器進(jìn)行解碼,該過程如圖1所示。由于碼流在網(wǎng)絡(luò)上傳輸時(shí)經(jīng)常發(fā)生網(wǎng)絡(luò)的丟包現(xiàn)象,造成碼流的丟失,如丟失同步字或其它碼字。由此以上所述的參考解碼器存在兩個(gè)顯著的缺點(diǎn)其一是,該解碼器要求讀入緩沖區(qū)Buf的第一個(gè)碼字必須是同步字,如果同步字丟失,則緩沖區(qū)Buf就不能讀入碼流,解碼器就會(huì)中止解碼,后果是不能實(shí)現(xiàn)隨機(jī)訪問接入;其二是,碼流從外部接口進(jìn)入Buf緩沖區(qū)是串行讀取方法,一幀中任何一個(gè)碼字的丟失都會(huì)造成解碼器的中止,導(dǎo)致解碼器的可靠性較差。
發(fā)明內(nèi)容本發(fā)明的目的在于提供一種魯棒性的音頻解碼方法。該方法可以使解碼器實(shí)現(xiàn)對碼流的隨才幾訪問4矣入,同時(shí)在碼流局部丟失的情況下,還可以保i正解碼器繼續(xù)進(jìn)行解碼,前一幀碼流丟失不會(huì)影響到后一幀的解碼,提高了解碼器的穩(wěn)定性和可靠性。本發(fā)明的目的是這樣實(shí)現(xiàn)的一種魯棒性的音頻解碼方法,用于對外部接口輸出的碼流進(jìn)行解碼,所述碼流由碼字組成,且其中間隔插有同步字,所述方法包括以下步驟步驟l、從外部接口讀入碼字,判讀所讀碼字是否為同步字;步驟2、將讀到的同步字和下一個(gè)同步字之間的碼流讀入緩沖區(qū);步驟3、在緩沖區(qū)中去除編碼時(shí)加入的冗余信息;步驟4、將緩沖區(qū)的碼流送入解碼器中進(jìn)行解碼;步驟5、重復(fù)步驟l、2、3、4,直到碼流完全結(jié)束。以上所述步驟1中同步字的判斷還包括以下步驟步驟11、比較當(dāng)前讀入碼字與同步字的值,當(dāng)讀入碼字與同步字的值相等,則將讀入碼字送入緩沖區(qū);當(dāng)讀入的碼字與同步字的值不相等,則拋棄當(dāng)前碼字;步驟12、繼續(xù)讀入下個(gè)一碼字,重復(fù)步驟ll,直到第二個(gè)同步字出現(xiàn)。以上所述步驟2中所述緩沖區(qū)的大小等于音頻信號編碼后所有幀中碼流最長的幀的比特流的字節(jié)數(shù)。所述步驟2中兩個(gè)相鄰?fù)阶珠g的碼流長度應(yīng)小于等于緩沖區(qū)的大??;當(dāng)兩個(gè)相鄰?fù)阶珠g的碼流長度大于緩沖區(qū)的大小時(shí),則存在同步字丟失現(xiàn)象,讀入緩沖區(qū)時(shí)應(yīng)將溢出碼流拋棄。與參考算法中采用的串行隊(duì)列流水的方法相比,本發(fā)明的魯棒性音頻解碼方法不僅可以實(shí)現(xiàn)碼流的隨機(jī)訪問接入;而且也提高了解碼過程的可靠性。本發(fā)明的一種魯棒性的音頻解碼方法由以下的實(shí)施例及附圖給出。圖1為AVS參考音頻解碼器中將碼流讀入緩沖區(qū)的方法;圖2為本發(fā)明的一種魯棒性的音頻解碼方法的流程圖。具體實(shí)施例方式以下將結(jié)合圖2示意的流程圖對本發(fā)明的一種魯棒性的音頻解碼方法作進(jìn)一步的詳細(xì)描述。本實(shí)施例中需要進(jìn)行音頻解碼的碼流如下Stream碼流所示,其中碼流中每一幀對應(yīng)的同步字為0x001;Stream中加下劃線部分表示由于網(wǎng)絡(luò)丟包而丟失的碼字;從開始的兩個(gè)字節(jié)0xD2和0x94可以看出它們不是一幀的同步字,說明該幀同步字已丟失。Stream:0xD2,0x94,0x00,0x12,0x10,OxlF,OxFE,0x79,0xC2,0x05,<table>tableseeoriginaldocumentpage5</column></row><table>在準(zhǔn)備階段先進(jìn)行參數(shù)的定義和初始化定義兩個(gè)無符號字節(jié)變量并賦初值SynO-l,Synl=l;定義外部接口函數(shù)socket();該socket()函數(shù)依次從外部接口讀入一個(gè)字節(jié);定義緩沖區(qū)Buf,緩沖區(qū)的大小是SIZE,其中SIZE是經(jīng)過統(tǒng)計(jì)得到編碼最長的一幀音頻信號的比特流字節(jié)數(shù),將緩沖區(qū)Buf中的值初始化為0。Sl、通過外部接口函數(shù)socket()讀入碼字,判斷所讀碼字是否為同步字;SI1、通過socket()讀入一個(gè)字節(jié)0xD2賦值給Synl,此時(shí)SynO=l,Synl=0xD2,(SynO《4)+(Synl》4)不等于同步字0x001(其中符號"《"和"》"表示向左移位和向右移位),說明沒有找到同步字;拋棄SynO的值,將Synl賦值給Syn0;S12、繼續(xù)從socket()中讀取下一個(gè)字節(jié)0x94賦值癥會(huì)Synl,此時(shí)Syn0=0xD2Synl=0x94,重復(fù)步驟Sll的判斷方法,即(Syn(X〈4)+(Syn^〉4)是否等于同步字0x001,找到第一個(gè)同步字后將Syn0的值賦值給Buf[O],直到找到了兩個(gè)同步字后進(jìn)入步驟S2。S2、將讀到的同步字和下一個(gè)同步字之間的碼流讀入緩沖區(qū);將Synl賦值給SynO,從socket()中讀取下一個(gè)字節(jié)賦值給Synl,然后再判斷(8丫1104)+(8丫1114)是否等于同步字0x001,如果是,則進(jìn)入步驟S3,如果否,則將SynO的值賦值給Buftl],并將Synl的值賦值給SynO,依次類推將相鄰兩個(gè)同步字之間的碼字賦值給Buf緩沖區(qū)。如果兩個(gè)同步字之間碼字的個(gè)數(shù)大于SIZE,說明存在中途網(wǎng)絡(luò)丟包,同步字丟失的現(xiàn)象,應(yīng)將兩個(gè)同步字之間超過緩沖區(qū)SIZE字節(jié)的碼字拋棄。經(jīng)過該步驟后讀入Buf緩沖區(qū)的碼為[OxOO,0x12,0x10,OxlF,OxFE,0x79,0xC2,0x05,Oxll,0x91,OxA5,0x20,OxF5,0xE8,0xD8,0x34,OxCE,0x7B,Ox5D,,0x50,0x76,Ox8C,0x48,0x66,0x97,OxD5,OxCC,0x16,0x7B,OxCF,0xE9,OxFB,0x99,OxF8,0xF9,0x35,0x80,OxC8,OxlD,Ox5D,0x61,0x3F,0x31,0xD4,OxE3,0x88,OxDC,0x49,0x57,0x60,OxD5,0xA7,OxOB,0xC8,0x26,0xC4,OxCC,0x4B,0xA8,0x77,0x38,OxOD,0x84,0x38,0x67,OxFD,0x9B,0x16,0x28,0x60,0x97,0x22,0xA9,0x4D,0xC6,0x37,OxD3,0x84,OxEl,Ox3F,0x4F,OxEE,0x4C,0x50,0x45,0x35,0x6A,0x0A,OxEC,0xC6,0x35,OxD3,0xF2,OxE3,0x65,OxFF,OxE3,OxAD,Ox5C,0x50,0x3C,0x83,0x93,0x62,0x60,OxFD,0x86,0xF8,OxCC,0xD4,0x7A,OxEF,0xD7],進(jìn)入步驟S3。53、根據(jù)AVS音頻算法,在緩沖區(qū)中去除編碼時(shí)加入的冗余信息;54、將緩沖區(qū)的碼流送入解碼器中進(jìn)行解碼;55、重復(fù)步驟l、2、3、4,直到碼流完全結(jié)束。通過本實(shí)施例的魯棒性解碼的音頻信號,雖然得不到不丟包時(shí)的音頻信號,但是即使丟包存在,仍然可以實(shí)現(xiàn)解碼,不至于解碼中斷;并且解碼誤差也不會(huì)擴(kuò)散到下一幀中。本實(shí)施例驗(yàn)證了本發(fā)明所提供解碼方法的隨機(jī)訪問接入;對下劃線部分碼流丟失的情況的解碼過程也驗(yàn)證了本發(fā)明所提供解碼方法的可靠性。權(quán)利要求1、一種魯棒性的音頻解碼方法,用于對外部接口輸出的碼流進(jìn)行解碼,所述碼流由碼字組成,且其中間隔插有同步字,其特征在于,所述方法包括以下步驟步驟1、從外部接口讀入碼字,判讀所讀碼字是否為同步字;步驟2、將讀到的同步字和下一個(gè)同步字之間的碼流讀入一緩沖區(qū);步驟3、在緩沖區(qū)中去除編碼時(shí)加入的冗余信息;步驟4、將緩沖區(qū)的碼流送入一解碼器中進(jìn)行解碼;步驟5、重復(fù)步驟1、2、3、4,直到碼流完全結(jié)束。2、如權(quán)利要求1所述的一種魯棒性的音頻解碼方法,其特征在于,所述步驟l中同步字的判斷包括以下步驟步驟ll、比較當(dāng)前讀入碼字與同步字的值,當(dāng)讀入碼字與同步字的值相等,則將讀入碼字送入緩沖區(qū);當(dāng)讀入的碼字與同步字的值不相等,則拋棄當(dāng)前碼字;步驟12繼續(xù)讀入下個(gè)一碼字,重復(fù)步驟ll,直到第二個(gè)同步字出現(xiàn)。3、如權(quán)利要求1所述的一種魯棒性的音頻解碼方法,其特征在于,所述步驟2中緩沖區(qū)的大小等于音頻信號編碼后所有幀中碼流最長的幀的比特流的字節(jié)數(shù)。4、如權(quán)利要求1所述的一種魯棒性的音頻解碼方法,其特征在于,所述步驟2中兩個(gè)相鄰?fù)阶珠g的碼流長度應(yīng)小于等于緩沖區(qū)的大?。划?dāng)兩個(gè)相鄰?fù)阶珠g的碼流長度大于緩沖區(qū)的大小時(shí),則存在同步字丟失現(xiàn)象,讀入緩沖區(qū)時(shí)應(yīng)將溢出碼流拋棄。全文摘要本發(fā)明提供了一種魯棒性的音頻解碼方法。所述方法通過對讀入的碼字逐個(gè)判斷是否為同步字,尋找相鄰兩個(gè)同步字;并將相鄰?fù)阶珠g的碼流送入緩沖區(qū);然后在緩沖區(qū)中將編碼加入的冗余信息去除;接著將緩沖區(qū)的碼流送入解碼器實(shí)現(xiàn)解碼,重復(fù)以上過程,直至所有碼流結(jié)束。本發(fā)明提供的解碼方法克服了參考算法中存在的丟包導(dǎo)致解碼中斷的現(xiàn)象,實(shí)現(xiàn)了解碼過程的隨機(jī)訪問接入,并保證了解碼過程的可靠性。文檔編號H03M7/30GK101183874SQ20071017226公開日2008年5月21日申請日期2007年12月13日優(yōu)先權(quán)日2007年12月13日發(fā)明者譚建國申請人:上海廣電(集團(tuán))有限公司中央研究院