專利名稱:一種基于amr音頻幀的rtp快速聚包方法
一種基于AMR音頻幀的RTP快速聚包方法
技術(shù)領(lǐng)域:
本發(fā)明涉及無線流媒體領(lǐng)域,特別涉及一種基于AMR音頻幀的RTP快速聚包方法。背景技術(shù):
AMR,全稱Adaptive Multi-Rate (自適應多碼率),主要用于移動設(shè)備的音頻編 碼,壓縮比比較大。它分為 AMR-WB(Adaptive Multi-Rate wide band)禾Π AMR-NB(Adaptive Multi-Rate narrow band)兩種類型,AMR音頻幀數(shù)據(jù)格式包括幀頭和語音數(shù)據(jù)兩部分。流媒體是指以流方式在網(wǎng)絡(luò)中傳送音頻、視頻和多媒體文件的媒體形式。而為了 支持網(wǎng)絡(luò)的實時傳輸服務,流媒體音視頻流都是以RTP的封裝的形式傳輸發(fā)送。目前對各 數(shù)據(jù)RTP的封裝傳輸方案都有對應的專門的RFC文檔。對AMR音頻幀來說,由于每幀數(shù)據(jù) 所占字節(jié)數(shù)比較少,如果對每幀數(shù)據(jù)進行RTP打包發(fā)送,相當于每幀數(shù)據(jù)加上了 12字節(jié)的 RTP頭進行傳輸,這樣將大大增加網(wǎng)絡(luò)的額外負擔,不利于節(jié)省帶寬。因此有必要將多個音 頻幀的訪問單元串聯(lián)起來聚合封裝到一個RTP包中,在不影響MTU(Maximum Transmission Unit最大傳輸單元,是指一種通信協(xié)議的某一層上面所能通過的最大數(shù)據(jù)報大小,以字節(jié) 為單位。MTU參數(shù)通常與通信接口有關(guān),如網(wǎng)絡(luò)接口卡、串口等有關(guān))的IP分片的情況下。
發(fā)明內(nèi)容本發(fā)明目的在于提出一種將盡可能的多個AMR音頻幀封裝成一個RTP包的聚包方法。為了實現(xiàn)以上目的,本發(fā)明提出一種基于AMR音頻幀的RTP快速聚包方法,具體如 下步驟1 接收一個AMR音頻幀,取音頻幀頭,分離FT位,得出FT值,判斷音頻編碼 類型,根據(jù)音頻編碼類型及對應的FT值查表確認編碼模式,并獲取對應編碼模式的AMR音 頻幀長度值L ;步驟2 根據(jù)音頻幀長度L確認一個RTP封裝包可聚包的總的音頻幀數(shù)量N,步驟3 創(chuàng)建RTP包,填充RTP頭信息和PayloadHeader信息,其中RTP頭信息中M 位置1,PT值由SDP獲??;步驟4 :AMR音頻幀頭信息處理,將該音頻幀中的幀頭和語音數(shù)據(jù)分離,幀頭中幀 編碼模式位FT位保持不變,最低兩位補0位清0,對于沒遭到破壞的幀,幀質(zhì)量指示位Q位 設(shè)置為1,遭破壞的置為0;步驟5 將AMR音頻幀幀頭和語音數(shù)據(jù)信息填充至RTP包,步驟6:循環(huán)接收AMR音頻幀,每接收到音頻數(shù)據(jù)即重復執(zhí)行上述步驟4、5,直到接 收到N個音頻幀為止,將所述N個音頻幀封裝至所述RTP包。相對現(xiàn)有技術(shù),本方法可以大大節(jié)省對網(wǎng)絡(luò)帶寬的占用,減少網(wǎng)絡(luò)開銷,提高網(wǎng)絡(luò) 處理能力,減少頻繁數(shù)據(jù)發(fā)送造成的高丟包率。
圖1所示為打包前的AMR音頻幀幀頭的格式;圖2所示為包含三幀音頻的RTP包音頻幀頭的示意圖;
圖3所示為包含三幀音頻RTP包示意圖。
具體實施方式AMR,全稱Adaptive Multi-Rate,主要用于移動設(shè)備的音頻編碼,壓縮比比較大。 它分為AMR-WB (Adaptive Multi-Rate wide band)禾口AMR-NB (AdaptiveMulti-Rate narrow band)兩種類型。其AMR音頻幀數(shù)據(jù)格式包括幀頭+語音數(shù)據(jù),其中幀頭為一個字節(jié),音頻 幀幀頭實際為六個bits,但基于實際應用的需要,一般將其定義為1個字節(jié),后面兩位為補 0位。其具體定義如圖1所示其中,P 填充位lbit,一般設(shè)置為0。Q:lbit,為幀質(zhì)量指示器。如果為0表明幀被損壞。FT (編碼模式)4bits,可查表求得該模式下的幀率和幀長度。以下是Amr-nb主要的一些編碼模式以及對應的數(shù)據(jù)速率及每幀數(shù)據(jù)的長度TypeRateframe IenMode O-AMR 4. 75-Encodes at 4. 75kbit/s, 13Mode I-AMR 5. 15-Encodes at 5. 15kbit/s, 14Mode 2-AMR 5. 9-Encodes at 5. 9kbit/s,16Mode 3-AMR 6. 7-Encodes at 6. 7kbit/s,18Mode 4-AMR 7. 4-Encodes at 7.4kbit/s,20Mode 5-AMR 7.95-Encodes at 7. 95kbit/s, 21Mode 6-AMR 10. 2-Encodes at 10. 2kbit/s, 27Mode 7-AMR 12. 2-Encodes at 12. 2kbit/s, 32以下是Amrib主要的一些編碼模式TypeRateframe IenMode 0-AMR-ffB 6. 60-Encodes at 6. 60kbit/s,18Mode 1-AMR-ffB 8. 85-Encodes at 8.85kbit/s,24Mode 2-AMR-ffB 12. 65-Encodes at 12. 65kbit/s, 33Mode 3-AMR-ffB 14. 25-Encodes at 14. 25kbit/s, 37Mode 4-AMR-ffB 15. 85-Encodes at 15. 85kbit/s, 41Mode 5-AMR-ffB 18. 25-Encodes at 18.25kbit/s, 47Mode 6-AMR-ffB 19. 85-Encodes at 19. 85kbit/s, 51Mode 7-AMR-ffB 23. 05-Encodes at 23. 05kbit/s, 59本發(fā)明核心思想在于設(shè)計一種基于AMR音頻的RTP快速聚包方法。因為AMR數(shù)據(jù) 不同編碼類型和模式對應的語音數(shù)據(jù)幀長度不同,對于采用UDP的數(shù)據(jù)承載方式,該方法 可以直接針對不同編碼類型和模式的AMR數(shù)據(jù)進行聚包,并針對各AMR數(shù)據(jù)類型和編碼模 式大小,在不超過一個MTU單元包長的情況下,通過計算,可盡可能多的將AMR音頻數(shù)據(jù)封 裝在一個RTP包中進行傳輸。
聚包原則少于一個MTU單元長度的數(shù)據(jù),需對其進行聚包傳輸,以節(jié)省網(wǎng)絡(luò)帶 寬,提高網(wǎng)絡(luò)處理能力。AMR音頻幀的封裝完全遵循RFC3267文檔標準,一般是將幾個音頻 幀封裝成一個RTP包,該RTP包總體長度不能超過一個MTU單元大小,對于多個音頻幀的封 裝,其封裝格式為<formula>formula see original document page 6</formula>當需打包的AMR音頻幀數(shù)目為η時,又可以表示為RTP頭+Payload header (1字節(jié))+幀頭1+幀頭2+· · · +幀頭η+語音數(shù)據(jù)1+語音 數(shù)據(jù)2+... +語音數(shù)據(jù)η。其中Payload Header 的前 4bits 是 CMR(Codec Mode Request),根據(jù) RFC3267 文 檔規(guī)范,如果終端沒有定義對何種模式的優(yōu)先選擇性接收,CMR值必須設(shè)置為15,其他位為 0,因此PayloadHeader的值為OXFO。Payload Data指的是所有音頻幀數(shù)據(jù),包括各音頻的 幀頭和幀數(shù)據(jù)。本發(fā)明RTP包封裝過程如下1、接收AMR音頻幀,取音頻幀頭,分離FT位,得出FT值,然后按照音頻編碼類型 (編碼類型在SDP中判斷,AMR表示NB類型,AMR-WB表示W(wǎng)B編碼)的不同,根據(jù)音頻編碼 類型及對應的FT值查表確認編碼模式,并獲取對應的AMR音頻幀長度值L。2、根據(jù)音頻幀長度L確認一個RTP封裝包可聚包的總的音頻幀數(shù)量N,計算公式 為N = (MTU 長度-RTP 包頭長度-PayloadHeader 長度)/L0例如MTU長度取1400字節(jié),L選擇為AMR-NB編碼模式ModeO所對應的13字節(jié), RTP包頭長度為12字節(jié),AMR負載幀頭PayloadHeader長度為1字節(jié),則計算出N為106。3、創(chuàng)建RTP包,長度為一個MTU單元,填充RTP頭信息和PayloadHeader信息,其 中RTP頭信息中M位置1,PT值由SDP獲取,序列號SeqNo、時間戳TimeStamp和SSRC必須 與RTSP信令中描述一致。PayloadHeader信息的值為0XF0。4、幀頭信息處理,將該音頻幀中的幀頭和語音數(shù)據(jù)分離,幀頭中幀編碼模式位FT 位保持不變,最低兩位補ο位清0,對于沒遭到破壞的幀,幀質(zhì)量指示位Q位設(shè)置為1,遭破 壞的置為O ;5、將AMR音頻幀的幀頭和語音數(shù)據(jù)信息的RTP包填充。將下述數(shù)據(jù)按順序直接存 入RTP包的相應位置。AMR音頻幀的幀頭填充位置RTP 包頭長度 +PayloadHeader 長度 + (i_l)幀頭長度1個字節(jié)AMR音頻幀的語音數(shù)據(jù)填充位置RTP 包頭長度 +PayloadHeader 長度 +N+ (i_l) X L幀數(shù)據(jù)長度(L-I)個字節(jié)其中i表示需聚包的音頻幀序號,底標從1開始,直到N(由步驟2計算出的一個 RTP封裝包可聚包的總的音頻幀數(shù)量),L表示AMR音頻幀語音數(shù)據(jù)長度值。如果幀數(shù)據(jù)序號小于N,則表示該幀不是RTP包里面的最后一幀數(shù)據(jù),幀頭中的填 充位P位置1,表示后面有接連續(xù)的音頻幀,幀數(shù)據(jù)序號為N的幀是最后一個音頻,其幀頭最高位P位則清0,表示音頻幀頭的結(jié)束。如圖2所示為包含三幀音頻的RTP包音頻幀頭示意圖,分為幀頭1、幀頭2與幀頭3,其中幀頭格式與圖1所示的打包前的AMR音頻幀幀頭的格 式完全一樣,僅在P位的具體取值有差別。6、循環(huán)接收AMR音頻幀,每接收到音頻數(shù)據(jù)即重復執(zhí)行步驟4,5,直到接收到N個 音頻幀為止。這樣,一個完整的RTP包就打好了。如圖3所示為包含三幀音頻RTP包示意 圖圖中RTP(12)表示RTP包頭占用12字節(jié),PH(I)表示PayloadHeader占用1字節(jié),幀頭 1 (1)、幀頭2 (1)、幀頭3 (1)分別表示各幀頭占用1字節(jié),語音數(shù)據(jù)1 (L)、語音數(shù)據(jù)2 (L)、語 音數(shù)據(jù)3 (L)表示各語音數(shù)據(jù)占用L字節(jié),例如L取AMR-NB編碼模式ModeO所對應的13字 節(jié)。本發(fā)明可以直接針對不同編碼類型和模式的AMR數(shù)據(jù)進行聚包,并針對各AMR數(shù) 據(jù)類型和編碼模式大小,在不超過一個MTU單元包長的情況下,計算出一個RTP包所能負載 的最大音頻幀數(shù),盡可能多的將AMR音頻數(shù)據(jù)封裝在一個RTP包中進行傳輸,且通過對AMR 數(shù)據(jù)進行直接的RTP包填充,無需耗費任何其他額外的內(nèi)存資源,可以在減少網(wǎng)絡(luò)開銷的 同時達到高效的目的。在上述實施例中,僅對本發(fā)明進行了示范性描述,但是本領(lǐng)域技術(shù)人員在不脫離 本發(fā)明所保護的范圍和精神的情況下,可根據(jù)不同的實際需要設(shè)計出各種實施方式。
權(quán)利要求
一種基于AMR音頻幀的RTP快速聚包方法,具體步驟如下步驟1接收AMR音頻幀,取音頻幀頭,分離FT位,得出FT值,判斷音頻編碼類型,根據(jù)音頻編碼類型及對應的FT值查表確認編碼模式,并獲取對應編碼模式的AMR音頻幀長度值L;步驟2根據(jù)音頻幀長度L確認一個RTP封裝包可聚包的總的AMR音頻幀數(shù)量N,步驟3創(chuàng)建RTP包,填充RTP頭信息和PayloadHeader信息,其中RTP頭信息中M位置1,PT值由SDP獲取;步驟4對AMR音頻幀頭信息處理,將該音頻幀中的幀頭和語音數(shù)據(jù)分離,幀頭中幀編碼模式位FT位保持不變,最低兩位補0位清0,對于沒遭到破壞的幀,幀質(zhì)量指示位Q位設(shè)置為1,遭破壞的置為0;步驟5將AMR音頻幀幀頭和語音數(shù)據(jù)信息填充至RTP包,步驟6循環(huán)接收AMR音頻幀,每接收到音頻數(shù)據(jù)即重復執(zhí)行上述步驟4、5,直到接收到N個音頻幀為止,完成所述N個音頻幀封裝至所述RTP包。
2.如權(quán)利要求1所述的基于AMR音頻幀的RTP快速聚包方法,其特征在于步驟1中所 述編碼類型在會話描述信息中SDP判斷,AMR或AMR-NB表示NB編碼類型,AMR-WB表示W(wǎng)B 編碼類型。
3.如權(quán)利要求2所述的基于AMR音頻幀的RTP快速聚包方法,其特征在于步驟2中 確定N的計算公式如下N = (MTU 長度-RTP 包頭長度-PayloadHeader 長度)/L其中MTU長度為網(wǎng)絡(luò)最大傳輸單元,單位為字節(jié),RTP包頭長度為12字節(jié),AMR負載頭 PayloadHeader長度為1字節(jié)。
4.如權(quán)利要求1所述的基于AMR音頻幀的RTP快速聚包方法,其特征在于步驟3中, PT值由SDP獲取,SeqNo, TimeStamp和SSRC與RTSP信令中描述一致。
5.如權(quán)利要求3所述的基于AMR音頻幀的RTP快速聚包方法,其特征在于步驟5進 一步包括51.確定AMR音頻幀頭在RTP包中的填充位置,將幀頭按順序直接存入RTP包的相應 填充位置;52.確定AMR音頻幀語音數(shù)據(jù)在RTP包中的填充位置,將語音數(shù)據(jù)按順序直接存入 RTP包的相應填充位置。
6.如權(quán)利要求5所述的基于AMR音頻幀的RTP快速聚包方法,其特征在于步驟51, AMR音頻幀頭在RTP包中的填充位置確定方法如下RTP 包頭長度 +PayloadHeader 長度 +(i_l)步驟52AMR音頻幀語音數(shù)據(jù)在RTP包中的填充位置確定方法如下RTP 包頭長度 +PayloadHeader 長度 +N+(i_l) XL其中RTP包頭長度為12字節(jié),PayloadHeader長度為1字節(jié),(i_l)單位為字節(jié),i表 示需聚包的音頻幀序號,底標從1開始,直到N。
7.如權(quán)利要求6所述的基于AMR音頻幀的RTP快速聚包方法,其特征在于如果幀數(shù) 據(jù)序號i小于N,則表示該幀不是RTP包里面的最后一幀數(shù)據(jù),RTP包中幀頭中的填充位P 位置1,表示后面有接連續(xù)的音頻幀,幀數(shù)據(jù)序號為N的幀是最后一個音頻,其幀頭最高位P位則清0,表示音頻幀頭的結(jié)束。
8.如權(quán)利要求3所述的基于AMR音頻幀的RTP快速聚包方法,其特征在于 PayloadHeader 信息的值為 OXFO。
9.如權(quán)利要求3所述的基于AMR音頻幀的RTP快速聚包方法,其特征在于MTU長度取 1400字節(jié),L選擇為AMR-NB編碼模式ModeO所對應的13字節(jié)。
全文摘要
本發(fā)明涉及一種基于AMR音頻幀的RTP快速聚包方法,步驟如下1接收AMR音頻幀,取音頻幀頭,確認編碼模式,并獲取對應編碼模式的AMR音頻幀長度值L;2根據(jù)音頻幀長度L確認一個RTP封裝包可聚包的總的AMR音頻幀數(shù)量N;3創(chuàng)建RTP包,填充RTP頭信息和PayloadHeader信息;4對AMR音頻幀頭信息處理,將該音頻幀中的幀頭和語音數(shù)據(jù)分離;5將AMR音頻幀幀頭和語音數(shù)據(jù)信息填充至RTP包,6循環(huán)接收AMR音頻幀,每接收到音頻數(shù)據(jù)即重復執(zhí)行上述步驟4、5,直到接收到N個音頻幀為止,其中音頻幀頭和幀數(shù)據(jù)統(tǒng)稱為PayloadData信息。本發(fā)明方法可有效減少網(wǎng)絡(luò)開銷,減少頻繁數(shù)據(jù)發(fā)送造成的高丟包率,可大大提高流媒體業(yè)務的服務質(zhì)量。
文檔編號H04L1/00GK101814973SQ20101010539
公開日2010年8月25日 申請日期2010年1月29日 優(yōu)先權(quán)日2010年1月29日
發(fā)明者歐志 申請人:深圳市融創(chuàng)天下科技發(fā)展有限公司