feat(dred): continuous DRED tuning, PMTUD, extended Opus6k window
- DredTuner: maps live network metrics (loss/RTT/jitter) to continuous DRED duration every ~500ms instead of discrete tier-locked values. Includes jitter-spike detection for pre-emptive Starlink-style boost. - Opus6k DRED extended from 500ms to 1040ms (max libopus 1.5 supports) - PMTUD: quinn MtuDiscoveryConfig with upper_bound=1452, 300s interval - TrunkedForwarder respects discovered MTU (was hard-coded 1200) - QuinnPathSnapshot exposes quinn internal stats + discovered MTU - AudioEncoder trait: set_expected_loss() + set_dred_duration() methods - PathMonitor: sliding-window jitter variance for spike detection - Integrated into both Android and desktop send tasks in engine.rs - 14 new tests (10 tuner unit + 4 encoder integration) - Updated ARCHITECTURE.md, PROGRESS.md, PRD-dred-integration, PRD-mtu Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -123,7 +123,6 @@ fn transport_config() -> quinn::TransportConfig {
|
||||
config.keep_alive_interval(Some(Duration::from_secs(5)));
|
||||
|
||||
// Enable DATAGRAM extension for unreliable media packets.
|
||||
// Allow datagrams up to 1200 bytes (conservative for lossy links).
|
||||
config.datagram_receive_buffer_size(Some(65536));
|
||||
|
||||
// Conservative flow control for bandwidth-constrained links
|
||||
@@ -134,6 +133,26 @@ fn transport_config() -> quinn::TransportConfig {
|
||||
// Aggressive initial RTT estimate for high-latency links
|
||||
config.initial_rtt(Duration::from_millis(300));
|
||||
|
||||
// PMTUD (Path MTU Discovery) — quinn 0.11 enables this by default but
|
||||
// with conservative bounds (initial 1200, upper 1452). We keep the safe
|
||||
// initial_mtu of 1200 so the first packets always get through, but raise
|
||||
// upper_bound so the binary search can discover larger MTUs on paths that
|
||||
// support them. Typical results:
|
||||
// - Ethernet/fiber: discovers ~1452 (Ethernet MTU minus IP/UDP/QUIC)
|
||||
// - WireGuard/VPN: discovers ~1380-1420
|
||||
// - Starlink: discovers ~1400-1452
|
||||
// - Cellular: stays at 1200-1300
|
||||
// Black hole detection automatically falls back to 1200 if probes fail.
|
||||
// This matters for future video frames which can be 1-50 KB and benefit
|
||||
// from fewer application-layer fragments per frame.
|
||||
let mut mtu_config = quinn::MtuDiscoveryConfig::default();
|
||||
mtu_config
|
||||
.upper_bound(1452)
|
||||
.interval(Duration::from_secs(300)) // re-probe every 5 min
|
||||
.black_hole_cooldown(Duration::from_secs(30)); // retry faster on lossy links
|
||||
config.mtu_discovery_config(Some(mtu_config));
|
||||
config.initial_mtu(1200); // safe starting point
|
||||
|
||||
config
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user