Стратегия для аудиоархивированного с временным индексом сжатия с потерями - PullRequest
1 голос
/ 06 июля 2011

В рамках одного из моих проектов я планирую разработать аудиоархив для интернет-радиостанций.Этот архив будет проиндексирован и адресуем по дате / времени.

Например, сервер будет подключаться к потоку (обычно закодированному в MP3) и сохранять данные потока.Клиент может подключиться к этому серверу и запросить аудио от 2011-07-05 15:58:30 до 2011-07-05 15:59:37.Сервер возвращал аудиоданные клиенту для воспроизведения.

Сначала я хотел сохранить данные в виде 1-минутных фрагментов необработанных данных MP3 на диск и сослаться на эти файлы из базы данных.Сервер был бы туп к формату потока / файла и не понимал бы фреймы mpeg.Он просто передал бы данные клиенту, разделив их по частям для линейной отправки.Это было бы до клиента, чтобы синхронизировать с потоком.Это мало чем отличается от того, как серверы интернет-радио работают в целом.Серверы SHOUTcast просто выводят данные, байты за байтом, которые отправляются им из кодировщика.Когда клиент подключается, данные отправляются независимо от того, заканчивается ли это на кадре MP3.Это зависит от клиента для синхронизации.

Мне интересно, может ли быть лучший подход, обеспечивающий максимальную совместимость с клиентами и аудиоформатами .Есть какие-нибудь мысли о том, как это сделать?

Единственное, о чем я могу подумать, это декодировать MP3 в необработанный звук PCM и перекодировать по мере необходимости по запросу.Я бы предпочел не идти по этому пути из-за необходимого дискового пространства и потери качества при перекодировании.

Этот вопрос не зависит от языка, но если он будет полезен, я, скорее всего, реализую решениев PHP с MySQL в качестве базы данных.

1 Ответ

1 голос
/ 18 июля 2011

Вам не нужно беспокоиться об этом, поскольку ВСЕ mp3, к которым я обращался через shoutcast, имеют постоянный битрейт. Вам не нужно индексировать это. У меня есть проект POC, в котором архив был за 5 минут, затем я использовал PHP для объединения этих файлов и псевдопотока в winamp через shoutcast. Это сработало!

И так как вы работаете с mp3, вы можете предположить (и вы правильно предположите), что плотность захваченного файла является линейной, поэтому для доступа к 30 секундам из 60 секундного файла вы должны искать в середине. Поскольку mp3-декодеры достаточно надежны, вам вообще не нужно отслеживать кадры.

AACplus, совсем другая история. Это присущее VBR.

...