Буфер джиттера: ровно или сразу
Пакеты приходят вразнобой, и за гладкий звук платят задержкой.
// разброс задержки
Пакеты голоса идут по сети не строем: один приходит вовремя, другой задерживается. Это и есть джиттер. Воспроизводить надо ровно, такт за тактом, поэтому приложение копит небольшой запас перед началом. Выберите размер запаса и посмотрите, что получится на одних и тех же данных.
- пакет 1: 1
- пакет 2: 2
- пакет 3: 3
- пакет 4: 6
- пакет 5: 5
- пакет 6: 6
- пакет 7: 10
- пакет 8: 8
- пакет 9: 9
- пакет 10: 10
Играем сразу, как только пришёл первый пакет. Задержки нет вовсе, но и подождать опоздавших нечем.
- пакет 1: успел
- пакет 2: успел
- пакет 3: успел
- пакет 4: опоздал, дырка
- пакет 5: успел
- пакет 6: успел
- пакет 7: опоздал, дырка
- пакет 8: успел
- пакет 9: успел
- пакет 10: успел
Дырок получилось 2 из 10: каждый опоздавший пакет - это щелчок или пропавший кусочек звука. Декодер попробует достроить его по соседним, но короткие потери заметны именно так.
Ждём два такта, потом начинаем. Опоздавшие получают фору.
- пакет 1: успел
- пакет 2: успел
- пакет 3: успел
- пакет 4: успел
- пакет 5: успел
- пакет 6: успел
- пакет 7: опоздал, дырка
- пакет 8: успел
- пакет 9: успел
- пакет 10: успел
Дырок осталось 1: почти все опоздавшие успели, потому что воспроизведение стартовало на такте 3, а не на первом. Цена - задержка в 2 такта, и она добавляется ко всему остальному в цепочке.
Копим побольше: звук пойдёт совсем гладко.
- пакет 1: успел
- пакет 2: успел
- пакет 3: успел
- пакет 4: успел
- пакет 5: успел
- пакет 6: успел
- пакет 7: успел
- пакет 8: успел
- пакет 9: успел
- пакет 10: успел
Дырок нет: 0. Но начало сдвинулось на такт 5, и разговор стал тягучим: собеседники начинают перебивать друг друга. Поэтому запас держат небольшим - обычно 50-150 миллисекунд, а не «побольше на всякий случай».
Такт здесь условный: в жизни счёт идёт в миллисекундах, а запас подбирается на ходу по статистике, которую собирает протокол RTCP, и меняется прямо во время разговора. Ориентиры из статьи: буфер обычно 50-150 мс, вся цепочка от камеры до экрана типично укладывается в 100-300 мс, до 150 мс разговор ощущается нормальным, а свыше 400 мс становится некомфортным.
Интерактив разработан ANY.BY - ремонт компьютеров и ноутбуков в Барановичах. © 2008-2026. Источник: any.by/demo/bufer-dzhittera