Keep startup defaults and reset reserve snapshots consistent
This commit is contained in:
1 parent
a7bb72a0b7
commit
e43f95ea83
3 files changed
+7
-5
No files matched your search
@@ -46,7 +46,7 @@ Router сохраняет исходное монотонное enqueued_us в s
|
||||
Прежние rtt_us/baseline_rtt_us и алгоритм видеорегулятора не меняются.
|
||||
|
||||
Полный delivery_rtt_us включает исходную очередь Router, нижние очереди,
|
||||
путь до приёмника и возврат ACK. Базовый RTT НЕ вычитается. Это не время
|
||||
путь до приёмника и возврат ACK. Этот показатель сам по себе не доказывает перегрузку. Это не время
|
||||
доставки в динамик и не измерение односторонней задержки.
|
||||
|
||||
Регулятор
|
||||
|
||||
@@ -284,6 +284,7 @@ void call_jitter_reset(struct call_jitter* j) {
|
||||
j->depth_window = {};
|
||||
j->diagnostics = {};
|
||||
j->range.min_ms = j->range.max_ms = keep * CALL_JITTER_FRAME_MS;
|
||||
j->range.reserve_ms = j->policy.reserve_ms;
|
||||
DEBUG_INFO(DEBUG_CATEGORY_CALL, "call_jitter: device discontinuity discarded=%dms kept=%dms reserve=%dms",
|
||||
discard * CALL_JITTER_FRAME_MS, keep * CALL_JITTER_FRAME_MS, j->policy.reserve_ms);
|
||||
}
|
||||
|
||||
@@ -24,19 +24,20 @@
|
||||
* сумма задержек диагностическая, не общий регулятор всех очередей.
|
||||
* Константы ниже — параметры политики, проверяемые сценариями, не свойства протокола. */
|
||||
#pragma once
|
||||
#include "call_jitter.h"
|
||||
#include <algorithm>
|
||||
#include <cstdint>
|
||||
|
||||
struct call_playout_policy {
|
||||
int reserve_ms = 200; // Нижний сетевой запас, уменьшается только при устойчивом воспроизведении.
|
||||
int reserve_ms = CALL_JITTER_STARTUP_MS; // Нижний сетевой запас, уменьшается только при устойчивом воспроизведении.
|
||||
int64_t stable_since_ms = -1, last_lower_ms = -1;
|
||||
unsigned packets = 0; // Число новых пачек с последнего нарушения устойчивости.
|
||||
static constexpr int StableMs = 5000, LowerIntervalMs = 1000, StepMs = 20;
|
||||
static constexpr int StableMs = 5000, LowerIntervalMs = 1000, StepMs = CALL_JITTER_FRAME_MS;
|
||||
static constexpr unsigned MinimumPackets = 20;
|
||||
|
||||
// Одна оценка на пачку; observed_ms — размах изменения доставки, без постоянного RTT.
|
||||
void observe(int64_t now_ms, int observed_ms, int maximum_ms, bool playing) {
|
||||
int required = std::min(maximum_ms, std::max(20, observed_ms + StepMs)); // Одна Opus-граница сверх измеренной вариации.
|
||||
int required = std::min(maximum_ms, std::max(CALL_JITTER_MIN_RESERVE_MS, observed_ms + StepMs));
|
||||
if (stable_since_ms < 0 || !playing || required > reserve_ms) {
|
||||
stable_since_ms = now_ms; packets = 0;
|
||||
}
|
||||
@@ -49,7 +50,7 @@ struct call_playout_policy {
|
||||
}
|
||||
// Реальная нехватка/смена устройства отменяет уверенность; повторный старт не расходует старый малый резерв.
|
||||
void recover(int64_t now_ms, int maximum_ms) {
|
||||
reserve_ms = std::min(maximum_ms, std::max(200, reserve_ms + StepMs));
|
||||
reserve_ms = std::min(maximum_ms, std::max(CALL_JITTER_STARTUP_MS, reserve_ms + StepMs));
|
||||
stable_since_ms = now_ms; packets = 0; last_lower_ms = now_ms;
|
||||
}
|
||||
};
|
||||
Reference in new issue
Block a user