私はmp4コンテナパーサーに取り組んでいますが、ストリームのオーディオコーデックを認識しようと夢中になっています。QtAtomViewerとAtomicParsleyの両方を使用しましたが、アトムが見つかった場合:
trak-> mdia-> minf-> stbl-> stsd
mp4ファイルにmp3ストリームがある場合でも、常に「mp4a」が表示されます。
「.mp3」fourccを探す必要がありますか?
私は2つの異なるmp4構造を添付します:AACオーディオストリームを備えたmp4コンテナ
Atom trak @ 716882 of size: 2960, ends @ 719842
Atom tkhd @ 716890 of size: 92, ends @ 716982
Atom mdia @ 716982 of size: 2860, ends @ 719842
Atom mdhd @ 716990 of size: 32, ends @ 717022
Atom hdlr @ 717022 of size: 33, ends @ 717055
Atom minf @ 717055 of size: 2787, ends @ 719842
Atom dinf @ 717063 of size: 36, ends @ 717099
Atom dref @ 717071 of size: 28, ends @ 717099
Atom stbl @ 717099 of size: 2727, ends @ 719826
Atom stts @ 717107 of size: 24, ends @ 717131
Atom stsz @ 717131 of size: 1268, ends @ 718399
Atom stsc @ 718399 of size: 40, ends @ 718439
Atom stco @ 718439 of size: 32, ends @ 718471
Atom stss @ 718471 of size: 1264, ends @ 719735
Atom stsd @ 719735 of size: 91, ends @ 719826
Atom mp4a @ 719751 of size: 75, ends @ 719826
Atom esds @ 719787 of size: 39, ends @ 719826
Atom smhd @ 719826 of size: 16, ends @ 719842
mp3オーディオストリーム付きのmp4コンテナ
Atom trak @ 1663835 of size: 4844, ends @ 1668679
Atom tkhd @ 1663843 of size: 92, ends @ 1663935
Atom mdia @ 1663935 of size: 4744, ends @ 1668679
Atom mdhd @ 1663943 of size: 32, ends @ 1663975
Atom hdlr @ 1663975 of size: 45, ends @ 1664020
Atom minf @ 1664020 of size: 4659, ends @ 1668679
Atom smhd @ 1664028 of size: 16, ends @ 1664044
Atom dinf @ 1664044 of size: 36, ends @ 1664080
Atom dref @ 1664052 of size: 28, ends @ 1664080
Atom stbl @ 1664080 of size: 4599, ends @ 1668679
Atom stsd @ 1664088 of size: 87, ends @ 1664175
Atom mp4a @ 1664104 of size: 71, ends @ 1664175
Atom esds @ 1664140 of size: 35, ends @ 1664175
Atom stts @ 1664175 of size: 24, ends @ 1664199
Atom stsc @ 1664199 of size: 28, ends @ 1664227
Atom stsz @ 1664227 of size: 2228, ends @ 1666455
Atom stco @ 1666455 of size: 2224, ends @ 1668679
ありがとうFE
アップデート:
問題を解決する方法を見つけました。AtomicParsleyのコードを見ると、ストリームアトム(mp4a)に関するコーデック情報を取得し、11バイト目をesds(エレメンタリーストリームの説明)アトムに読み込むことができることがわかります。
今、私はこのように働いています:
11番目のバイトの値が0x40の場合、ストリームはAACであると想定します。そうでない場合、0x69を読み取ると、ストリームはMP3であると想定します。
私はこれらの「経験的」ソリューションが好きではないので、より正しい方法を探していますが、完全ではないUnderstanding_AACしか見つかりませんでした。
MP4コンテナのより詳細な仕様をどこで入手できるか知っている人はいますか?