2

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 です。

最初のヘッダーの 16 進ダンプ:

0x000000: ff f9 50 40 01 3f fc
4

2 に答える 2

1

の抽出では、抽出されたビットを正しい場所に配置するために必要なframesizeシフトが欠落しているようです<<

/*bit 30-42*/ビット マスクは、コメントと一致しているようには見えません。

また、このタイプのビット操作を行っているときに、あらゆる種類の符号拡張の問題が発生するため、 を に変更charunsigned charます (これが負の値エラーの原因です)。

于 2014-06-14T12:18:56.983 に答える