Android 如何从AAC-ADTS头构造编解码器特定数据(CSD)?

Android 如何从AAC-ADTS头构造编解码器特定数据(CSD)?,android,header,codec,aac,adts,Android,Header,Codec,Aac,Adts,如何从ADTS头构造CSD数据?我可以为CSD数据创建ADTS标头,但如何做相反的操作 /* function to construct ADTS header from CSD * header_info - contains CSD * frameLength - total frame size */ void addHeaderADTS(uint8_t header_info[], uint32_t frameLength) { int profile = (csd_dat

如何从ADTS头构造CSD数据?我可以为CSD数据创建ADTS标头,但如何做相反的操作

/* function to construct ADTS header from CSD
 * header_info - contains CSD
 * frameLength - total frame size */    
void addHeaderADTS(uint8_t header_info[], uint32_t frameLength) {

int profile = (csd_data[0] >> 3) & 0x1F;
int frequency_idx = ((csd_data[0] & 0x7) << 1) | ((csd_data[1] >> 7) & 0x1);
int channels = (csd_data[1] >> 3) & 0xF;

header_info[0] = 0xFF;
header_info[1] = 0xF1;
header_info[2] = (((profile - 1) << 6) + (frequency_idx << 2) + (channels >> 2));
header_info[3] = (((channels & 3) << 6) + (frameLength >> 11));
header_info[4] = ((frameLength & 0x7FF) >> 3);
header_info[5] = (((frameLength & 7) << 5) + 0x1F);
header_info[6] = 0xFC;
return;
/*从CSD构造ADTS头的函数
*标题信息-包含CSD
*frameLength-总帧大小*/
void addHeaderADTS(uint8头信息[],uint32帧长){
int profile=(csd_数据[0]>>3)&0x1F;
int frequency_idx=((csd_数据[0]和0x7)>7)和0x1);
int通道=(csd_数据[1]>>3)&0xF;
头信息[0]=0xFF;
头信息[1]=0xF1;
标题信息[2]=((配置文件-1)2));
头信息[3]=((频道&3)>11));
头信息[4]=((帧长&0x7FF)>>3);

header_info[5]=((frameLength&7)已找到。在中使用MakeAccodecSpecificData函数构造CSD数据

给我们CSD数据?具体是什么?编解码器特定数据(CSD)CSD_数据[0]=0x13,CSD_数据[1]=0x0x90。要了解CSD,请参阅该wiki页面上没有CSD。该wiki页面上也没有CSD_数据。我的CSD由2个字节组成,该wiki页面显示如何读取这两个字节(位打包).这些csd数据是由Android构建的。好吧,这是你的第一步。找出csd到底是什么以及它从何而来。我不知道当你甚至不知道它是什么的时候,你怎么能从ADT中重构一些东西。