96 lines
10 KiB
Plaintext
96 lines
10 KiB
Plaintext
Диагностика аудио в окне звонка
|
|
==============================
|
|
|
|
Desktop: единственная кнопка «Диагностика» открывает отдельное окно; закрытие не завершает звонок.
|
|
Слева графики, справа сверху текст соединения/маршрута и аудиостатистика, ранее раскрывавшиеся
|
|
в окне звонка. Ширина панелей меняется разделителем; длинный текст прокручивается и выделяется для копирования.
|
|
Android: значок графика в верхней строке активного звонка открывает прокручиваемую панель.
|
|
Сверху вниз: буфер приёма, очереди передачи, скорость отправки ETCP, гистограмма.
|
|
Три временных графика показывают одни и те же последние 30 секунд.
|
|
Min/Max относятся ко всем линиям соответствующего графика за показанный интервал.
|
|
Масштаб автоматический; минимальный диапазон: RX 100мс, TX 1024 байта, скорость 256 байт/с.
|
|
|
|
Общий источник — call_history_store.h внутри call_jitter. Наблюдение не меняет
|
|
резерв, упаковку, темп, ретрансляцию или выбор маршрута. Согласованный новый
|
|
регулятор качества — отдельное изменение; текущая панель показывает существующий.
|
|
|
|
RX
|
|
--
|
|
Playback worker сохраняет глубину Opus+исходного PCM в DSP перед pull, текущую
|
|
цель и реально недостающие выходные сэмплы. PCM, уже переданный устройству, в RX
|
|
глубину не входит. Начальное ожидание отображается, но не считается нехваткой речи.
|
|
После старта нехватка включает повторное накопление: это наблюдение прерывания
|
|
на выходе общего аудиостека, не доказательство потери сетевых пакетов.
|
|
|
|
Синяя линия — заполнение перед pull, зелёная — целевой резерв регулятора.
|
|
Оранжевая — доступный запас: фактический остаток Opus+исходного PCM в DSP после
|
|
полной выдачи запрошенного блока. При короткой выдаче и во время начального или
|
|
повторного накопления запас равен нулю: звук приостановлен, хотя заполнение может расти.
|
|
После возобновления оранжевая линия снова показывает остаток. PCM устройства сюда
|
|
не входит. Шкала RX начинается с нуля; отрицательного запаса нет. Красные точки
|
|
показывают нехватку выходного PCM после начала звука.
|
|
|
|
Точки объединяются в 50мс интервалы; min/max заполнения и запаса внутри интервала сохраняются.
|
|
Гистограмма отдельно накапливает длительность всех PCM-блоков по их глубине,
|
|
поэтому короткий провал не заменяется средним значением интервала. Размер блока
|
|
и число pull не меняют его временной вес. Шаг столбцов 50мс, последний >=3000мс.
|
|
Вес: exp2(-возраст/10000мс); доли нормируются на взвешенную длительность PCM.
|
|
До первого PCM гистограмма пуста. Это распределение запаса, не сетевая задержка.
|
|
|
|
TX
|
|
--
|
|
Снимок снимает uasync в существующем 50мс таймере звонка:
|
|
синяя линия = send_q + inflight_q всех Router-каналов ядра + локальная FIFO Opus звонка;
|
|
оранжевая = сумма inflight_q этих же Router-каналов;
|
|
фиолетовая = etcp_tx_get_snapshot: ожидание + логические unacked всех ETCP-соединений.
|
|
Это глобальные суммы, включая фоновые сервисы, не только аудиопакеты собеседника.
|
|
Нижний транспорт не прибавляется к синей линии: Router хранит те же данные до ACK.
|
|
Непереданные внутренние очереди других производителей до Router сюда не входят.
|
|
|
|
Скорость
|
|
--------
|
|
etcp_router_get_path выбирает тот же ETCP_CONN, что отправка CALL_AUDIO.
|
|
diagnostic_wire_tx_bytes увеличивается только при принятии полного кадра packet_link.
|
|
Считаются все ETCP-кадры соединения, в том числе другие сервисы, ACK и повторы.
|
|
Обрамление BLE/TCP/UDP ниже ETCP не считается. Принятие драйвером может означать
|
|
его очередь; это не подтверждение фактического выхода в эфир или доставки пиру.
|
|
Байт/с = разность счётчиков / время за последние <=1с. Переключение peer/epoch,
|
|
падение счётчика и пробел измерений >150мс не образуют скачок скорости.
|
|
Скорость вычисляется при записи измерения и хранится вместе с ним. При сдвиге
|
|
графика старые значения не пересчитываются: левый край не теряет свою предысторию.
|
|
|
|
Снимки и ресурсы
|
|
---------------
|
|
Хранятся ограниченные кольца за 30с; отсутствие измерений не заполняется нулями.
|
|
UI получает независимую копию каждые 250мс только при открытом окне. Android
|
|
останавливает опрос также в фоне. Скрытие окна не выключает native-сбор.
|
|
Desktop после завершения звонка сохраняет последний показанный снимок.
|
|
Графики не требуют call=debug; открытие/закрытие логируется, в hot path нет аллокаций.
|
|
|
|
Сводки call/debug
|
|
----------------
|
|
При call=debug (или trace) каждые 200мс uasync пишет `audio buffers` и `audio transport`.
|
|
Это локальные записи существующих выходов логирования, не новые пакеты в канале звонка.
|
|
mono_ms связывает обе сводки, dt_ms показывает реальный интервал, включая задержку самого uasync.
|
|
audio buffers: текущие Opus/DSP/цель, required_ms — порог выдачи последнего pull,
|
|
headroom_ms — доступный остаток после него (0 при паузе), min/max запаса и заполнения за интервал, pulls, requested_ms/missing_ms
|
|
после начала звука, возраст последнего pull, темп/ожидание/догон, накопительные underruns,
|
|
сетевая вариация, decode/budget события с последней секундной CALL_STATS, глобальные очереди
|
|
Router (queued включает локальное ожидающее аудио), отдельный ETCP и скорость выбранного пути.
|
|
capture_pending/dropped и AEC over/under — дополнительные признаки локальной перегрузки.
|
|
audio transport: очередь и возраст локального Opus, пачка/обратная связь/причина ожидания,
|
|
очереди только Router-канала звонка, полный enqueue->ACK и submit->ACK RTT, возраст последнего
|
|
ACK, подтверждённые за 500мс байты, эпохи канала, кадры/пачки TX/RX и время без входящего аудио.
|
|
Также показываются накопительные повторы/дубли Router и размер его окна в пакетах.
|
|
Первая транспортная сводка — исходная точка с dt_ms=0; следующие идут не чаще раза в 200мс.
|
|
Значение -1 у скорости, возраста ACK/pull означает отсутствие измерения. При pulls=0 min/max
|
|
не определены (поля равны нулю); начальное накопление не увеличивает missing_ms.
|
|
Интервал pull считается отдельно от графиков и событий CALL_STATS; даже короткий провал
|
|
между сводками сохраняет свою длительность. Время суммы requested/missing дано в PCM при 48кГц.
|
|
Сводки выводятся после освобождения аудиомьютексов, без копирования/обхода 30с истории.
|
|
При выключенном call/debug счётчики интервала продолжают обнуляться, тяжёлые снимки не читаются.
|
|
|
|
Простыми словами: аудиомодуль записывает, сколько звука было в запасе и сколько
|
|
его не хватило. Сеть отдельно записывает очереди и объём отправки. Оба интерфейса
|
|
показывают одни и те же измерения, ничего не меняя в работе звонка.
|