aboutsummaryrefslogtreecommitdiffstats
path: root/docs/MESHBAY_DESIGN.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/MESHBAY_DESIGN.md')
-rw-r--r--docs/MESHBAY_DESIGN.md21
1 files changed, 13 insertions, 8 deletions
diff --git a/docs/MESHBAY_DESIGN.md b/docs/MESHBAY_DESIGN.md
index 7ce1168..8f91a87 100644
--- a/docs/MESHBAY_DESIGN.md
+++ b/docs/MESHBAY_DESIGN.md
@@ -2052,14 +2052,19 @@ MSE string) fed to a source buffer, with the node holding one slot per viewer.
from the end and echoed back; the client supplies the timestamp offset, because
copying timestamps does not preserve position.
- **`stream_init.start` names where the picture begins, never where the viewer
- dragged.** Copied video can only begin on a keyframe, so on that path the node
- resolves the request to the keyframe at or before it, seeks to that, and reports
- that. The client builds `SourceBuffer.timestampOffset` out of this number, and a
- subtitle cue carries the source's own absolute time: one GOP of disagreement
- between the two puts every line on screen before it is spoken. The look-up is a
- bounded read of the thirty seconds before the request, measured at 0.12–0.51 s
- on a real title, and only the copy path needs it — re-encoded video begins
- exactly where it is asked to.
+ dragged**, and on the copy path that position is **measured, never predicted**.
+ The client builds `SourceBuffer.timestampOffset` out of this number and a
+ subtitle cue carries the source's own absolute time, so every second of
+ disagreement puts a line on screen a second away from the voice saying it.
+ Reading the key frames and taking the last one at or before the request answers
+ a different question twice over: Matroska's Cues index only some keyframes, so
+ an index seek backs off to an indexed one that can be much earlier, and the
+ landing point moves with **which streams are mapped**, because the container is
+ positioned where every mapped stream has data — one real seek answered 4909.863 s
+ from the frame list and delivered 4907.236 s. So the node runs the same seek with
+ the same mapping, copies one frame under `-copyts`, and reads the answer back:
+ 0.06–0.07 s, cheaper than the scan it replaced. Only the copy path needs it —
+ re-encoded video begins exactly where it is asked to.
- **A seek trims what it can, and what it can differs per stream — which is a
desync, not an inconvenience.** Accurate seeking cannot trim copied video, which
must begin on a keyframe, but it does trim re-encoded audio to the exact request.