欢迎来到天天文库
浏览记录
ID:40520463
大小:49.50 KB
页数:6页
时间:2019-08-04
《AAC以ADTS格式封装的分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、AACADTS格式分析一、ADTS格式:ADTS的全称是AudioDataTransportStream。是AAC音频的传输流格式。AAC音频格式在MPEG-2(ISO-13318-72003)中有定义。AAC后来又被采用到MPEG-4标准中。1.adts_sequence(){while(nextbits()==syncword){adts_frame();}}2.adts_frame(){adts_fixed_header();adts_variable_header();if(number_of_raw
2、_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;12bslbfID;1bslbflayer;2uims
3、bfprotection_absent;1bslbfprofile;2uimsbfsampling_frequency_index;4uimsbfprivate_bit;1bslbfchannel_configuration;3uimsbforiginal/copy;1bslbfhome;1bslbf}adts_variable_header(){6copyright_identification_bit;1bslbfcopyright_identification_start;1bslbfframe_len
4、gth;13bslbfadts_buffer_fullness;11bslbfnumber_of_raw_data_blocks_in_frame;2uimsfb}详细说明下ADTS头的重要数据部分:syncword同步字Thebitstring‘111111111111’,说明一个ADTS帧的开始。IDMPEG标示符,设置为1.layerIndicateswhichlayerisused.Setto‘00’protection_absent表示是否误码校验profile表示使用哪个级别的AAC,如01Low
5、Complexity(LC)---AACLCsampling_frequency_index表示使用的采样率下标sampling_frequency_indexsamplingfrequeny[Hz]0x0960000x1882000x2640000x3480000x4441000x5320000x6240000x7220500x8160000x920000xa110250xb80000xcreserved0xdreserved0xereserved0xfreservedchannel_configurati
6、on表示声道数frame_length一个ADTS帧的长度包括ADTS头和rawdatablock.adts_buffer_fullness0x7FF说明是码率可变的码流number_of_raw_data_blocks_in_frame表示ADTS帧中有number_of_raw_data_blocks_in_frame+1个AAC原始帧.所以说number_of_raw_data_blocks_in_frame==0表示说ADTS帧中有一个AAC数据块并不是说没有。(一个AAC原始帧包含一段时间内1024
7、个采样及相关数据)二、封装AAC为ADTS帧一个AAC原始数据块长度是可变的,对原始帧加上ADTS头进行ADTS的封装,就形成了ADTS帧。通常我们将得到的AAC原始帧进行封装后写入文件,用常用的播放器如千千静听即可播放,这是个验证AAC数据是否正确的方法。进行封装前,需要了解相关参数,如采样率,声道数,原始数据块的长度等。下面把AAC原始数据帧加工为ADTS帧,据相关参数填写组成7字节的ADTS头。6TheADTSheaderisdefinedbelow-unsignedintobj_type=0;unsi
8、gnedintnum_data_block=frame_length/1024;//includetheheaderlengthalsoframe_length+=7;/*Wewantthesamemetadata*//*GenerateADTSheader*/if(adts_header==NULL)return;/*Syncpointoverafullbyte*/adts_header[0]=0
此文档下载收益归作者所有