add adts header before aac data packet

/**
 *  Add ADTS header at the beginning of a raw AAC data packet.
 **/

void addADTStoPacket(unsigned char* packet, int packetLen) {

int profile = 2;  //AAC LC,MediaCodecInfo.CodecProfileLevel.AACObjectLC;
int freqIdx = 3;  //48000, 见后面注释avpriv_mpeg4audio_sample_rates中48000对应的数组下标,来自ffmpeg源码

int chanCfg = 2;  //见后面注释channel_configuration,Stero双声道立体声

        /*int avpriv_mpeg4audio_sample_rates[] = {
96000, 88200, 64000, 48000, 44100, 32000,
24000, 22050, 16000, 12000, 11025, 8000, 7350

};

        channel_configuration: 表示声道数chanCfg
0: Defined in AOT Specifc Config
1: 1 channel: front-center
        2: 2 channels: front-left, front-right
        3: 3 channels: front-center, front-left, front-right
4: 4 channels: front-center, front-left, front-right, back-center

        5: 5 channels: front-center, front-left, front-right, back-left, back-right
6: 6 channels: front-center, front-left, front-right, back-left, back-right, LFE-channel
7: 8 channels: front-center, front-left, front-right, side-left, side-right, back-left, back-right, LFE-channel

8-15: Reserved*/

/* Sync point over a full byte */    
packet[0] = 0xFF;    
/* Sync point continued over first 4 bits + static 4 bits    
* (ID, layer, protection)*/    

packet[1] = 0xF9;    

        packet[2] = (unsigned char)(((profile-1)<<6) + (freqIdx<<2) +(chanCfg>>2));

packet[3] = (unsigned char)(((chanCfg&3)<<6) + (packetLen>>11));

packet[4] = (unsigned char)((packetLen&0x7FF) >> 3);
packet[5] = (unsigned char)(((packetLen&7)<<5) + 0x1F);

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

//int nblock = packetLen / 1024; 
//packet[6] |= (unsigned char)(nblock & 0x03); //Set raw Data blocks. (number of raw data blocks)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值