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

Abstract:Всім комусь колись доводилося слухати музику або радіо через Інтернет знайома ситуація при якій через падіння швидкості передачі спустошується буфер і відтворення починає «заїкатися». Це відбувається навіть не дивлячись на те, що користувачеві зазвичай пропонується на вибір кілька потоків, закодованих з різними бітрейтами. У цій статті обговорюється система для прогресивної передачі аудіо через Інтернет, яка буде позбавлена ​​зазначеного недоліку.

1. Введення

Всім кому колись доводилося слухати музику чи радіо через Інтернет знайома ситуація, коли через падіння швидкості передачі спустошується буфер і відтворення починає «заїкатися». Це відбувається навіть не дивлячись на те, що користувачеві зазвичай пропонується на вибір кілька потоків, закодованих з різними бітрейтами.

Справа в тому, що ми не можемо гарантувати, що певний пакет, пройшовши через десяток маршрутизаторів, дійде до нас у потрібний час. А для відтворення кадру в класичних схемах (mp3, ogg тощо) необхідно отримати його цілком. У цій статті обговорюється система для прогресивної передачі аудіо через Інтернет, яка буде позбавлена ​​зазначеної нестачі.

Прогресивність при цьому потрібно розуміти як властивість закодованого кадру, при якому перші біти нестимуть найбільш важливу для сприйняття інформацію, а наступні лише незначні, уточнюючі деталі. У такому разі, перших бітів буде достатньо для відтворення всього кадру цілком, правда в трохи гіршій якості.

Іншими словами, при падінні швидкості передачі замість зупинки відтворення погіршуватиметься його якість. Якщо потім швидкість підвищиться, то якість відтворення зросте. Інакше кажучи, така система будеадаптуватися до пропускної спроможності каналу реальному часі.

Очевидно, оскільки прогресивно закодований кадр можна урізати до будь-якого розміру, ми з легкістю зможемо керувати загальним бітрейтом з точністю до біта! При цьому ми не будемо прив'язані до стандартних значень: 128 Kbps, 64 Kbps і т.д.

І нарешті, подібний підхід дозволяє зберігати на сервері лише один закодований файл, замість кількох для різних бітрейтів. Дійсно, кожен клієнт отримає і відтворить його з якістю, наскільки йому дозволить канал зв'язку.

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

Цифровий звук можна охарактеризувати трьома основними параметрами: частотою дискретизації, кількістю біт на семпл (чи інакше відлік чи дискрет) і кількістю каналів. Від величини цих параметрів залежить якість звучання та розмір файлу. Наприклад, секунда музики на аудіо-CD займає 16біт T 2 каналу T 44100Гц = 176400байт. Звідси й випливає необхідність в ефективних методах для стиснення звукової інформації, яка за своєю природою дуже надмірна.

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

інтернет

Figure 1: Початковий сигнал

На рис. 1 показаний кадр розміру 1024 семпла. На частоті 44100 Гц його протяжність за часом становить 1024/44100 T 1000 23.22 мілісекунд. Кожен семпл займає по 16 біт, що забезпечує допустимий діапазон значень [-32768. 32767]. Саме на цьому прикладі і проводитимуться всі подальші експерименти.

3. Вейвлетне перетворення

Вейвлетне перетворення служить виділення високо- і низко-частотной складової сигналу (далі НЧ і ВЧ). Вже давновстановлено, що НЧ складова набагато важливіша для людського сприйняття ніж ВЧ. Звідси і виникає ідея виділення НЧ та ВЧ складових із наступним пріоритетним придушенням останньої. Для цієї мети в цій роботі було використано відоме вейвлетне перетворення Добеші 9/7 [1, 2]. На рис. 2 зображено результат застосування до вихідного сигналу.

передача

Figure 2: Вейвлетне перетворення сигналу

З малюнка видно, що коефіцієнти вейвлетного розкладання відповідають за НЧ складову (ближче початку координат) сигналу домінують над ВЧ коефіцієнтами, а великі за абсолютною величиною коефіцієнти несуть більше інформації про вихідний сигнал.

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

Після того, як отримані коефіцієнти вейвлетного розкладання, необхідно їх прогресивно закодувати. Як алгоритм кодування в цій роботі був використаний відомий алгоритм SPIHT (Set Partitioning in Hierarchical Trees) [3, 4]. Для більшої ефективності його комбінують з арифметичним кодуванням [5]. Незважаючи на те, що спочатку SPIHT був розроблений для кодування зображень, його з таким самим успіхом можна застосувати і до аудіо сигналів.

Варто особливо наголосити, що основне завдання алгоритму SPIHT не полягає в безпосередньому стисканні даних. Використовуючи особливості структури вейвлетних коефіцієнтів, SPIHT переупорядковує їх біти. При цьому перші біти будуть нести найбільш важливу інформацію (НЧ), тоді як наступні лише незначні, уточнюючі деталі (ВЧ). Таке впорядкування даних часто називаютьпрогресивним.

Таким чином, чим більше бітів закодованого кадру отримує декодер, тим точніше відновлений сигнал повторюватиме оригінальний. Для прикладу наведемо серію відновлених сигналів тапорівняємо їх із оригіналом.

передача

Figure 3: Відновлений сигнал

На рис. 3 добре видно як при збільшенні кількості одержуваних декодером бітів зростає якість відновленого сигналу і на певному рівні він практично не відрізняється від оригіналу.

5. Передача аудіо через Інтернет

Для того щоб отримати всі переваги, отримані при прогресивному кодуванні аудіо даних, необхідно розробити спеціальний протокол прикладного рівня для взаємодії клієнта та сервера по мережі. Як протокол транспортного рівня в цій ситуації найбільш підходящим є протокол TCP.

Ключовий момент клієнт-серверної взаємодії полягає в тому, що клієнт може вказати, а також змінювати під час роботи максимальний розмір закодованого кадру. Клієнт вибирає це значення в такий спосіб, щоб мінімізувати, а найкращому разі взагалі виключити можливі обриви відтворення.

Збільшуючи та зменшуючи розмір кадру клієнт може адаптуватися до змінної швидкості передачі: коли швидкість падає – розмір кадру необхідно зменшити, коли швидкість зростає – розмір кадру можна збільшити. Сервер, зі свого боку, повинен надсилати від кожного кадру не більше байтів, ніж попросив клієнт.

6. Висновок

Аудіо-кодер, описаний у цій статті, не використовує психоакустичне моделювання, складні фільтри для обробки сигналів та інші корисні оптимізації. Він навмисно спрощений і є скоріше демонстрацією концепції: прогресивної передачі аудіо низькошвидкісними каналами зв'язку. Незважаючи на це, його повні вихідні тексти доступні для скачування, вивчення, експериментів та покращення.