如何读取 ADTS 编码的 aac 文件的标头?我需要它来获取每个帧的缓冲区长度以读出整个 aac 文件。但我无法获得正确的价值观。这是我在假设大端时读取标头并获取每个帧的缓冲区长度(位 30 - 43)的代码:
main(){
ifstream file("audio_adts.m4a", ios::binary);
char header[7],buf[1024];
int framesize;
while(file.read(header,7)) {
memset(buf ,0 , 1024);
/* Get header bit 30 - 42 */
framesize = (header[3]&240|header[4]|header[5]&1);
cout << "Framesize including header: "<<framesize<<endl;
file.read(buf,framesize);
/*Do something with buffer*/
}
return 0;
}
我使用此代码获得的帧大小是 65, 45 ,45, 45, -17,然后由于负值而停止。实际的帧大小约为 200。
第一个标头的十六进制转储:
0x000000: ff f9 50 40 01 3f fc