Влияние кодеков на пропускную способность и качество
Мы уже знаем, как работают аудиокодеки G.711, G.729 и Opus. Теперь разберём, как их характеристики влияют на два ключевых параметра VoIP-связи: пропускную способность сети и качество звука. Выбор кодека — всегда компромисс, и умение найти баланс — важный навык администратора Asterisk.
Пропускная способность: сколько данных «съедает» кодек?
Пропускная способность, или битрейт, — это объём данных, передаваемых за единицу времени. В VoIP каждый голосовой пакет содержит не только аудиоданные, но и служебную информацию (заголовки IP, UDP, RTP).
Давайте посмотрим, как разные кодеки влияют на нужную пропускную способность.
Расчёт пропускной способности
Для оценки пропускной способности используем формулу:
Где:
- Размер полезной нагрузки кодека — объём аудиоданных, которые кодек генерирует за один интервал пакетизации (например, 20 мс).
- Размер заголовков — сумма размеров заголовков IP (20 байт), UDP (8 байт) и RTP (12 байт). Итого 40 байт.
- Время пакетизации — интервал, через который формируются и отправляются голосовые пакеты (обычно 20 мс).
Примеры для популярных кодеков при времени пакетизации 20 мс:
| Кодек | Битрейт кодека (кбит/с) | Размер полезной нагрузки (байт/20мс) | Общий размер пакета (байт) | Общий битрейт (кбит/с) |
|---|---|---|---|---|
| G.711 | 64 | 160 | 160 + 40 = 200 | (200 * 8) / 0.02 = 80 |
| G.729 | 8 | 16 | 16 + 40 = 56 | (56 * 8) / 0.02 = 22.4 |
| Opus | 6-510 (переменный) | Зависит от битрейта | Зависит от битрейта | Зависит от битрейта |
Важно: Эти значения — битрейт одного направления. Для дуплексного разговора (входящий и исходящий трафик) значения удваиваются. Например, для G.711 это будет 160 кбит/с.
Влияние на сеть
- G.711 (PCMU/PCMA): Высокое качество, но и высокая пропускная способность. Нужен стабильный канал. Идеален для локальных сетей или каналов с избыточной пропускной способностью.
- G.729: Низкая пропускная способность. Отличный выбор для каналов с ограниченной пропускной способностью (например, удалённые офисы через VPN, мобильные сети). Однако, он требует лицензирования в Asterisk (хотя для FreePBX Distro часто уже включён) и сильнее нагружает CPU.
- Opus: Очень гибкий кодек с переменным битрейтом. Адаптируется к качеству сети, обеспечивая хорошее качество при низкой пропускной способности и отличное — при высокой. Идеален для нестабильных сетей, но также более требователен к ресурсам CPU.
Качество звука: что мы слышим?
Качество звука — субъективная оценка, но она сильно зависит от кодека.
- G.711: «Золотой стандарт» в телефонии. Обеспечивает почти студийное качество, так как не использует сжатие с потерями (lossy compression). Голос звучит естественно, без артефактов.
- G.729: Использует сильное сжатие с потерями. Голос может звучать немного «металлически» или «роботизированно», особенно при долгих разговорах. При многократном перекодировании (транскодинге) качество может сильно ухудшаться.
- Opus: При высоких битрейтах может сравниться с G.711, а при низких — значительно превосходит G.729 по качеству, минимизируя артефакты сжатия. Разработан для широкого спектра аудио, включая музыку, что делает его очень универсальным.
Транскодинг: когда Asterisk перекодирует аудио
Транскодинг — это преобразование аудио из одного кодека в другой. Он происходит, когда две стороны вызова используют разные кодеки, а Asterisk выступает посредником.
Пример:
- Внутренний абонент использует G.711.
- Внешний транк (провайдер) работает с G.729.
В этом случае Asterisk принимает G.711 от абонента, перекодирует его в G.729 для транка, и наоборот.
Последствия транскодинга:
- Нагрузка на CPU: Транскодинг — ресурсоёмкая операция. Чем больше одновременных вызовов с транскодингом, тем выше нагрузка на процессор сервера Asterisk. Это может вызвать задержки, потерю пакетов и ухудшение качества звука.
- Потеря качества: Каждое перекодирование (особенно между кодеками с потерями, такими как G.729) приводит к дополнительной потере информации. Это накапливается и ухудшает качество звука.
- Задержки (Latency): Перекодирование занимает время, что увеличивает общую задержку в голосовом тракте.
Совет: Старайтесь избегать транскодинга. Настраивайте кодеки на оконечных устройствах и транках так, чтобы они совпадали. Если транскодинг неизбежен, используйте сервер с достаточной вычислительной мощностью.
Выбор кодека в FreePBX и Asterisk
В FreePBX вы управляете приоритетом кодеков для каждого транка и внутреннего экстеншена.
- Для транков: В настройках транка (например,
Settings->Trunks->Ваш_Транк->PJSIP Settings->Advanced->Codecs) укажите разрешённые кодеки и их порядок. Обычно провайдеры указывают предпочтительные кодеки. - Для экстеншенов: Аналогично, в настройках экстеншена (
Applications->Extensions->Ваш_Экстеншен->Advanced->Codecs) задайте разрешённые кодеки.
Asterisk предложит кодеки в указанном порядке. Если обе стороны поддерживают один и тот же кодек, он будет выбран. Если нет, Asterisk попытается найти общий кодек и, при необходимости, выполнит транскодинг.
Практические рекомендации
- Локальная сеть: Используйте G.711 (ulaw/alaw) для максимального качества, если пропускная способность не проблема.
- Удалённые офисы/VPN: G.729 или Opus (если поддерживается) помогут сэкономить пропускную способность.
- Мобильные клиенты: Opus — отличный выбор благодаря его адаптивности к качеству сети.
- Избегайте транскодинга: По возможности, унифицируйте кодеки на всех устройствах и транках.
- Мониторинг: Следите за загрузкой CPU на сервере Asterisk, особенно если используете G.729 или активный транскодинг.
Понимание влияния кодеков на пропускную способность и качество связи — это фундамент для оптимизации вашей VoIP-системы. В следующем разделе мы перейдём к одной из самых распространённых проблем в VoIP — преодолению NAT, которая часто становится причиной односторонней слышимости и проблем с регистрацией.