Features
- Introduces comprehensive support for CMCD (Common Media Client Data) Version 2, significantly expanding the player's capabilities for media analytics and client-side data reporting. The implementation leverages the @svta/cml-cmcd library's CmcdReporter to centralize reporting mechanisms, reducing complexity and improving maintainability while aligning with the latest CMCD specifications by @cotid-qualabs, @sebastianpiq , @littlespex,@dsilhavy in #4816
- Add support for Certurl element by @gorkemg and @dsilhavy in #4876, #4973
- Add Apple FairPlay Streaming (FPS) DRM support by @tobbee in #4941
- Add a new reference UI by @dsilhavy (Claude Opus 4.6 was used in this PR) in #4974
- Add a limitBitrateByPortalMinimum setting to prevent limiting too much by @robertbryer in #4950
- Update 608 library to support H.265/H.266 payloads by @littlespex in #4954
- Add a new method getRepresentationsByTypeUnfiltered. This allows applications to get all Representations regardless of any filter settings by @dsilhavy in #4963
- Enable mapping of Supplemental and Essential Properties from AdaptationSet to all Representations, but exclude those needed for URLQueryParams according to Annex I. by @stschr in #4901
- Add a setting blacklistExpiryTime to expire blacklisted service locations by @robertbryer in #4983
Improvements
- Performance: reduce Object.keys allocations in hot paths by @PascalThuet in #4937
- Performance: make GapController interval configurable and reduce hot-path allocations by @PascalThuet in #4943
- Apply npm audit fixes by @dsilhavy in #4899, #4994, #5023
- Allow preload to work even when the setting cacheInitSegments is false by @robertbryer in #4957
- Adds a warning message when an AdaptationSet is filtered because of unsupported EssentialProperties by @dsilhavy in #4961
- Add Agents.md with information for AI agents by @dsilhavy in #4965
- Improve track equality check by @stschr in #4966
- Low Latency Improvements by @ryanmccartney in #4916
- Refactors the GitHub actions to make specific parts reusable and avoid code duplication by @dsilhavy in #4975
- Add notification pane in reference UI by @dsilhavy in #4977
- Refactor: replace bcp-47-normalize with lightweight BCP-47 normalization (-185 KB) by @PascalThuet in #4970
- Adds options to set the persistentState and the distinctiveIdentifier via the reference UIby @dsilhavy in #4991
- Replace ua-parser-js with lightweight browser detection (-26 KB) by @PascalThuet in #4972, #5007
- Dynamically read out request timeout in case settings are updated during runtime by @dsilhavy in #4997
- Abort retrieveManifest requests after reset by @robertbryer in #5027
Bugfixes
- Fix an issue with AdaptationSets linking to themself in a SupplementalProperty by @dsilhavy in #4918
- Remove karma-webdriver-launcher because of insecurities and add buffe… by @dsilhavy in #4920
- Check K value when determining whether to enable low latency mode by @ryanmccartney in #4915
- Fix an issue that lead to exponential Increase in Concurrent Segment Requests for low latency streaming by @dsilhavy in #4921
- changing media asset location by @stschr in #4928
- Fix downloads of WebVTT segments in multiperiod MPD by @dsilhavy in #4925
- Fix a bug in the L3D implementation when playing livesim2 content by @dsilhavy in #4927
- Fix(steering): Fix incorrect splice/indexOf arguments in blacklist timer cleanup by @PascalThuet in #4946
- Fix(mss): prevent crash when all DVR segments are removed by @PascalThuet in #4947
- Fix addressing changed codecs at Period boundaries by @stschr in #4949
- Adds missing NEW_TRACK_SELECTED to Typescript file. Fixes #4940 by @dsilhavy in #4952
- Change StreamProcessor bandwidth check for scalable LCEVC by @v-nova-romas in #4951
- Fix/nullpointer accessibility by @dsilhavy in #4955
- Fix(streaming): add LRU cache limit to InitCache by @PascalThuet in #4935
- Fix(core): prevent memory leaks in EventBus and XHRLoader by @PascalThuet in #4934
- Replace Edgeware with Eyevinn in reference player contributors by @tobbee in #4968
- jsdoc fix + verbose logger by @stschr in #4980
- Fix: make MediaPlayerFactory SSR-safe to prevent 'window is not defined' error by @PascalThuet in #4929
- Fix(dvb): correct off-by-one in DVBSelector weighted BaseURL selection by @PascalThuet in #4982
- Fix(ttml): use endTimeSegment as fallback for last cue end time by @PascalThuet in #4986
- Fix a bug that causes selection of the wrong certificate server url by @dsilhavy in #4989
- Use responseStart for resourceTiming.responseStart by @dsilhavy in #5024
- Fix a bug in the refrence UI causing loop for multiperiod content before period transition by @dsilhavy in #5029
- Fix unreachable code warning in MediaController, update eslint config by @davemevans in #5020
- Fix vulnerability issues in simple express server by @dsilhavy #5031
- Change description of test vector in list of smoke vectors by @dsilhavy