Browse Source

Document continuous capture timing and device queue tuning scope

master
evgeny 5 days ago
parent
commit
92a942ea8b
  1. 16
      doc/chat_call_arch.md

16
doc/chat_call_arch.md

@ -162,10 +162,24 @@ AudioTrack пересоздавался, очередь временно дос
latency PulseAudio, число скачков >2мс, hole-сэмплы и блоки без достоверного измерения.
Первый скачок за секунду содержит обе latency/поправки конвертера, expected/actual PTS и монотонное время.
Backend публикует только числовой снимок в ограниченное кольцо; форматирование выполняет reporter.
Это наблюдение, а не коррекция: пороги 2мс в call_audio и 20мс в VoiceAudioIo пока сохранены.
Исходный backend-снимок остаётся наблюдением. В capture worker позиция PCM задаёт непрерывные PTS,
а backend медленно корректирует их привязку: постоянная времени 2с, предел 0.5% (100мкс на 20мс PCM).
Скорректированное время используется и для Opus, и для выбора AEC-референса. Сам PCM не изменяется.
Разрыв sequence, смена route и скачок исходных меток >20мс по-прежнему сбрасывают capture/AEC и эпоху;
порог 2мс в call_audio не увеличивается. Секундный `voice-io: capture clock` показывает phase/error/adjustment.
Тесты проверяют десять минут дрейфа +/-300ppm, скачки оценки до 14мс, разбиение чанков 25мс на Opus 20мс,
сохранность PCM, явную потерю, смену устройства и большой разрыв исходных часов.
Счётчик sequence описывает полученные backend-сэмплы; отсутствие потерь очереди само по себе
не доказывает непрерывность физического захвата. Проверять вместе с hole/overflow и route-событиями.
Дальнейший подбор минимальной очереди аудиоустройства (ещё не реализован) отделён от JB/SoundTouch:
старт с проверенного размера, редкие попытки уменьшения после стабильного участка, увеличение при
подтверждённом backend underrun, пауза обучения при смене маршрута/запуске. Размер запрашивается
аппаратными шагами; сохраняется фактически принятый размер, а не только запрос.
Ожидание полного буфера и недостача сети не являются поводом увеличить очередь устройства.
На Android регулируется AudioTrack без flush/recreate; на desktop выход принадлежит SoundManager,
изменение backend-буфера должно выполняться его владельцем, а не отдельным звонком.
Диагностика Android при `call=debug`: playback сохраняет один числовой снимок на блок (20мс)
в кольце 512 элементов, без форматирования/вывода. Отдельный reporter раз в 200мс забирает записи;
раз в секунду выводит `audio summary` с min/avg/max очередей, задержек pull/write и опоздания потока,

Loading…
Cancel
Save