diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/MESHBAY_DESIGN.md | 19 |
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 |