Как анализировать данные MP3 для извлечения пронумерованных кадров?

Я пишу потоковое приложение для MP3 (CBR). Это все сквозное, то есть мне не нужно декодировать/кодировать, мне просто нужно передавать данные, как я вижу, как они проходят. Я хочу иметь возможность подсчитывать кадры MP3 по мере их прохождения (и некоторые другие вещи, такие как расчеты пропускной способности).

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

Мои вопросы:

  1. Существует ли утилита парсера Unix|Linux|Perl MP3 (в стиле dd), которая может извлекать пронумерованные кадры из файла/канала MP3?
  2. Как отличить блок заголовка MP3 от любых других двоичных данных полезной нагрузки? И наконец:
  3. Определяется ли постоянный битрейт (CBR) MP3 байтами полезной нагрузки или байты заголовка включены в совокупное количество байтов/битов на любой заданный временной интервал?

Спасибо,


person Jé Queue    schedule 04.01.2011    source источник
comment
дд-стиль? Вы имеете в виду что-то, что сбивает с толку, работает в неудобных единицах, а не в байтах, и при использовании фрагментов байтов в конце концов становится естественно медленным... (я думаю, что вы хотите dd_rescue в будущем для копирования данных .)   -  person user562374    schedule 05.01.2011
comment
Что ж, стиль dd означает, что я могу либо назвать/номеровать кадр для извлечения в канал &| файл или что я могу указать диапазоны кадров таким же образом, как dd пропускает|ищет|подсчитывает. У dd, без сомнения, есть свои проблемы, но нужна ли поддержка dd_rescue?   -  person Jé Queue    schedule 05.01.2011
comment
@Brad, я буду использовать любой язык (ну, тот, который я могу запустить в Unix).   -  person Jé Queue    schedule 06.01.2011


Ответы (1)


Я возьму удар на # 2.

Насколько я понимаю, обычный способ синхронизации с потоком MP3 (и, следовательно, возможность подсчета кадров) заключается в следующем:

  • Поиск слова синхронизации
  • Когда слово синхронизации найдено, проверьте остальную часть заголовка.
  • Если заголовок кадра действителен, вы должны знать позицию следующего заголовка.
  • Если вы нажмете 3 или 4 заголовка подряд, и они действительны, то шансы, что вы их нашли, очень высоки.

Недавно я видел страницу с документацией по этому вопросу, но сейчас не могу ее найти. Если найду еще раз, выложу.

person Brad    schedule 05.01.2011
comment
Некоторое время назад об этом говорилось в отношении побитовых регулярных выражений Erlang, но побитовое сопоставление с шаблонами заголовков кадров MP3 нетривиально. Любая ссылка будет здорово :) - person Jé Queue; 06.01.2011
comment
Решил не кипятить океан и держать все файлы строго-CBR и придерживаться dd. bs=$[144*$bitrate/$samplerate] кажется работает чарами. - person Jé Queue; 12.01.2011