解码流程
- 解码aac数据,的数据来源主要有两个:
- aac文件
- 网络流
- 当是aac文件时,可用av_read_frame读取packet数据,进行解码,解码流程为:
- 创建解码器
- 设置文件流
- 读取aac数据(包含aac头),解码
当是aac文件或者网络流时,解码流程为:
从aac头解析aac_frame_len
int get_aac_frame_len(UINT8* aac_header)
{
int size = 0;
if (NULL == aac_header)
{
return -1;
}
size |= (aac_header[3] & 0b00000011) << 11; //0x03 前两个最高位,要移到高位(13 - 11 = 2)
size |= aac_header[4] << 3; //中间的8bit,要移到前两个高位后,13 - 2 = 11 - 8 = 3
size |= (aac_header[5] & 0b11100000) >> 5; //0xe0 最后的3Bit,要移到最后
printf("size:%d\n", size);
return size;
}
aac解码后的pcm时fltp位深,需要转换成s16位深,这样声卡才能播放