5.3.0 (2026-10-16)
Features
- ABR: Offer every audio track and fall back to fewer channels (#10689) (eba48f4)
- Add AV1 support to the TS transmuxer (#10603) (7ca2834)
- Add Azerbaijani Locale (#10557) (59a9807)
- Add Breton UI translation (#10655) (0017af2)
- Add MKV support on experimental build (#10667) (4a13947), closes #10388
- Ads: cooldown config for interstitial ad (#10494) (2a9b0f1)
- Ads: Parse HLS and SVTA interstitials in format-specific parsers (#10725) (a2a47f7)
- Allow override subtitle font family, colors, opacities and character edge style (#10697) (c7d40cb)
- CEA: Extract CEA-608/708 captions from AV1 video (#10509) (73643dd)
- CMCD: Support MPD-signaled CMCD parameters (DASH 6th Edition) (#10590) (0b3c86e), closes #10580
- Complete IAMF support for CMAF/MP4 (#10586) (0a702a2), closes #10581
- DASH: Add subtitle support for role attribute and kind='subtitle' (#10441) (8f19ce4)
- DASH: Add support for Preselections (Next Generation Audio) (#10344) (89f1255)
- DASH: Remove DASH JSON support from the experimental build (#10705) (7c3af8b)
- DASH: Tag xlink and linked-MPD requests with advanced request types (#10596) (1630988)
- DRM: Add config.drm.keepDrmEngineOnDetach (#10530) (613da76)
- HLS: Fall back to native playback on unsupported MSE encryption (#10699) (7ded57c)
- HLS: Preload AES keys hinted by EXT-X-PRELOAD-HINT TYPE=KEY (#10715) (bff8459)
- MSF: Add AV1 support to the LOC transmuxer (#10517) (0e371e2)
- MSF: Add LOCMAF support (#10538) (e642b8b)
- MSF: Add m2ts packaging support (#10444) (4209dbb)
- MSF: Add media timeline support with DVR and seeking (#10627) (50108e9)
- MSF: Add MoQT draft-18 support and deprecate draft-14 (#10383) (adc8c1b)
- MSF: Add MoQT draft-20 and draft-21 support and deprecate draft-16 (#10598) (3b76785)
- MSF: Add MoQT draft-22 support (#10710) (20d5872)
- MSF: Add MSF_COMPRESSION support (#10663) (59c7fb7)
- MSF: Add SCTE-35 support via event timeline tracks (#10668) (13f905c)
- MSF: Join the current catalog group and add a catalog store (#10670) (2d21352)
- MSF: Join the current group at the live edge and remove subscribeFilterType (#10718) (22f1150)
- MSF: Remove MoQT draft-14 and draft-16 support (#10706) (9b7fe64)
- Queue: Add autoPlayNext config (#10503) (7b41cae)
- Runtime skip ranges + MediaTailor played-ad-break skipping (#10338) (8c54db3)
- TTML: Improve IMSC conformance of timing, regions and styling (#10729) (8996205)
- UI: Add 'RESET' translation to Azerbaijani locale (#10707) (c353a83)
- UI: Add a reset button to the subtitle style menu (#10692) (6d2475d)
- UI: Add missing translations (#10690) (2d7d37d)
- UI: Add nested menu groups and subtitle settings submenus (#10681) (4a816ea)
- UI: Add seek backward and forward buttons (#10662) (225281c)
- UI: Add subtitle font family, color, opacity and character edge style menus (#10711) (6c5d2f1)
- UI: Add UI setting playbackRateSliderStep (#10516) (55152b0)
- UI: Deprecate showMenusOnTheRight config (#10708) (cb35995)
- UI: Let keyboard controls take over an in-progress seek bar drag (#10478) (eae4846), closes #10456
- UI: Show centered tooltips on big buttons (#10644) (2e795b5), closes #10632
- unify SCTE-35 handling across DASH, HLS and EMSG (#10606) (9ac5c92)
Bug Fixes
- ABR: Keep the whole ladder when each quality uses its own audio group (#10672) (d1af43d)
- Add support for embedded closed captions and improve timestamp rollover handling in HLS and VTT parsers (#10425) (a918c3d)
- Ads: Do not report a resume for an ad's first playout (#10566) (3a7430c), closes #10562
- Ads: Don't drop SVTA signaling of preloaded assets (#10520) (7b695f1)
- Ads: Don't enable the skip button before the ad's own media loads (#10447) (306ab8f), closes #10418
- Ads: Report an ad that reaches its playout limit as complete (#10521) (ec1704c)
- Ads: Report the last ad of a pod as complete (#10546) (a61ca44), closes #10545
- Ads: Report the last ad of a pod as complete when using SVTA tracking (#10576) (c556caa), closes #10545
- Ads: Restrict click-through URIs to http(s) schemes (#10412) (8681f03)
- Ads: Send ad tracking events via GET (#10469) (a38ec9b)
- Apple: Resume at the playhead after a quality switch on Safari (#10643) (39ac0d5), closes #10504
- Apply the negative timestampOffset workaround only on legacy Edge (#10591) (7986cf8)
- Avoid quadratic copying of prefetched segment data (#10448) (ef14147), closes #10446
- Avoid re-downloading init segments on unbuffered seek (#10428) (10eb756), closes #10373
- CEA: Honor CEA-708 caption pen opacity (#10621) (8a2d78f), closes #10620
- CEA: Keep the caption continuity timeline for split muxed content (#10734) (3c9ade6)
- Clear prefetch cache for init segments and aborted requests (#10587) (98701c3), closes #10569
- CMCD: Re-arm the reporter on every load() (#10416) (d71d28f)
- DASH: Fix stall when a fixed-duration segment lookup rounds to the next segment (#10717) (f79a712)
- DASH: Get the key ID from the init segment when the manifest has none (#10552) (ab8c5e2), closes #10390
- DASH: Keep captions working when a Period's timeline ends early (#10649) (3adc31f)
- DASH: Live to VOD transition with multi period start not at 0 (#10480) (3c78ece)
- DASH: Prevent freezes when live Period IDs reappear (#10641) (c604fd0)
- Demo: Avoid requesting missing UI locales repeatedly (#10610) (5004a96)
- Demo: Persist array config values in the URL hash (#10539) (05b74e0)
- device: Ban changeType on Opera for macOS (#10514) (204b978)
- Do not append empty buffers to the SourceBuffer (#10733) (0570ce5)
- Dolby Vision: Enable Dolby Vision p8 workaround on encrypted content (#10423) (8c163a8)
- Don't fall back to another role when the preferred text role is unmatched (#10549) (279fcb8), closes #9993
- Don't re-encode existing query parameters when appending new ones (#10415) (dc110e5)
- DRM: Don't let a manifest ClearKey license URL override drm.servers (#10659) (c11e76a), closes #10656
- DRM: Ignore session creation during teardown (#10614) (bf7ea8d)
- drm: prevent corrupted cbcs clearkey playback (#10695) (1b24fa2)
- enforce paused state when seeking from ended state (#10579) (b8915ee), closes #10410
- Fix duplicate error code 4058 (#10372) (eb94e6f)
- Fix stuck playback on multiplexed TS content (#10431) (3011e6e)
- Gate the media pipeline flush behind a device flag (#10607) (174878c)
- HLS: Add missing AV2 video codec detection (#10594) (4375553)
- HLS: Allow unbuffered seeks after a live broadcast ends (#10609) (4bc94ec), closes #10593
- HLS: Avoid a needless abort() on every append in segments mode (#10559) (aba5ba5)
- HLS: Avoid TypeError when a media playlist fails during load() (#10560) (3b098a0)
- HLS: Detect audio-only raw content when CODECS is missing (#10399) (49fa88b)
- HLS: Detect packed audio served with a container extension (#10622) (7dbfca6)
- HLS: Fix audio/video desync in muxed TS segments mode (#10406) (4650e30), closes #10341
- HLS: Fix switching from muxed audio to a separate TS audio rendition (#10661) (9b9519c)
- HLS: Play packed audio that is published with a .ts extension (#10657) (39445d7), closes #10654
- HLS: Support legacy X-CUE for interstitials (#10558) (d2125b9)
- HLS: synchronize HTML5 audio track selection in src= mode (fixes #10551) (#10568) (773eb27)
- Keep captions working when periods disagree on caption vs subtitle (#10600) (a2814ef), closes #10599
- Keep crossing the boundary when the playhead overshoots it (#10676) (9babbcd)
- Keep the configured crossBoundaryStrategy across loads (#10660) (91ca4db), closes #10647
- Keep the XML node for SCTE-35 emsg messages without Binary (#10666) (43940dc)
- Mp4Parser: Don't hang on a 64-bit largesize of 0 (#10548) (64ff65f), closes #10542
- MSF: Correct LOC object property parsing (#10488) (fbbc8f1)
- MSF: Do not tear down a track that was re-subscribed (#10497) (dd77791)
- MSF: Don't call BigInt() at load time in LOCParser (#10531) (562a87c)
- MSF: Fix draft-16 negotiation and skip empty catalog objects (#10367) (25b244e)
- MSF: Fix hanging draft-18 subscriptions and LOC property decoding (#10508) (7e08506)
- MSF: Fix LOC appends and live timeline sizing (#10495) (9b624c4)
- MSF: Fix moqlivemock playback with tuple namespaces (#10665) (ca1929a)
- MSF: Fix stale decoder config and unread accessibility descriptors (#10498) (55e6257)
- MSF: Fix stream teardown and catalog logging on older browsers (#10630) (71ce3ca)
- MSF: Negotiate the MoQT draft when the server does not echo it (#10519) (8ec47fd)
- MSF: Report bandwidth per group so ABR can pick higher qualities (#10371) (8336642)
- MSF: Report the end of a MoQT session instead of a catalog timeout (#10564) (e39610c)
- MSF: Stop appending to and subscribing to closed tracks (#10601) (4e1c32d)
- net: Abort pending retry delays immediately (#10443) (f5171df), closes #10413
- net: Avoid dropping low-latency segments when a retried request succeeds (#10646) (bb7b7fc)
- net: isolate headers across retry attempts (#10361) (f8297f5)
- Normalize Opus codec when multiplexed (#10464) (0b92535)
- offline: Avoid DRM license removal failure (#10510) (83d6d6d)
- offline: Avoid orphaned DRM sessions on removal failure (#10511) (ce9b5a1)
- offline: Close the database when another connection needs it (#10435) (872a168)
- offline: Don't leak an IndexedDB connection (#10434) (96dff25)
- Only mark MSE append errors recoverable when the stream is disabled (#10409) (f9c6fcd)
- Parse closed captions after transmuxing (#10499) (bfdff64)
- Preload: Prefetch the segment that contains the start time (#10702) (edb8e0f), closes #10701
- presentation timeline enforce segment availability live (#10617) (9564963)
- Prevent destroy() from hanging when playback is wedged (#10624) (a413ce1), closes #10623
- Prevent infinite loop on zero-length WVTT payload box (#10565) (e25a49c), closes #10561
- Prevent long buffering on seeks after period transitions (#10484) (4873333)
- Prevent run-ahead throttling from starving frame-sized segments (#10496) (3c4d16b)
- Prevent screen.orientation methods from being garbage collected on Safari (#10364) (a56b17a)
- Reduce unnecessary error calls (#10501) (5f6d8a6)
- Release XHR handlers once the request is done (#10506) (d02a0e9)
- Reset media source before switching variant on MSE append failure (#10380) (e013447)
- Restore correct playhead position after MediaSource reload (#10335) (33a5f25)
- security: prevent glob expansion in shaka-bot comment command parser (#10281) (a80b3f1)
- test: Skip Widevine tests on Edge with a revoked device certificate (#10449) (9f6a484), closes #10442
- Transmux: Add device registration to the web worker (#10348) (6821c15)
- Transmuxer: Fix infinite loop and dropped frames in MPEG audio (#10529) (f20d807)
- Transmux: Fall back to main thread on worker transmux timeout (#10349) (2586e14)
- Transmux: Fall back to main thread when the transmux worker fails (#10370) (1d28ee2)
- Transmux: Keep codec probing working when a transmuxer plugin throws (#10735) (19ac5a5)
- Transmux: Support audio-only MPEG-TS renditions labeled 'labeled 'audio/mp2t' (#10473) (8751e9d)
- Try every preferredText entry when choosing the text track (#10547) (38d4f4c), closes #10544
- TS: Fix slice_type parsing in multi-slice H.264 frames (#10477) (10e4dd7), closes #10468
- TTML: Clip each sample of a multi-sample stpp segment to its own time (#10602) (0f442f1), closes #10597
- TTML: Support namespace-qualified elements (#10713) (3ed0089)
- UI: Align seek bar chapter markers with the playhead thumb (#10229) (059deee)
- UI: Center the seek bar time on the pointer when there are no thumbnails (#10457) (a6c2574), closes #10452
- UI: Don't drop keyboard focus when the controls hide (#10518) (adee4a6)
- UI: Fix context menu and rate slider touch behavior on mobile (#10365) (41fea2e), closes #10363
- UI: Fix thumbnail preview not scaling with player size (#10333) (aafb1e2)
- UI: Hide the controls after a swipe that starts on a control panel (#10664) (2fa7e42), closes #9892
- UI: Include end boundary when matching last chapter (#10475) (86496a3)
- UI: isolate keyboard shortcuts and fullscreen detection per player instance (#10436) (9a4e146), closes #10429
- UI: Keep keyboard shortcuts working after mouse interactions (#10629) (a902d70)
- UI: Keep seek bar previews inside player bounds (#10714) (18f4769), closes #10709
- UI: Preserve keyboard focus across menus and Document PiP (#10608) (0fa37bf), closes #10583
- UI: Prevent playback rate menu from being cut off on narrow screens (#10343) (d566247)
- UI: Prevent playback rate menu jitter when dragging the slider (#10458) (cfb31c4)
- UI: Preview time/thumbnails when seeking with keys (#10465) (86ef054)
- UI: Render WebVTT regions as the spec describes (#10679) (042b986)
- UI: Scope form element font inheritance to the player container (#10353) (6c358dc)
- UI: Unify playback rate decimal separators (#10693) (77fc1e5)
- WebVTT: Keep percentage font sizes relative to the subtitle size (#10727) (6faf929), closes #10726
- WebVTT: Parse every fragment of a multi-fragment MP4 segment (#10642) (a8cded8)
- WebVTT: Parse REGION blocks and WebVTT-in-MP4 regions (#10677) (c182784), closes #2583
- WebVTT: Render WebVTT regions with the native text displayer (#10678) (74a38d2)
- WebVTT: Show subtitles in fMP4 HLS streams with absolute cue times (#10688) (86fc939)