青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

AAC 格式分析

轉載自:http://blog.chinaunix.net/uid-26084833-id-3416600.html

一SADTS格式:

       ADTS的全稱是Audio Data Transport Stream。是AAC音頻的傳輸流格式。

       AAC音頻格式在MPEG-2ISO-13318-7 2003)中有定義。AAC后來又被采用到MPEG-4標準中。

       1. adts_sequence()

       {

              while (nextbits() == syncword)

              {

                     adts_frame();

              }

       }

 

       2. adts_frame()

       {

              adts_fixed_header();

              adts_variable_header();

              if (number_of_raw_data_blocks_in_frame == 0)

              {

                     adts_error_check();

                     raw_data_block();

              } else

              {

                     adts_header_error_check();

                     for (i = 0; i <= number_of_raw_data_blocks_in_frame; i++)

                     {

                             raw_data_block();

                             adts_raw_data_block_error_check();

                     }

              }

       }

 

       3. adts_fixed_header()

       {

              syncword: 12 bslbf

              ID: 1 bslbf

              layer: 2 uimsbf

              protection_absent: 1 bslbf

              profile: 2 uimsbf

              sampling_frequency_index: 4 uimsbf

              private_bit: 1 bslbf

              channel_configuration: 3 uimsbf

              original/copy: 1 bslbf

              home: 1 bslbf

       }

      

       adts_variable_header()

       {

              copyright_identification_bit: 1 bslbf

              copyright_identification_start: 1 bslbf

              frame_length: 13 bslbf

              adts_buffer_fullness: 11 bslbf

              number_of_raw_data_blocks_in_frame: 2 uimsfb

       }

 

       詳細說明下ADTS頭的重要數據部分:

       syncword 同步字The bit string 1111 1111 1111,說明一個ADTS幀的開始。

       ID    MPEG 標示符, 設置為1.

       layer Indicates which layer is used. Set to ‘00’

       protection_absent 表示是否誤碼校驗

       profile 表示使用哪個級別的AAC,如01 Low Complexity(LC)--- AACLC

       sampling_frequency_index 表示使用的采樣率下標

       sampling_frequency_index sampling frequeny [Hz]

       0x0       96000

       0x1           88200

       0x2          64000

       0x3          48000

       0x4          44100

       0x5          32000

       0x6            24000

       0x7          22050

       0x8          16000

       0x9          2000

       0xa          11025

       0xb          8000

       0xc          reserved

       0xd          reserved

       0xe          reserved

       0xf           reserved

       channel_configuration 表示聲道數

       frame_length 一個ADTS幀的長度包括ADTS頭和raw data block.

       adts_buffer_fullness  0x7FF 說明是碼率可變的碼流

       number_of_raw_data_blocks_in_frame

      表示ADTS幀中有number_of_raw_data_blocks_in_frame + 1AAC原始幀.

       所以說number_of_raw_data_blocks_in_frame == 0 表示說ADTS幀中有一個AAC數據塊并不是說沒有。(一個AAC原始幀包含一段時間內1024個采樣及相關數據)

二 封裝AAC為ADTS幀 

       一個AAC原始數據塊長度是可變的,對原始幀加上ADTS頭進行ADTS 的封裝,就形成了ADTS幀。通常我們將得到的AAC原始幀進行封裝后寫入文件,用常用的播放器如千千靜聽即可播放,這是個驗證AAC數據是否正確的方法。   

       進行封裝前,需要了解相關參數,如采樣率,聲道數,原始數據塊的長度等。下面把AAC原始數據幀加工為ADTS幀,據相關參數填寫組成7字節的ADTS頭。

       The ADTS header is defined below -    

       unsigned int obj_type = 0;    

       unsigned int num_data_block = frame_length / 1024; 

       // include the header length also     

       frame_length += 7;   

       /* We want the same metadata */    

       /* Generate ADTS header */    

       if(adts_header == NULL) return;    

       /* Sync point over a full byte */    

       adts_header[0] = 0xFF;    

       /* Sync point continued over first 4 bits + static 4 bits    

      * (ID, layer, protection)*/    

       adts_header[1] = 0xF9;    

       /* Object type over first 2 bits */    

       adts_header[2] = obj_type << 6;//    

       /* rate index over next 4 bits */    

       adts_header[2] |= (rate_idx << 2);    

       /* channels over last 2 bits */    

       adts_header[2] |= (channels & 0x4) >> 2;   

       /* channels continued over next 2 bits + 4 bits at zero */    

       adts_header[3] = (channels & 0x3) << 6;    

       /* frame size over last 2 bits */    

       adts_header[3] |= (frame_length & 0x1800) >> 11;    

       /* frame size continued over full byte */    

       adts_header[4] = (frame_length & 0x1FF8) >> 3;    

       /* frame size continued first 3 bits */    

       adts_header[5] = (frame_length & 0x7) << 5;    

       /* buffer fullness (0x7FF for VBR) over 5 last bits*/    

       adts_header[5] |= 0x1F;    

       /* buffer fullness (0x7FF for VBR) continued over 6 first bits + 2 zeros     

       * number of raw data blocks */

       adts_header[6] = 0xFC;// one raw data blocks .

       adts_header[6] |= num_data_block & 0x03; //Set raw Data blocks.

 

       CMMB中,采用AAC音頻壓縮標準,默認狀況下,編碼參數如下:雙聲道,采樣率24KHZ,幀長變長,碼流可變碼率的碼流,一般采用的AAC profile

AAC-LC。將從CMMB復用幀解析的一個AAC原始幀封裝為ADTS幀的方法如下:

uint8 aac_buf[ADTS_FRAME_SIZE]={0x0ff,0x0f9,0x058,0x80,0,0x1f,0xfc};

       從上述7個字節分析音頻參數如下:

       synword--0xfff

       ID:0x1--- 1--- MPEG2 identifier,

       LAYER--00

       protection_absent ---01

       profile--01   1 Low Complexity profile (LC) AAC-LC

       smaping_freuency_index---0110-->0x06--->采樣率24KHZ 

       channel_configuration --- aac_buf[3] = 0x08---->2---->雙聲道。。

       adts_buffer_fullness--->0x7ff 碼率可變的碼流 

       現插入長度參數 wDataLen;

       void OnAudioAacFrame(byte* data, uint16 wDataLen)

       {

              unsigned int num_data_block = wDataLen / 1024; 

              uint16 frame_Length; 

              frame_Length = wDataLen + 7;     

               /* frame size over last 2 bits */         

              aac_buf[3] |= (frame_length & 0x1800) >> 11;// the upper 2 bit         

              /* frame size continued over full byte */         

              aac_buf[4] = (frame_length & 0x1FF8) >> 3;// the middle 8 bit        

              /* frame size continued first 3 bits */         

              aac_buf[5] |= (frame_length & 0x7) << 5;//the last 3 bit 

              aac_bug[6] |= num_data_block & 0x03; //Set raw Data blocks.

              emcpy(&aac_buf[7],data,wDataLen);

              //形成一個ADTS幀寫入文件。

              fwrite(aac_buf,wDataLen+7,sizeof(byte),f_audio);

       }

三 LATM格

       LATM 的全稱為Low-overhead MPEG-4 Audio TransportMultiplex(低開銷音頻傳輸復用),是MPEG-4 AAC制定的一種高效率的碼流傳輸方式,MPEG-2 TS 流也采用LATM 作為AAC 音頻碼流的封裝格式之 LATM格式也以幀為單位,主要由AudioSpecificConfig(音頻特定配置單元)與音頻負載組成。

AudioSpecificConfig 描述了一個LATM 幀的信息,音頻負載主要由PayloadLengthInfo(負載長度信息)和PayloadMux(負載凈荷)組成。

       AudioSpecificConfig 信息可以是帶內傳,也可以是帶外傳。所謂帶內傳,就是指每一個LATM 幀,都含有一個AudioSpecificConfig 信息;而帶外傳,

則每一個LATM幀都不含有AudioSpecificConfig 信息,而通過其他方式把AudioSpecificConfig信息發送到解碼端,由于AudioSpecificConfig 信息一般是不變的,所以只需發送一次即可。由此可見,AudioSpecificConfig 信息采用帶內傳輸可適應音頻編碼信息不斷變化的情況,而采用帶外傳輸,可以節省音頻傳輸碼率。帶內或帶外傳,由muxconfigPresent 標志位決定。例如流媒體應用中,muxconfigPresent 可設置為0,這樣LATM幀中將不含有AudioSpecificConfig信息,LATM幀通過RTP包發送出去,AudioSpecificConfig 可通過SDP文件一次性傳送到解碼端。

       AudioSpecificConfig 主要參數

       numSubFrames  子幀的數目

       numProgram    復用的節目數

       numLayer      復用的層數

       frameLengthType  負載的幀長度類型,包括固定長度與可變長度

       audioObjectType   音頻對象類型

       samplingFrequency   采樣率

       channelConfiguration   聲道配置

       音頻負載由若干子幀組成,每個子幀由PayloadLengthInfoPayloadMux組成,與ADTS幀凈荷一樣,音頻負載主要包含原始幀數據。 

       AAC打包成TS流通常有兩種方式,分別是先打包成ADTSLATMADTS的每一幀都有個幀頭,在每個幀頭信息都一樣的狀況下,會有很大的冗余。LATM格式具有很大的靈活性,每幀的音頻配置單元既可以帶內傳輸,有可以帶外傳輸。正因為如此,LATM不僅適用于流傳輸還可以用于RTP傳輸,RTP傳輸時,若音頻數據配置信息是保持不變,可以先通過SDP會話先傳輸StreamMuxConfigAudioSpecificConfig)信息,由于LATM流由一個包含了一個或多個音頻幀的audioMuxElements序列組成。一個完整或部分完整的audioMuxElement可直接映射到一個RTP負載上。 

       下面是一個audoMuxEmlemt

       AudioMuxElement(muxConfigPresent)

       { 

              if (muxConfigPresent)  

              { 

                     useSameStreamMux;    

                     if (!useSameStreamMux)       

                            StreamMuxConfig();

             }

 

              if (audioMuxVersionA == 0) 

              { 

                     for (i = 0; i <= numSubFrames; i++)    

                     {

                             PayloadLengthInfo();       

                            PayloadMux();   

                    }.  

              }

       }

  

       可以很簡單的把ADTS幀轉換為LATM幀,根據ADTS頭的信息,生成StreamMuxConfig,將ADTS中的原始幀提取出來,前面加上PayloadLengthInfo做為LATM的音頻幀。按照上述格式打包生成AudioMuxElement,作為RTP的負載傳輸.

 

四、 CMMB中的LATM 

 

       CMMB中音頻壓縮標準為AAC時,默認采用LATM封裝。StreamMuxConfig采用帶外傳輸。StreamMuxConifg中的若干默認參數如下:

       audioMuxVersion:0標志流語法版本號為0

       allStreamSameTiemFraming1,標志復用到PayLoadMux()中的所有負載共享一個共同的時基

       umSubFrames:0  表示只有一個音頻子幀. 

       audioObjectType:2 AAC-LC freameLengthType:0 幀長度是可變的

       latmBufferFullness:0xFF 碼率可變的碼流

 

參考:

[1]ISO/IEC 13818-7(2003 MPEG-2 AAC, Second Edition)

[2] ISO13818-72006 Fourth edition AAC

[3] RFC 3016 (rfc3016) - RTP Payload Format for MPEG-4 Audio-Visual Streams

[4] AAC音頻壓縮編碼標準的ADTSLATM格式分析

[5] GYZ 234-2008 CMMB復用實施指南




posted on 2013-02-05 13:49 楊粼波 閱讀(3289) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美不卡视频一区发布| 欧美日本一区二区视频在线观看| 午夜久久一区| 欧美亚洲综合久久| 午夜精品一区二区三区电影天堂| 亚洲欧美一区二区精品久久久| 亚洲一区二区三区免费在线观看| 亚洲一区在线观看免费观看电影高清| 亚洲午夜国产一区99re久久 | 欧美日韩中文字幕日韩欧美| 欧美日韩免费观看一区二区三区| 欧美精品一卡二卡| 欧美视频免费| 国产精品美女主播在线观看纯欲| 国产欧美一区二区三区久久人妖| 国产一区欧美日韩| 在线日韩日本国产亚洲| 亚洲美女中文字幕| 亚洲一级在线| 久久久久www| 欧美激情一二区| avtt综合网| 香蕉免费一区二区三区在线观看| 久久国产综合精品| 欧美激情亚洲激情| 国产精品二区三区四区| 国产亚洲a∨片在线观看| 亚洲国产高清aⅴ视频| 9i看片成人免费高清| 欧美一区二区在线| 欧美aa国产视频| 日韩天天综合| 久久er精品视频| 欧美激情亚洲精品| 国产精品一区毛片| 亚洲激情av| 亚洲欧美日韩精品在线| 麻豆精品网站| 一本色道久久99精品综合| 欧美在线黄色| 欧美连裤袜在线视频| 国产亚洲一级高清| 日韩一级欧洲| 久久久91精品国产| 亚洲理论在线观看| 久久av最新网址| 欧美日韩在线视频一区| 国内精品久久久久久久97牛牛| 99精品久久久| 久久亚洲午夜电影| 一区二区三区国产在线| 久久人人97超碰国产公开结果| 欧美色视频日本高清在线观看| 国内成+人亚洲+欧美+综合在线| 一本色道久久综合亚洲精品高清| 久久漫画官网| 夜夜嗨av色综合久久久综合网| 久久精品国产亚洲高清剧情介绍 | 欧美成人中文| 亚洲一区二区视频在线| 欧美高清在线一区| 狠狠色狠狠色综合日日五| 亚洲欧美电影在线观看| 亚洲国产欧美一区二区三区同亚洲| 亚洲一区二区三区在线看| 欧美激情网站在线观看| 好看不卡的中文字幕| 亚洲中字在线| 最近中文字幕mv在线一区二区三区四区| 性视频1819p久久| 欧美午夜精品电影| 99精品热6080yy久久| 欧美高清视频www夜色资源网| 亚洲欧美日韩专区| 国产精品久久久久77777| 亚洲美女啪啪| 欧美激情一区二区三区不卡| 久久九九免费| 国产一区二区看久久| 香港久久久电影| 一级日韩一区在线观看| 欧美片第1页综合| 亚洲日本中文字幕区| 欧美freesex8一10精品| 久久久久国产精品麻豆ai换脸| 国产日本欧美一区二区三区在线| 亚洲综合色激情五月| 日韩亚洲欧美成人| 欧美日韩伦理在线免费| 999在线观看精品免费不卡网站| 亚洲福利视频二区| 噜噜噜噜噜久久久久久91| 精品成人国产| 免费视频一区二区三区在线观看| 久久成人精品| 黑人中文字幕一区二区三区| 久久蜜桃香蕉精品一区二区三区| 欧美在线free| 狠狠狠色丁香婷婷综合激情| 久久亚洲精品一区| 久久青草福利网站| 亚洲第一天堂av| 欧美国产一区二区三区激情无套| 老鸭窝毛片一区二区三区| 亚洲国产免费| 亚洲人成人一区二区三区| 欧美精品123区| 中文亚洲字幕| 亚洲天堂av电影| 国产日韩欧美综合在线| 久久久欧美精品sm网站| 久久手机精品视频| 91久久精品国产91性色tv| 欧美激情第8页| 欧美乱妇高清无乱码| 亚洲伊人网站| 午夜精品理论片| 在线电影院国产精品| 亚洲国产精品t66y| 欧美视频日韩视频在线观看| 性xx色xx综合久久久xx| 久久精品一区二区| 亚洲日本欧美天堂| 亚洲免费av片| 国产欧美日韩一区| 男人的天堂亚洲在线| 欧美日本韩国| 性感少妇一区| 久久亚洲风情| 亚洲一区二区在线看| 欧美综合激情网| 亚洲免费观看在线视频| 亚洲一级一区| 亚洲国产精品久久久久秋霞影院 | 欧美一级淫片aaaaaaa视频| 欧美在线观看视频| 亚洲免费成人av| 亚洲欧美日韩综合一区| 亚洲高清一区二| 一区二区日本视频| 在线不卡中文字幕| 一区二区精品在线观看| 狠狠色综合网| 亚洲美女性视频| 精品成人久久| 99综合在线| 在线观看日韩av电影| 夜夜嗨一区二区| 在线免费观看日本一区| 一区二区免费看| 亚洲电影免费观看高清完整版| 一本大道久久a久久综合婷婷| 黄色综合网站| 一区二区三区福利| 亚洲国产一区二区三区在线播| 亚洲视频一区| 亚洲日韩视频| 欧美在线视频日韩| 亚洲一区制服诱惑| 欧美大片一区| 久久久之久亚州精品露出| 欧美日本在线一区| 美女黄网久久| 国产精品一区二区三区观看| 亚洲国产精品视频一区| 国产综合在线看| 一区二区三区国产盗摄| 亚洲毛片av| 裸体一区二区| 久久久福利视频| 国产精品人成在线观看免费 | 欧美日韩国产小视频在线观看| 可以免费看不卡的av网站| 国产精品色婷婷久久58| 亚洲麻豆视频| 亚洲欧洲一区| 久久久久久一区二区| 欧美在线你懂的| 国产精品xvideos88| 亚洲精品久久久久久久久久久久久| 伊人久久亚洲美女图片| 久久国产精品第一页| 欧美伊久线香蕉线新在线| 国产精品xxx在线观看www| 亚洲乱码国产乱码精品精| 亚洲精品久久久久久久久久久| 久久久www成人免费无遮挡大片 | 宅男噜噜噜66国产日韩在线观看| 久久综合久久久| 老鸭窝亚洲一区二区三区| 国产手机视频精品| 亚洲欧美三级在线| 欧美一乱一性一交一视频| 国产精品国产精品国产专区不蜜| 亚洲精品少妇网址| 日韩午夜三级在线| 欧美黄色大片网站| 亚洲激情视频| 99国产精品| 欧美视频国产精品|