Джиттер-буфер для устройств вывода звука

Джиттер присутствует во всех сетях, как в больших с разветвлённой архитектурой, так и в рамках одного сетевого устройства, т.к. любое оборудование отправляет данные с разной скоростью/задержками.

Для минимизации негативного влияния джиттера используется джиттер-буфер (JitterBuffer) на устройствах вывода звука - для аудио задержка воспроизведения менее критична, чем выпадение слов или фраз из общего потока из-за того, что нужные пакеты задерживаются или перепутались в сети. Кроме того, устройства воспроизведения звука требуют поступления данных на вход с постоянной скоростью.

Джиттер-буфер обеспечивает постоянную/гарантированную задержку на входе, тем самым:

  • нивелирует джиттер;
  • обеспечивает более плавное поступление пакетов с аудио для обработки и воспроизведения на стороне получателя в случае потерь или нарушения их порядка;
  • компенсирует разницу в частоте работы звуковых устройств;
  • выравнивает скорость (делает её постоянной) поступления порций аудио на звуковое устройство.

Размер джиттер-буфера задается уникально для каждого устройства вывода звука (динамика):

Размер джиттер-буфер

Джиттер-буфер компенсирует как задержку в получении пакетов (более медленное поступление), так и, наоборот, компенсирует опережение нормальной скорости поступления данных. Поэтому размер джиттер-буфера в настройках устройства вывода звука задается по модулю, настройка размера джиттер-буфера означает задание его середины: выдача звука в звуковую подсистему ОС (PulseAudio) начнется при накоплении аудио до уровня этой середины на входе.

При выставлении в настройках джиттер-буфера размером 100мс фактически задается его половина, на практике получим джиттер-буфер размером 200мс.

Джиттер-буфер тесно связан с размером RTP очереди (“Максимальный размер очереди на приеме RTP c аудио, мс”), которая в случае аудио нужна для восстановления правильного порядка пакетов (если они перепутались в сети).

Рекомендации:

  • в случае большого rtt (50-100 мс и выше) делать ничего не нужно (если нет потерь, если есть - рекомендации ниже);
  • в случае потерь в первую очередь нужно перейти на кодеки с поддержкой механизма компенсации потерь — это OPUS и AAC. Если это невозможно, то минимизировать последствия можно посредством увеличения размера джиттер-буфера. Его можно задать в соотношении:

    джиттер-буфер ~= (размер RTP очереди) x1,5-2.

    Чем больше джиттер-буфер - тем реже будут слышны артефакты, но тем больше будет задержка воспроизведения;
     
  • при наличии на СПД большого джиттера подобрать размер RTP очереди следует в соотношении: 

    размер RTP очереди ~= (джиттер на СПД) x1.5 

    и размер джиттер-буфера:

    джиттер-буфер ~= (размер RTP очереди) x1,5-2.

Например, для rtt/ping 100, джиттера 150 (ping 25-175 мс) оптимальной является настройка размера RTP очереди 200 и джиттер-буфера 300-400.
Настроенные значения получаются довольно большие, что повлечет за собой расхождение с видео (если оно есть). В данном случае нужно искать компромисс между максимально доступным качеством звука (полученные значения) и задержками (для меньшей задержки нужно полученные значения уменьшать, особенно джиттер-буфер).

Pdf-версия
Yes

Не нашли что искали?

Только один файл.
Ограничение 128 МБ.
Допустимые типы: gif, jpg, png, pdf, txt.