Skip to content

Commit 37ee626

Browse files
committed
docs: add WebVTT timing research documentation
Add comprehensive research on WebVTT timing specifications, browser implementation constraints, and performance considerations that inform design decisions for TCX workout data conversion. Documents the rationale for 1-second cue intervals and cross-browser compatibility requirements.
1 parent d2de6a0 commit 37ee626

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

docs/webvtt-timing-research.md

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# WebVTT timing specifications for rapid cue changes
2+
3+
**The official W3C WebVTT specification does not impose minimum cue duration limits**,
4+
making it technically suitable for your TCX workout file conversion tool with JSON metadata.
5+
However, **browser implementations and parser performance create practical constraints**
6+
that require careful consideration for reliable cross-platform operation.
7+
8+
## Official specification requirements
9+
10+
The W3C WebVTT specification is remarkably permissive regarding timing constraints. **No
11+
minimum cue duration is specified** - the only requirement is that end time must be greater
12+
than start time. The specification explicitly allows **overlapping cues and zero gaps
13+
between consecutive cues**, except for chapter tracks.
14+
15+
Timestamps support **millisecond precision** using the format `HH:MM:SS.mmm` where
16+
milliseconds range from 000-999. Cues must be ordered by start time in the file, but their
17+
durations can overlap. This technical flexibility means your TCX conversion tool can
18+
theoretically create cues with durations as short as 1 millisecond.
19+
20+
## Browser implementation realities reveal critical limitations
21+
22+
While the specification is permissive, **browser implementations vary significantly** in
23+
handling rapid cue changes. Chrome and Firefox provide the most robust implementations, but
24+
both experience performance degradation with very high-frequency cue changes. **Safari
25+
presents the most significant challenges**, with documented issues where multiple
26+
simultaneous positioned cues cause display problems and synchronization drift.
27+
28+
Research reveals that cues changing faster than every **100-200 milliseconds frequently
29+
cause problems**. Browsers may skip cues entirely, experience memory leaks, or lose
30+
synchronization between video and metadata tracks. The root cause stems from browser
31+
rendering pipelines not being optimized for subtitle-reading speeds faster than human
32+
comprehension.
33+
34+
## Parser performance creates practical constraints
35+
36+
WebVTT parsing libraries show **consistent performance degradation with rapid cue
37+
transitions**. JavaScript implementations experience floating-point precision issues when
38+
storing timing values as doubles, leading to timing drift in applications requiring precise
39+
synchronization. A documented case of a "WebVTT metronome" revealed that only Firefox's
40+
native video viewer handled millisecond-precision timing consistently across extended
41+
periods.
42+
43+
Parser-specific constraints include strict mode validation where zero-duration cues are
44+
rejected, and memory overhead that scales linearly with cue frequency. **Native
45+
implementations in C/C++ show better performance** than JavaScript parsers for
46+
high-frequency scenarios, but browser-based applications are limited to JavaScript engines.
47+
48+
## Recommendations for TCX workout data conversion
49+
50+
For your TCX to WebVTT conversion tool, implement **1-second interval cues** as the optimal
51+
balance between precision and performance. This frequency provides adequate granularity for
52+
workout data while avoiding browser performance issues. Structure your JSON metadata using
53+
the `kind="metadata"` track type to prevent visual display while maintaining synchronization
54+
capabilities.
55+
56+
**Technical implementation guidance:**
57+
58+
- Use hidden metadata tracks (`track.mode = 'hidden'`) to load data without display
59+
- Structure cues with millisecond precision timestamps for accuracy
60+
- Include essential workout metrics in JSON objects within cue payloads
61+
- Implement JavaScript event throttling when processing `cuechange` events
62+
- Test extensively across browsers, particularly Safari's simultaneous cue handling
63+
64+
## Performance boundaries and practical limits
65+
66+
While the specification supports sub-second timing, **practical limits emerge around 100ms
67+
minimum cue duration** for reliable cross-browser compatibility. Cues shorter than this
68+
threshold risk being skipped by browser rendering engines operating at typical video frame
69+
rates (30-60 fps).
70+
71+
For non-visual metadata applications like workout data synchronization, the **sweet spot
72+
appears to be 1Hz updates** (1-second intervals), providing responsive data updates without
73+
overwhelming browser processing capabilities. This frequency aligns well with typical
74+
workout data sampling rates and ensures consistent performance across all major browsers and
75+
WebVTT parser implementations.
76+
77+
## Conclusion
78+
79+
WebVTT's specification flexibility makes it technically viable for rapid cue changes in your
80+
TCX conversion tool, but browser implementation realities require a more conservative
81+
approach. **The format supports your use case effectively at 1-second intervals**, providing
82+
reliable cross-platform performance while maintaining sufficient granularity for workout
83+
data visualization and analysis. Focus your implementation on metadata tracks with JSON
84+
payloads, and you'll have a robust solution that leverages WebVTT's synchronization
85+
capabilities without encountering the performance pitfalls of ultra-rapid cue changes.

0 commit comments

Comments
 (0)