rx-player 4.1.0-dev.2024031100 → 4.1.0-dev.2024040900

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/CHANGELOG.md +270 -128
  2. package/VERSION +1 -1
  3. package/dist/commonjs/__GENERATED_CODE/embedded_worker.js +1 -1
  4. package/dist/commonjs/__GENERATED_CODE/embedded_worker_es5.js +1 -1
  5. package/dist/commonjs/compat/should_wait_for_data_before_loaded.d.ts +1 -1
  6. package/dist/commonjs/compat/should_wait_for_data_before_loaded.js +5 -3
  7. package/dist/commonjs/core/segment_sinks/inventory/segment_inventory.d.ts +4 -3
  8. package/dist/commonjs/core/segment_sinks/inventory/segment_inventory.js +66 -41
  9. package/dist/commonjs/core/stream/representation/utils/get_buffer_status.js +1 -35
  10. package/dist/commonjs/core/stream/representation/utils/get_needed_segments.js +17 -5
  11. package/dist/commonjs/default_config.js +1 -1
  12. package/dist/commonjs/main_thread/api/public_api.js +2 -2
  13. package/dist/commonjs/main_thread/decrypt/content_decryptor.d.ts +28 -1
  14. package/dist/commonjs/main_thread/decrypt/content_decryptor.js +90 -70
  15. package/dist/commonjs/main_thread/decrypt/session_events_listener.js +2 -1
  16. package/dist/commonjs/main_thread/init/utils/get_loaded_reference.js +1 -1
  17. package/dist/commonjs/main_thread/init/utils/initial_seek_and_play.js +4 -1
  18. package/dist/commonjs/main_thread/text_displayer/html/text_track_cues_store.js +1 -1
  19. package/dist/commonjs/main_thread/text_displayer/html/utils.d.ts +15 -0
  20. package/dist/commonjs/main_thread/text_displayer/html/utils.js +24 -1
  21. package/dist/commonjs/parsers/containers/isobmff/extract_complete_chunks.d.ts +1 -1
  22. package/dist/commonjs/parsers/containers/isobmff/extract_complete_chunks.js +1 -26
  23. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +1 -10
  24. package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.js +6 -1
  25. package/dist/commonjs/transports/dash/low_latency_segment_loader.js +3 -1
  26. package/dist/es2017/__GENERATED_CODE/embedded_worker.js +1 -1
  27. package/dist/es2017/__GENERATED_CODE/embedded_worker_es5.js +1 -1
  28. package/dist/es2017/compat/should_wait_for_data_before_loaded.d.ts +1 -1
  29. package/dist/es2017/compat/should_wait_for_data_before_loaded.js +5 -3
  30. package/dist/es2017/core/segment_sinks/inventory/segment_inventory.d.ts +4 -3
  31. package/dist/es2017/core/segment_sinks/inventory/segment_inventory.js +55 -20
  32. package/dist/es2017/core/stream/representation/utils/get_buffer_status.js +2 -36
  33. package/dist/es2017/core/stream/representation/utils/get_needed_segments.js +17 -5
  34. package/dist/es2017/default_config.js +1 -1
  35. package/dist/es2017/main_thread/api/public_api.js +2 -2
  36. package/dist/es2017/main_thread/decrypt/content_decryptor.d.ts +28 -1
  37. package/dist/es2017/main_thread/decrypt/content_decryptor.js +53 -24
  38. package/dist/es2017/main_thread/decrypt/session_events_listener.js +2 -1
  39. package/dist/es2017/main_thread/init/utils/get_loaded_reference.js +1 -1
  40. package/dist/es2017/main_thread/init/utils/initial_seek_and_play.js +4 -1
  41. package/dist/es2017/main_thread/text_displayer/html/text_track_cues_store.js +2 -2
  42. package/dist/es2017/main_thread/text_displayer/html/utils.d.ts +15 -0
  43. package/dist/es2017/main_thread/text_displayer/html/utils.js +22 -0
  44. package/dist/es2017/parsers/containers/isobmff/extract_complete_chunks.d.ts +1 -1
  45. package/dist/es2017/parsers/containers/isobmff/extract_complete_chunks.js +2 -2
  46. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +1 -10
  47. package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.js +6 -1
  48. package/dist/es2017/transports/dash/low_latency_segment_loader.js +3 -1
  49. package/dist/rx-player.js +199 -146
  50. package/dist/rx-player.min.js +1 -1
  51. package/dist/worker.es5.js +1 -1
  52. package/dist/worker.js +7 -7
  53. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,154 +1,296 @@
1
- ## Unrelased
1
+ ## v4.1.0-dev.2024040900 (2024-04-09)
2
2
 
3
3
  ### Features
4
4
 
5
- - Add a supplementary `worker.es5.js` file and its corresponding `EMBEDDED_WORKER_ES5` embed to make the `MULTI_THREAD` experimental feature work on old browser environments [#1400]
5
+ - Add a supplementary `worker.es5.js` file and its corresponding `EMBEDDED_WORKER_ES5`
6
+ embed to make the `MULTI_THREAD` experimental feature work on old browser environments
7
+ [#1400]
6
8
 
7
9
  ### Bug fixes
8
10
 
9
- - Directfile/compat: On safari mobile in directfile mode, do not stay in an infinite `LOADING` state if the `duration` is set to `NaN` (rare issue in a normally-unsupported multiple RxPlayer-per-media-element scenario) [#1393]
10
- - DRM/Compat: On the PlayStation 5, reload directly when a decryption key become unusable to prevent fatal errors [#1399]
11
+ - Directfile/compat: On safari mobile in directfile mode, do not stay in an infinite
12
+ `LOADING` state if the `duration` is set to `NaN` (rare issue in a normally-unsupported
13
+ multiple RxPlayer-per-media-element scenario) [#1393]
14
+ - DRM/Compat: On the PlayStation 5, reload directly when a decryption key become unusable
15
+ to prevent fatal errors [#1399]
11
16
 
12
17
  ### Other improvements
13
18
 
14
- - Signal an error if multiple active RxPlayer are linked to the same media element [#1394]
15
- - MULTI_THREAD: The experimental `MULTI_THREAD` feature does not need a `dashWasmUrl` anymore nor compatibility to WebAssembly [#1384]
16
- - MULTI_THREAD: Perform several actions so that our `MULTI_THREAD` experimental feature now works on older browser and on the playstation 4 [#1400, #1401, #1402]
17
- - DRM: Refactor MediaKeys attachment logic to simplify device support updates [#1357]
18
- - tests: use exponential backoff to speed up integration tests [#1389]
19
- - code: Rely on the TypeScript `type` keyword at type imports to be sure they have no code impact on our final build [#1365]
20
- - code: Reorganize core RxPlayer code into a `src/main_thread` and `src/core` respectively for main thread and worker code in a "multithread" mode [#1365]
21
- - code: Rely on the prettier and rustfmt formatting tools in the codebase [#1387]
19
+ - Signal an error if multiple active RxPlayer are linked to the same media element [#1394]
20
+ - MULTI_THREAD: The experimental `MULTI_THREAD` feature does not need a `dashWasmUrl`
21
+ anymore nor compatibility to WebAssembly [#1384]
22
+ - MULTI_THREAD: Perform several actions so that our `MULTI_THREAD` experimental feature
23
+ now works on older browser and on the playstation 4 [#1400, #1401, #1402]
24
+ - DRM: Refactor MediaKeys attachment logic to simplify device support updates [#1357]
25
+ - tests: use exponential backoff to speed up integration tests [#1389]
26
+ - code: Rely on the TypeScript `type` keyword at type imports to be sure they have no code
27
+ impact on our final build [#1365]
28
+ - code: Reorganize core RxPlayer code into a `src/main_thread` and `src/core` respectively
29
+ for main thread and worker code in a "multithread" mode [#1365]
30
+ - code: Rely on the prettier and rustfmt formatting tools in the codebase [#1387]
22
31
 
23
32
  ## v4.0.0 (2024-02-21)
24
33
 
25
34
  ### Changes
26
35
 
27
- - Create `"FREEZING"` player state for cases where the playback position is currently not advancing due to an unknown reason, to separate it from regular `"BUFFERING"`. [#1146]
28
- - The `RELOADING` player state (gettable through the `getPlayerState` and `playerStateChange` API) can now happen at any time to unlock playback.
29
- - Remove bitrate API: `getAvailableVideoBitrates`, `getAvailableAudioBitrates`, `setAudioBitrate`, `setVideoBitrate`, `getAudioBitrate`, `getVideoBitrate` in profit of the Representations lock APIs [#1144]
30
- - Remove max bitrate API: `setMaxVideoBitrate`, `setMaxAudioBitrate`, `getMaxVideoBitrate` and `getMaxAudioBitrate` methods as well as the `maxVideoBitrate` and `maxAudioBitrate` options in profit of the Representations lock APIs
31
- - Remove min bitrate API: `setMinVideoBitrate`, `setMinAudioBitrate`, `getMinVideoBitrate` and `getMinAudioBitrate` methods as well as the `minVideoBitrate` and `minAudioBitrate` options in profit of the Representations lock APIs
32
- - Remove track preferences API (methods: `getPreferredAudioTracks`, `getPreferredVideoTracks`, `setPreferredAudioTracks` and `setPreferredVideoTracks`, types: `IAudioTrackPreference`, `ITextTrackPreference` and `IVideoTrackPreference`) in profit of the new tracks API
33
- - Remove `getManualVideoBitrate` and `getManualAudioBitrate` in profit of the new Representations lock APIs
34
- - Replace `initialAudioBitrate` and `initialVideoBitrate` constructor options with a single `baseBandwidth` option, which better translates what this option is actually doing and allows for future optimizations on our side. [#1155]
35
- - Rename `audioTrackSwitchingMode` loadVideo option into `defaultAudioTrackSwitchingMode` [#1030]
36
- - Remove `manualBitrateSwitchingMode` loadVideo option to instead rely on the `switchingMode` property of each `lockVideoRepresentations` and `lockAudioRepresentations` calls. [#1030]
37
- - Remove `audioBitrateChange` and `videoBitrateChange` events in profit of the new `audioRepresentationChange` and `videoRepresentationChange` events
38
- - Remove `availableAudioBitratesChange` and `availableVideoBitratesChange` events. Those are less needed with the new Representations lock API and can be mostly replicated through the `audioTrackChange` and `videoTrackChange` events
39
- - "Flatten" the `transportOptions` loadVideo options by putting all its inner properties directly at the top level of loadVideo options, to simplify its documentation and discoverability [#1149]
40
- - Remove `limitVideoWidth` constructor option in profit of the more configurable `videoResolutionLimit` constructor option
41
- - Rename `networkConfig` into `requestConfig` and re-organize its inner properties to pave the way for future request-related APIs.
42
- - Remove `stopAtEnd` `loadVideo` option and don't automatically stop when reaching the end by default. This behavior can be counter-intuitive and can be very easily implemented by the application.
43
- - Remove `decipherabilityUpdate` event as it appeared to be not easily exploitable and exposed internal logic too much [#1168]
44
- - Remove `getUrl` method in profit of the more powerful `getContentUrls`
45
- - Impossibility to play the content due to unsupported audio and/or video tracks now triggers an error with the `MANIFEST_INCOMPATIBLE_CODECS_ERROR` instead of `MANIFEST_PARSE_ERROR`
46
- - Remove methods: `getManifest`, `getCurrentAdaptations` and `getCurrentRepresentations`, as they reveal the RxPlayer's internals too much
47
- - The `"smooth"` transport now needs to be communicated the URL of the Manifest directly (previously, it was possible to redirect it to a XML or JSON file first due to Canal+ legacy reasons).
48
- - Remove the `supplementaryTextTracks` loadVideo option. You can use the `TextTrackRenderer` tool if you wish to diplay external subtitles on top of your content.
49
- - Rename `maximumBufferTime` in `positionUpdate` events to `maximumPosition`
50
- - Remove `getVideoPlayedTime` and `getVideoLoadedTime` methods. Their names was very confusing and can be re-implemented relatively easily using the media element's buffered property.
51
- - Rename `getVideoDuration` to `getMediaDuration`, to avoid confusion with the video track's duration.
52
- - Rename `getVideoBufferGap` to `getCurrentBufferGap`, to avoid confusion with the "buffer gap" specific to the video track.
53
- - Remove image-related API: `supplementaryImageTracks` `loadVideo` option, `imageTrackUpdate` event, `getImageTrackData` method. Those are better handled by an application. The `parseBifThumbnails` tool is still available.
54
- - Replace `keySystems[].licenseStorage` `keySystems` option (for a `loadVideo` call) by the better-named `persistentLicenseConfig`. The `persistentLicense` boolean (also a `keySystems` option) has also been removed because it was redundant with it) [#1147]
55
- - Remove `persistentStateRequired` API, in profit of the more powerful `persistentState` API [#1148]
56
- - Remove `distinctiveIdentifierRequired` API, in profit of the more powerful `distinctiveIdentifier` API [#1148]
57
- - Remove `keySystems[].fallbackOn` `loadVideo` property as it's now replaced by the more powerful `keySystems[].onKeyOutputRestricted` and `keySystems[].onKeyInternalError` properties.
58
- - Remove `keySystems[].onKeyStatusesChange` API as it seems to never be used [#1148]
59
- - Remove `keySystems[].throwOnLicenseExpiration` API as it can now be fully replaced by the `keySystems[].onKeyExpiration` option
60
- - Remove `aggressiveMode` from the `transportOptions` `loadVideo` option
61
- - Remove deprecated `throttleWhenHidden` player option in profit of `throttleVideoBitrateWhenHidden`
62
- - Change payload of `periodChange` events, so they emit only core properties related to a `Period`.
63
- - Change arguments given to a `transportOptions.segmentLoader` function (the `loadVideo` option): it now doesn't give the full `Manifest`, `Period`, `Adaptation`, `Representation` and `ISegment` structures in arguments but only core properties from it [#995]
64
- - Custom `manifestLoader` function added to what was previously the `loadVideo`'s `transportOptions` option now set an object as argument (with an `url`property), to let us bring improvements on it in the future [#995]
65
- - A Representation's `frameRate` is now always a number - in terms of frame per seconds - instead of a string.
66
- - Update the arguments of the `representationFilter` API
67
- - `Representations` (in methods: `getAvailableVideoTracks`, `getVideoTrack`, `representationFilter`, `getAvailableAudioTracks`, `getAudioTrack` and events: `audioTrackChange` and `videoTrackChange`) can have an `undefined` bitrate
68
- - Remove deprecated fullscreen related APIs (methods: `isFullscreen`, `setFullscreen`, `exitFullscreen`, event: `fullscreenChange`) as a a UI is much more adapted to that task and can also bring with it things like a progress bar or HTML text tracks
69
- - Remove deprecated `getNativeTextTrack` method. If advanced features are wanted, it's better to just use the HTML text track API
70
- - Remove deprecated `nativeTextTracksChange` event. Same reason than for `getNativeTextTrack`
71
- - Remove deprecated `hideNativeSubtitles` from `loadVideo` options. Same reason than for `getNativeTextTrack`
72
- - Remove `xhr` property from a `NetworkError`. Doing so stop us from using the fetch API
73
- - Remove deprecated `defaultAudioTrack` and `defaultTextTrack`in profit of new track APIs
74
- - Remove `bitrateEstimationChange` event as it is poorly understood (it's not always close to the expected bandwidth) and has a very complex relationship with the chosen quality.
75
- - Remove the notion of environment variables linked to personalized builds (e.g. RXP_DASH) in profit of the minimal RxPlayer.
76
- - Rename `IPersistentSessionStorage` type to `IPersistentLicenseConfig` [#1147]
77
- - Remove undocumented `audioRobustnesses` and `videoRobustnesses` properties of the `keySystems` option of `loadVideo` calls, as more powerful solutions now exist: respectively `audioCapabilitiesConfig` and `videoCapabilitiesConfig` [#1148]
78
- - Remove public types `ISupplementaryTextTrackOption` and `ISupplementaryImageTrackOption`. Those are the types respectively for `supplementaryTextTracks` and `supplementaryImageTracks` which have been removed
79
- - Remove public types `IBitrateEstimate` as no API depend on it anymore.
80
- - Remove public types `IManifest`, `IPeriod`, `IAdaptation`, `IRepresentation`, `IRepresentationInfos`, `IBifThumbnail`, `IBifObject` and `IExposedSegment` as no API depend on them anymore.
81
- - Remove public types `IDefaultAudioTrackOption` and `IDefaultTextTrackOption`. Those are the types respectively for `defaultAudioTrack` and `defaultTextTrack` `loadVideo` options which have been removed
82
- - Remove public types `IAudioTrackPreference`, `ITextTrackPreference` and `IVideoTrackPreference` as the corresponding API do not exist anymore.
83
- - Stop officially supporting the Internet Explorer 11 browser
84
- - The `MediaError`'s `trackInfo` property is now an array renamed as `tracksInfo` and similar `MediaError` are grouped in one [#1264]
85
- - The `manifestUpdateUrl` `loadVideo` option has been removed as it was unused [#1276]
86
- - `volumeChange` events are now sending both the audio volume and the muted status [#1348]
87
- - `mute`/`unMute`/`isMute` now rely on the `HTMLMediaElement`'s `muted` property and not the audio volume [#1348]
88
- - A `representationFilter`'s advertised `codec` has now been renamed to `codecs` and is an Array when defined [#1332]
89
- - `DASH_WASM` and `DEBUG_ELEMENT` are not experimental features anymore [#1339]
90
- - The `parseBifThumbnails` function is not an experimental tool anymore [#1339]
91
- - If all Representations from the current track become undecipherable, automatically switch to another track (also send a `trackUpdate` event) instead of stopping on error [#1234]
92
- - Only send `MediaError` errors with the `NO_PLAYABLE_REPRESENTATION` error code when no Representation from all tracks of a given type can be played [#1234]
36
+ - Create `"FREEZING"` player state for cases where the playback position is currently not
37
+ advancing due to an unknown reason, to separate it from regular `"BUFFERING"`. [#1146]
38
+ - The `RELOADING` player state (gettable through the `getPlayerState` and
39
+ `playerStateChange` API) can now happen at any time to unlock playback.
40
+ - Remove bitrate API: `getAvailableVideoBitrates`, `getAvailableAudioBitrates`,
41
+ `setAudioBitrate`, `setVideoBitrate`, `getAudioBitrate`, `getVideoBitrate` in profit of
42
+ the Representations lock APIs [#1144]
43
+ - Remove max bitrate API: `setMaxVideoBitrate`, `setMaxAudioBitrate`, `getMaxVideoBitrate`
44
+ and `getMaxAudioBitrate` methods as well as the `maxVideoBitrate` and `maxAudioBitrate`
45
+ options in profit of the Representations lock APIs
46
+ - Remove min bitrate API: `setMinVideoBitrate`, `setMinAudioBitrate`, `getMinVideoBitrate`
47
+ and `getMinAudioBitrate` methods as well as the `minVideoBitrate` and `minAudioBitrate`
48
+ options in profit of the Representations lock APIs
49
+ - Remove track preferences API (methods: `getPreferredAudioTracks`,
50
+ `getPreferredVideoTracks`, `setPreferredAudioTracks` and `setPreferredVideoTracks`,
51
+ types: `IAudioTrackPreference`, `ITextTrackPreference` and `IVideoTrackPreference`) in
52
+ profit of the new tracks API
53
+ - Remove `getManualVideoBitrate` and `getManualAudioBitrate` in profit of the new
54
+ Representations lock APIs
55
+ - Replace `initialAudioBitrate` and `initialVideoBitrate` constructor options with a
56
+ single `baseBandwidth` option, which better translates what this option is actually
57
+ doing and allows for future optimizations on our side. [#1155]
58
+ - Rename `audioTrackSwitchingMode` loadVideo option into `defaultAudioTrackSwitchingMode`
59
+ [#1030]
60
+ - Remove `manualBitrateSwitchingMode` loadVideo option to instead rely on the
61
+ `switchingMode` property of each `lockVideoRepresentations` and
62
+ `lockAudioRepresentations` calls. [#1030]
63
+ - Remove `audioBitrateChange` and `videoBitrateChange` events in profit of the new
64
+ `audioRepresentationChange` and `videoRepresentationChange` events
65
+ - Remove `availableAudioBitratesChange` and `availableVideoBitratesChange` events. Those
66
+ are less needed with the new Representations lock API and can be mostly replicated
67
+ through the `audioTrackChange` and `videoTrackChange` events
68
+ - "Flatten" the `transportOptions` loadVideo options by putting all its inner properties
69
+ directly at the top level of loadVideo options, to simplify its documentation and
70
+ discoverability [#1149]
71
+ - Remove `limitVideoWidth` constructor option in profit of the more configurable
72
+ `videoResolutionLimit` constructor option
73
+ - Rename `networkConfig` into `requestConfig` and re-organize its inner properties to pave
74
+ the way for future request-related APIs.
75
+ - Remove `stopAtEnd` `loadVideo` option and don't automatically stop when reaching the end
76
+ by default. This behavior can be counter-intuitive and can be very easily implemented by
77
+ the application.
78
+ - Remove `decipherabilityUpdate` event as it appeared to be not easily exploitable and
79
+ exposed internal logic too much [#1168]
80
+ - Remove `getUrl` method in profit of the more powerful `getContentUrls`
81
+ - Impossibility to play the content due to unsupported audio and/or video tracks now
82
+ triggers an error with the `MANIFEST_INCOMPATIBLE_CODECS_ERROR` instead of
83
+ `MANIFEST_PARSE_ERROR`
84
+ - Remove methods: `getManifest`, `getCurrentAdaptations` and `getCurrentRepresentations`,
85
+ as they reveal the RxPlayer's internals too much
86
+ - The `"smooth"` transport now needs to be communicated the URL of the Manifest directly
87
+ (previously, it was possible to redirect it to a XML or JSON file first due to Canal+
88
+ legacy reasons).
89
+ - Remove the `supplementaryTextTracks` loadVideo option. You can use the
90
+ `TextTrackRenderer` tool if you wish to diplay external subtitles on top of your
91
+ content.
92
+ - Rename `maximumBufferTime` in `positionUpdate` events to `maximumPosition`
93
+ - Remove `getVideoPlayedTime` and `getVideoLoadedTime` methods. Their names was very
94
+ confusing and can be re-implemented relatively easily using the media element's buffered
95
+ property.
96
+ - Rename `getVideoDuration` to `getMediaDuration`, to avoid confusion with the video
97
+ track's duration.
98
+ - Rename `getVideoBufferGap` to `getCurrentBufferGap`, to avoid confusion with the "buffer
99
+ gap" specific to the video track.
100
+ - Remove image-related API: `supplementaryImageTracks` `loadVideo` option,
101
+ `imageTrackUpdate` event, `getImageTrackData` method. Those are better handled by an
102
+ application. The `parseBifThumbnails` tool is still available.
103
+ - Replace `keySystems[].licenseStorage` `keySystems` option (for a `loadVideo` call) by
104
+ the better-named `persistentLicenseConfig`. The `persistentLicense` boolean (also a
105
+ `keySystems` option) has also been removed because it was redundant with it) [#1147]
106
+ - Remove `persistentStateRequired` API, in profit of the more powerful `persistentState`
107
+ API [#1148]
108
+ - Remove `distinctiveIdentifierRequired` API, in profit of the more powerful
109
+ `distinctiveIdentifier` API [#1148]
110
+ - Remove `keySystems[].fallbackOn` `loadVideo` property as it's now replaced by the more
111
+ powerful `keySystems[].onKeyOutputRestricted` and `keySystems[].onKeyInternalError`
112
+ properties.
113
+ - Remove `keySystems[].onKeyStatusesChange` API as it seems to never be used [#1148]
114
+ - Remove `keySystems[].throwOnLicenseExpiration` API as it can now be fully replaced by
115
+ the `keySystems[].onKeyExpiration` option
116
+ - Remove `aggressiveMode` from the `transportOptions` `loadVideo` option
117
+ - Remove deprecated `throttleWhenHidden` player option in profit of
118
+ `throttleVideoBitrateWhenHidden`
119
+ - Change payload of `periodChange` events, so they emit only core properties related to a
120
+ `Period`.
121
+ - Change arguments given to a `transportOptions.segmentLoader` function (the `loadVideo`
122
+ option): it now doesn't give the full `Manifest`, `Period`, `Adaptation`,
123
+ `Representation` and `ISegment` structures in arguments but only core properties from it
124
+ [#995]
125
+ - Custom `manifestLoader` function added to what was previously the `loadVideo`'s
126
+ `transportOptions` option now set an object as argument (with an `url`property), to let
127
+ us bring improvements on it in the future [#995]
128
+ - A Representation's `frameRate` is now always a number - in terms of frame per seconds -
129
+ instead of a string.
130
+ - Update the arguments of the `representationFilter` API
131
+ - `Representations` (in methods: `getAvailableVideoTracks`, `getVideoTrack`,
132
+ `representationFilter`, `getAvailableAudioTracks`, `getAudioTrack` and events:
133
+ `audioTrackChange` and `videoTrackChange`) can have an `undefined` bitrate
134
+ - Remove deprecated fullscreen related APIs (methods: `isFullscreen`, `setFullscreen`,
135
+ `exitFullscreen`, event: `fullscreenChange`) as a a UI is much more adapted to that task
136
+ and can also bring with it things like a progress bar or HTML text tracks
137
+ - Remove deprecated `getNativeTextTrack` method. If advanced features are wanted, it's
138
+ better to just use the HTML text track API
139
+ - Remove deprecated `nativeTextTracksChange` event. Same reason than for
140
+ `getNativeTextTrack`
141
+ - Remove deprecated `hideNativeSubtitles` from `loadVideo` options. Same reason than for
142
+ `getNativeTextTrack`
143
+ - Remove `xhr` property from a `NetworkError`. Doing so stop us from using the fetch API
144
+ - Remove deprecated `defaultAudioTrack` and `defaultTextTrack`in profit of new track APIs
145
+ - Remove `bitrateEstimationChange` event as it is poorly understood (it's not always close
146
+ to the expected bandwidth) and has a very complex relationship with the chosen quality.
147
+ - Remove the notion of environment variables linked to personalized builds (e.g. RXP_DASH)
148
+ in profit of the minimal RxPlayer.
149
+ - Rename `IPersistentSessionStorage` type to `IPersistentLicenseConfig` [#1147]
150
+ - Remove undocumented `audioRobustnesses` and `videoRobustnesses` properties of the
151
+ `keySystems` option of `loadVideo` calls, as more powerful solutions now exist:
152
+ respectively `audioCapabilitiesConfig` and `videoCapabilitiesConfig` [#1148]
153
+ - Remove public types `ISupplementaryTextTrackOption` and
154
+ `ISupplementaryImageTrackOption`. Those are the types respectively for
155
+ `supplementaryTextTracks` and `supplementaryImageTracks` which have been removed
156
+ - Remove public types `IBitrateEstimate` as no API depend on it anymore.
157
+ - Remove public types `IManifest`, `IPeriod`, `IAdaptation`, `IRepresentation`,
158
+ `IRepresentationInfos`, `IBifThumbnail`, `IBifObject` and `IExposedSegment` as no API
159
+ depend on them anymore.
160
+ - Remove public types `IDefaultAudioTrackOption` and `IDefaultTextTrackOption`. Those are
161
+ the types respectively for `defaultAudioTrack` and `defaultTextTrack` `loadVideo`
162
+ options which have been removed
163
+ - Remove public types `IAudioTrackPreference`, `ITextTrackPreference` and
164
+ `IVideoTrackPreference` as the corresponding API do not exist anymore.
165
+ - Stop officially supporting the Internet Explorer 11 browser
166
+ - The `MediaError`'s `trackInfo` property is now an array renamed as `tracksInfo` and
167
+ similar `MediaError` are grouped in one [#1264]
168
+ - The `manifestUpdateUrl` `loadVideo` option has been removed as it was unused [#1276]
169
+ - `volumeChange` events are now sending both the audio volume and the muted status [#1348]
170
+ - `mute`/`unMute`/`isMute` now rely on the `HTMLMediaElement`'s `muted` property and not
171
+ the audio volume [#1348]
172
+ - A `representationFilter`'s advertised `codec` has now been renamed to `codecs` and is an
173
+ Array when defined [#1332]
174
+ - `DASH_WASM` and `DEBUG_ELEMENT` are not experimental features anymore [#1339]
175
+ - The `parseBifThumbnails` function is not an experimental tool anymore [#1339]
176
+ - If all Representations from the current track become undecipherable, automatically
177
+ switch to another track (also send a `trackUpdate` event) instead of stopping on error
178
+ [#1234]
179
+ - Only send `MediaError` errors with the `NO_PLAYABLE_REPRESENTATION` error code when no
180
+ Representation from all tracks of a given type can be played [#1234]
93
181
 
94
182
  ### Features
95
183
 
96
- - Add `MULTI_THREAD` experimental feature to enable multithreading capabilities through a WebWorker
97
- - Add `attachWorker` method to attach a WebWorker to an RxPlayer instance.
98
- - `setAudioTrack`, `setVideoTrack` and `setTextTrack` now may take an object in argument, with the track's id set as a `trackId` property, to allow new features
99
- - Add `switchingMode` optional property to `setVideoTrack` and `setAudioTrack`, to configure the way in which the RxPlayer switches between the previous and new track
100
- - Add optional `periodId` property to `setAudioTrack`, `setVideoTrack` and `setTextTrack`, to allow setting the track of another, future or past, Period.
101
- - `getAvailableAudioTracks`, `getAvailableTextTracks`, `getAvailableVideoTracks`, `getAudioTrack`, `getTextTrack` and `getVideoTrack` can now optionally take a `periodId` argument to retrieve track information on a specific Period, different than the current one.
102
- - `disableTextTrack`, and`disableVideoTrack` can now optionally take a `periodId` argument to disable a track for a specific Period
103
- - Add optional `lockedRepresentations` property to `setAudioTrack` and `setVideoTrack`, to only filter some allowed Representations (i.e. qualities) after switching to the wanted track.
104
- - Add `getCurrentPeriod` method to retrieve information on the Period currently played
105
- - Add `getAvailablePeriods` method to retrieve information on all Periods on which a track or Representation choice can be made
106
- - Add `lockVideoRepresentations`, `lockAudioRepresentations`, `getLockedVideoRepresentations`, `getLockedAudioRepresentations`, `unlockVideoRepresentations` and `unlockAudioRepresentations` methods to allow a complex selection of Representations that are currently allowed to play.
107
- - Add `getVideoRepresentation` and `getAudioRepresentation` method to retrieve information on the currently loaded representations [#1144]
108
- - Add `audioRepresentationChange` and `videoRepresentationChange` events to be notified when the currently-loaded Representation for the current Period changes.
109
- - Add `getContentUrls` allowing to retrieve the one or several known URLs through which the current Manifest or content is reachable.
110
- - Add `videoResolutionLimit` constructor option allowing to automatically limit a video Representation's resolution.
111
- - Add `newAvailablePeriods` event to signal new Period on which a track and/or Representation choice can be made
112
- - Add `brokenRepresentationsLock` event for when a Representations lock could not be respected anymore
113
- - Add `trackUpdate` event for when a track has been updated for any type and Period
114
- - Add `distinctiveIdentifier` property in the `keySystems` option (given to the `loadVideo` method) to have full control over the MediaKeySystemConfiguration of the same name in the chosen key system [#1148]
115
- - Add `persistentState` property in the `keySystems` option (given to the `loadVideo` method) to have full control over the MediaKeySystemConfiguration of the same name in the chosen key system [#1148]
116
- - Add `keySystems[].onKeyOutputRestricted` and `keySystems[].onKeyInternalError` properties to configure the RxPlayer's behavior when a key switches to the status respectively `"output-restricted"` and `"internal-error"`
117
- - Add `audioCapabilitiesConfig` and `videoCapabilitiesConfig` properties in the `keySystems` option (given to the `loadVideo` method) to allow advanced configuration of respectively the "audioCapabilities" and "videoCapabilities" in the asked MediaKeySystemConfiguration [#1148]
118
- - Add `representationListUpdate` event for when the list of available Representation for a current track changes [#1240]
119
- - add `connectionTimeout` property to the `requestConfig` `loadVideo` option for both the manifest and segment requests to set a timeout just linked to HTTP connection establishment [#1319]
120
- - Add `relativeResumingPosition` property to the `setVideoTrack`and `setAudioTrack` options [#1331]
121
- - types: export type `ICompatibleKeySystem` to the public API [#1340]
122
- - types: Add `ISegmentLoaderContext` public type for the first argument of the `segmentLoader` API
123
- - types: Add `IRepresentationFilterRepresentation` public type for the first argument of the `representationFilter` API
124
- - types: Add `IRepresentationContext` public type for the second argument of the `representationFilter` API
125
- - types: Add `IManifestLoaderInfo` public type for the first argument of the `manifestLoader` API
126
- - types: Add `IPeriodChangeEvent` public type to define the properties send through a `periodChange` event
127
- - types: Add `IPeriod` public type to define a Period object returned by methods like `getAvailablePeriods` or `getCurrentPeriod`
128
- - types: Add `IVideoTrackSwitchingMode` public type to define the type of the `switchingMode` property optionally given to `setAudioTrack`
129
- - types: Add `IAudioRepresentationsSwitchingMode` public type to define the type of the `switchingMode` property optionally given to `lockAudioRepresentations`
130
- - types: Add `IVideoRepresentationsSwitchingMode` public type to define the type of the `switchingMode` property optionally given to `lockAudioRepresentations`
131
- - types: Add `IBrokenRepresentationsLockContext` public type to define the type sent as a payload of the `brokenRepresentationsLock` event
132
- - types: Add `ITrackUpdateEventPayload` public type to define the type sent as a payload of the `trackUpdate` event
133
- - types: Add `ILockedVideoRepresentationsSettings` public type to define the object that should be given to the new `lockVideoRepresentation` method
134
- - types: Add `ILockedAudioRepresentationsSettings` public type to define the object that should be given to the new `lockAudioRepresentation` method
135
- - types: Add `IAudioTrackSetting` public type to define the object that may be given to the `setAudioTrack` method
136
- - types: Add `IVideoTrackSetting` public type to define the object that may be given to the `setVideoTrack` method
137
- - types: Add `ITextTrackSetting` public type to define the object that may be given to the `setTextTrack` method
184
+ - Add `MULTI_THREAD` experimental feature to enable multithreading capabilities through a
185
+ WebWorker
186
+ - Add `attachWorker` method to attach a WebWorker to an RxPlayer instance.
187
+ - `setAudioTrack`, `setVideoTrack` and `setTextTrack` now may take an object in argument,
188
+ with the track's id set as a `trackId` property, to allow new features
189
+ - Add `switchingMode` optional property to `setVideoTrack` and `setAudioTrack`, to
190
+ configure the way in which the RxPlayer switches between the previous and new track
191
+ - Add optional `periodId` property to `setAudioTrack`, `setVideoTrack` and `setTextTrack`,
192
+ to allow setting the track of another, future or past, Period.
193
+ - `getAvailableAudioTracks`, `getAvailableTextTracks`, `getAvailableVideoTracks`,
194
+ `getAudioTrack`, `getTextTrack` and `getVideoTrack` can now optionally take a `periodId`
195
+ argument to retrieve track information on a specific Period, different than the current
196
+ one.
197
+ - `disableTextTrack`, and`disableVideoTrack` can now optionally take a `periodId` argument
198
+ to disable a track for a specific Period
199
+ - Add optional `lockedRepresentations` property to `setAudioTrack` and `setVideoTrack`, to
200
+ only filter some allowed Representations (i.e. qualities) after switching to the wanted
201
+ track.
202
+ - Add `getCurrentPeriod` method to retrieve information on the Period currently played
203
+ - Add `getAvailablePeriods` method to retrieve information on all Periods on which a track
204
+ or Representation choice can be made
205
+ - Add `lockVideoRepresentations`, `lockAudioRepresentations`,
206
+ `getLockedVideoRepresentations`, `getLockedAudioRepresentations`,
207
+ `unlockVideoRepresentations` and `unlockAudioRepresentations` methods to allow a complex
208
+ selection of Representations that are currently allowed to play.
209
+ - Add `getVideoRepresentation` and `getAudioRepresentation` method to retrieve information
210
+ on the currently loaded representations [#1144]
211
+ - Add `audioRepresentationChange` and `videoRepresentationChange` events to be notified
212
+ when the currently-loaded Representation for the current Period changes.
213
+ - Add `getContentUrls` allowing to retrieve the one or several known URLs through which
214
+ the current Manifest or content is reachable.
215
+ - Add `videoResolutionLimit` constructor option allowing to automatically limit a video
216
+ Representation's resolution.
217
+ - Add `newAvailablePeriods` event to signal new Period on which a track and/or
218
+ Representation choice can be made
219
+ - Add `brokenRepresentationsLock` event for when a Representations lock could not be
220
+ respected anymore
221
+ - Add `trackUpdate` event for when a track has been updated for any type and Period
222
+ - Add `distinctiveIdentifier` property in the `keySystems` option (given to the
223
+ `loadVideo` method) to have full control over the MediaKeySystemConfiguration of the
224
+ same name in the chosen key system [#1148]
225
+ - Add `persistentState` property in the `keySystems` option (given to the `loadVideo`
226
+ method) to have full control over the MediaKeySystemConfiguration of the same name in
227
+ the chosen key system [#1148]
228
+ - Add `keySystems[].onKeyOutputRestricted` and `keySystems[].onKeyInternalError`
229
+ properties to configure the RxPlayer's behavior when a key switches to the status
230
+ respectively `"output-restricted"` and `"internal-error"`
231
+ - Add `audioCapabilitiesConfig` and `videoCapabilitiesConfig` properties in the
232
+ `keySystems` option (given to the `loadVideo` method) to allow advanced configuration of
233
+ respectively the "audioCapabilities" and "videoCapabilities" in the asked
234
+ MediaKeySystemConfiguration [#1148]
235
+ - Add `representationListUpdate` event for when the list of available Representation for a
236
+ current track changes [#1240]
237
+ - add `connectionTimeout` property to the `requestConfig` `loadVideo` option for both the
238
+ manifest and segment requests to set a timeout just linked to HTTP connection
239
+ establishment [#1319]
240
+ - Add `relativeResumingPosition` property to the `setVideoTrack`and `setAudioTrack`
241
+ options [#1331]
242
+ - types: export type `ICompatibleKeySystem` to the public API [#1340]
243
+ - types: Add `ISegmentLoaderContext` public type for the first argument of the
244
+ `segmentLoader` API
245
+ - types: Add `IRepresentationFilterRepresentation` public type for the first argument of
246
+ the `representationFilter` API
247
+ - types: Add `IRepresentationContext` public type for the second argument of the
248
+ `representationFilter` API
249
+ - types: Add `IManifestLoaderInfo` public type for the first argument of the
250
+ `manifestLoader` API
251
+ - types: Add `IPeriodChangeEvent` public type to define the properties send through a
252
+ `periodChange` event
253
+ - types: Add `IPeriod` public type to define a Period object returned by methods like
254
+ `getAvailablePeriods` or `getCurrentPeriod`
255
+ - types: Add `IVideoTrackSwitchingMode` public type to define the type of the
256
+ `switchingMode` property optionally given to `setAudioTrack`
257
+ - types: Add `IAudioRepresentationsSwitchingMode` public type to define the type of the
258
+ `switchingMode` property optionally given to `lockAudioRepresentations`
259
+ - types: Add `IVideoRepresentationsSwitchingMode` public type to define the type of the
260
+ `switchingMode` property optionally given to `lockAudioRepresentations`
261
+ - types: Add `IBrokenRepresentationsLockContext` public type to define the type sent as a
262
+ payload of the `brokenRepresentationsLock` event
263
+ - types: Add `ITrackUpdateEventPayload` public type to define the type sent as a payload
264
+ of the `trackUpdate` event
265
+ - types: Add `ILockedVideoRepresentationsSettings` public type to define the object that
266
+ should be given to the new `lockVideoRepresentation` method
267
+ - types: Add `ILockedAudioRepresentationsSettings` public type to define the object that
268
+ should be given to the new `lockAudioRepresentation` method
269
+ - types: Add `IAudioTrackSetting` public type to define the object that may be given to
270
+ the `setAudioTrack` method
271
+ - types: Add `IVideoTrackSetting` public type to define the object that may be given to
272
+ the `setVideoTrack` method
273
+ - types: Add `ITextTrackSetting` public type to define the object that may be given to the
274
+ `setTextTrack` method
138
275
 
139
276
  ### Bug fixes
140
277
 
141
- - Tizen (Samsung TVs): Try again to work around all potential issues that could arise due to tizen seeking back by itself [#1327, #1355]
142
- - dash: Don't unnecessarily reload external `<UTCTiming>` resources at each refresh if it failed for the first request of the Manifest [#1370]
143
- - dash: The `DASH_WASM` feature do not rely on WebAssembly's sign-extension operators anymore as that is poorly supported on older Samsung and LG TVs [#1372]
278
+ - Tizen (Samsung TVs): Try again to work around all potential issues that could arise due
279
+ to tizen seeking back by itself [#1327, #1355]
280
+ - dash: Don't unnecessarily reload external `<UTCTiming>` resources at each refresh if it
281
+ failed for the first request of the Manifest [#1370]
282
+ - dash: The `DASH_WASM` feature do not rely on WebAssembly's sign-extension operators
283
+ anymore as that is poorly supported on older Samsung and LG TVs [#1372]
144
284
 
145
285
  ### Other improvements
146
286
 
147
- - Provide both commonJS and ES6-style exports to improve compatibilities with applications
148
- - Implement better error messages by not repeating the Error Type in it [#1290]
149
- - DRM: Reload when playback is unexpectedly frozen with encrypted but only decipherable data in the buffer to work-around rare encryption-related issues [#1236]
150
- - Add cache when checking for codec support, improving performance on some devices and potentially working around some xbox bugs on long-lived pages [#1324]
151
- - Demo: Add possibility to see the debug element in the demo page
287
+ - Provide both commonJS and ES6-style exports to improve compatibilities with applications
288
+ - Implement better error messages by not repeating the Error Type in it [#1290]
289
+ - DRM: Reload when playback is unexpectedly frozen with encrypted but only decipherable
290
+ data in the buffer to work-around rare encryption-related issues [#1236]
291
+ - Add cache when checking for codec support, improving performance on some devices and
292
+ potentially working around some xbox bugs on long-lived pages [#1324]
293
+ - Demo: Add possibility to see the debug element in the demo page
152
294
 
153
295
  ## v3.33.0 (2024-01-24)
154
296
 
package/VERSION CHANGED
@@ -1 +1 @@
1
- 4.1.0-dev.2024031100
1
+ 4.1.0-dev.2024040900