@urun-sh/core 0.2.44 → 0.2.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/dist/{chunk-GODG6BJH.mjs → chunk-3YI4A64L.mjs} +3 -3
- package/dist/{chunk-N4BL7R3R.mjs → chunk-CDOESHK5.mjs} +2 -2
- package/dist/index.browser.js +1 -1
- package/dist/index.browser.mjs +1 -1
- package/dist/index.js +3 -3
- package/dist/index.mjs +1 -1
- package/dist/internal.browser.js +1 -1
- package/dist/internal.browser.mjs +1 -1
- package/dist/internal.js +3 -3
- package/dist/internal.mjs +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.44
|
|
4
|
+
|
|
5
|
+
- **A flat inbound RTP counter no longer tears down a healthy media transport.** The
|
|
6
|
+
media-liveness watchdog treated any inbound-bytes counter that stayed flat past
|
|
7
|
+
`stallTimeoutMs` (default 6s) as media death and answered it with a full
|
|
8
|
+
teardown + re-dial. A cumulative receive counter cannot tell a dead path from a
|
|
9
|
+
SENDER WITH NOTHING TO SEND — both look identical at the receiver — so every
|
|
10
|
+
on-demand app blacked itself out: zimage emits a handful of H.264 frames per
|
|
11
|
+
generation and then legitimately goes quiet, so each idle gap destroyed the
|
|
12
|
+
transport, the SFU scored the teardown as consumer-abandoned and ended the
|
|
13
|
+
session, the runtime tore down its encoder, and the next dial had no keyframe to
|
|
14
|
+
decode. Self-sustaining reconnect loop; same class as the 3724x reconnect storm.
|
|
15
|
+
The ICE agent already answers "is this path alive?" natively — consent freshness
|
|
16
|
+
(RFC 7675) re-probes the selected pair every ~5s independently of media, and
|
|
17
|
+
`transport.connectionState` IS that verdict. The stall window now only
|
|
18
|
+
CORROBORATES a transport the ICE agent has already given up on. While ICE says
|
|
19
|
+
`connected`, a quiet stream emits a new `media-idle` (`level: 'info'`) diagnostic
|
|
20
|
+
and the transport, its consumers and the last decoded frame are left alone.
|
|
21
|
+
Genuine media death keeps both authoritative library-native detectors —
|
|
22
|
+
`connectionstatechange` → `restartIce()` in place, and a higher control-doc
|
|
23
|
+
incarnation → renegotiate — neither of which needs the counter. Detection stays
|
|
24
|
+
level-triggered, so a path that dies AFTER a long idle gap is still recovered.
|
|
25
|
+
Locked by the `no-teardown-on-idle-inbound-counter` ast-grep guard.
|
|
26
|
+
- **The idle gap no longer leaks into the DECODE rule.** `_checkDecodeLiveness` is only
|
|
27
|
+
reachable while inbound bytes are ADVANCING, so nothing refreshed `_lastDecodeAdvanceAt`
|
|
28
|
+
across a quiet stretch. On the first resume tick the new generation's RTP can land before
|
|
29
|
+
the decoder has assembled a frame from it — bytes advance, `framesDecoded` has not ticked
|
|
30
|
+
yet — and the decode rule then measured the WHOLE idle gap and declared a `decode-wall`,
|
|
31
|
+
firing exactly the `_renegotiate()` teardown the fix above removes. The `media-idle` branch
|
|
32
|
+
now re-arms the decode clock too: a decoder with nothing to decode is not a stalled decoder.
|
|
33
|
+
A genuine decode wall after a resume is still caught.
|
|
34
|
+
|
|
3
35
|
## 0.2.24
|
|
4
36
|
|
|
5
37
|
- Docs-only release: README accuracy pass against the 0.2.23+ surface (the READMEs ship in
|