Как я могу прочитать заголовок файла ADAC в кодировке ADTS? Мне нужно, чтобы получить длину буфера для каждого кадра, чтобы прочитать весь файл 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.
Hexdump первого заголовка:
0x000000: ff f9 50 40 01 3f fc
Ваша добыча framesize
кажется, есть сдвиги <<
отсутствует, необходимо, чтобы извлечь бит в правильные места
Битовые маски не выглядят так, как будто они соответствуют /*bit 30-42*/
комментарий.
Кроме того, измените char
в unsigned char
в противном случае вы столкнетесь со всеми видами проблем с расширением знака при выполнении этого типа битовых манипуляций (что является причиной вашей ошибки отрицательного значения)