Сжатие / распаковка аудиоданных

2

Я использую форму api win32 api в приложении С# для создания системы voip. все идет хорошо, однако мне нужен способ сжатия аудиоданных на лету.

так что в основном аудиоданные поступают в буфер записи размером 150 байт, а затем этот буфер отправляется через udp, а на удаленном конце 150 байтов принимаются и помещаются в буфер воспроизведения.

поэтому мне нужен способ сжатия/распаковки данных непосредственно перед отправкой udp- > и сразу после udp- > recv. нормальные алгоритмы сжатия не работают с аудио, включая класс .NET GZip.

Кто-нибудь знает о библиотеке, которую я могу использовать, это поможет мне сделать это?

спасибо заранее...

Теги:
compression
waveform

4 ответа

1

Я бы подумал, что вам нужно будет дозировать эти 150-байтовые куски, чтобы улучшить сжатие.
Хотя даже при небольших размерах буфера вы все равно можете получить некоторое сжатие.

Если встроенный GZipStream не работает, вы можете попробовать GZipStream, который включен в DotNetZip. Существует также класс ZlibCodec, доступный в DotNetZip, который реализует шаблон Codec - это может облегчить сжатие в 150-байтных блоках.

1

150 байт - невероятно маленький буфер для аудиоданных - менее 5 миллисекунд, например. 16 кГц моно. Я не эксперт, но я думаю, что независимо от выбранной вами схемы сжатия коэффициент сжатия будет сильно зависеть от использования такого небольшого буфера. Кроме того, для каждого отправляемого пакета имеются значительные накладные расходы.

Тем не менее, если вы отправляете речевые данные, посмотрите Speex для сжатия с потерями (я нашел его очень эффективным при сжатии речи, но качество звука ужасно для музыки.)

  • 0
    на 16 кГц, какой размер буфера вы бы предложили? он установлен на 150, потому что это то, что делает скайп (просматривается с помощью сниффера udp), хотя я хотел бы, чтобы буферы изображения скайпа были больше 150, но в итоге получалось 150 после сжатия.
  • 0
    +1 за speex. это то, что сейчас использует вспышка.
Показать ещё 2 комментария
0

Как было сказано выше, я бы посмотрел на Speex. Он хорошо поддерживается, и теперь стандарт defacto для Flash Player.

Я предполагаю, что по размеру вы устанавливаете свои буферы, что латентность является проблемой (чем больше буфер, тем больше латентность), поэтому не следует использовать кодек с высоким размером распакованного кадра, поскольку он вводит высокая латентность. Это более или менее исключает MP3... для голоса с частотой дискретизации 5 кГц (это не принесет большой пользы), минимальный размер распакованного кадра составляет 576 выборок или ~ 100 мс данных, которые должны быть закодированы до отправки, Это означает, что время ожидания более 200 мс до того, как вы даже рассмотрели сетевую часть проблемы.

0

Компонент, который вы ищете, более известен как кодер/декодер или codec, и есть много варианты, когда дело доходит до выбора.

  • 0
    Вы хотели бы рисковать один?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню