Прогресивно аудио предаване през интернет

Резюме:Всеки, който някога е слушал музика или радио през интернет, е запознат със ситуацията, при която спад в битрейта кара буферът да се изпразни и възпроизвеждането спира. Това се случва, въпреки че на потребителя обикновено се предлага избор от няколко потока, кодирани с различни битрейтове. Тази статия обсъжда система за прогресивно аудио предаване през интернет, която ще преодолее този недостатък.

1. Въведение

Всеки, който някога е слушал музика или радио през интернет, е запознат със ситуацията, при която поради спад в скоростта на трансфер буферът се изпразва и възпроизвеждането започва да „заеква“. Това се случва, въпреки че на потребителя обикновено се предлага избор от няколко потока, кодирани с различни битрейтове.

Факт е, че не можем да гарантираме, че определен пакет, преминал през дузина рутери, ще стигне до нас в точното време. И за да възпроизведете рамка в класически схеми (mp3, ogg и т.н.), трябва да я получите цялата. Тази статия обсъжда система за прогресивно аудио предаване през интернет, която ще преодолее този недостатък.

В този случай прогресивността трябва да се разбира като свойство на кодирана рамка, в която първите битове ще носят най-важната информация за възприемане, а следващите ще носят само незначителни, изясняващи подробности. В този случай първите битове ще бъдат достатъчни, за да възпроизведат целия кадър, макар и с малко по-лошо качество.

С други думи, ако битрейтът падне, вместо да спре възпроизвеждането, качеството му ще се влоши. Ако след това увеличите скоростта, качеството на възпроизвеждане ще се увеличи. С други думи, такава система щеадаптиране към честотната лента на канала в реално време.

Очевидно, тъй като прогресивно кодиран кадър може да бъде съкратен до всякакъв размер, можем лесно да контролираме общата битрейт до битова точност! В този случай няма да сме обвързани със "стандартните" стойности: 128 Kbps, 64 Kbps и т.н.

И накрая, този подход ви позволява да съхранявате само един кодиран файл на сървъра, вместо няколко за различни битрейтове. Наистина, всеки клиент ще го получи и възпроизведе със същото качество, което комуникационният канал позволява.

2. Цифров звук

Цифровото аудио може да се характеризира с три основни параметъра: честота на дискретизация, брой битове на семпла (или по друг начин семпла или семпла) и брой канали. Качеството на звука и размерът на файла зависят от стойността на тези параметри. Например една секунда музика на аудио CD заема 16 бита T 2 канала T 44100Hz = 176400 байта. Оттук и необходимостта от ефективни методи за компресиране на аудио информация, която по своята същност е много излишна.

По правило изходният файл първо се разделя на малки фрагменти - рамки, които след това се кодират. Типичната продължителност на един кадър във времето е от порядъка на 10-20 милисекунди.

аудио

Фигура 1: Оригинален сигнал

На фиг. 1 показва рамка с размер 1024 проби. При честота 44100 Hz продължителността му във времето е 1024/44100 T 1000 Å 23,22 милисекунди. Всяка проба заема 16 бита, което осигурява валиден диапазон от стойности [-32768. 32767]. На този пример ще бъдат извършени всички следващи експерименти.

3. Wavelet трансформация

Уейвлет трансформацията се използва за изолиране на високо- и нискочестотните компоненти на сигнала (по-нататък LF и HF). Преди много времеустанови, че LF компонентът е много по-важен за човешкото възприятие от HF. Тук възниква идеята за отделяне на LF и HF компонентите с последващо приоритетно потискане на последните. За тази цел в тази работа е използвано добре известното уейвлет преобразуване на Daubechies 9/7 [1, 2]. На фиг. 2 показва резултата от приложението му към оригиналния сигнал.

прогресивно

Фигура 2: Wavelet трансформация на сигнал

От фигурата може да се види, че коефициентите на вълново разширение, отговорни за нискочестотния компонент (по-близо до произхода) на сигнала, доминират над високочестотните коефициенти, а коефициентите, които са големи по абсолютна стойност, носят повече информация за оригиналния сигнал.

4. Прогресивно кодиране

След като се получат коефициентите на вълново разлагане, те трябва да бъдат прогресивно кодирани. Добре известният алгоритъм SPIHT (Set Partitioning in Hierarchical Trees) [3, 4] беше използван като алгоритъм за кодиране в тази работа. За по-голяма ефективност се комбинира с аритметично кодиране [5]. Въпреки че SPIHT първоначално е разработен за кодиране на изображения, той може да се приложи и към аудио сигнали също толкова добре.

Струва си да се подчертае, че основната задача на алгоритъма SPIHT не е директно компресиране на данни. Използвайки структурните характеристики на уейвлет коефициентите, SPIHT пренарежда техните битове. В този случай първите битове ще носят най-важната информация (LF), докато следващите само второстепенни, изясняващи детайли (HF). Това сортиране на данни често се наричапрогресивно.

По този начин, колкото повече битове от кодирания кадър получава декодерът, толкова по-точно възстановеният сигнал ще повтори оригиналния. Например, представяме серия от възстановени сигнали исравнете ги с оригинала.

предаване

Фигура 3: Възстановен сигнал

На фиг. Фигура 3 ясно показва как с увеличаване на броя битове, получени от декодера, качеството на възстановения сигнал се повишава и на определено ниво той е практически неразличим от оригинала.

5. Предаване на аудио по интернет

За да се възползвате напълно от прогресивното кодиране на аудио данни, е необходимо да се разработи специален протокол на приложния слой за взаимодействие между клиент и сървър по мрежата. TCP е най-подходящият протокол за транспортно ниво в тази ситуация.

Ключовият момент на взаимодействието клиент-сървър е, че клиентът има възможност да указва, както и да променя максималния размер на кодирания кадър по време на работа. Клиентът избира тази стойност по такъв начин, че да минимизира и в най-добрия случай напълно да елиминира възможните прекъсвания на възпроизвеждането.

Чрез увеличаване и намаляване на размера на рамката, клиентът може да се адаптира към променящите се скорости на предаване: когато скоростта спадне, размерът на рамката трябва да бъде намален, когато скоростта се увеличи, размерът на рамката може да бъде увеличен. Сървърът, от своя страна, не трябва да изпраща повече байтове от всеки кадър, отколкото клиентът е поискал.

6. Заключение

Аудио енкодерът, описан в тази статия, не използва психоакустично моделиране, сложни филтри за обработка на сигнали и други полезни оптимизации. Той е умишлено опростен и е по-скоро демонстрация на концепцията: прогресивно аудио предаване по нискоскоростни връзки. Въпреки това пълният му изходен код е достъпен за изтегляне, изучаване, експериментиране и подобряване.