aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/MESHBAY_DESIGN.md19
1 files changed, 19 insertions, 0 deletions
diff --git a/docs/MESHBAY_DESIGN.md b/docs/MESHBAY_DESIGN.md
index 8f91a87..781438a 100644
--- a/docs/MESHBAY_DESIGN.md
+++ b/docs/MESHBAY_DESIGN.md
@@ -2596,6 +2596,25 @@ any LAN renderer can play; the relay is device-agnostic. Chromecast discovery an
control ship. DLNA/UPnP is designed and not built: it is a second device backend
beside the first, not a second relay.
+**Subtitles are rebased onto the relay's clock before they are sent.** The node
+extracts a track whole, so its cues carry the film's timeline, and the player
+can use them unchanged because its SourceBuffer is given `timestampOffset =
+start`. The relay has no such offset: it forwards the node's fragments, which
+begin at zero at the seek point. A receiver is therefore sent the cues shifted
+by `-start`, recomputed at every restart of the relay, and cues that end before
+the stream begins are dropped rather than clamped to zero.
+
+**The subtitle is served from the relay's own port, behind the same token as the
+stream, and with CORS.** A receiver fetches a side-loaded track with XHR from
+its own origin rather than handing it to a media element, so without
+`Access-Control-Allow-Origin` it fails as a network error and the film plays on
+with no subtitles and no message. The stream carries the same headers, because a
+receiver given a side-loaded track reads the media through the same checked
+path: on one and not the other, the load fails whole. They widen nothing the
+token does not already govern. The subtitle URL carries a version because a
+receiver caches a track by address: changing the cues behind a fixed URL leaves
+the previous language on screen.
+
---
## 12. Testing posture