Поиск main_data_begin в файле MP3

Я хочу декодировать файл MP3. Мне удается найти 32 бита в заголовке (слово синхронизации, идентификатор, слой, битрейт и т. д.). Проблема в том, что я понятия не имею, как найти начало (положение) main_data_begin (дополнительная информация). Я использую MATLAB в этом случае.

Я знаю, что это может быть простой вопрос, но мне действительно нужна ваша помощь. Пожалуйста. Спасибо.


person Cyan    schedule 26.02.2015    source источник


Ответы (1)


MPEG1/2 Layer III использует main_data_begin как своего рода псевдо-VBR для заголовков и данных гранул. Самый простой способ сделать это — реализовать циклический буфер, который получает все данные физического кадра после дополнительной информации и отбрасывает неиспользуемые байты в начале буфера (как указано main_data_begin) перед началом декодирования кадра.

Лучше всего читать исходный код существующего декодера. Спецификация также действительно хороша для этого, но main_data_begin неправильно задокументирована в общедоступных версиях (насколько я могу найти).

person ioctlLR    schedule 26.02.2015
comment
Спасибо @ioctILR :-) Кстати, у вас есть книги, которые можно порекомендовать для декодера MP3? - person Cyan; 05.03.2015
comment
Не совсем. Я собрал декодер из спецификации, используя декодер Fluendo gstreamer, чтобы проверить свою логику на работоспособность. Если вы хотите увидеть, как main_data_begin работает в этом декодере, попробуйте прочитать BitReservoir.cs на nlayer.codeplex.com (особенно метод AddBits). - person ioctlLR; 05.03.2015