Перейти к содержимому
Приложение J. Как работает видеозвонок: от нажатия кнопки до картинки на экране

Буфер джиттера: ровно или сразу

Пакеты приходят вразнобой, и за гладкий звук платят задержкой.

// разброс задержки

Пакеты голоса идут по сети не строем: один приходит вовремя, другой задерживается. Это и есть джиттер. Воспроизводить надо ровно, такт за тактом, поэтому приложение копит небольшой запас перед началом. Выберите размер запаса и посмотрите, что получится на одних и тех же данных.

Когда пакет пришёл (такт)
  1. пакет 1: 1
  2. пакет 2: 2
  3. пакет 3: 3
  4. пакет 4: 6
  5. пакет 5: 5
  6. пакет 6: 6
  7. пакет 7: 10
  8. пакет 8: 8
  9. пакет 9: 9
  10. пакет 10: 10

Играем сразу, как только пришёл первый пакет. Задержки нет вовсе, но и подождать опоздавших нечем.

Что услышал собеседник Воспроизведение началось на такте 1
  1. пакет 1: успел
  2. пакет 2: успел
  3. пакет 3: успел
  4. пакет 4: опоздал, дырка
  5. пакет 5: успел
  6. пакет 6: успел
  7. пакет 7: опоздал, дырка
  8. пакет 8: успел
  9. пакет 9: успел
  10. пакет 10: успел

Дырок получилось 2 из 10: каждый опоздавший пакет - это щелчок или пропавший кусочек звука. Декодер попробует достроить его по соседним, но короткие потери заметны именно так.

Ждём два такта, потом начинаем. Опоздавшие получают фору.

Что услышал собеседник Воспроизведение началось на такте 3
  1. пакет 1: успел
  2. пакет 2: успел
  3. пакет 3: успел
  4. пакет 4: успел
  5. пакет 5: успел
  6. пакет 6: успел
  7. пакет 7: опоздал, дырка
  8. пакет 8: успел
  9. пакет 9: успел
  10. пакет 10: успел

Дырок осталось 1: почти все опоздавшие успели, потому что воспроизведение стартовало на такте 3, а не на первом. Цена - задержка в 2 такта, и она добавляется ко всему остальному в цепочке.

Копим побольше: звук пойдёт совсем гладко.

Что услышал собеседник Воспроизведение началось на такте 5
  1. пакет 1: успел
  2. пакет 2: успел
  3. пакет 3: успел
  4. пакет 4: успел
  5. пакет 5: успел
  6. пакет 6: успел
  7. пакет 7: успел
  8. пакет 8: успел
  9. пакет 9: успел
  10. пакет 10: успел

Дырок нет: 0. Но начало сдвинулось на такт 5, и разговор стал тягучим: собеседники начинают перебивать друг друга. Поэтому запас держат небольшим - обычно 50-150 миллисекунд, а не «побольше на всякий случай».

Такт здесь условный: в жизни счёт идёт в миллисекундах, а запас подбирается на ходу по статистике, которую собирает протокол RTCP, и меняется прямо во время разговора. Ориентиры из статьи: буфер обычно 50-150 мс, вся цепочка от камеры до экрана типично укладывается в 100-300 мс, до 150 мс разговор ощущается нормальным, а свыше 400 мс становится некомфортным.

Интерактив разработан - ремонт компьютеров и ноутбуков в Барановичах. © 2008-2026. Источник: any.by/demo/bufer-dzhittera