атом mp4 - Как отличить аудиокодек? Это AAC или MP3?

Я работаю над анализатором контейнера mp4, но схожу с ума, пытаясь распознать аудиокодеки ручьи. Я использовал и QtAtomViewer, и AtomicParsley, но когда я нахожу атом:

trak-> mdia-> minf-> stbl-> stsd

, я всегда получаю "mp4a", даже если файл mp4 имеет поток mp3.

Стоит ли искать файл fourcc в формате ".mp3"?

Я прикрепляю две разные структуры mp4: Контейнер mp4 с аудиопотоком AAC

     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

Контейнер mp4 с аудиопотоком mp3

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?

12
задан Elnur Abdurrakhimov 11 April 2013 в 23:27
поделиться