opus
Универсальный аудиокодек, разработанный для интерактивной передачи речи и музыки через Интернет. Он объединяет технологии SILK (ориентированный на речь) и CELT (ориентированный на музыку) в одном гибком формате, обеспечивая высокое качество звука при низкой задержке. Opus стандартизирован IETF как RFC 6716 и является обязательным кодеком для WebRTC, что делает его основой для современных коммуникационных приложений.
Особенности
- гибридная архитектура, объединяющая кодеки SILK и CELT;
- широчайший диапазон битрейтов: от 6 kb/s до 510 kb/s;
- поддержка частот дискретизации от 8 кГц (узкополосный) до 48 кГц (полоса);
- размер кадра от 2.5 мс до 60 мс для гибкого баланса задержки и качества;
- поддержка моно, стерео и многоканального звука (до 255 каналов);
- встроенная устойчивость к потерям пакетов и маскирование потерь (PLC);
- динамическая настройка битрейта, полосы пропускания и размера кадра;
- эталонная реализация libopus с оптимизациями для floating-point и fixed-point архитектур.
Основные компоненты
Библиотека libopus является эталонной реализацией кодека и предоставляет API для кодирования, декодирования и управления параметрами потока (подробнее с документацией можно ознакомиться здесь).
Кодирование аудио
Модуль кодирования преобразует входной PCM-сигнал в сжатый поток Opus. Кодер автоматически выбирает оптимальный режим (SILK, CELT или гибридный) в зависимости от типа сигнала, битрейта и требований к задержке.
Основные функции кодера:
opus_encoder_create()— создание и инициализация состояния кодера;opus_encode()иopus_encode_float()— кодирование кадра из целочисленных или floating-point PCM-данных;opus_encoder_ctl()— управление параметрами (битрейт, сложность, режим, VBR/CBR и др.);opus_encoder_destroy()— освобождение ресурсов кодера.
Кодер поддерживает три основных режима приложения: OPUS_APPLICATION_VOIP (оптимизация для речи), OPUS_APPLICATION_AUDIO (для музыки) и OPUS_APPLICATION_RESTRICTED_LOWDELAY (минимальная задержка).
Декодирование аудио
Декодер восстанавливает PCM-сигнал из сжатого потока Opus с минимальной задержкой и встроенным механизмом сокрытия потерь пакетов.
Основные функции декодера:
opus_decoder_create()— создание состояния декодера;opus_decode()иopus_decode_float()— декодирование пакета в целочисленный или floating-point PCM;opus_decoder_ctl()— управление параметрами декодера (сброс состояния, получение информации);opus_decoder_destroy()— освобождение ресурсов.
Репакетизатор
Репакетизатор позволяет объединять несколько пакетов Opus в один или разделять ранее объединённые пакеты. Это полезно для оптимизации сетевой передачи или адаптации к требованиям контейнеров.
Основные функции репакетизатора:
opus_repacketizer_create()— создание состояния репакетизатора;opus_repacketizer_cat()— добавление пакета для объединения;opus_repacketizer_out()— получение объединённого пакета;opus_repacketizer_get_nb_frames()— получение количества кадров в объединённом пакете.
Информация о библиотеке
Вспомогательные функции для получения информации о версии и характеристиках библиотеки.
Основные функции:
opus_get_version_string()— получение строки версии libopus;opus_strerror()— строковое описание кода ошибки.
Управление параметрами через CTL
Все настройки кодера и декодера выполняются через единый интерфейс CTL (Control) с использованием макросов-констант.
Основные CTL-параметры:
OPUS_SET_BITRATE(x)— установка битрейта в бит/с;OPUS_SET_COMPLEXITY(x)— сложность алгоритма (1–10);OPUS_SET_VBR(x)— включение/отключение переменного битрейта (VBR);OPUS_SET_APPLICATION(x)— изменение режима приложения «на лету»;OPUS_GET_LOOKAHEAD()— получение задержки, вносимой кодером.