rx-player 3.33.1 → 3.33.3

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 (92) hide show
  1. package/CHANGELOG.md +1080 -1129
  2. package/VERSION +1 -1
  3. package/dist/_esm5.processed/compat/can_rely_on_request_media_key_system_access.d.ts +34 -0
  4. package/dist/_esm5.processed/compat/can_rely_on_request_media_key_system_access.js +40 -0
  5. package/dist/_esm5.processed/compat/generate_init_data.d.ts +14 -0
  6. package/dist/_esm5.processed/compat/generate_init_data.js +61 -0
  7. package/dist/_esm5.processed/compat/may_media_element_fail_on_undecipherable_data.d.ts +16 -0
  8. package/dist/_esm5.processed/compat/may_media_element_fail_on_undecipherable_data.js +17 -0
  9. package/dist/_esm5.processed/compat/should_wait_for_data_before_loaded.d.ts +1 -1
  10. package/dist/_esm5.processed/compat/should_wait_for_data_before_loaded.js +5 -3
  11. package/dist/_esm5.processed/config.d.ts +2 -0
  12. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +1 -1
  13. package/dist/_esm5.processed/core/api/debug/buffer_graph.js +3 -3
  14. package/dist/_esm5.processed/core/api/public_api.d.ts +17 -0
  15. package/dist/_esm5.processed/core/api/public_api.js +41 -2
  16. package/dist/_esm5.processed/core/api/tracks_management/media_element_track_choice_manager.js +21 -25
  17. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +6 -6
  18. package/dist/_esm5.processed/core/decrypt/find_key_system.d.ts +10 -0
  19. package/dist/_esm5.processed/core/decrypt/find_key_system.js +42 -1
  20. package/dist/_esm5.processed/core/decrypt/session_events_listener.js +2 -2
  21. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +2 -2
  22. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +1 -1
  23. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +34 -12
  24. package/dist/_esm5.processed/core/init/utils/get_loaded_reference.js +6 -1
  25. package/dist/_esm5.processed/core/init/utils/initial_seek_and_play.js +4 -1
  26. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +24 -25
  27. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +1 -1
  28. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
  29. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +2 -2
  30. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.d.ts +15 -0
  31. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.js +23 -0
  32. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +1 -1
  33. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +18 -4
  34. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +57 -13
  35. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +3 -0
  36. package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.js +15 -8
  37. package/dist/_esm5.processed/core/stream/representation/utils/get_buffer_status.js +1 -37
  38. package/dist/_esm5.processed/core/stream/representation/utils/get_needed_segments.js +19 -11
  39. package/dist/_esm5.processed/core/stream/representation/utils/push_init_segment.js +6 -6
  40. package/dist/_esm5.processed/core/stream/representation/utils/push_media_segment.js +9 -9
  41. package/dist/_esm5.processed/default_config.d.ts +31 -0
  42. package/dist/_esm5.processed/default_config.js +48 -17
  43. package/dist/_esm5.processed/errors/assertion_error.d.ts +0 -1
  44. package/dist/_esm5.processed/errors/assertion_error.js +1 -2
  45. package/dist/_esm5.processed/errors/custom_loader_error.d.ts +0 -1
  46. package/dist/_esm5.processed/errors/custom_loader_error.js +1 -2
  47. package/dist/_esm5.processed/errors/encrypted_media_error.d.ts +0 -1
  48. package/dist/_esm5.processed/errors/encrypted_media_error.js +1 -2
  49. package/dist/_esm5.processed/errors/media_error.d.ts +0 -1
  50. package/dist/_esm5.processed/errors/media_error.js +1 -2
  51. package/dist/_esm5.processed/errors/network_error.d.ts +0 -1
  52. package/dist/_esm5.processed/errors/network_error.js +1 -2
  53. package/dist/_esm5.processed/errors/other_error.d.ts +0 -1
  54. package/dist/_esm5.processed/errors/other_error.js +1 -2
  55. package/dist/_esm5.processed/errors/request_error.d.ts +0 -1
  56. package/dist/_esm5.processed/errors/request_error.js +17 -15
  57. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader_error.d.ts +0 -1
  58. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader_error.js +2 -2
  59. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +1 -1
  60. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +4 -4
  61. package/dist/_esm5.processed/parsers/containers/isobmff/utils.js +3 -1
  62. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +1 -3
  63. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +9 -5
  64. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.d.ts +0 -1
  65. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +1 -2
  66. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/ContentComponent.d.ts +1 -1
  67. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/ContentComponent.js +1 -1
  68. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/ContentProtection.d.ts +1 -1
  69. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/ContentProtection.js +1 -1
  70. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Scheme.d.ts +1 -1
  71. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Scheme.js +1 -1
  72. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/parsers_stack.d.ts +2 -1
  73. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/types.d.ts +55 -55
  74. package/dist/_esm5.processed/parsers/manifest/smooth/parse_protection_node.js +1 -1
  75. package/dist/_esm5.processed/transports/dash/extract_complete_chunks.d.ts +1 -1
  76. package/dist/_esm5.processed/transports/dash/extract_complete_chunks.js +6 -2
  77. package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +4 -2
  78. package/dist/_esm5.processed/utils/languages/ISO_639-1_to_ISO_639-3.js +182 -182
  79. package/dist/_esm5.processed/utils/languages/ISO_639-2_to_ISO_639-3.js +19 -19
  80. package/dist/_esm5.processed/utils/languages/normalize.js +4 -1
  81. package/dist/_esm5.processed/utils/resolve_url.d.ts +13 -10
  82. package/dist/_esm5.processed/utils/resolve_url.js +220 -69
  83. package/dist/_esm5.processed/utils/string_parsing.d.ts +1 -1
  84. package/dist/_esm5.processed/utils/string_parsing.js +1 -1
  85. package/dist/_esm5.processed/utils/task_canceller.d.ts +0 -1
  86. package/dist/_esm5.processed/utils/task_canceller.js +3 -2
  87. package/dist/mpd-parser.wasm +0 -0
  88. package/dist/rx-player.d.ts +1 -1
  89. package/dist/rx-player.js +3951 -3398
  90. package/dist/rx-player.min.d.ts +1 -1
  91. package/dist/rx-player.min.js +1 -1
  92. package/package.json +40 -40
package/CHANGELOG.md CHANGED
@@ -1,1809 +1,1763 @@
1
1
  # Changelog
2
2
 
3
- ## v3.33.1 (2024-02-27)
3
+ ## v3.33.3
4
4
 
5
5
  ### Bug fixes
6
6
 
7
- - dash: Don't unnecessarily reload external `<UTCTiming>` resources at each refresh if it failed for the first request of the Manifest [#1370]
8
- - 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]
7
+ - DASH: support absolute path in URL resolution with RFC 3986 implementation [#1446]
8
+ - DASH: fix cases of blinking subtitles [#1447]
9
+ - Fix precision issues of the `maxVideoBufferSize` API [#1448]
10
+ - DASH: Prevent multiple loading of the same segment for some DASH low-latency contents
11
+ [#1449]
12
+ - Await some delay before re-attempting to push a segment following an error [#1411]
13
+ - DRM/Compat: on Edge test comprehensively KeySystems before considering them as usable
14
+ [#1450]
15
+ - DRM/DASH: Ignore `0x0` key id found in DASH initialization segments are they are often
16
+ linked to unencrypted data. [#1466, #1458]
17
+ - DRM/Compat: On the PlayStation 5, reload directly when a decryption key become
18
+ unusable to prevent fatal errors [#1451]
19
+ - Directfile/Compat: On safari on iOS no longer stay stuck in buffering when `autoPlay`
20
+ is set to `false` or not set and the video element has the attribute "playsinline"
21
+ [#1406, #1404, #1390]
22
+ - Directfile/compat: On safari mobile in directfile mode, do not stay in an infinite
23
+ `LOADING` state if the `duration` is set to `NaN` (rare issue in a
24
+ normally-unsupported multiple RxPlayer-per-media-element scenario) [#1452]
25
+ - Fix RxPlay error messages not properly displaying in Chrome's inspector since Chrome 126
26
+ [#1474]
9
27
 
10
28
  ### Other improvements
11
29
 
12
- - build: automatically install Rust and WASM toolchain locally if unavailable when building the RxPlayer WebAssembly file
13
- - doc: Update our documentation generator and fix all invalid anchors in it
14
- - npm: prevent the publishing of unnecessary files on the npm registry [#1377, #1378]
30
+ - Signal an error if multiple active RxPlayer are linked to the same media element
31
+ [#1453]
32
+ - Undetermined audio and text track language now have a `normalized` property equal to
33
+ `"und"` for better ISO 639-3 compatibility [#1454]
34
+
35
+ ## v3.33.2 (2024-02-27)
36
+
37
+ ### Bug fixes
38
+
39
+ - dash: Don't unnecessarily reload external `<UTCTiming>` resources at each refresh if it failed for the first request of the Manifest [#1370]
40
+ - 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]
41
+
42
+ ### Other improvements
43
+
44
+ - build: automatically install Rust and WASM toolchain locally if unavailable when building the RxPlayer WebAssembly file
45
+ - doc: Update our documentation generator and fix all invalid anchors in it
46
+ - npm: prevent the publishing of unnecessary files on the npm registry [#1377, #1378]
15
47
 
16
48
  ## v3.33.0 (2024-01-24)
17
49
 
18
50
  ### Features
19
51
 
20
- - Add `getLivePosition` RxPlayer method [#1300]
21
- - Add `startAt.fromLivePosition` `loadVideo` option [#1300]
22
- - Add the possibility to set a new `keySystems` option on the `reload` API [#1308]
52
+ - Add `getLivePosition` RxPlayer method [#1300]
53
+ - Add `startAt.fromLivePosition` `loadVideo` option [#1300]
54
+ - Add the possibility to set a new `keySystems` option on the `reload` API [#1308]
23
55
 
24
56
  ### Bug fixes
25
57
 
26
- - Fix subtitles "blinking" in some specific conditions, especially with some DASH low-latency contents [#1314]
27
- - DASH: Fix Period overlap resolution logic for when the first Period is removed [#1311]
28
- - TTML: Fix handling of the `tts:lineHeight` attribute [#1320]
29
- - Fix import of the `LOCAL_MANIFEST` experimental feature
30
- - Avoid very rarely skipping segments which initially were too big to be pushed due to memory limitations [#1323]
31
- - Fix issue arising when using track APIs at the exact last possible position of a Period with no consecutive Period [#1337]
32
- - Starting at the end (through a `startAt` `loadVideo` option) or reloading at the end led to the restart of the content [#1338]
33
- - DRM/Safari: also perform Safari DRM work-arounds when the page is launched from the dock [#1351, #1356]
58
+ - Fix subtitles "blinking" in some specific conditions, especially with some DASH low-latency contents [#1314]
59
+ - DASH: Fix Period overlap resolution logic for when the first Period is removed [#1311]
60
+ - TTML: Fix handling of the `tts:lineHeight` attribute [#1320]
61
+ - Fix import of the `LOCAL_MANIFEST` experimental feature
62
+ - Avoid very rarely skipping segments which initially were too big to be pushed due to memory limitations [#1323]
63
+ - Fix issue arising when using track APIs at the exact last possible position of a Period with no consecutive Period [#1337]
64
+ - Starting at the end (through a `startAt` `loadVideo` option) or reloading at the end led to the restart of the content [#1338]
65
+ - DRM/Safari: also perform Safari DRM work-arounds when the page is launched from the dock [#1351, #1356]
34
66
 
35
67
  ### Other improvements
36
68
 
37
- - DASH: rely on SCTE214 `supplementalCodecs` instead of `codecs` if it's supported to better support backward compatible Dolby Vision contents [#1307]
38
- - DASH: Provide better support of the `availabilityTimeOffset` attribute [#1300]
39
- - DEBUG_ELEMENT: Add unsupported and undecipherable bitrates to the debug element [#1321]
40
- - DEBUG_ELEMENT: update buffer graph maximum size so it becomes more readable for lengthy contents [#1316]
41
- - DEBUG_ELEMENT: always synchronize inventory of segments before rendering it [#1317]
42
- - Remove remaining RxPlayer dependency removing possibility of some application-side bundling errors [#1312]
43
- - Add exception to text Garbage collection logic to avoid unnecessarily reload text segments frequently [#1325]
44
- - Avoid logging too much the buffer's content when our debugging UI or the demo is used [#1341]
45
- - Demo: Fix reporting of live position in demo page [#1313]
46
-
69
+ - DASH: rely on SCTE214 `supplementalCodecs` instead of `codecs` if it's supported to better support backward compatible Dolby Vision contents [#1307]
70
+ - DASH: Provide better support of the `availabilityTimeOffset` attribute [#1300]
71
+ - DEBUG_ELEMENT: Add unsupported and undecipherable bitrates to the debug element [#1321]
72
+ - DEBUG_ELEMENT: update buffer graph maximum size so it becomes more readable for lengthy contents [#1316]
73
+ - DEBUG_ELEMENT: always synchronize inventory of segments before rendering it [#1317]
74
+ - Remove remaining RxPlayer dependency removing possibility of some application-side bundling errors [#1312]
75
+ - Add exception to text Garbage collection logic to avoid unnecessarily reload text segments frequently [#1325]
76
+ - Avoid logging too much the buffer's content when our debugging UI or the demo is used [#1341]
77
+ - Demo: Fix reporting of live position in demo page [#1313]
47
78
 
48
79
  ## v3.32.1 (2023-10-19)
49
80
 
50
81
  ### Features
51
82
 
52
- - DASH: add optional `isSpatialAudio` boolean property to Representation returned by `getAvailableAudioTracks`, `getAudioTrack`, corresponding events, and `trackInfo` optional property of `MediaError` objects to signal Dolby Atmos techology [#1275]
53
- - `LOCAL`: add `isSpatialAudio` property to Representation of the experiment `"local"` transport (used for offline playback) [#1275]
54
- - `addFeatures` static method is now available on all RxPlayer builds. It was previously only in the minimal (`rx-player/minimal` import path) [#1287]
55
- - The `NATIVE_TEXT_BUFFER`, `HTML_TEXT_BUFFER` and `IMAGE_BUFFER` features are now totally optional [#1287, #1293]
83
+ - DASH: add optional `isSpatialAudio` boolean property to Representation returned by `getAvailableAudioTracks`, `getAudioTrack`, corresponding events, and `trackInfo` optional property of `MediaError` objects to signal Dolby Atmos techology [#1275]
84
+ - `LOCAL`: add `isSpatialAudio` property to Representation of the experiment `"local"` transport (used for offline playback) [#1275]
85
+ - `addFeatures` static method is now available on all RxPlayer builds. It was previously only in the minimal (`rx-player/minimal` import path) [#1287]
86
+ - The `NATIVE_TEXT_BUFFER`, `HTML_TEXT_BUFFER` and `IMAGE_BUFFER` features are now totally optional [#1287, #1293]
56
87
 
57
88
  ### Bug fixes
58
89
 
59
- - Fix `setVideoBitrate` and `setAudioBitrate` API which may have led to a higher quality than wanted in the default `"seamless"` `manualBitrateSwitchingMode` if our buffer-based adaptive logic decided to [#1267, #1271]
60
- - On the PlayStation 5, only switch to the `"LOADED"` state once the HTMLMediaElement's `readyState` of `4` has been reached, as it seems to switch to `3` too soon there [#1257]
61
- - DASH: Fix potential track duplication if more than two `AdaptationSet` have an `adaptation-set-switching` `<SupplementalProperty>` between one another [#1279]
62
- - DASH-WASM: availabilityTimeOffset is actually a floating number [#1278]
90
+ - Fix `setVideoBitrate` and `setAudioBitrate` API which may have led to a higher quality than wanted in the default `"seamless"` `manualBitrateSwitchingMode` if our buffer-based adaptive logic decided to [#1267, #1271]
91
+ - On the PlayStation 5, only switch to the `"LOADED"` state once the HTMLMediaElement's `readyState` of `4` has been reached, as it seems to switch to `3` too soon there [#1257]
92
+ - DASH: Fix potential track duplication if more than two `AdaptationSet` have an `adaptation-set-switching` `<SupplementalProperty>` between one another [#1279]
93
+ - DASH-WASM: availabilityTimeOffset is actually a floating number [#1278]
63
94
 
64
95
  ### Other improvements
65
96
 
66
- - Do not load the last text segment if the current position goes after it as it is unnecessary [#1256]
67
- - Implement better `NetworkError` messages [#1274]
68
- - Set a better error message for when no `keySystems` option is set when playing an encrypted content
69
- - Fix very small memory leak when reloading a content [#1286]
70
- - Re-check for segments to load immediately after the manifest has been refreshed [#1282]
71
- - When "fallbacking" an undecipherable Representation, now empty the whole buffer if we can't make out where content was in the buffer [#1283]
72
- - Improve segment start detection in buffer when there's unknown data buffered before it [#1284]
73
- - DRM: Selection of alternative EME API like those used on IE11 or Safari has been refactored to facilitate future developments [#1261]
97
+ - Do not load the last text segment if the current position goes after it as it is unnecessary [#1256]
98
+ - Implement better `NetworkError` messages [#1274]
99
+ - Set a better error message for when no `keySystems` option is set when playing an encrypted content
100
+ - Fix very small memory leak when reloading a content [#1286]
101
+ - Re-check for segments to load immediately after the manifest has been refreshed [#1282]
102
+ - When "fallbacking" an undecipherable Representation, now empty the whole buffer if we can't make out where content was in the buffer [#1283]
103
+ - Improve segment start detection in buffer when there's unknown data buffered before it [#1284]
104
+ - DRM: Selection of alternative EME API like those used on IE11 or Safari has been refactored to facilitate future developments [#1261]
74
105
 
75
106
  ### Deprecated
76
107
 
77
- - Deprecate the `manifestUpdateUrl` `loadVideo` option as it doesn't seem used anymore [#1288]
78
- - Deprecate the `NATIVE_TEXT_BUFFER`, `HTML_TEXT_BUFFER` and `IMAGE_BUFFER` features as they are now unneeded [#1287, #1293]
79
-
108
+ - Deprecate the `manifestUpdateUrl` `loadVideo` option as it doesn't seem used anymore [#1288]
109
+ - Deprecate the `NATIVE_TEXT_BUFFER`, `HTML_TEXT_BUFFER` and `IMAGE_BUFFER` features as they are now unneeded [#1287, #1293]
80
110
 
81
111
  ## v3.31.0 (2023-06-14)
82
112
 
83
113
  ### Features
84
114
 
85
- - Add `isContentLoaded`, `isBuffering`, `isPaused`, and `getLastStoredContentPosition` methods [#1248]
86
- - Add `play` and `paused` events [#1253]
87
- - Add `trackInfo` property to some `MediaError` to expose information on the track that caused the error [#1241]
115
+ - Add `isContentLoaded`, `isBuffering`, `isPaused`, and `getLastStoredContentPosition` methods [#1248]
116
+ - Add `play` and `paused` events [#1253]
117
+ - Add `trackInfo` property to some `MediaError` to expose information on the track that caused the error [#1241]
88
118
 
89
119
  ### Bug fixes
90
120
 
91
- - DASH: Fix issue which could lead to infinite rebuffering when switching between multiple Periods [#1232]
92
- - Return actual ending duration through the `getVideoDuration` method when playing dynamic contents whose future end is already known [#1235]
93
- - DASH/WASM: actually reject the `DASH_WASM.initialize`'s Promise if it fails [#1238]
94
- - On the PlayStation 5, set `Infinity` MediaSource duration for live contents to prevent playback issues [#1250]
121
+ - DASH: Fix issue which could lead to infinite rebuffering when switching between multiple Periods [#1232]
122
+ - Return actual ending duration through the `getVideoDuration` method when playing dynamic contents whose future end is already known [#1235]
123
+ - DASH/WASM: actually reject the `DASH_WASM.initialize`'s Promise if it fails [#1238]
124
+ - On the PlayStation 5, set `Infinity` MediaSource duration for live contents to prevent playback issues [#1250]
95
125
 
96
126
  ### Other improvements
97
127
 
98
- - adaptive: Perform various adaptive tweaks to avoid switching too much between qualities in some conditions [#1237]
99
- - Directfile: Detect "forced" subtitles on Safari when playing directfile contents (such as HLS) [#1239]
100
- - Improve `"direct"` `audioTrackSwitchingMode` compatibility by re-seeking [#1246]
101
- - The `DEBUG_ELEMENT` feature now uses the `monospace` fallback font as a default for a better rendering on apple devices
102
- - doc: externalize documentation-generator code
103
-
128
+ - adaptive: Perform various adaptive tweaks to avoid switching too much between qualities in some conditions [#1237]
129
+ - Directfile: Detect "forced" subtitles on Safari when playing directfile contents (such as HLS) [#1239]
130
+ - Improve `"direct"` `audioTrackSwitchingMode` compatibility by re-seeking [#1246]
131
+ - The `DEBUG_ELEMENT` feature now uses the `monospace` fallback font as a default for a better rendering on apple devices
132
+ - doc: externalize documentation-generator code
104
133
 
105
134
  ## v3.30.0 (2023-03-07)
106
135
 
107
136
  ### Features
108
137
 
109
- - Add `updateContentUrls` API, allowing to update the Manifest's URL during playback [#1182]
110
- - DASH: implement forced-subtitles, adding the `forced` property to the audio tracks API and selecting by default a forced text track linked to the audio track's language if present [#1187]
111
- - DRM: add the `getKeySystemConfiguration` method to the RxPlayer [#1202]
112
- - add experimental `DEBUG_ELEMENT` feature and `createDebugElement` method to render a default debugging HTML element [#1200]
138
+ - Add `updateContentUrls` API, allowing to update the Manifest's URL during playback [#1182]
139
+ - DASH: implement forced-subtitles, adding the `forced` property to the audio tracks API and selecting by default a forced text track linked to the audio track's language if present [#1187]
140
+ - DRM: add the `getKeySystemConfiguration` method to the RxPlayer [#1202]
141
+ - add experimental `DEBUG_ELEMENT` feature and `createDebugElement` method to render a default debugging HTML element [#1200]
113
142
 
114
143
  ### Deprecated
115
144
 
116
- - Deprecate the `getVideoLoadedTime` method which can be easily replaced (see Deprecated method documentation)
117
- - Deprecate the `getVideoPlayedTime` method which can be easily replaced (see Deprecated method documentation)
118
- - Deprecate the `transportOptions.aggressiveMode` option
119
- - DRM: Deprecate the `keySystems[].onKeyStatusesChange` callback as no good use case was found for it.
145
+ - Deprecate the `getVideoLoadedTime` method which can be easily replaced (see Deprecated method documentation)
146
+ - Deprecate the `getVideoPlayedTime` method which can be easily replaced (see Deprecated method documentation)
147
+ - Deprecate the `transportOptions.aggressiveMode` option
148
+ - DRM: Deprecate the `keySystems[].onKeyStatusesChange` callback as no good use case was found for it.
120
149
 
121
150
  ### Bug fixes
122
151
 
123
- - Fix segment requesting error when playing a DASH content without an url and without BaseURL elements [#1192]
124
- - API: Stop sending events if the content is stopped due to a side-effect of one of the event handler [#1197]
125
- - text-tracks/ttml: fix inconsistent line spacing when resizing the `textTrackElement` [#1191]
126
- - DRM: Fix race condition leading to a JS error instead of a `NO_PLAYABLE_REPRESENTATION` [#1201]
127
- - DRM/Compat: Renew MediaKeys at each `loadVideo` on all WebOS (LG TV) platforms to work around issues [#1188]
152
+ - Fix segment requesting error when playing a DASH content without an url and without BaseURL elements [#1192]
153
+ - API: Stop sending events if the content is stopped due to a side-effect of one of the event handler [#1197]
154
+ - text-tracks/ttml: fix inconsistent line spacing when resizing the `textTrackElement` [#1191]
155
+ - DRM: Fix race condition leading to a JS error instead of a `NO_PLAYABLE_REPRESENTATION` [#1201]
156
+ - DRM/Compat: Renew MediaKeys at each `loadVideo` on all WebOS (LG TV) platforms to work around issues [#1188]
128
157
 
129
158
  ### Other improvements
130
159
 
131
- - DASH: better detect closed captions [#1187]
132
- - DASH: handle `endNumber` DASH attribute [#1186]
133
- - DASH: Do not merge AdaptationSet with role "main" anymore [#1214]
134
- - DASH: parse `transferCharacteristics` property in the MPD to better detect hdr [#1212]
135
- - Support encrypted contents on Panasonic 2019 TVs [#1226]
136
- - Better handle SourceBuffer's QuotaExceededError, responsible for `MediaError` with the `BUFFER_FULL_ERROR` code [#1221]
137
- - API: send available...TracksChange events in the very unlikely scenario where tracks are added after a manifest update [#1197]
138
- - Completely remove RxJS dependency from the RxPlayer's source code [#1193]
139
- - DRM: Request PR recommendation when PlayReady is asked and try default recommendation robustnesses [#1189]
140
-
160
+ - DASH: better detect closed captions [#1187]
161
+ - DASH: handle `endNumber` DASH attribute [#1186]
162
+ - DASH: Do not merge AdaptationSet with role "main" anymore [#1214]
163
+ - DASH: parse `transferCharacteristics` property in the MPD to better detect hdr [#1212]
164
+ - Support encrypted contents on Panasonic 2019 TVs [#1226]
165
+ - Better handle SourceBuffer's QuotaExceededError, responsible for `MediaError` with the `BUFFER_FULL_ERROR` code [#1221]
166
+ - API: send available...TracksChange events in the very unlikely scenario where tracks are added after a manifest update [#1197]
167
+ - Completely remove RxJS dependency from the RxPlayer's source code [#1193]
168
+ - DRM: Request PR recommendation when PlayReady is asked and try default recommendation robustnesses [#1189]
141
169
 
142
170
  ## v3.29.0 (2022-11-16)
143
171
 
144
172
  ### Features
145
173
 
146
- - add `networkConfig.segmentRequestTimeout` and `networkConfig.manifestRequestTimeout` options to loadVideo to configure the timeout of respectively segment and manifest requests [#1156]
147
- - add `timeout` property to the first argument communicated to a `segmentLoader` (from `loadVideo`'s `transportOptions`) [#1156]
148
- - add `timeout` property to a new third argument communicated to a `manifestLoader` (from `loadVideo`'s `transportOptions`) [#1156]
149
- - DRM: add `keySystems[].onKeyExpiration` to `loadVideo` options to configure the behavior the RxPlayer should have on key expiration [#1157]
150
- - DRM: add `keyStatuses` property to an `EncryptedMediaError` with the `KEY_STATUS_CHANGE_ERROR` code to communicate which key id and key statuses caused issues. [#1157]
174
+ - add `networkConfig.segmentRequestTimeout` and `networkConfig.manifestRequestTimeout` options to loadVideo to configure the timeout of respectively segment and manifest requests [#1156]
175
+ - add `timeout` property to the first argument communicated to a `segmentLoader` (from `loadVideo`'s `transportOptions`) [#1156]
176
+ - add `timeout` property to a new third argument communicated to a `manifestLoader` (from `loadVideo`'s `transportOptions`) [#1156]
177
+ - DRM: add `keySystems[].onKeyExpiration` to `loadVideo` options to configure the behavior the RxPlayer should have on key expiration [#1157]
178
+ - DRM: add `keyStatuses` property to an `EncryptedMediaError` with the `KEY_STATUS_CHANGE_ERROR` code to communicate which key id and key statuses caused issues. [#1157]
151
179
 
152
180
  ### Deprecated
153
181
 
154
- - DRM: Deprecate `keySystems[].throwOnLicenseExpiration` `loadVideo` option as this boolean can be replaced with more customizability by the new `keySystems[].onKeyExpiration` `loadVideo` option [#1157]
182
+ - DRM: Deprecate `keySystems[].throwOnLicenseExpiration` `loadVideo` option as this boolean can be replaced with more customizability by the new `keySystems[].onKeyExpiration` `loadVideo` option [#1157]
155
183
 
156
184
  ### Bug fixes
157
185
 
158
- - Directfile: Fix long-running issues with rare "directfile" contents and some browsers/platforms (seen on Chrome PC and PlayStation 5) where playback would stay in `LOADING` state indefinitely despite playing [#1174]
159
- - DRM: Fix undocumented `keySystems[].videoRobustnesses` `loadVideo` option. `audioRobustnesses` was previously used even for video capabilities [#1171]
160
- - Compat/Directfile: Fix an issue with WebOS (LG TVs) when playing multiple directfile contents with the `stopAtEnd` player option set to `true` [#1154]
161
- - Compat/DRM: Fix infinite loading on WebOS (LG TVs) 2021 and 2022 when loading more than once an encrypted content by resetting decryption capabilities each time [#1175]
162
- - Compat: To work around an issue on WebOS (LG TVs), also specify a request timeout manually through a `setTimeout` call when XMLHttpRequests are created for Manifest and segment requests [#1152]
163
- - Compat/Directfile: Fix an issue on Tizen (Samsung TVs) where playing directfile contents could randomly lead to not having audio [#1170]
164
- - Compat: Fix issue with Tizen (Samsung TVs) where starting playback on a discontinuity could lead to infinite rebuffering [#1140, #1176]
165
- - Compat/Directfile: For `"directfile"` contents, also consider `AudioTrack` with a `description` (without an "s") as audio-description audio tracks to work-around what seems to be a Safari typo [#1160]
166
- - DRM: When using persistent licenses, create new MediaKeySession when `load` resolves with `false`, instead of relying the same, to fix issues with such persistent sessions if the browser cleaned it up [#1139]
167
- - Only call "MediaSource.endOfStream" once, the most visible side-effect should have been repeated logs [#1163]
186
+ - Directfile: Fix long-running issues with rare "directfile" contents and some browsers/platforms (seen on Chrome PC and PlayStation 5) where playback would stay in `LOADING` state indefinitely despite playing [#1174]
187
+ - DRM: Fix undocumented `keySystems[].videoRobustnesses` `loadVideo` option. `audioRobustnesses` was previously used even for video capabilities [#1171]
188
+ - Compat/Directfile: Fix an issue with WebOS (LG TVs) when playing multiple directfile contents with the `stopAtEnd` player option set to `true` [#1154]
189
+ - Compat/DRM: Fix infinite loading on WebOS (LG TVs) 2021 and 2022 when loading more than once an encrypted content by resetting decryption capabilities each time [#1175]
190
+ - Compat: To work around an issue on WebOS (LG TVs), also specify a request timeout manually through a `setTimeout` call when XMLHttpRequests are created for Manifest and segment requests [#1152]
191
+ - Compat/Directfile: Fix an issue on Tizen (Samsung TVs) where playing directfile contents could randomly lead to not having audio [#1170]
192
+ - Compat: Fix issue with Tizen (Samsung TVs) where starting playback on a discontinuity could lead to infinite rebuffering [#1140, #1176]
193
+ - Compat/Directfile: For `"directfile"` contents, also consider `AudioTrack` with a `description` (without an "s") as audio-description audio tracks to work-around what seems to be a Safari typo [#1160]
194
+ - DRM: When using persistent licenses, create new MediaKeySession when `load` resolves with `false`, instead of relying the same, to fix issues with such persistent sessions if the browser cleaned it up [#1139]
195
+ - Only call "MediaSource.endOfStream" once, the most visible side-effect should have been repeated logs [#1163]
168
196
 
169
197
  ### Other improvements
170
198
 
171
- - DASH: Improve multi-CDN configurations, by smartly selecting the right CDN depending on past status [#1165]
172
- - Allow reverse playback use cases by not skipping gaps and most discontinuities when the playback rate has been set to `0` or a negative value [#1138]
173
- - In the experimental "local" transport, add `incomingRanges` property to signal the time ranges of remaining data, allowing better discontinuity handling and duration estimates for sill-loading dowloaded contents [#1151]
174
- - Only send, through `"warning"` events, one `EncryptedMediaError` with a `KEY_STATUS_CHANGE_ERROR` code when multiple ones arises at the same time [#1157]
175
-
199
+ - DASH: Improve multi-CDN configurations, by smartly selecting the right CDN depending on past status [#1165]
200
+ - Allow reverse playback use cases by not skipping gaps and most discontinuities when the playback rate has been set to `0` or a negative value [#1138]
201
+ - In the experimental "local" transport, add `incomingRanges` property to signal the time ranges of remaining data, allowing better discontinuity handling and duration estimates for sill-loading dowloaded contents [#1151]
202
+ - Only send, through `"warning"` events, one `EncryptedMediaError` with a `KEY_STATUS_CHANGE_ERROR` code when multiple ones arises at the same time [#1157]
176
203
 
177
204
  ## v3.28.0 (2022-07-12)
178
205
 
179
206
  ### Features
180
207
 
181
- - Add `label` to audio, video and text track APIs (such as `getAvailableAudioTracks`) which gives a human-readable description of the corresponding track, if available in the Manifest [#1105, #1109]
182
- - Automatically set the LogLevel to `"DEBUG"` if a global `__RX_PLAYER_DEBUG_MODE__` constant is set to `true`, to simplify debugging [#1115]
208
+ - Add `label` to audio, video and text track APIs (such as `getAvailableAudioTracks`) which gives a human-readable description of the corresponding track, if available in the Manifest [#1105, #1109]
209
+ - Automatically set the LogLevel to `"DEBUG"` if a global `__RX_PLAYER_DEBUG_MODE__` constant is set to `true`, to simplify debugging [#1115]
183
210
 
184
211
  ### Bug fixes
185
212
 
186
- - Use the first **compatible** codec of the current AdaptationSet when creating a SourceBuffer [#1094]
187
- - DASH/DRM: Fix potential infinite rebuffering when a KID is not announced in the MPD [#1113]
188
- - DRM: Fix quality fallback when loading a content whose license has been cached under an extended `singleLicensePer` setting and when starting (and staying) with a quality whose key id is not in it [#1133]
189
- - DASH: Avoid infinite loop due to rounding errors while parsing multi-Periods MPDs [#1111, #1110]
190
- - After a `RELOADING` state, stay in `PAUSED` if the media element was paused synchronously before the side-effect which triggered the reloading (usually coming from the API) was perform [#1132]
191
- - Fix issue with `maxVideoBufferSize` setting which could lead to too much data being buffered [#1125]
192
- - Prevent possibility of requests loops and infinite rebuffering when a pushed segment is always completely and immediately garbage collected by the browser [#1123]
193
- - DASH: Fix potential rare memory leak when stopping the content after it has reloaded at least once [#1135]
194
- - Directfile: Properly announce the audio track's `audioDescription` accessibility attribute in directfile mode on Safari [#1136]
195
- - DASH: Fix issues that could arise if a segment is calculated to start at a negative position [#1122]
196
- - DASH: Fix possibility of wrong segments being requested when a SegmentTimeline in a given Period (whose Period@end is set) had an S@r set to `-1` at its end [#1098]
197
- - DASH: If the first `<S>` has its S@t attribute not set, make as if it is set to `0` [#1118]
213
+ - Use the first **compatible** codec of the current AdaptationSet when creating a SourceBuffer [#1094]
214
+ - DASH/DRM: Fix potential infinite rebuffering when a KID is not announced in the MPD [#1113]
215
+ - DRM: Fix quality fallback when loading a content whose license has been cached under an extended `singleLicensePer` setting and when starting (and staying) with a quality whose key id is not in it [#1133]
216
+ - DASH: Avoid infinite loop due to rounding errors while parsing multi-Periods MPDs [#1111, #1110]
217
+ - After a `RELOADING` state, stay in `PAUSED` if the media element was paused synchronously before the side-effect which triggered the reloading (usually coming from the API) was perform [#1132]
218
+ - Fix issue with `maxVideoBufferSize` setting which could lead to too much data being buffered [#1125]
219
+ - Prevent possibility of requests loops and infinite rebuffering when a pushed segment is always completely and immediately garbage collected by the browser [#1123]
220
+ - DASH: Fix potential rare memory leak when stopping the content after it has reloaded at least once [#1135]
221
+ - Directfile: Properly announce the audio track's `audioDescription` accessibility attribute in directfile mode on Safari [#1136]
222
+ - DASH: Fix issues that could arise if a segment is calculated to start at a negative position [#1122]
223
+ - DASH: Fix possibility of wrong segments being requested when a SegmentTimeline in a given Period (whose Period@end is set) had an S@r set to `-1` at its end [#1098]
224
+ - DASH: If the first `<S>` has its S@t attribute not set, make as if it is set to `0` [#1118]
198
225
 
199
226
  ### Other improvements
200
227
 
201
- - TTML: Add support for percent based thickness for textOutline in TTML Subtitles [#1108]
202
- - Improve TypeScript's language servers auto import feature with the RxPlayer by better redirecting to the exported type [#1126]
203
- - If seeking after the last potential position, load last segments before ending [#1097]
204
- - The duration set on the media element is now only relative to the current chosen tracks (it was previously relative to all potential track). This allows to seek later when switching e.g. to a longer video track [#1102]
205
- - Errors coming from an HTMLMediaElement now have the browser's error message if it exists [#1112]
206
- - TTML: Better handle EBU-TT subtitles by handling the `tt` XML namespace in our TTML parser [#1131]
207
- - DRM: Information on persisted DRM sessions are now automatically updated to their last version when possible [#1096]
208
- - Only log values which are relatively inexpensive to stringify to reduce the difference between debugging sessions and what is usually seen in production [#1116]
209
-
228
+ - TTML: Add support for percent based thickness for textOutline in TTML Subtitles [#1108]
229
+ - Improve TypeScript's language servers auto import feature with the RxPlayer by better redirecting to the exported type [#1126]
230
+ - If seeking after the last potential position, load last segments before ending [#1097]
231
+ - The duration set on the media element is now only relative to the current chosen tracks (it was previously relative to all potential track). This allows to seek later when switching e.g. to a longer video track [#1102]
232
+ - Errors coming from an HTMLMediaElement now have the browser's error message if it exists [#1112]
233
+ - TTML: Better handle EBU-TT subtitles by handling the `tt` XML namespace in our TTML parser [#1131]
234
+ - DRM: Information on persisted DRM sessions are now automatically updated to their last version when possible [#1096]
235
+ - Only log values which are relatively inexpensive to stringify to reduce the difference between debugging sessions and what is usually seen in production [#1116]
210
236
 
211
237
  ## v3.27.0 (2022-03-31)
212
238
 
213
239
  ### Features
214
240
 
215
- - Add a `maxVideoBufferSize` constructor option and `{get,set}MaxVideoBufferSize` methods to limit the size of loaded video data buffered at the same time [#1041, #1054]
216
- - DRM: Add a `"periods"` mode to the `keySystems[].singleLicensePer` `loadVideo` option, allowing to obtain decryption license for groups of Periods allowing a compromise between optimization, features and compatibility [#1028, #1061]
217
- - Add a `"reload"` `audioTrackSwitchingMode` to work-around rare compatibility issues when switching audio tracks [#1089]
241
+ - Add a `maxVideoBufferSize` constructor option and `{get,set}MaxVideoBufferSize` methods to limit the size of loaded video data buffered at the same time [#1041, #1054]
242
+ - DRM: Add a `"periods"` mode to the `keySystems[].singleLicensePer` `loadVideo` option, allowing to obtain decryption license for groups of Periods allowing a compromise between optimization, features and compatibility [#1028, #1061]
243
+ - Add a `"reload"` `audioTrackSwitchingMode` to work-around rare compatibility issues when switching audio tracks [#1089]
218
244
 
219
245
  ### Bug fixes
220
246
 
221
- - subtitles: Fix rare issue where subtitles could be skipped due to a rounding error [#1064]
222
- - DASH: fix issue where the wrong segments would be requested on $Number$-based MPD with a SegmentTimeline older than the `timeShiftBufferDepth` [#1052, #1060]
223
- - directfile: disable all audio tracks before enabling one to work-around Safari issue on MacOS Monterey [#1067]
224
- - avoid performing a small seek when changing the audio track [#1080]
225
- - api: allow switching to RELOADING state synchronously after LOADED [#1083]
226
- - Safari Mobile: Improve decryption support on Safari mobile by relying on the vendored `WebKitMediaKeys` API [#1072]
227
- - DASH: Fix issue which prevented the integrity check of most MP4 DASH segments when `transportOptions.checkMediaSegmentIntegrity` was set to `true`
228
- - avoid unnecessary warning logs when loading some initialization segments [#1049]
229
- - TypeScript: Add forgotten TypeScript types in the exposed segment and manifest loader APIs [#1057]
230
- - DRM: Avoid decryption issues when a license is persisted in a `singleLicensePer` `"init-data"` mode but loaded in a `"content"` mode [#1031, #1042]
231
- - DRM: Totally avoid the theoretical possibility of leaking MediaKeySessions when a `generateRequest` or `load` call takes multiple seconds [#1093]
247
+ - subtitles: Fix rare issue where subtitles could be skipped due to a rounding error [#1064]
248
+ - DASH: fix issue where the wrong segments would be requested on $Number$-based MPD with a SegmentTimeline older than the `timeShiftBufferDepth` [#1052, #1060]
249
+ - directfile: disable all audio tracks before enabling one to work-around Safari issue on MacOS Monterey [#1067]
250
+ - avoid performing a small seek when changing the audio track [#1080]
251
+ - api: allow switching to RELOADING state synchronously after LOADED [#1083]
252
+ - Safari Mobile: Improve decryption support on Safari mobile by relying on the vendored `WebKitMediaKeys` API [#1072]
253
+ - DASH: Fix issue which prevented the integrity check of most MP4 DASH segments when `transportOptions.checkMediaSegmentIntegrity` was set to `true`
254
+ - avoid unnecessary warning logs when loading some initialization segments [#1049]
255
+ - TypeScript: Add forgotten TypeScript types in the exposed segment and manifest loader APIs [#1057]
256
+ - DRM: Avoid decryption issues when a license is persisted in a `singleLicensePer` `"init-data"` mode but loaded in a `"content"` mode [#1031, #1042]
257
+ - DRM: Totally avoid the theoretical possibility of leaking MediaKeySessions when a `generateRequest` or `load` call takes multiple seconds [#1093]
232
258
 
233
259
  ### Other improvements
234
260
 
235
- - DASH: always consider that the non-last Period is finished when it contains SegmentTimeline elements [#1047]
236
- - add better buffer cleaning logic on a browser's `QuotaExceededError` to better handle memory limitations [#1065]
237
- - DASH: Prioritize selectionPriority attribute over a "main" Role when ordering AdaptationSets [#1082]
238
- - directfile/Safari: use the `getStartDate` method in `getWallClockTime`, `seekTo` and the `positionUpdate` event when available to obtain true offseted "wall-clock" times when playing HLS contents on Safari [#1055]
239
- - DRM: Improve DRM Session caches performance when `singleLicensePer` is set to `"content"`
240
- - DRM: Stop retrying closing MediaKeySessions multiple times when it fails, instead doing it only once when it should work [#1093]
241
- - TypeScript: Add IBitrateEstimate, IPositionUpdate and IPlayerState types to the exported types [#1084]
242
- - Remove dependency on pinkie's promise ponyfill [#1058, #1090]
243
- - tests: add performance tests, to better catch and avoid performance regressions [#1053, #1062]
244
- - DRM: Refactor DRM logic for better maintainability. DRM-linked logs are now prefixed by `DRM:` instead of `EME:` like previously [#1042]
245
-
261
+ - DASH: always consider that the non-last Period is finished when it contains SegmentTimeline elements [#1047]
262
+ - add better buffer cleaning logic on a browser's `QuotaExceededError` to better handle memory limitations [#1065]
263
+ - DASH: Prioritize selectionPriority attribute over a "main" Role when ordering AdaptationSets [#1082]
264
+ - directfile/Safari: use the `getStartDate` method in `getWallClockTime`, `seekTo` and the `positionUpdate` event when available to obtain true offseted "wall-clock" times when playing HLS contents on Safari [#1055]
265
+ - DRM: Improve DRM Session caches performance when `singleLicensePer` is set to `"content"`
266
+ - DRM: Stop retrying closing MediaKeySessions multiple times when it fails, instead doing it only once when it should work [#1093]
267
+ - TypeScript: Add IBitrateEstimate, IPositionUpdate and IPlayerState types to the exported types [#1084]
268
+ - Remove dependency on pinkie's promise ponyfill [#1058, #1090]
269
+ - tests: add performance tests, to better catch and avoid performance regressions [#1053, #1062]
270
+ - DRM: Refactor DRM logic for better maintainability. DRM-linked logs are now prefixed by `DRM:` instead of `EME:` like previously [#1042]
246
271
 
247
272
  ## v3.26.2 (2022-01-11)
248
273
 
249
274
  ### Bug fixes
250
275
 
251
- - API: re-switch to SEEKING state instead of BUFFERING when seeking to already-buffered data [#1015]
252
- - DASH: provide default startNumber attribute for number-based SegmentTemplate indexes with a SegmentTimeline [#1009]
253
- - TTML (subtitles): interpret percentages as relative to the computed cell size and not as the percentage of the inherited font size in the page [#1013]
254
- - subtitles: Work-around recent Chrome issue where the content of a native `<track>` element would still be visible despite being removed from the DOM (issue only reproducible in the `"native"` `textTrackMode`) [#1039]
255
- - API: Fix rare issue happening when switching rapidly between Representations, which led to multiple APIs such as `getAvailableVideoBitrate` or `getAvailableAudioTracks` returning either incorrect or empty results [#1018]
256
- - Improve prevention of rare segment-loading loops by fixing an issue with the clean-up of the short-term buffer history we maintain [#1045]
276
+ - API: re-switch to SEEKING state instead of BUFFERING when seeking to already-buffered data [#1015]
277
+ - DASH: provide default startNumber attribute for number-based SegmentTemplate indexes with a SegmentTimeline [#1009]
278
+ - TTML (subtitles): interpret percentages as relative to the computed cell size and not as the percentage of the inherited font size in the page [#1013]
279
+ - subtitles: Work-around recent Chrome issue where the content of a native `<track>` element would still be visible despite being removed from the DOM (issue only reproducible in the `"native"` `textTrackMode`) [#1039]
280
+ - API: Fix rare issue happening when switching rapidly between Representations, which led to multiple APIs such as `getAvailableVideoBitrate` or `getAvailableAudioTracks` returning either incorrect or empty results [#1018]
281
+ - Improve prevention of rare segment-loading loops by fixing an issue with the clean-up of the short-term buffer history we maintain [#1045]
257
282
 
258
283
  ### Other improvements
259
284
 
260
- - DASH-LL: Improve adaptive bitrate logic on low-latency contents by implementing a specific algorithm for those [#1025, #1036]
261
- - DASH-LL: Improve handling of $Time$-based DASH-LL contents [#1020]
262
- - DASH: Support UTCTiming element with the `urn:mpeg:dash:utc:http-xsdate:2014` scheme [#1021]
263
- - DOC: Important refactoring of the RxPlayer API documentation to improve readability, discoverability and to add search capability to it [#1016]
264
- - DASH: handle ContentProtection elements that have been defined at the Representation-level (and not at the AdaptationSet-level, as defined by the DASH-IF IOP) [#1027]
265
- - DASH: Be resilient when the resource behind an UTCTiming element leads to an error (usually due to an HTTP-related issue) - instead of failing with an error like now [#1026]
266
- - Better estimate the duration of ISOBMFF segments with multiple moof boxes [#1037]
267
- - EME: Add hex-encoded key id to the `KEY_STATUS_CHANGE_ERROR` error message so we can know which key we're talking about when debugging [#1033]
268
- - dev/scripts: for the "modular" (a.k.a. minimal) RxPlayer build now rely on TypeScript's const enums, instead of uglily using sed, to replace compile-time constants. [#1014]
269
- - dev/scripts: remove reliance on environment variables when running the RxPlayer build scripts [#1004]
270
- - dev/scripts: add esbuild devdependency and add "s" script to allow faster checks for RxPlayer developpers [#1003]
271
- - CI: Rely on Github actions instead of Travis for most CI-related matters [#1046]
272
- - code/refacto: replace central `Clock` concept (Observable bringing media-related updates to the RxPlayer at a regular pace) by a more flexible `PlaybackObserver` class [#1002]
273
-
285
+ - DASH-LL: Improve adaptive bitrate logic on low-latency contents by implementing a specific algorithm for those [#1025, #1036]
286
+ - DASH-LL: Improve handling of $Time$-based DASH-LL contents [#1020]
287
+ - DASH: Support UTCTiming element with the `urn:mpeg:dash:utc:http-xsdate:2014` scheme [#1021]
288
+ - DOC: Important refactoring of the RxPlayer API documentation to improve readability, discoverability and to add search capability to it [#1016]
289
+ - DASH: handle ContentProtection elements that have been defined at the Representation-level (and not at the AdaptationSet-level, as defined by the DASH-IF IOP) [#1027]
290
+ - DASH: Be resilient when the resource behind an UTCTiming element leads to an error (usually due to an HTTP-related issue) - instead of failing with an error like now [#1026]
291
+ - Better estimate the duration of ISOBMFF segments with multiple moof boxes [#1037]
292
+ - EME: Add hex-encoded key id to the `KEY_STATUS_CHANGE_ERROR` error message so we can know which key we're talking about when debugging [#1033]
293
+ - dev/scripts: for the "modular" (a.k.a. minimal) RxPlayer build now rely on TypeScript's const enums, instead of uglily using sed, to replace compile-time constants. [#1014]
294
+ - dev/scripts: remove reliance on environment variables when running the RxPlayer build scripts [#1004]
295
+ - dev/scripts: add esbuild devdependency and add "s" script to allow faster checks for RxPlayer developpers [#1003]
296
+ - CI: Rely on Github actions instead of Travis for most CI-related matters [#1046]
297
+ - code/refacto: replace central `Clock` concept (Observable bringing media-related updates to the RxPlayer at a regular pace) by a more flexible `PlaybackObserver` class [#1002]
274
298
 
275
299
  ## v3.26.1 (2021-09-14)
276
300
 
277
301
  ### Bug fixes
278
302
 
279
- - ttml: Do not throw if a TTML subtitles file doesn't contain any `<body>` tag, just ignore it [#993]
280
- - Auto-detect when playback is unexplicably frozen and try to unlock it through a small seek [#982]
281
- - Properly send `available{Audio,Video}BitratesChange` event for multi-Period contents [#983]
282
- - DASH/MetaPlaylist/Local: fix rare infinite rebuffering issue which could happen when changing or disabling the track of a future Period [#1000]
283
- - compat: Prevent rare segment-loading loops by automatically detecting when segments are garbage collected by the browser immediately after being pushed [#987, #990]
284
- - compat/DRM: In some Safari versions, communicating a license as a JS `ArrayBuffer` could throw, this is now fixed [#974]
285
- - DASH_WASM: Don't stop with a fatal error if an expected ISO8601 duration value is empty in the MPD
286
- - DASH_WASM: Parse `<Event>` elements which contain an XML namespace defined outside that element [#981]
287
- - DASH_WASM: Drastically reduce wasm compilation time and file size [#980]
303
+ - ttml: Do not throw if a TTML subtitles file doesn't contain any `<body>` tag, just ignore it [#993]
304
+ - Auto-detect when playback is unexplicably frozen and try to unlock it through a small seek [#982]
305
+ - Properly send `available{Audio,Video}BitratesChange` event for multi-Period contents [#983]
306
+ - DASH/MetaPlaylist/Local: fix rare infinite rebuffering issue which could happen when changing or disabling the track of a future Period [#1000]
307
+ - compat: Prevent rare segment-loading loops by automatically detecting when segments are garbage collected by the browser immediately after being pushed [#987, #990]
308
+ - compat/DRM: In some Safari versions, communicating a license as a JS `ArrayBuffer` could throw, this is now fixed [#974]
309
+ - DASH_WASM: Don't stop with a fatal error if an expected ISO8601 duration value is empty in the MPD
310
+ - DASH_WASM: Parse `<Event>` elements which contain an XML namespace defined outside that element [#981]
311
+ - DASH_WASM: Drastically reduce wasm compilation time and file size [#980]
288
312
 
289
313
  ### Other improvements
290
314
 
291
- - Request initialization segment and the first media segments at the same time when possible, potentially reducing loading times [#973]
292
- - Remove cached segment request detection in the adaptive logic, as it is sensible to false positives, leading to a poor bitrate in some short contents [#977]
293
- - Export more needed types through the `rx-player/types` path [#972, #976]
294
- - demo: Expose some player options in the demo page [#999]
295
- - dev: Rewrite build logic from bash to node.js to improve its maintainability
296
- - dev: Replace internal `info` script by more helpful and interactive `list` script [#991]
297
- - dev/code: Forbid the usage of TypeScript's type `any` in most of the RxPlayer's code - performing runtime type-checking in some cases (in DEV mode only) [#994]
298
- - dev/code: Remove RxJS from the transports code [#962]
299
-
315
+ - Request initialization segment and the first media segments at the same time when possible, potentially reducing loading times [#973]
316
+ - Remove cached segment request detection in the adaptive logic, as it is sensible to false positives, leading to a poor bitrate in some short contents [#977]
317
+ - Export more needed types through the `rx-player/types` path [#972, #976]
318
+ - demo: Expose some player options in the demo page [#999]
319
+ - dev: Rewrite build logic from bash to node.js to improve its maintainability
320
+ - dev: Replace internal `info` script by more helpful and interactive `list` script [#991]
321
+ - dev/code: Forbid the usage of TypeScript's type `any` in most of the RxPlayer's code - performing runtime type-checking in some cases (in DEV mode only) [#994]
322
+ - dev/code: Remove RxJS from the transports code [#962]
300
323
 
301
324
  ## v3.26.0 (2021-06-10)
302
325
 
303
326
  ### Features
304
327
 
305
- - Add HDR information through the `hdrInfo` property on video Representation/tracks as returned by APIs such as `getVideoTrack`, `getAvailableVideoTracks`, the `videoTrackChange` event, `getManifest`, `getCurrentAdaptations` and `getCurrentRepresentations` [#946]
306
- - Add the `DASH_WASM` experimental feature, allowing faster MPD parsing using WebAssembly [#937]
307
- - Add the experimental `VideoThumbnailLoader` tool, which uses "trickmodes" DASH AdaptationSet to generate thumbnails [#647]
308
- - Add `preferTrickModeTracks` option to `setPlaybackRate`, to switch on or off trickmode tracks when available on the Manifest [#940]
309
- - Add `areTrickModeTracksEnabled` method to indicate whether the RxPlayer is using trickmode tracks in priority [#940]
310
- - Add `trickModeTracks` and `isTrickModeTrack` properties to video tracks as returned by the `getVideoTrack` and `getAvailableVideoTracks` method and by the `videoTrackChange` event [#940]
311
- - Add `maxSessionCacheSize` `keySystems` option, to configure the maximum number of decryption sessions that can be kept alive at the same time in a cache [#938]
312
- - The `manifestLoader` callback defined in `transportOptions` can now ask for a request to be retried [#964]
313
- - `initialManifest` now accepts the Manifest as an `ArrayBuffer` [#937]
314
- - The `manifestLoader` callback defined in `transportOptions` can now send the Manifest as an `ArrayBuffer` [#937]
328
+ - Add HDR information through the `hdrInfo` property on video Representation/tracks as returned by APIs such as `getVideoTrack`, `getAvailableVideoTracks`, the `videoTrackChange` event, `getManifest`, `getCurrentAdaptations` and `getCurrentRepresentations` [#946]
329
+ - Add the `DASH_WASM` experimental feature, allowing faster MPD parsing using WebAssembly [#937]
330
+ - Add the experimental `VideoThumbnailLoader` tool, which uses "trickmodes" DASH AdaptationSet to generate thumbnails [#647]
331
+ - Add `preferTrickModeTracks` option to `setPlaybackRate`, to switch on or off trickmode tracks when available on the Manifest [#940]
332
+ - Add `areTrickModeTracksEnabled` method to indicate whether the RxPlayer is using trickmode tracks in priority [#940]
333
+ - Add `trickModeTracks` and `isTrickModeTrack` properties to video tracks as returned by the `getVideoTrack` and `getAvailableVideoTracks` method and by the `videoTrackChange` event [#940]
334
+ - Add `maxSessionCacheSize` `keySystems` option, to configure the maximum number of decryption sessions that can be kept alive at the same time in a cache [#938]
335
+ - The `manifestLoader` callback defined in `transportOptions` can now ask for a request to be retried [#964]
336
+ - `initialManifest` now accepts the Manifest as an `ArrayBuffer` [#937]
337
+ - The `manifestLoader` callback defined in `transportOptions` can now send the Manifest as an `ArrayBuffer` [#937]
315
338
 
316
339
  ### Bug fixes
317
340
 
318
- - DASH: don't ignore new EventStream elements that weren't in the previous MPD update for a given Period [#956]
319
- - DASH: fix fatal error linked to the `duration` of the `MediaSource` happening when playing a multi-Period live DASH content whose previous (before updating) last Period's segments had been fully generated and fully pushed. [#952]
320
- - DASH: Avoid loading plain-text subtitles in a loop when playing before the first cue starts or after the last cue ends [#945, #948]
321
- - DASH: Avoid loading plain-text subtitles in a loop when the `transportOptions.checkMediaSegmentIntegrity` is set to `true` [#947]
322
- - DASH: avoid ending a dynamic stream if new Periods may be added later to the MPD [#959]
323
- - DASH: avoid unnecessarily refresh a MPD based on SegmentList elements when they don't perfectly align with the pushed data [#963]
341
+ - DASH: don't ignore new EventStream elements that weren't in the previous MPD update for a given Period [#956]
342
+ - DASH: fix fatal error linked to the `duration` of the `MediaSource` happening when playing a multi-Period live DASH content whose previous (before updating) last Period's segments had been fully generated and fully pushed. [#952]
343
+ - DASH: Avoid loading plain-text subtitles in a loop when playing before the first cue starts or after the last cue ends [#945, #948]
344
+ - DASH: Avoid loading plain-text subtitles in a loop when the `transportOptions.checkMediaSegmentIntegrity` is set to `true` [#947]
345
+ - DASH: avoid ending a dynamic stream if new Periods may be added later to the MPD [#959]
346
+ - DASH: avoid unnecessarily refresh a MPD based on SegmentList elements when they don't perfectly align with the pushed data [#963]
324
347
 
325
348
  ### Other improvements
326
349
 
327
- - Improve `audioTrackSwitchingMode` `"direct"` mode by avoiding unnecessary reloading cases [#872, #887, #943]
328
- - When seeking after the end of an ended content, actually seek just a little before to avoid subtle issues [#941]
329
- - DASH: limit the postponment of a Manifest refresh due to poor MPD-parsing performance to 6-times the "regular" delay (not impacted by `tansportOptions.minimumManifestUpdateInterval`) [#958]
330
- - DASH: Avoid loading two times a segment instead of once when that segment is not anounced in the MPD through a SegmentBase, SegmentList nor SegmentTemplate element but just through the Representation's BaseURL. [#949]
331
- - Update used RxJS version to 7.0.0, which might bring with it a smaller size and better performances [#954]
332
- - demo: remove Chart.js dependency (we found that its new API documentation and errors were too impenetrable) and replace the "Buffer Size" chart by a homemade one. [#955, #957]
333
-
350
+ - Improve `audioTrackSwitchingMode` `"direct"` mode by avoiding unnecessary reloading cases [#872, #887, #943]
351
+ - When seeking after the end of an ended content, actually seek just a little before to avoid subtle issues [#941]
352
+ - DASH: limit the postponment of a Manifest refresh due to poor MPD-parsing performance to 6-times the "regular" delay (not impacted by `tansportOptions.minimumManifestUpdateInterval`) [#958]
353
+ - DASH: Avoid loading two times a segment instead of once when that segment is not anounced in the MPD through a SegmentBase, SegmentList nor SegmentTemplate element but just through the Representation's BaseURL. [#949]
354
+ - Update used RxJS version to 7.0.0, which might bring with it a smaller size and better performances [#954]
355
+ - demo: remove Chart.js dependency (we found that its new API documentation and errors were too impenetrable) and replace the "Buffer Size" chart by a homemade one. [#955, #957]
334
356
 
335
357
  ## v3.24.0 (2021-04-01)
336
358
 
337
359
  ### Features
338
360
 
339
- - Add `inbandEvent` event for when an event is encountered in a media segment [#892]
340
- - DRM: Add `singleLicensePer` `keySystems` option to be able to signal in advance that the current content has a single license, even if it has multiple encryption keys [#863, #904]
341
- - DRM: Add `keySystems[].licenseStorage.disableRetroCompatibility` boolean to unlock optimizations when compatibility with EME sessions persisted in older RxPlayer versions is not important [#919]
361
+ - Add `inbandEvent` event for when an event is encountered in a media segment [#892]
362
+ - DRM: Add `singleLicensePer` `keySystems` option to be able to signal in advance that the current content has a single license, even if it has multiple encryption keys [#863, #904]
363
+ - DRM: Add `keySystems[].licenseStorage.disableRetroCompatibility` boolean to unlock optimizations when compatibility with EME sessions persisted in older RxPlayer versions is not important [#919]
342
364
 
343
365
  ### Bug fixes
344
366
 
345
- - DASH: Fix rounding error that could cause infinite buffering issues when going from a DASH Period to the next [#897, #899]
346
- - DRM: Always pass on server certificate before any challenge is generated. Contents with multiple licenses previously could lead to the latter being done before the former. [#895]
347
- - DRM: Fix possible leaks of MediaKeySessions if closed at the wrong time [#920]
348
- - Fix issue making sudden and acute fall in bandwidth not being considered soon enough [#906]
349
- - On some devices when `maxBufferAhead` is set, avoid removing the initially loaded data if done before the initial seek could be performed [#907]
350
- - Avoid cases of infinite rebuffering on Tizen 4 by avoiding pushing segments "on top of others" too close to the current position [#925]
351
- - Avoid seeking issues on Tizen by not seeking over discontinuities that will be already handled by the browser [#922]
352
- - Fix initial seek on Tizen (Samsung TVs) on live contents by setting a much lower duration (to work-around a Tizen overflow) [#914]
353
- - DASH: Consider multiple defined `<Accessibility>` tags for a single AdaptationSet [#903]
354
- - Fix error that could be thrown on Safari when calling the `getStatusForHDCP` method from the experimental `MediaCapabilitiesProber` tool [#927]
367
+ - DASH: Fix rounding error that could cause infinite buffering issues when going from a DASH Period to the next [#897, #899]
368
+ - DRM: Always pass on server certificate before any challenge is generated. Contents with multiple licenses previously could lead to the latter being done before the former. [#895]
369
+ - DRM: Fix possible leaks of MediaKeySessions if closed at the wrong time [#920]
370
+ - Fix issue making sudden and acute fall in bandwidth not being considered soon enough [#906]
371
+ - On some devices when `maxBufferAhead` is set, avoid removing the initially loaded data if done before the initial seek could be performed [#907]
372
+ - Avoid cases of infinite rebuffering on Tizen 4 by avoiding pushing segments "on top of others" too close to the current position [#925]
373
+ - Avoid seeking issues on Tizen by not seeking over discontinuities that will be already handled by the browser [#922]
374
+ - Fix initial seek on Tizen (Samsung TVs) on live contents by setting a much lower duration (to work-around a Tizen overflow) [#914]
375
+ - DASH: Consider multiple defined `<Accessibility>` tags for a single AdaptationSet [#903]
376
+ - Fix error that could be thrown on Safari when calling the `getStatusForHDCP` method from the experimental `MediaCapabilitiesProber` tool [#927]
355
377
 
356
378
  ### Other improvements
357
379
 
358
- - Avoid to push on top of the current position if there's already a segment there as it can provoke minor decoding issues on some devices [#925]
359
- - Update video element's duration if the content duration changes [#917]
360
- - DASH: Improve loading time with encrypted contents by only using the encrypted initialization data found in the Manifest when found in it [#911, #919]
361
- - Record redirections made on a `manifestUpdateUrl` to request directly the right URL on next update. [#929]
362
- - Improve loading time when a `serverCertificate` is given by calling the `setServerCertificate` API earlier [#895]
363
- - Improve loading time when switching contents by fetching the Manifest at the same time the previous content is cleaned-up [#894]
364
- - Improve loading time on some CPU-constrained devices by not running unnecessary playback checks on the "progress" HTMLMediaElement event anymore [#893]
365
- - DASH: Consider DASH audio AdaptationSet with a "urn:mpeg:dash:role:2011" schemeIdUri and a "description" role as `audioDescription` tracks [#903]
366
- - Warn through the logger when the autoplay attribute is enabled on the media element but not on RxPlayer [#924]
367
- - Avoid switching to a SEEKING state if the seek operation was performed inside the RxPlayer's code [#872, #887]
368
- - DRM: Wait up to 100 milliseconds after a persistent MediaKeySession has been loaded to wait for possibly late `keyStatuses` updates [#928]
369
- - DRM: Only store persistent MediaKeySession once at least one key is known [#926]
370
- - DRM: Reconsider Representations that have been fallbacked from if they become decipherable [#905]
371
- - DRM: Lower the maximum size of the MediaKeySession cache from 50 to 15 to improve compatibility, even more now that license with multiple keys are properly handled
372
- - Doc: Move architecture documentation closer to the code it documents [#764, #900]
373
- - Doc: add "Quick links" to the top of the API documentation [#909]
374
-
380
+ - Avoid to push on top of the current position if there's already a segment there as it can provoke minor decoding issues on some devices [#925]
381
+ - Update video element's duration if the content duration changes [#917]
382
+ - DASH: Improve loading time with encrypted contents by only using the encrypted initialization data found in the Manifest when found in it [#911, #919]
383
+ - Record redirections made on a `manifestUpdateUrl` to request directly the right URL on next update. [#929]
384
+ - Improve loading time when a `serverCertificate` is given by calling the `setServerCertificate` API earlier [#895]
385
+ - Improve loading time when switching contents by fetching the Manifest at the same time the previous content is cleaned-up [#894]
386
+ - Improve loading time on some CPU-constrained devices by not running unnecessary playback checks on the "progress" HTMLMediaElement event anymore [#893]
387
+ - DASH: Consider DASH audio AdaptationSet with a "urn:mpeg:dash:role:2011" schemeIdUri and a "description" role as `audioDescription` tracks [#903]
388
+ - Warn through the logger when the autoplay attribute is enabled on the media element but not on RxPlayer [#924]
389
+ - Avoid switching to a SEEKING state if the seek operation was performed inside the RxPlayer's code [#872, #887]
390
+ - DRM: Wait up to 100 milliseconds after a persistent MediaKeySession has been loaded to wait for possibly late `keyStatuses` updates [#928]
391
+ - DRM: Only store persistent MediaKeySession once at least one key is known [#926]
392
+ - DRM: Reconsider Representations that have been fallbacked from if they become decipherable [#905]
393
+ - DRM: Lower the maximum size of the MediaKeySession cache from 50 to 15 to improve compatibility, even more now that license with multiple keys are properly handled
394
+ - Doc: Move architecture documentation closer to the code it documents [#764, #900]
395
+ - Doc: add "Quick links" to the top of the API documentation [#909]
375
396
 
376
397
  ## v3.23.1 (2021-02-01)
377
398
 
378
399
  ### Bug fixes
379
400
 
380
- - Fix support of encrypted contents on Safari (v3.23.0 regression)
381
-
401
+ - Fix support of encrypted contents on Safari (v3.23.0 regression)
382
402
 
383
403
  ## v3.23.0 (2021-02-01)
384
404
 
385
405
  ### Features
386
406
 
387
- - Add the `reload` method to be able to re-load the last loaded content as fast as possible (e.g. after fatal errors) [#859, #867]
388
- - Add `onCodecSwitch` loadVideo option, to select a strategy when a new incompatible codec is encountered [#856]
389
- - Emit `DISCONTINUITY_ENCOUNTERED` warnings when a discontinuity has been seeked over [#862]
390
- - Add minAudioBitrate and minVideoBitrate constructor options and the {set,get}Minimum{Audio,Video}Bitrate methods to define the minimum quality reachable through adaptive streaming [#876]
407
+ - Add the `reload` method to be able to re-load the last loaded content as fast as possible (e.g. after fatal errors) [#859, #867]
408
+ - Add `onCodecSwitch` loadVideo option, to select a strategy when a new incompatible codec is encountered [#856]
409
+ - Emit `DISCONTINUITY_ENCOUNTERED` warnings when a discontinuity has been seeked over [#862]
410
+ - Add minAudioBitrate and minVideoBitrate constructor options and the {set,get}Minimum{Audio,Video}Bitrate methods to define the minimum quality reachable through adaptive streaming [#876]
391
411
 
392
412
  ### Bug fixes
393
413
 
394
- - Fix impossibility to fallback to another Representation (with the `keySystems[].fallbackOn` `loadVideo` options) when a decryption key has been found to be non-usable [#889]
395
- - Fix DRM-related events being sent twice in a row instead of just once [#850]
396
- - Stop and throw `MANIFEST_PARSE_ERROR` error again when either audio or video has only unsupported codecs (instead of just playing the other type) [#864]
397
- - Avoid re-downloading a segment that ends a lot before its expected end [#846]
398
- - In "native" `textTrackMode`, avoid requesting text segments in a loop [#878]
399
- - Disable effects of `throttleVideoBitrateWhenHidden`, `limitVideoWidth` and `throttleVideoBitrate` player options on Firefox >= 67 due to how Picture in Picture mode is currently handled in them [#874]
400
- - Work-around race condition in old Chromium versions where loading a persistent MediaKeySession led to no key statuses right away [#847]
414
+ - Fix impossibility to fallback to another Representation (with the `keySystems[].fallbackOn` `loadVideo` options) when a decryption key has been found to be non-usable [#889]
415
+ - Fix DRM-related events being sent twice in a row instead of just once [#850]
416
+ - Stop and throw `MANIFEST_PARSE_ERROR` error again when either audio or video has only unsupported codecs (instead of just playing the other type) [#864]
417
+ - Avoid re-downloading a segment that ends a lot before its expected end [#846]
418
+ - In "native" `textTrackMode`, avoid requesting text segments in a loop [#878]
419
+ - Disable effects of `throttleVideoBitrateWhenHidden`, `limitVideoWidth` and `throttleVideoBitrate` player options on Firefox >= 67 due to how Picture in Picture mode is currently handled in them [#874]
420
+ - Work-around race condition in old Chromium versions where loading a persistent MediaKeySession led to no key statuses right away [#847]
401
421
 
402
422
  ### Other improvements
403
423
 
404
- - Skip over most audio or video discontinuities in the stream, even those not announced in the Manifest [#862]
405
- - When track or bitrate switching lead to a reload, seek back a consistent number of milliseconds to give back context [#848]
406
- - Don't call `setServerCertificate` API when `keySystems[].serverCertificate` option is set to `null` [#849]
407
- - On the rare platforms where an undefined initialization data type can be received on encrypted events, retry `generateRequest` with a default "cenc" value if the first one fails due to it being empty [#870]
408
- - Re-add debug logs logging the principal media properties at each clock tick [#844]
409
- - Use TextEncoder and TextDecoder interfaces when available to speed-up string conversions [#843, #875]
410
- - Throw a better error when no EME API is found
411
- - Reduce default bundles size by switching to webpack 5 to generate them
412
- - tests: Add conformance tests on the initial seek to help debugging related issues on new platforms [#873]
413
- - lint/code: Use eslint code linter even for the TypeScript code [#842]
414
-
424
+ - Skip over most audio or video discontinuities in the stream, even those not announced in the Manifest [#862]
425
+ - When track or bitrate switching lead to a reload, seek back a consistent number of milliseconds to give back context [#848]
426
+ - Don't call `setServerCertificate` API when `keySystems[].serverCertificate` option is set to `null` [#849]
427
+ - On the rare platforms where an undefined initialization data type can be received on encrypted events, retry `generateRequest` with a default "cenc" value if the first one fails due to it being empty [#870]
428
+ - Re-add debug logs logging the principal media properties at each clock tick [#844]
429
+ - Use TextEncoder and TextDecoder interfaces when available to speed-up string conversions [#843, #875]
430
+ - Throw a better error when no EME API is found
431
+ - Reduce default bundles size by switching to webpack 5 to generate them
432
+ - tests: Add conformance tests on the initial seek to help debugging related issues on new platforms [#873]
433
+ - lint/code: Use eslint code linter even for the TypeScript code [#842]
415
434
 
416
435
  ## v3.22.0 (2020-11-17)
417
436
 
418
437
  ### Features
419
438
 
420
- - Add `audioTrackSwitchingMode` `loadVideo` option to allow different strategies when switching between audio tracks [#801, #806]
421
- - Add `enableFastSwitching` `loadVideo` option to enable or disable optimizations doing segment replacement in the browser's buffer [#779, #780]
422
- - Add `initialManifest` `loadVideo` option to provide the Manifest to the RxPlayer when it has already been loaded [#807]
423
- - tools: Add `StringUtils` utilitary functions to tools to convert bytes to strings and the other way around [#809]
424
- - tools: The `TextTrackRenderer` tool is not experimental anymore: it now has a stable API [#810]
425
- - experimental/local-manifest: The RxPlayer now (only) plays the new `"0.2"` format version of the "LocalManifest" (in the experimental `"local"` transport) [#810]
439
+ - Add `audioTrackSwitchingMode` `loadVideo` option to allow different strategies when switching between audio tracks [#801, #806]
440
+ - Add `enableFastSwitching` `loadVideo` option to enable or disable optimizations doing segment replacement in the browser's buffer [#779, #780]
441
+ - Add `initialManifest` `loadVideo` option to provide the Manifest to the RxPlayer when it has already been loaded [#807]
442
+ - tools: Add `StringUtils` utilitary functions to tools to convert bytes to strings and the other way around [#809]
443
+ - tools: The `TextTrackRenderer` tool is not experimental anymore: it now has a stable API [#810]
444
+ - experimental/local-manifest: The RxPlayer now (only) plays the new `"0.2"` format version of the "LocalManifest" (in the experimental `"local"` transport) [#810]
426
445
 
427
446
  ### Bug fixes
428
447
 
429
- - directfile: Fix impossibility to play an encrypted content in directfile mode (regression brought in v3.21.1) [#827, #830]
430
- - subtitles: Display multiple cues with overlapping times [#829]
431
- - smooth: Fix minimum position in a Smooth live content when fewer segments than the dvr window length are available [#826]
432
- - dash/metaplaylist: Fix possible playback issues on multi-Period contents, where segments from multiple Periods overlap [#837]
433
- - Fix very rare race condition which triggered a "setting priority of null" error after synchronous segment requests were done [#817]
434
- - local-manifest: LocalManifest that transition from not finished to finished while playing now end properly [#818]
435
- - local-manifest: Fix and clarify the duration and maximum position reported for a playing LocalManifest [#818]
436
- - compatibility/drm: On some webkit-based browsers, do not require the use of a server certificate for DRM if the key system used is not FairPlay [#833]
437
- - drm: Properly update to a different server certificate on the MediaKeys or remove it if needed [#835]
438
- - drm: throw MEDIA_IS_ENCRYPTED_ERROR again when playing an encrypted event without either the `EME` feature, EME APIs or a `keySystems` option [#841]
448
+ - directfile: Fix impossibility to play an encrypted content in directfile mode (regression brought in v3.21.1) [#827, #830]
449
+ - subtitles: Display multiple cues with overlapping times [#829]
450
+ - smooth: Fix minimum position in a Smooth live content when fewer segments than the dvr window length are available [#826]
451
+ - dash/metaplaylist: Fix possible playback issues on multi-Period contents, where segments from multiple Periods overlap [#837]
452
+ - Fix very rare race condition which triggered a "setting priority of null" error after synchronous segment requests were done [#817]
453
+ - local-manifest: LocalManifest that transition from not finished to finished while playing now end properly [#818]
454
+ - local-manifest: Fix and clarify the duration and maximum position reported for a playing LocalManifest [#818]
455
+ - compatibility/drm: On some webkit-based browsers, do not require the use of a server certificate for DRM if the key system used is not FairPlay [#833]
456
+ - drm: Properly update to a different server certificate on the MediaKeys or remove it if needed [#835]
457
+ - drm: throw MEDIA_IS_ENCRYPTED_ERROR again when playing an encrypted event without either the `EME` feature, EME APIs or a `keySystems` option [#841]
439
458
 
440
459
  ### Other improvements
441
460
 
442
- - subtitles/ttml: Apply default position to TTML subtitles in `"html"` `textTrackMode` when no style is found [#815]
443
- - subtitles/ttml: Set default text color to white to TTML subtitles in `"html"` textTrackMode [#832]
444
- - drm: Avoid re-setting a server certificate we know has already been pushed to improve loading performance [#824, #835]
445
- - dash: Always prefer a "main" AdaptationSet when hesitating between multiple ones [#828]
446
- - dash: Improve minimum position precision for dynamic DASH contents when less segments are available than what would be guessed from the timeShiftBufferDepth [#826]
447
- - drm/logs: Better log why a MediaKeySession is not considered as "usable" [#822]
448
- - drm/logs: Be more verbose with DRM-related logs, even at lower logger levels [#821]
449
- - tests/conformance: Add "conformance tests", to quickly test the capabilities of new devices and targets [#814]
450
- - code: avoid circular dependency in `src/features` in original typescript source files [#805]
451
- - demo: Fix default position for the video track select element in the demo to always be at the currently selected video track [#813]
452
- - demo/code: Better integrate the RxPlayer to the demo: through a simple import, instead of adding a script tag for the bundled version [#811]
453
- - dev: Remove all enforced git-hooks (on pre-commit and pre-push) [#808]
454
-
461
+ - subtitles/ttml: Apply default position to TTML subtitles in `"html"` `textTrackMode` when no style is found [#815]
462
+ - subtitles/ttml: Set default text color to white to TTML subtitles in `"html"` textTrackMode [#832]
463
+ - drm: Avoid re-setting a server certificate we know has already been pushed to improve loading performance [#824, #835]
464
+ - dash: Always prefer a "main" AdaptationSet when hesitating between multiple ones [#828]
465
+ - dash: Improve minimum position precision for dynamic DASH contents when less segments are available than what would be guessed from the timeShiftBufferDepth [#826]
466
+ - drm/logs: Better log why a MediaKeySession is not considered as "usable" [#822]
467
+ - drm/logs: Be more verbose with DRM-related logs, even at lower logger levels [#821]
468
+ - tests/conformance: Add "conformance tests", to quickly test the capabilities of new devices and targets [#814]
469
+ - code: avoid circular dependency in `src/features` in original typescript source files [#805]
470
+ - demo: Fix default position for the video track select element in the demo to always be at the currently selected video track [#813]
471
+ - demo/code: Better integrate the RxPlayer to the demo: through a simple import, instead of adding a script tag for the bundled version [#811]
472
+ - dev: Remove all enforced git-hooks (on pre-commit and pre-push) [#808]
455
473
 
456
474
  ## v3.21.1 (2020-09-21)
457
475
 
458
476
  ### Bug fixes
459
477
 
460
- - compatibility/drm: make switching the current `MediaKeys` work on most platforms by re-ordering browser API calls [#766, #744]
461
- - compatibility/drm: in Edge and IE11, fix behavior which could lead to not fallbacking from a non-decryptable quality due to a badly parsed key ID [#790]
462
- - dash: when a Representation depends on multiple SegmentTemplate at the same time, merge all corresponding information instead of just relying on the last one [#767, #768]
463
- - smooth: skip discontinuity when seeking in the middle of one when playing a smooth content [#792]
464
- - api: fix `getUrl` and the minimum position calculation after playing for some time a live content with a set `manifestUpdateUrl` [#775, #776]
465
- - drm/subtitles: better handle UTF-8 and UTF-16 characters in an encrypted initialization data or in subtitles [#791]
466
- - requests: still retry all the other segment's URLs when a non-retryable error happen on the request for one of them [#798]
467
- - dash: fix infinite rebuffering when playing multi-Period DASH contents for some time with a `manifestUpdateUrl` set [#797]
478
+ - compatibility/drm: make switching the current `MediaKeys` work on most platforms by re-ordering browser API calls [#766, #744]
479
+ - compatibility/drm: in Edge and IE11, fix behavior which could lead to not fallbacking from a non-decryptable quality due to a badly parsed key ID [#790]
480
+ - dash: when a Representation depends on multiple SegmentTemplate at the same time, merge all corresponding information instead of just relying on the last one [#767, #768]
481
+ - smooth: skip discontinuity when seeking in the middle of one when playing a smooth content [#792]
482
+ - api: fix `getUrl` and the minimum position calculation after playing for some time a live content with a set `manifestUpdateUrl` [#775, #776]
483
+ - drm/subtitles: better handle UTF-8 and UTF-16 characters in an encrypted initialization data or in subtitles [#791]
484
+ - requests: still retry all the other segment's URLs when a non-retryable error happen on the request for one of them [#798]
485
+ - dash: fix infinite rebuffering when playing multi-Period DASH contents for some time with a `manifestUpdateUrl` set [#797]
468
486
 
469
487
  ### Other improvements
470
488
 
471
- - improve seek latency in some rare cases where we could profit from cancelling a request for a needed segment [#752, #769]
472
- - requests: only download an initialization segment when media segments for that Representation are needed [#773]
473
- - requests: avoid unnecessary segment requests when segments loaded don't exactly align with what is expected if contiguous segments exist [#772, #771]
474
- - better time quality switches to avoid having to re-download segments in the new quality [#781, #782, #783]
475
- - adaptive: limit bandwidth oscillations when the buffer level is low by choosing a lower bitrate by default and limiting fall in bandwidth when in "starvation mode" [#796]
476
- - compatibility/drm: filter out badly-formed CENC PSSH when found, if some well-formed exist [#788]
477
- - isobmff: support rare but possible occurence where an ISOBMFF box size is stored on 8 bytes [#784]
478
- - logs: when logs are set to `"DEBUG"`, now regularly print visual representations of which segments live currently in the buffer(s) [#795]
479
- - demo: change separator in the demo's generated links from "\" to "!" to not change its form when percent-encoded [#758, #759]
480
- - project: better document changes in changelog and release notes, mostly by linking to related issues and PRs
481
- - code: rename "Buffer" module to "Stream" in the code, documentation and logs to better reflect what that code does [#793]
482
- - tests: add "global" unit tests for a more a module-oriented testing strategy (when compared to our existing function-oriented unit tests) to our EME (DRM) related code [#753]
483
-
489
+ - improve seek latency in some rare cases where we could profit from cancelling a request for a needed segment [#752, #769]
490
+ - requests: only download an initialization segment when media segments for that Representation are needed [#773]
491
+ - requests: avoid unnecessary segment requests when segments loaded don't exactly align with what is expected if contiguous segments exist [#772, #771]
492
+ - better time quality switches to avoid having to re-download segments in the new quality [#781, #782, #783]
493
+ - adaptive: limit bandwidth oscillations when the buffer level is low by choosing a lower bitrate by default and limiting fall in bandwidth when in "starvation mode" [#796]
494
+ - compatibility/drm: filter out badly-formed CENC PSSH when found, if some well-formed exist [#788]
495
+ - isobmff: support rare but possible occurence where an ISOBMFF box size is stored on 8 bytes [#784]
496
+ - logs: when logs are set to `"DEBUG"`, now regularly print visual representations of which segments live currently in the buffer(s) [#795]
497
+ - demo: change separator in the demo's generated links from "\" to "!" to not change its form when percent-encoded [#758, #759]
498
+ - project: better document changes in changelog and release notes, mostly by linking to related issues and PRs
499
+ - code: rename "Buffer" module to "Stream" in the code, documentation and logs to better reflect what that code does [#793]
500
+ - tests: add "global" unit tests for a more a module-oriented testing strategy (when compared to our existing function-oriented unit tests) to our EME (DRM) related code [#753]
484
501
 
485
502
  ## v3.21.0 (2020-06-17)
486
503
 
487
504
  ### Features
488
505
 
489
- - api/events: add `"streamEvent"` event for when a DASH EventStream's event is reached
490
- - api/events: add `"streamEventSkip"` event for when a DASH EventStream's event is "skipped"
491
- - types/events: add `IStreamEvent` and `IStreamEventData` - which define the payload emitted by both a `"streamEvent"` and `"streamEventSkip"` events to the exported types
492
- - api/tracks: add second argument to `setPreferredAudioTracks`, `setPreferredTextTracks` and `setPreferredVideoTracks` to be able to also apply them to the currently loaded Periods / content
493
- - text/webvtt: parse settings attributes of WebVTT subtitles when in HTML mode
494
- - api/tracks: add codec information to `getAvailableAudioTracks` and `getAudioTrack`
506
+ - api/events: add `"streamEvent"` event for when a DASH EventStream's event is reached
507
+ - api/events: add `"streamEventSkip"` event for when a DASH EventStream's event is "skipped"
508
+ - types/events: add `IStreamEvent` and `IStreamEventData` - which define the payload emitted by both a `"streamEvent"` and `"streamEventSkip"` events to the exported types
509
+ - api/tracks: add second argument to `setPreferredAudioTracks`, `setPreferredTextTracks` and `setPreferredVideoTracks` to be able to also apply them to the currently loaded Periods / content
510
+ - text/webvtt: parse settings attributes of WebVTT subtitles when in HTML mode
511
+ - api/tracks: add codec information to `getAvailableAudioTracks` and `getAudioTrack`
495
512
 
496
513
  ### Bug fixes
497
514
 
498
- - dash: do not reduce the minimum position when using the `manifestUpdateUrl` `transportOptions` in `loadVideo`
499
- - local-manifest: consider `language` property from a "local" Manifest
500
- - local-manifest: refresh the Manifest even if we dont have a Manifest URL, as is often the case when playing locally-stored contents
501
- - local-manifest: allow the "expired" property of a local-manifest to be updated
502
- - compat/eme/fairplay: for fairplay contents, better format the initialization data given to the CDM. The previous behavior could lead to invalid license requests
503
- - eme: re-allow serialization into a JSON string of the persisted session data, as presented in the DRM tutorial
504
- - compat/low-latency: fix compilation of async/await when playing low-latency contents with the default bundled builds
505
- - eme: ensure that the previous MediaKeySystemAccess used had `persistentState` to "required" when a new content needs it to be
506
- - eme: fix `closeSessionsOnStop` `keySystems` option actually not removing any MediaKeySession when stopping a content (v3.20.1 regression).
515
+ - dash: do not reduce the minimum position when using the `manifestUpdateUrl` `transportOptions` in `loadVideo`
516
+ - local-manifest: consider `language` property from a "local" Manifest
517
+ - local-manifest: refresh the Manifest even if we dont have a Manifest URL, as is often the case when playing locally-stored contents
518
+ - local-manifest: allow the "expired" property of a local-manifest to be updated
519
+ - compat/eme/fairplay: for fairplay contents, better format the initialization data given to the CDM. The previous behavior could lead to invalid license requests
520
+ - eme: re-allow serialization into a JSON string of the persisted session data, as presented in the DRM tutorial
521
+ - compat/low-latency: fix compilation of async/await when playing low-latency contents with the default bundled builds
522
+ - eme: ensure that the previous MediaKeySystemAccess used had `persistentState` to "required" when a new content needs it to be
523
+ - eme: fix `closeSessionsOnStop` `keySystems` option actually not removing any MediaKeySession when stopping a content (v3.20.1 regression).
507
524
 
508
525
  ### Other improvements
509
526
 
510
- - dash: emit minor errors arising when parsing the DASH MPD through warning events (whose payload will be an error with the `PIPELINE_PARSE_ERROR` code)
511
- - dash: consider AdaptationSet@selectionPriority in our initial track choice if the user preferences lead to multiple compatible tracks
512
- - misc: do not download video segments when playing on an "audio" element.
513
- - eme: replace the MediaKeySession's cache entry based on the least recently used instead of on the least recently created to improve cache effectiveness.
514
- - eme/persistent sessions: Limit the maximum of stored persistent MediaKeySessions to 1000 to avoid the storage to grow indefinitely (higher than that, the least-recently used will be evicted)
515
-
527
+ - dash: emit minor errors arising when parsing the DASH MPD through warning events (whose payload will be an error with the `PIPELINE_PARSE_ERROR` code)
528
+ - dash: consider AdaptationSet@selectionPriority in our initial track choice if the user preferences lead to multiple compatible tracks
529
+ - misc: do not download video segments when playing on an "audio" element.
530
+ - eme: replace the MediaKeySession's cache entry based on the least recently used instead of on the least recently created to improve cache effectiveness.
531
+ - eme/persistent sessions: Limit the maximum of stored persistent MediaKeySessions to 1000 to avoid the storage to grow indefinitely (higher than that, the least-recently used will be evicted)
516
532
 
517
533
  ## v3.20.1 (2020-05-06)
518
534
 
519
535
  ### Bug fixes
520
536
 
521
- - eme: fix `OTHER_ERROR` issue arising when loading a new encrypted media when a previous since-disposed instance of the RxPlayer played encrypted contents on the same media element
522
- - eme: fix `OTHER_ERROR` issue arising on Internet Explorer 11 when playing more than one encrypted content
523
- - eme: fix issue where more than 50 active MediaKeySessions at the same time could lead to infinite rebuffering when playing back a previous content with multiple encryption keys
524
- - directfile: for directfile contents, don't reset to the preferred audio, text or video track when the track list changes
525
- - eme: remove any possibility of collision in the storage of EME initialization data. The previous behavior could theorically lead some initialization data to be ignored.
526
- - eme: fix typo which conflated an EME "internal-error" key status and an "output-restricted" one.
527
-
537
+ - eme: fix `OTHER_ERROR` issue arising when loading a new encrypted media when a previous since-disposed instance of the RxPlayer played encrypted contents on the same media element
538
+ - eme: fix `OTHER_ERROR` issue arising on Internet Explorer 11 when playing more than one encrypted content
539
+ - eme: fix issue where more than 50 active MediaKeySessions at the same time could lead to infinite rebuffering when playing back a previous content with multiple encryption keys
540
+ - directfile: for directfile contents, don't reset to the preferred audio, text or video track when the track list changes
541
+ - eme: remove any possibility of collision in the storage of EME initialization data. The previous behavior could theorically lead some initialization data to be ignored.
542
+ - eme: fix typo which conflated an EME "internal-error" key status and an "output-restricted" one.
528
543
 
529
544
  ## v3.20.0 (2020-04-22)
530
545
 
531
546
  ### Features
532
547
 
533
- - api: add `disableVideoTrack` method
534
- - api: add the `preferredVideoTrack` constructor option and `setPreferredVideoTracks` / `getPreferredVideoTracks` methods to set a video track preference (or to start with the video track disabled).
535
- - api: add optional `codec` property to preferred audio tracks APIs, allowing applications to communicate a codec preference.
536
- - api: make the `language` and `audioDescription` properties in `preferredAudioTracks`' objects optional.
537
- - api: add `signInterpreted` to `getVideoTrack` and `getAvailableVideoTracks` return objects to know when a track contains sign language interpretation
548
+ - api: add `disableVideoTrack` method
549
+ - api: add the `preferredVideoTrack` constructor option and `setPreferredVideoTracks` / `getPreferredVideoTracks` methods to set a video track preference (or to start with the video track disabled).
550
+ - api: add optional `codec` property to preferred audio tracks APIs, allowing applications to communicate a codec preference.
551
+ - api: make the `language` and `audioDescription` properties in `preferredAudioTracks`' objects optional.
552
+ - api: add `signInterpreted` to `getVideoTrack` and `getAvailableVideoTracks` return objects to know when a track contains sign language interpretation
538
553
 
539
554
  ### Deprecated
540
555
 
541
- - api: deprecate the `getManifest()` method
542
- - api: deprecate the `getCurrentAdaptations()` method
543
- - api: deprecate the `getCurrentRepresentations()` method
556
+ - api: deprecate the `getManifest()` method
557
+ - api: deprecate the `getCurrentAdaptations()` method
558
+ - api: deprecate the `getCurrentRepresentations()` method
544
559
 
545
560
  ### Bug fixes
546
561
 
547
- - compat/eme: Set proper EME Safari implementation, to play contents with DRM on it without issues
548
- - compat/directfile/iOS: On Safari iOS, fix auto-play warnings when a directfile content is played with the `playsinline` attribute set.
549
- - directfile: In Directfile mode, always disable the current text track when a `null` is encountered in the preferredTextTracks array
562
+ - compat/eme: Set proper EME Safari implementation, to play contents with DRM on it without issues
563
+ - compat/directfile/iOS: On Safari iOS, fix auto-play warnings when a directfile content is played with the `playsinline` attribute set.
564
+ - directfile: In Directfile mode, always disable the current text track when a `null` is encountered in the preferredTextTracks array
550
565
 
551
566
  ### Other improvements
552
567
 
553
- - abr: ignore requests that may have directly hit the cache in our adaptive logic
554
- - dash/perf: improve parsing efficiency for very large MPDs, at the expense of a very small risk of de-synchronization. Mechanisms still allow for regular re-synchronization.
555
-
568
+ - abr: ignore requests that may have directly hit the cache in our adaptive logic
569
+ - dash/perf: improve parsing efficiency for very large MPDs, at the expense of a very small risk of de-synchronization. Mechanisms still allow for regular re-synchronization.
556
570
 
557
571
  ## v3.19.0 (2020-03-11)
558
572
 
559
573
  ### Features
560
574
 
561
- - dash: handle multiple URL per segment announced through multiple BaseURL elements in the MPD
562
- - dash/smooth/metaplaylist: add `manifestUpdateUrl` to loadVideo's `transportOptions` to provide a shorter version of the Manifest, used for more resource-efficient Manifest updates
563
- - tools/createMetaplaylist: add the experimental `createMetaplaylist` tool, which allows to generate Metaplaylist contents from given Manifests
564
- - tools/TextTrackRenderer: add the optional `language` property to the `setTextTrack` method of the experimental `TextTrackRenderer` tool as it could be needed when parsing SAMI subtitles
565
- - types: export IAvailableAudioTrack, IAvailableTextTrack and IAvailableVideoTrack types
566
- - types: export IAudioTrack, ITextTrack and IVideoTrack types
575
+ - dash: handle multiple URL per segment announced through multiple BaseURL elements in the MPD
576
+ - dash/smooth/metaplaylist: add `manifestUpdateUrl` to loadVideo's `transportOptions` to provide a shorter version of the Manifest, used for more resource-efficient Manifest updates
577
+ - tools/createMetaplaylist: add the experimental `createMetaplaylist` tool, which allows to generate Metaplaylist contents from given Manifests
578
+ - tools/TextTrackRenderer: add the optional `language` property to the `setTextTrack` method of the experimental `TextTrackRenderer` tool as it could be needed when parsing SAMI subtitles
579
+ - types: export IAvailableAudioTrack, IAvailableTextTrack and IAvailableVideoTrack types
580
+ - types: export IAudioTrack, ITextTrack and IVideoTrack types
567
581
 
568
582
  ### Bug fixes
569
583
 
570
- - dash/smooth: fix segment url resolution when there is query parameters in the Manifest URL and/or segment path, themselves containing "/" characters
571
- - local-manifest: fix videoElement's duration and `getVideoDuration` for contents in the experimental `local` transport
572
- - tools/parseBifThumbnails: do not return an un-displayable ArrayBuffer of the whole thing in each `image` property in the experimental `parseBifThumbnails` function
584
+ - dash/smooth: fix segment url resolution when there is query parameters in the Manifest URL and/or segment path, themselves containing "/" characters
585
+ - local-manifest: fix videoElement's duration and `getVideoDuration` for contents in the experimental `local` transport
586
+ - tools/parseBifThumbnails: do not return an un-displayable ArrayBuffer of the whole thing in each `image` property in the experimental `parseBifThumbnails` function
573
587
 
574
588
  ### Other improvements
575
589
 
576
- - compat: avoid pushing a segment on top of the current position in Safari, as it can sometime lead to green macro-blocks
577
- - dash: add multiple performance improvements related to MPD parsing on embedded devices
578
- - dash/smooth/metaplaylist/local: refresh less often the Manifest when parsing it takes too much time to improve performance
579
- - smooth: filter unsupported video and audio QualityLevels when parsing a Smooth Manifest
580
- - build: greatly reduce the time needed to produce a modular build through the `npm run build:modular` script
581
- - build: remove Object.assign dependency
582
-
590
+ - compat: avoid pushing a segment on top of the current position in Safari, as it can sometime lead to green macro-blocks
591
+ - dash: add multiple performance improvements related to MPD parsing on embedded devices
592
+ - dash/smooth/metaplaylist/local: refresh less often the Manifest when parsing it takes too much time to improve performance
593
+ - smooth: filter unsupported video and audio QualityLevels when parsing a Smooth Manifest
594
+ - build: greatly reduce the time needed to produce a modular build through the `npm run build:modular` script
595
+ - build: remove Object.assign dependency
583
596
 
584
597
  ## v3.18.0 (2020-01-30)
585
598
 
586
599
  ### Features
587
600
 
588
- - directfile: support most audio tracks API when playing a directfile content
589
- - directfile: support most text tracks API when playing a directfile content
590
- - directfile: support most video tracks API when playing a directfile content
591
- - api: add `seeking` and `seeked` events which announce the beginning and end of a seek, even when seeking to an already buffered part
592
- - subtitles/ttml: handle styles inheriting other styles in TTML subtitles
593
- - local-manifest: add experimental `local` transport to allow the playback of downloaded contents (even when offline)
594
- - tools: add the experimental `TextTrackRenderer` tool to be able to add a custom text track to any content
595
- - tools: add the experimental `parseBifThumbnails` tool to easily parse thumbnails in the BIF format
601
+ - directfile: support most audio tracks API when playing a directfile content
602
+ - directfile: support most text tracks API when playing a directfile content
603
+ - directfile: support most video tracks API when playing a directfile content
604
+ - api: add `seeking` and `seeked` events which announce the beginning and end of a seek, even when seeking to an already buffered part
605
+ - subtitles/ttml: handle styles inheriting other styles in TTML subtitles
606
+ - local-manifest: add experimental `local` transport to allow the playback of downloaded contents (even when offline)
607
+ - tools: add the experimental `TextTrackRenderer` tool to be able to add a custom text track to any content
608
+ - tools: add the experimental `parseBifThumbnails` tool to easily parse thumbnails in the BIF format
596
609
 
597
610
  ### Deprecated
598
611
 
599
- - api: deprecate the `supplementaryTextTracks` loadVideo option in profit of the external TextTrackRenderer tool
600
- - api: aeprecate the `supplementaryImageTracks` loadVideo option in profit of the external parseBifThumbnails tool
601
- - api: deprecate the `getImageTrackData` method in profit of the external `parseBifThumbnails` tool
602
- - api: deprecate the `imageTrackUpdate` event in profit of the external `parseBifThumbnails` tool
603
- - api: deprecate `hideNativeSubtitles` (officially)
612
+ - api: deprecate the `supplementaryTextTracks` loadVideo option in profit of the external TextTrackRenderer tool
613
+ - api: aeprecate the `supplementaryImageTracks` loadVideo option in profit of the external parseBifThumbnails tool
614
+ - api: deprecate the `getImageTrackData` method in profit of the external `parseBifThumbnails` tool
615
+ - api: deprecate the `imageTrackUpdate` event in profit of the external `parseBifThumbnails` tool
616
+ - api: deprecate `hideNativeSubtitles` (officially)
604
617
 
605
618
  ### Bug fixes
606
619
 
607
- - subtitles/ttml: Correctly handle alpha information in the rgba values included in a TTML file
608
- - images/bif: fix sometimes incorrect "ts" value on thumbnails returned by the `getImageTrackData` method and the `imageTrackUpdate` event
620
+ - subtitles/ttml: Correctly handle alpha information in the rgba values included in a TTML file
621
+ - images/bif: fix sometimes incorrect "ts" value on thumbnails returned by the `getImageTrackData` method and the `imageTrackUpdate` event
609
622
 
610
623
  ### Other improvements
611
624
 
612
- - node: allow the RxPlayer to be imported from Node.js for server-side-rendering
613
- - images/bif: throw a better error when an invalid BIF file is received
614
- - api: be more "generous" with player events by ditching the deep-equal npm module due to package size and some edge-case behavior
615
- - demo: avoid re-rendering multiple ui components when unnecessary
616
-
625
+ - node: allow the RxPlayer to be imported from Node.js for server-side-rendering
626
+ - images/bif: throw a better error when an invalid BIF file is received
627
+ - api: be more "generous" with player events by ditching the deep-equal npm module due to package size and some edge-case behavior
628
+ - demo: avoid re-rendering multiple ui components when unnecessary
617
629
 
618
630
  ## v3.17.1 (2019-12-20)
619
631
 
620
632
  ### Bug fixes
621
633
 
622
- - dash/metaplaylist: fix infinite rebuffering issue when refreshing multi-Period contents under specific conditions
623
- - buffer: be less aggressive when garbage collecting subtitles (if the maxBufferAhead/maxBufferBehind options are set) to avoid useful subtitles being removed
624
- - directfile/compat: for directfile contents, trigger directly the LOADED state on iOS/iPad/iPod browsers as those are not preloaded there
634
+ - dash/metaplaylist: fix infinite rebuffering issue when refreshing multi-Period contents under specific conditions
635
+ - buffer: be less aggressive when garbage collecting subtitles (if the maxBufferAhead/maxBufferBehind options are set) to avoid useful subtitles being removed
636
+ - directfile/compat: for directfile contents, trigger directly the LOADED state on iOS/iPad/iPod browsers as those are not preloaded there
625
637
 
626
638
  ### Other improvements
627
639
 
628
- - demo: display clickable "play" button on the video element when autoplay is blocked due to browser policies - to help users unlock the situation
629
- - demo: add "Other" key system to allow specifying a custom key system in the demo page
630
-
640
+ - demo: display clickable "play" button on the video element when autoplay is blocked due to browser policies - to help users unlock the situation
641
+ - demo: add "Other" key system to allow specifying a custom key system in the demo page
631
642
 
632
643
  ## v3.17.0 (2019-12-09)
633
644
 
634
645
  ### Features
635
646
 
636
- - eme/api: add keySystems.fallbackOn property to `loadVideo` to allow fallbacking to other qualities when encountering various key errors
637
- - eme/api: allow to set `fallbackOnLastTry` on a `getLicense` Error to be able to fallback on other qualities when a license request is on error
638
- - eme/api: add `NO_PLAYABLE_REPRESENTATION` `MediaError` for when every video or audio quality cannot be played
639
- - manifest/api: add `decipherable` property to a Representation object
640
- - api: add `decipherabilityUpdate` event triggered when a Representation's decipherability status is updated
641
- - languages/api: add `dub` boolean to audio tracks (through `getAudioTrack` and `getAvailableAudioTracks`) to tell if this is a dubbed track
642
- - languages/ttml: with TTML subtitles, support length relative to the Computed Cell Size for `tts:fontSize`, `tts:padding`, `tts:extent`, `tts:origin` and `tts:lineHeight`
643
- - transports/api: add `checkMediaSegmentIntegrity` `transportOptions` to automatically retry media segments which appear corrupted
644
- - transports/api: add `minimumManifestUpdateInterval` `transportOptions` to limit the Manifest update frequency
645
- - transports/api: add "progress" callback to a custom segmentLoader to improve adaptive streaming when an external segment loader is used
647
+ - eme/api: add keySystems.fallbackOn property to `loadVideo` to allow fallbacking to other qualities when encountering various key errors
648
+ - eme/api: allow to set `fallbackOnLastTry` on a `getLicense` Error to be able to fallback on other qualities when a license request is on error
649
+ - eme/api: add `NO_PLAYABLE_REPRESENTATION` `MediaError` for when every video or audio quality cannot be played
650
+ - manifest/api: add `decipherable` property to a Representation object
651
+ - api: add `decipherabilityUpdate` event triggered when a Representation's decipherability status is updated
652
+ - languages/api: add `dub` boolean to audio tracks (through `getAudioTrack` and `getAvailableAudioTracks`) to tell if this is a dubbed track
653
+ - languages/ttml: with TTML subtitles, support length relative to the Computed Cell Size for `tts:fontSize`, `tts:padding`, `tts:extent`, `tts:origin` and `tts:lineHeight`
654
+ - transports/api: add `checkMediaSegmentIntegrity` `transportOptions` to automatically retry media segments which appear corrupted
655
+ - transports/api: add `minimumManifestUpdateInterval` `transportOptions` to limit the Manifest update frequency
656
+ - transports/api: add "progress" callback to a custom segmentLoader to improve adaptive streaming when an external segment loader is used
646
657
 
647
658
  ### Bug fixes
648
659
 
649
- - dash/metaplaylist: download the first segment of a new Period when the last downloaded segment from the previous Period ends after that segment ends
650
- - smooth/metaplaylist: consider `serverSyncInfos` `transportOptions` for Smooth and MetaPlaylist contents
651
- - buffers: completely clean a previous audio/text track from the SourceBuffer when switching to a different audio/text track
652
- - dash: avoid requesting an inexistent segment when downloading a multi-Period DASH content with a number-based SegmentTemplate with the `agressiveMode` option set to `true`
653
- - eme: do not wait for a previous invalid MediaKeySession to be closed before re-creating a valid one for the same content, to work around a widevine issue
654
- - eme: avoid race condition issue arising when multiple init data are received before the MediaKeys have been attached to the media element
655
- - dash: do not consider "trickmodes" AdaptationSet as directly playable video tracks
656
- - directfile: begin directly at the end (instead of the beginning) when setting a `startAt` loadVideo option with a `fromLastPosition` property set to `0` on directfile contents
657
- - metaplaylist: fix playback for non-live MetaPlaylist contents not starting at a `0` time
660
+ - dash/metaplaylist: download the first segment of a new Period when the last downloaded segment from the previous Period ends after that segment ends
661
+ - smooth/metaplaylist: consider `serverSyncInfos` `transportOptions` for Smooth and MetaPlaylist contents
662
+ - buffers: completely clean a previous audio/text track from the SourceBuffer when switching to a different audio/text track
663
+ - dash: avoid requesting an inexistent segment when downloading a multi-Period DASH content with a number-based SegmentTemplate with the `agressiveMode` option set to `true`
664
+ - eme: do not wait for a previous invalid MediaKeySession to be closed before re-creating a valid one for the same content, to work around a widevine issue
665
+ - eme: avoid race condition issue arising when multiple init data are received before the MediaKeys have been attached to the media element
666
+ - dash: do not consider "trickmodes" AdaptationSet as directly playable video tracks
667
+ - directfile: begin directly at the end (instead of the beginning) when setting a `startAt` loadVideo option with a `fromLastPosition` property set to `0` on directfile contents
668
+ - metaplaylist: fix playback for non-live MetaPlaylist contents not starting at a `0` time
658
669
 
659
670
  ### Other improvements
660
671
 
661
- - abr: better estimate a lower bitrate after a sudden fall in bandwidth
662
- - dash/low-latency: properly use @availabilityTimeOffset when playing a low-latency DASH content
663
- - code: use only strict boolean expressions in the code (do not rely on falsy or truthy values anymore).
664
- - demo: add buffer content graphs to the demo page to vizualize exactly what have been buffered
665
- - demo: improve accessibility of the demo page for the english-speaking visually impaired
666
- - misc: replace uglifyJS by terser for minification purposes
667
-
668
-
672
+ - abr: better estimate a lower bitrate after a sudden fall in bandwidth
673
+ - dash/low-latency: properly use @availabilityTimeOffset when playing a low-latency DASH content
674
+ - code: use only strict boolean expressions in the code (do not rely on falsy or truthy values anymore).
675
+ - demo: add buffer content graphs to the demo page to vizualize exactly what have been buffered
676
+ - demo: improve accessibility of the demo page for the english-speaking visually impaired
677
+ - misc: replace uglifyJS by terser for minification purposes
669
678
 
670
679
  ## v3.16.1 (2019-10-03)
671
680
 
672
681
  ### Bug fixes
673
682
 
674
- - dash: update timeshiftBufferDepth considered when refreshing the MPD
675
- - dash: fix infinite rebuffering issue when refreshing a Multi-Period MPD with the oldest Periods removed
676
- - api: go to `"SEEKING"` state instead of `"BUFFERING"` when seeking while the player is in the "BUFFERING" state
677
- - api: Avoid reinitializing the video, audio and text track choice after a `"RELOADING"` state
678
- - api: When going back to a Period on which `disableTextTracks` was called, keep the text track disabled even if different `preferredTextTracks` are set
679
- - smooth: Replace ``{CustomAttributes}`` token in a segment URL
680
- - dash: load the last segment of a Period when it is declared in a SegmentTemplate (with no SegmentTimeline) and when its end is exactly equal to the end of the Period
683
+ - dash: update timeshiftBufferDepth considered when refreshing the MPD
684
+ - dash: fix infinite rebuffering issue when refreshing a Multi-Period MPD with the oldest Periods removed
685
+ - api: go to `"SEEKING"` state instead of `"BUFFERING"` when seeking while the player is in the "BUFFERING" state
686
+ - api: Avoid reinitializing the video, audio and text track choice after a `"RELOADING"` state
687
+ - api: When going back to a Period on which `disableTextTracks` was called, keep the text track disabled even if different `preferredTextTracks` are set
688
+ - smooth: Replace `{CustomAttributes}` token in a segment URL
689
+ - dash: load the last segment of a Period when it is declared in a SegmentTemplate (with no SegmentTimeline) and when its end is exactly equal to the end of the Period
681
690
 
682
691
  ### Other improvements
683
692
 
684
- - dash/metaplaylist: be more tolerant with the appendWindows set as the previous behavior could lead to infinite rebuffering and segments re-downloading
685
- - dash/metaplaylist/smooth: Better handle discontinuities in a VoD content
686
- - dash/metaplaylist: Handle discontinuities between DASH Periods and between MetaPlaylist contents
687
- - dash/smooth: Avoid requesting multiple time the last segment when the duration given in the Manifest are inexact
688
- - smooth: Skip without throwing Manifest's StreamIndex with an unrecognized type
689
- - dash: Improve prediction of when to update a dynamic MPD with xlinks
690
- - dash: Be more tolerant of differences between a segment's time announced by the Manifest and the reality to avoid multiple cases of segment re-downloading
691
- - dash: Guess initialization range for segments defined in a SegmentBase without an Initialization element
692
- - dash: Throw better error when a sidx with a reference_type `1` is encountered
693
- - api: Throw a better error when setting a `preferredAudioTracks` or `preferredTextTracks` value in the wrong format
694
- - demo: Allow to export and share demo links with custom contents
695
- - demo: Fix video track switching in the demo page
696
- - demo: Fix spinner not hiding when playing on very specific conditions
697
- - demo: reset playback rate before loading a content
698
-
693
+ - dash/metaplaylist: be more tolerant with the appendWindows set as the previous behavior could lead to infinite rebuffering and segments re-downloading
694
+ - dash/metaplaylist/smooth: Better handle discontinuities in a VoD content
695
+ - dash/metaplaylist: Handle discontinuities between DASH Periods and between MetaPlaylist contents
696
+ - dash/smooth: Avoid requesting multiple time the last segment when the duration given in the Manifest are inexact
697
+ - smooth: Skip without throwing Manifest's StreamIndex with an unrecognized type
698
+ - dash: Improve prediction of when to update a dynamic MPD with xlinks
699
+ - dash: Be more tolerant of differences between a segment's time announced by the Manifest and the reality to avoid multiple cases of segment re-downloading
700
+ - dash: Guess initialization range for segments defined in a SegmentBase without an Initialization element
701
+ - dash: Throw better error when a sidx with a reference_type `1` is encountered
702
+ - api: Throw a better error when setting a `preferredAudioTracks` or `preferredTextTracks` value in the wrong format
703
+ - demo: Allow to export and share demo links with custom contents
704
+ - demo: Fix video track switching in the demo page
705
+ - demo: Fix spinner not hiding when playing on very specific conditions
706
+ - demo: reset playback rate before loading a content
699
707
 
700
708
  ## v3.16.0 (2019-09-16)
701
709
 
702
710
  ### Features
703
711
 
704
- - dash: add `lowLatencyMode` `loadVideo` option to play low-latency DASH contents with chunk-encoded CMAF and chunked transfer encoding close to the live edge efficiently
705
- - metaplaylist: add the experimental `metaplaylist` transport, which allows to smoothly play a concatenation of multiple contents
706
- - api: add `serverSyncInfos` to `transportOptions` (`loadVideo` option)
707
- - errors: add `code` property to a `NetworkError` indicating the corresponding HTTP status
712
+ - dash: add `lowLatencyMode` `loadVideo` option to play low-latency DASH contents with chunk-encoded CMAF and chunked transfer encoding close to the live edge efficiently
713
+ - metaplaylist: add the experimental `metaplaylist` transport, which allows to smoothly play a concatenation of multiple contents
714
+ - api: add `serverSyncInfos` to `transportOptions` (`loadVideo` option)
715
+ - errors: add `code` property to a `NetworkError` indicating the corresponding HTTP status
708
716
 
709
717
  ### Bug fixes
710
718
 
711
- - dash: fix minimum time calculation for Multi-Period MPDs with SegmentTemplate segment indexes but no SegmentTimeline
712
- - dash: play static MPD not declaring any segment for a time of 0 seconds at the minimum possible time by default
713
- - dash: fix maximum position calculation for live Multi-Period contents where the currently generated period is not the last one declared in the MPD
719
+ - dash: fix minimum time calculation for Multi-Period MPDs with SegmentTemplate segment indexes but no SegmentTimeline
720
+ - dash: play static MPD not declaring any segment for a time of 0 seconds at the minimum possible time by default
721
+ - dash: fix maximum position calculation for live Multi-Period contents where the currently generated period is not the last one declared in the MPD
714
722
 
715
723
  ### Other improvements
716
724
 
717
- - api: authorize to set no `url` to `loadVideo` if the `manifestLoader` `transportOption` is set
718
- - smooth: the `aggressiveMode` option now only allows requests for segments which had time to at least begin to be generated to avoid too much HTTP 412
719
- - dash: the `aggressiveMode` now also have an effect for some SegmentTemplate DASH contents (download segments even if they're not finished)
720
- - code: add pre-commit and pre-push git hooks to automate checking and facilitate bisecting
721
- - dash: better handle live Multi-Period contents where the currently broadcasted period is not the last one declared in the MPD
722
- - dash: better infer the end of a Period if the start of the next one is defined
723
- - api: always start live contents at the live edge if one is defined and not just before the last available segments
724
- - ci: run integration tests with Travis and appveyor again
725
-
725
+ - api: authorize to set no `url` to `loadVideo` if the `manifestLoader` `transportOption` is set
726
+ - smooth: the `aggressiveMode` option now only allows requests for segments which had time to at least begin to be generated to avoid too much HTTP 412
727
+ - dash: the `aggressiveMode` now also have an effect for some SegmentTemplate DASH contents (download segments even if they're not finished)
728
+ - code: add pre-commit and pre-push git hooks to automate checking and facilitate bisecting
729
+ - dash: better handle live Multi-Period contents where the currently broadcasted period is not the last one declared in the MPD
730
+ - dash: better infer the end of a Period if the start of the next one is defined
731
+ - api: always start live contents at the live edge if one is defined and not just before the last available segments
732
+ - ci: run integration tests with Travis and appveyor again
726
733
 
727
734
  ## v3.15.1 (2019-08-07)
728
735
 
729
736
  ### Bug fixes
730
737
 
731
- - api: fix `networkConfig.segmentRetry` `loadVideo` option. Due to a typo, it was forced to the default value (4)
732
- - api/abr: when the `throttleVideoBitrateWhenHidden` option is set to true, wait 60 seconds (as documented) after the page is hidden before switching to a lower bitrate
733
- - dash: fix segment indexing for SegmentList-based MPD with a period start different than 0
738
+ - api: fix `networkConfig.segmentRetry` `loadVideo` option. Due to a typo, it was forced to the default value (4)
739
+ - api/abr: when the `throttleVideoBitrateWhenHidden` option is set to true, wait 60 seconds (as documented) after the page is hidden before switching to a lower bitrate
740
+ - dash: fix segment indexing for SegmentList-based MPD with a period start different than 0
734
741
 
735
742
  ### Other improvements
736
743
 
737
- - dash/smooth: check if the segment should still be available before retrying it (avoid unnecessary HTTP 404 errors)
738
- - dash/smooth: the Manifest can now be refreshed due to unexpected 404 HTTP errors on a segment request (only on particular conditions)
739
- - dash: better handle segments overlapping multiple periods by using the data that is only within the concerned Period's bounds
740
- - demo: authorize to play stored contents with an HTTP Manifest in the HTTPS demo
741
-
744
+ - dash/smooth: check if the segment should still be available before retrying it (avoid unnecessary HTTP 404 errors)
745
+ - dash/smooth: the Manifest can now be refreshed due to unexpected 404 HTTP errors on a segment request (only on particular conditions)
746
+ - dash: better handle segments overlapping multiple periods by using the data that is only within the concerned Period's bounds
747
+ - demo: authorize to play stored contents with an HTTP Manifest in the HTTPS demo
742
748
 
743
749
  ## v3.15.0 (2019-07-24)
744
750
 
745
751
  ### Features
746
752
 
747
- - eme: add `getLicenseConfig` property to the `keySystems` `loadVideo` option, to be able to have much more control over getLicense's behavior
748
- - eme: add `noRetry` to `getLicense` errors to abort retries when the licence request fails
749
- - eme: add `message` to `getLicense` and `onKeyStatusesChange` errors to allow custom errors when the license request fails
750
- - eme: add a new `ENCRYPTED_MEDIA_ERROR` with the code `CREATE_MEDIA_KEYS_ERROR` for when we cannot create a MediaKeys instance (seen on some Android devices).
753
+ - eme: add `getLicenseConfig` property to the `keySystems` `loadVideo` option, to be able to have much more control over getLicense's behavior
754
+ - eme: add `noRetry` to `getLicense` errors to abort retries when the licence request fails
755
+ - eme: add `message` to `getLicense` and `onKeyStatusesChange` errors to allow custom errors when the license request fails
756
+ - eme: add a new `ENCRYPTED_MEDIA_ERROR` with the code `CREATE_MEDIA_KEYS_ERROR` for when we cannot create a MediaKeys instance (seen on some Android devices).
751
757
 
752
758
  ### Bug fixes
753
759
 
754
- - api: avoid sending {audio,video...}BitrateChange with a `-1` value when starting to play a content
755
- - api/abr: a call to `setAudioBitrate` or `setVideoBitrate` could be ignored for a content if it was still loading. This is now fixed.
756
- - api/abr: a call to `setMaxAutoBitrate` or `setMaxVideoBitrate` could be ignored for a content if it was still loading. This is now fixed.
757
- - dash: fix maximum position calculation when refreshing a live MPD with a UTCTiming element and no SegmentTimeline.
758
- - dash/smooth: a MPD/Manifest request failing could still be retried when loading another content
759
- - eme/compat: on Safari, depend on WebKitMediaKeys even if MediaKeys is defined because of differences of implementations
760
- - pipelines: always send `PIPELINE_LOAD_ERROR` warnings when a segment request or a Manifest request is retried
761
- - errors: replace undocumented `PIPELINE_RESOLVE_ERROR` code into the proper documented `PIPELINE_LOAD_ERROR` code
762
- - errors: replace undocumented `PIPELINE_PARSING_ERROR` code into the proper documented `PIPELINE_PARSE_ERROR` code
763
- - errors: add to the `ErrorCodes` static property the previously forgotten `NONE`, `INVALID_KEY_SYSTEM` and `INVALID_ENCRYPTED_EVENT` codes.
760
+ - api: avoid sending {audio,video...}BitrateChange with a `-1` value when starting to play a content
761
+ - api/abr: a call to `setAudioBitrate` or `setVideoBitrate` could be ignored for a content if it was still loading. This is now fixed.
762
+ - api/abr: a call to `setMaxAutoBitrate` or `setMaxVideoBitrate` could be ignored for a content if it was still loading. This is now fixed.
763
+ - dash: fix maximum position calculation when refreshing a live MPD with a UTCTiming element and no SegmentTimeline.
764
+ - dash/smooth: a MPD/Manifest request failing could still be retried when loading another content
765
+ - eme/compat: on Safari, depend on WebKitMediaKeys even if MediaKeys is defined because of differences of implementations
766
+ - pipelines: always send `PIPELINE_LOAD_ERROR` warnings when a segment request or a Manifest request is retried
767
+ - errors: replace undocumented `PIPELINE_RESOLVE_ERROR` code into the proper documented `PIPELINE_LOAD_ERROR` code
768
+ - errors: replace undocumented `PIPELINE_PARSING_ERROR` code into the proper documented `PIPELINE_PARSE_ERROR` code
769
+ - errors: add to the `ErrorCodes` static property the previously forgotten `NONE`, `INVALID_KEY_SYSTEM` and `INVALID_ENCRYPTED_EVENT` codes.
764
770
 
765
771
  ### Other improvements
766
772
 
767
- - abr: make use of another adaptive algorithm, buffer-based, when enough buffer has been built.
768
- - demo: allow the user to save custom contents to local storage to be able to reuse them when the page is refreshed
769
- - eme: throw a better error in `onKeyStatusesChange` if the Promise is rejected without an Error
770
- - errors: refactore error management to better correlate the `fatal` boolean to a playback stop and to better ensure a documented error is always thrown
771
- - scripts: make our build script compatible with MacOS (handle BSD sed)
772
-
773
+ - abr: make use of another adaptive algorithm, buffer-based, when enough buffer has been built.
774
+ - demo: allow the user to save custom contents to local storage to be able to reuse them when the page is refreshed
775
+ - eme: throw a better error in `onKeyStatusesChange` if the Promise is rejected without an Error
776
+ - errors: refactore error management to better correlate the `fatal` boolean to a playback stop and to better ensure a documented error is always thrown
777
+ - scripts: make our build script compatible with MacOS (handle BSD sed)
773
778
 
774
779
  ## v3.14.0 (2019-06-26)
775
780
 
776
781
  ### Features
777
782
 
778
- - api/abr: add `throttleVideoBitrateWhenHidden` which unlike `throttleWhenHidden` does not throttle the video bitrate if the media element is in picture-in-picture mode
783
+ - api/abr: add `throttleVideoBitrateWhenHidden` which unlike `throttleWhenHidden` does not throttle the video bitrate if the media element is in picture-in-picture mode
779
784
 
780
785
  ### Deprecated
781
786
 
782
- - api/abr: deprecate `throttleWhenHidden` in profit of `throttleVideoBitrateWhenHidden` which has a better API definition for some edge cases
787
+ - api/abr: deprecate `throttleWhenHidden` in profit of `throttleVideoBitrateWhenHidden` which has a better API definition for some edge cases
783
788
 
784
789
  ### Bug fixes
785
790
 
786
- - api/abr: `limitVideoWidth` now also considers if the video is in picture-in-picture mode
787
- - buffer: better prevent the `BUFFER_FULL_ERROR` `MediaError` on some memory-constrained devices
788
- - dash: consider the buffer depth as infinite (until `availabilityStartTime`) if the `timeShiftBufferDepth` is not set
789
- - smooth: consider the buffer depth as infinite if the `DVRWindowLength` is not set or set to 0
790
- - init: start live contents that just began (less than 10 seconds ago) at the minimum position instead of throwing a STARTING_TIME_NOT_FOUND MEDIA_ERROR.
791
- - tests: use web server (local by default) instead of stubbed XHRs to serve tests contents to our integration and memory tests
792
-
791
+ - api/abr: `limitVideoWidth` now also considers if the video is in picture-in-picture mode
792
+ - buffer: better prevent the `BUFFER_FULL_ERROR` `MediaError` on some memory-constrained devices
793
+ - dash: consider the buffer depth as infinite (until `availabilityStartTime`) if the `timeShiftBufferDepth` is not set
794
+ - smooth: consider the buffer depth as infinite if the `DVRWindowLength` is not set or set to 0
795
+ - init: start live contents that just began (less than 10 seconds ago) at the minimum position instead of throwing a STARTING_TIME_NOT_FOUND MEDIA_ERROR.
796
+ - tests: use web server (local by default) instead of stubbed XHRs to serve tests contents to our integration and memory tests
793
797
 
794
798
  ## v3.13.0 (2019-05-15)
795
799
 
796
800
  ### Features
797
801
 
798
- - eme: add `disableMediaKeysAttachmentLock` key system option to bypass a deadlock (with possible tradeoffs) when playing encrypted contents on some peculiar devices
802
+ - eme: add `disableMediaKeysAttachmentLock` key system option to bypass a deadlock (with possible tradeoffs) when playing encrypted contents on some peculiar devices
799
803
 
800
804
  ### Bug fixes
801
805
 
802
- - dash/smooth: never rely on Date.now when calculating time differences to avoid issues when the user adjusts the system clock while playing a live content
803
- - eme: throw a better error (avoid `toString is not a function` messages) for a `KEY_LOAD_ERROR` when the `getLicense` function provided fails without a proper error
804
- - api: fix rare situation with DASH multi-period contents where we reported no available bitrate, Adaptation nor Representation when switching to another Period.
806
+ - dash/smooth: never rely on Date.now when calculating time differences to avoid issues when the user adjusts the system clock while playing a live content
807
+ - eme: throw a better error (avoid `toString is not a function` messages) for a `KEY_LOAD_ERROR` when the `getLicense` function provided fails without a proper error
808
+ - api: fix rare situation with DASH multi-period contents where we reported no available bitrate, Adaptation nor Representation when switching to another Period.
805
809
 
806
810
  ### Other improvements
807
811
 
808
- - eme: add other default contentTypes when calling requestMediaKeySystemAccess to improve device support
809
- - demo: update the demo UI
810
- - code: change indentation style of a big chunk of the code to increase readability
811
-
812
+ - eme: add other default contentTypes when calling requestMediaKeySystemAccess to improve device support
813
+ - demo: update the demo UI
814
+ - code: change indentation style of a big chunk of the code to increase readability
812
815
 
813
816
  ## v3.12.0 (2019-04-10)
814
817
 
815
818
  ### Features
816
819
 
817
- - dash: add UTCTiming support
818
- - smooth: add `aggressiveMode` transportOption to requests segments in advance
819
- - dash/smooth: add `referenceDateTime` transportOption to set a default reference time for live contents
820
+ - dash: add UTCTiming support
821
+ - smooth: add `aggressiveMode` transportOption to requests segments in advance
822
+ - dash/smooth: add `referenceDateTime` transportOption to set a default reference time for live contents
820
823
 
821
824
  ### Bug fixes
822
825
 
823
- - buffer: work around firefox bug leading to infinite rebuffering when seeking many times in a content
826
+ - buffer: work around firefox bug leading to infinite rebuffering when seeking many times in a content
824
827
 
825
828
  ### Other improvements
826
829
 
827
- - dash/smooth: add optional `url`, `sendingTime` and `receivingTime` properties in the response given by manifestLoader transportOption
828
- - misc: deploy documentation pages and demos from our previous versions
829
- - misc: add new RxPlayer logo to README.md and the demo
830
-
830
+ - dash/smooth: add optional `url`, `sendingTime` and `receivingTime` properties in the response given by manifestLoader transportOption
831
+ - misc: deploy documentation pages and demos from our previous versions
832
+ - misc: add new RxPlayer logo to README.md and the demo
831
833
 
832
834
  ## v3.11.1 (2019-03-11)
833
835
 
834
836
  ### Bug fixes
835
837
 
836
- - npm: publish package again. An error in the previous release led to some files missing on npm
837
-
838
+ - npm: publish package again. An error in the previous release led to some files missing on npm
838
839
 
839
840
  ## v3.11.0 (2019-03-07)
840
841
 
841
842
  ### Features
842
843
 
843
- - languages/api: add `preferredAudioTracks` and `preferredTextTracks` player options
844
- - languages/api: add `setPreferredAudioTracks`, `getPreferredAudioTracks`, `setPreferredTextTracks` and `getPreferredTextTracks` methods
845
- - languages/api: add `availableAudioTracksChange`, `availableTextTracksChange` and `availableVideoTracksChange` events
846
- - abr/api: add `availableAudioBitratesChange` and `availableVideoBitratesChange` events
847
- - eme: allow playback of mixed encrypted and unencrypted contents on Chrome
848
- - types: export the new `IAudioTrackPreference` and `ITextTrackPreference` types
844
+ - languages/api: add `preferredAudioTracks` and `preferredTextTracks` player options
845
+ - languages/api: add `setPreferredAudioTracks`, `getPreferredAudioTracks`, `setPreferredTextTracks` and `getPreferredTextTracks` methods
846
+ - languages/api: add `availableAudioTracksChange`, `availableTextTracksChange` and `availableVideoTracksChange` events
847
+ - abr/api: add `availableAudioBitratesChange` and `availableVideoBitratesChange` events
848
+ - eme: allow playback of mixed encrypted and unencrypted contents on Chrome
849
+ - types: export the new `IAudioTrackPreference` and `ITextTrackPreference` types
849
850
 
850
851
  ### Deprecated
851
852
 
852
- - languages/api: deprecate the `defaultAudioTrack` `loadVideo` option in favor of the `preferredAudioTracks` player option.
853
- - languages/api: deprecate the `defaultTextTrack` `loadVideo` option in favor of the `preferredTextTracks` player option.
853
+ - languages/api: deprecate the `defaultAudioTrack` `loadVideo` option in favor of the `preferredAudioTracks` player option.
854
+ - languages/api: deprecate the `defaultTextTrack` `loadVideo` option in favor of the `preferredTextTracks` player option.
854
855
 
855
856
  ### Bug fixes
856
857
 
857
- - dash: fix `minimumUpdatePeriod` management for DASH contents
858
- - smooth: better prevent 412 HTTP errors for smooth streaming contents
859
- - subtitles: ensure subtitles are not visible in Firefox when disabling them in the `"native"` textTrack mode.
860
- - errors: avoid sending multiple `MEDIA_TIME_BEFORE_MANIFEST` or `MEDIA_TIME_AFTER_MANIFEST` warnings instead of just one
861
- - api: fix (deprecated) option `hideNativeSubtitles`
858
+ - dash: fix `minimumUpdatePeriod` management for DASH contents
859
+ - smooth: better prevent 412 HTTP errors for smooth streaming contents
860
+ - subtitles: ensure subtitles are not visible in Firefox when disabling them in the `"native"` textTrack mode.
861
+ - errors: avoid sending multiple `MEDIA_TIME_BEFORE_MANIFEST` or `MEDIA_TIME_AFTER_MANIFEST` warnings instead of just one
862
+ - api: fix (deprecated) option `hideNativeSubtitles`
862
863
 
863
864
  ### Other improvements
864
865
 
865
- - errors: set a readable error message for every error and warnings thrown
866
- - tools/mediaCapabilitiesProber: set logs about unimportant missing APIs as debug-level instead of warn-level
867
- - types: provide type safety to `addEventListener` and `removeEventListener`
868
-
866
+ - errors: set a readable error message for every error and warnings thrown
867
+ - tools/mediaCapabilitiesProber: set logs about unimportant missing APIs as debug-level instead of warn-level
868
+ - types: provide type safety to `addEventListener` and `removeEventListener`
869
869
 
870
870
  ## v3.10.3 (2019-01-30)
871
871
 
872
872
  ### Bug fixes
873
873
 
874
- - dash/api: fix ``getMinimumPosition`` for MPDs with an availabilityStartTime superior to unix epoch
875
- - smooth: be more tolerant on downloaded segments (accept ISOBMFF with boxes in any order)
876
- - buffers/abr: fix issue infrequently leading to a delay in quality changes
877
- - buffers: improve synchronisation to the SourceBuffer's buffer to avoid cases where the same segment could be downloaded multiple times
878
- - subtitles: fix bug in the clean-up logic of subtitles in the `"html"` texttrack mode that would lead to removed subtitles still being displayed
879
- - pipelines: retry a segment request with a backoff instead of stopping when receiving a HTTP 412
880
- - compat/subtitles: work-around firefox issue in the `"native"` texttrack mode to ensure track cues are removed when the content is stopped
881
- - subtitles/webvtt: support default classes in the WebVTT specification
882
- - subtitles/webvtt: multiple styles for the same element are now merged into one (instead of considering only the last one)
883
- - subtitles/webvtt: fix styling issues when both styles applied globally and styles applied on a selector are defined
884
- - subtitles/webvtt: do not remove whitespaces in styles to keep a sane formatting for some complex values
874
+ - dash/api: fix `getMinimumPosition` for MPDs with an availabilityStartTime superior to unix epoch
875
+ - smooth: be more tolerant on downloaded segments (accept ISOBMFF with boxes in any order)
876
+ - buffers/abr: fix issue infrequently leading to a delay in quality changes
877
+ - buffers: improve synchronisation to the SourceBuffer's buffer to avoid cases where the same segment could be downloaded multiple times
878
+ - subtitles: fix bug in the clean-up logic of subtitles in the `"html"` texttrack mode that would lead to removed subtitles still being displayed
879
+ - pipelines: retry a segment request with a backoff instead of stopping when receiving a HTTP 412
880
+ - compat/subtitles: work-around firefox issue in the `"native"` texttrack mode to ensure track cues are removed when the content is stopped
881
+ - subtitles/webvtt: support default classes in the WebVTT specification
882
+ - subtitles/webvtt: multiple styles for the same element are now merged into one (instead of considering only the last one)
883
+ - subtitles/webvtt: fix styling issues when both styles applied globally and styles applied on a selector are defined
884
+ - subtitles/webvtt: do not remove whitespaces in styles to keep a sane formatting for some complex values
885
885
 
886
886
  ### Other improvements
887
887
 
888
- - dash: warn through logs when fields are not in the expected format
889
- - drm: throw more explicative error messages when DRM are not supported in the current target
890
- - dash/smooth: get more precize duration from ISOBMFF by better handling the default duration taken from the tfhd box
891
- - tests: continue unit test coverage improvements (from 22% in the ``v3.10.2`` to 33.6%)
892
- - demo: fix initial text-track selection
893
-
888
+ - dash: warn through logs when fields are not in the expected format
889
+ - drm: throw more explicative error messages when DRM are not supported in the current target
890
+ - dash/smooth: get more precize duration from ISOBMFF by better handling the default duration taken from the tfhd box
891
+ - tests: continue unit test coverage improvements (from 22% in the `v3.10.2` to 33.6%)
892
+ - demo: fix initial text-track selection
894
893
 
895
894
  ## v3.10.2 (2019-01-08)
896
895
 
897
896
  ### Bug fixes
898
897
 
899
- - dash/smooth: fix manifest updates for some DASH contents (SegmentTimeline without SegmentTemplate) and for some Smooth usages
900
- - compat/drm: adopt a new strategy for malfunctioning CENC PSSH on Edge by moving them at the end of the initialization data
901
- - dash/smooth: update deprecated Manifest.adaptations property when updating the manifest
902
-
898
+ - dash/smooth: fix manifest updates for some DASH contents (SegmentTimeline without SegmentTemplate) and for some Smooth usages
899
+ - compat/drm: adopt a new strategy for malfunctioning CENC PSSH on Edge by moving them at the end of the initialization data
900
+ - dash/smooth: update deprecated Manifest.adaptations property when updating the manifest
903
901
 
904
902
  ## Other improvements
905
903
 
906
- - dash: refresh the MPD less often
907
- - dash/smooth: improve precision of `getMaximumPosition` when the Manifest is updated
908
- - tests: use the Jest library for unit tests
909
- - tests: add a lot of unit tests to sensitive code (from a coverage of 13% in the v3.10.1 to 22% in the v3.10.2)
910
- - npm: reduce size of the npm package
911
-
904
+ - dash: refresh the MPD less often
905
+ - dash/smooth: improve precision of `getMaximumPosition` when the Manifest is updated
906
+ - tests: use the Jest library for unit tests
907
+ - tests: add a lot of unit tests to sensitive code (from a coverage of 13% in the v3.10.1 to 22% in the v3.10.2)
908
+ - npm: reduce size of the npm package
912
909
 
913
910
  ## v3.10.1 (2019-01-03)
914
911
 
915
912
  ### Bug fixes
916
913
 
917
- - abr: always consider the last quality estimation
918
- - drm: work-arround Edge bug where the browser does not accept a valid CENC PSSH (DRM-related information in an ISOBMFF)
919
- - dash: handle `S` nodes (segments) with an @r attribute at `-1` in an MPD
920
- - dash: handle `SegmentTimeline` which have as a first `S` node (segment) an undefined @t attribute in an MPD
921
- - dash: Representation.index.getLastPosition() for SegmentBase-based DASH Representations now returns the end of the last segment (it returned the start of the last segment before)
922
- - dash/smooth: throw better error (`MANIFEST_PARSE_ERROR`) if none of the audio or video tracks of a content can be played (e.g. none have supported codecs)
914
+ - abr: always consider the last quality estimation
915
+ - drm: work-arround Edge bug where the browser does not accept a valid CENC PSSH (DRM-related information in an ISOBMFF)
916
+ - dash: handle `S` nodes (segments) with an @r attribute at `-1` in an MPD
917
+ - dash: handle `SegmentTimeline` which have as a first `S` node (segment) an undefined @t attribute in an MPD
918
+ - dash: Representation.index.getLastPosition() for SegmentBase-based DASH Representations now returns the end of the last segment (it returned the start of the last segment before)
919
+ - dash/smooth: throw better error (`MANIFEST_PARSE_ERROR`) if none of the audio or video tracks of a content can be played (e.g. none have supported codecs)
923
920
 
924
921
  ### Other improvements
925
922
 
926
- - manifest: better infer the minimum time of a Manifest
927
- - code: refresh code architecture (rename and move modules, remove some dependencies...)
928
- - tests: add coverage reports for both unit and "integration" tests, to check where tests are lacking and better pin down our hot-spots
929
- - tests: add appveyor countinous integration service for unit tests
930
-
923
+ - manifest: better infer the minimum time of a Manifest
924
+ - code: refresh code architecture (rename and move modules, remove some dependencies...)
925
+ - tests: add coverage reports for both unit and "integration" tests, to check where tests are lacking and better pin down our hot-spots
926
+ - tests: add appveyor countinous integration service for unit tests
931
927
 
932
928
  ## v3.10.0 (2018-12-11)
933
929
 
934
930
  ### Features
935
931
 
936
- - dash: Manage xlinks in "onLoad" resolution model
937
- - dash: Implement AdaptationSet switching by merging similar and switchable AdaptationSet into a single track
938
- - compat: add ``MEDIA_ERR_METADATA_NOT_LOADED`` warning, triggered when the browser has issues with loading the initial data (only seen on the Samsung mobile browser in directfile mode)
939
- - compat: add ``MEDIA_ERR_PLAY_NOT_ALLOWED`` warning, triggered when the application tries to ``play`` but the current browser doesn't allow it (often due to autoplay policy)
940
- - api: the ``play`` API now returns a Promise, mirroring the original browser's ``play`` API
932
+ - dash: Manage xlinks in "onLoad" resolution model
933
+ - dash: Implement AdaptationSet switching by merging similar and switchable AdaptationSet into a single track
934
+ - compat: add `MEDIA_ERR_METADATA_NOT_LOADED` warning, triggered when the browser has issues with loading the initial data (only seen on the Samsung mobile browser in directfile mode)
935
+ - compat: add `MEDIA_ERR_PLAY_NOT_ALLOWED` warning, triggered when the application tries to `play` but the current browser doesn't allow it (often due to autoplay policy)
936
+ - api: the `play` API now returns a Promise, mirroring the original browser's `play` API
941
937
 
942
938
  ### Deprecated
943
939
 
944
- - api: The ``xhr`` property from a `NetworkError` is now deprecated
940
+ - api: The `xhr` property from a `NetworkError` is now deprecated
945
941
 
946
942
  ### Bug fixes
947
943
 
948
- - compat/smooth: fix fatal error `BUFFER_APPEND_ERROR` happening on some HSS contents with Edge
949
- - dash/smooth: never refresh the manifest if its content is not dynamic
950
- - dash/smooth: use new URL if the initial manifest request is redirected (again :/ - thanks @fnatte)
951
- - api: do not go out of the ``LOADING`` state if the metadata could not be fetched (even if the browser tells us otherwise) - to work around Samsung Browser bug
952
- - api: avoid going out of the ``LOADED`` state until the initial seek is done and metadata is fetched
953
- - compat: use Promise ponyfill to improve IE11 compatibility with the MediaCapabilitiesProber and some EME functionalities
954
- - api: translate most IETF language tags into corresponding ISO639-3 codes for the `normalizedLanguage` property - given from APIs such as `getAvailableAudioTracks`
955
- - tools: fix ``mediaCapabilitiesProber.getCompatibleDRMConfigurations`` experimental tool on Safari
956
- - api: filter out duplicates in ``getAvailableVideoBitrates`` and ``getAvailableAudioBitrates``
944
+ - compat/smooth: fix fatal error `BUFFER_APPEND_ERROR` happening on some HSS contents with Edge
945
+ - dash/smooth: never refresh the manifest if its content is not dynamic
946
+ - dash/smooth: use new URL if the initial manifest request is redirected (again :/ - thanks @fnatte)
947
+ - api: do not go out of the `LOADING` state if the metadata could not be fetched (even if the browser tells us otherwise) - to work around Samsung Browser bug
948
+ - api: avoid going out of the `LOADED` state until the initial seek is done and metadata is fetched
949
+ - compat: use Promise ponyfill to improve IE11 compatibility with the MediaCapabilitiesProber and some EME functionalities
950
+ - api: translate most IETF language tags into corresponding ISO639-3 codes for the `normalizedLanguage` property - given from APIs such as `getAvailableAudioTracks`
951
+ - tools: fix `mediaCapabilitiesProber.getCompatibleDRMConfigurations` experimental tool on Safari
952
+ - api: filter out duplicates in `getAvailableVideoBitrates` and `getAvailableAudioBitrates`
957
953
 
958
954
  ### Other improvements
959
955
 
960
- - dash: better infer unknown Period durations
961
- - dash: better manage overlapping Periods by giving more importance to the last chronological one
962
- - memory: clean-up ``Adaptation`` and ``Representation`` information on Periods which are not considered anymore
963
- - log: warn through our logs every time a warning event is sent by the API
964
- - demo: authorize DRMs in IE11 or Safari when in HTTP in the demo page
965
- - demo: fix time indication for non-live contents
966
-
956
+ - dash: better infer unknown Period durations
957
+ - dash: better manage overlapping Periods by giving more importance to the last chronological one
958
+ - memory: clean-up `Adaptation` and `Representation` information on Periods which are not considered anymore
959
+ - log: warn through our logs every time a warning event is sent by the API
960
+ - demo: authorize DRMs in IE11 or Safari when in HTTP in the demo page
961
+ - demo: fix time indication for non-live contents
967
962
 
968
963
  ## v3.9.3 (2018-11-23)
969
964
 
970
965
  ### Bug fixes
971
966
 
972
- - compat: fix `undefined Object.values function` issue happening in some older browsers (mainly encountered in IE11 and old webkit versions)
973
- - compat: remove side-effects relative to DRM on Safari
974
- - tools: fix issue about an undefined Array.prototype.find method in some older browsers when calling mediaCapabilitiesProber.getCompatibleDRMConfigurations (mainly encountered in IE11)
967
+ - compat: fix `undefined Object.values function` issue happening in some older browsers (mainly encountered in IE11 and old webkit versions)
968
+ - compat: remove side-effects relative to DRM on Safari
969
+ - tools: fix issue about an undefined Array.prototype.find method in some older browsers when calling mediaCapabilitiesProber.getCompatibleDRMConfigurations (mainly encountered in IE11)
975
970
 
976
971
  ### Other improvements
977
972
 
978
- - eme: activate MediaKeys caching on Edge
979
- - compat: add in our validation process a ban of methods and functions unavailable in older browsers
980
- - tests/smooth: reinforce our Smooth Streaming integration tests
981
-
973
+ - eme: activate MediaKeys caching on Edge
974
+ - compat: add in our validation process a ban of methods and functions unavailable in older browsers
975
+ - tests/smooth: reinforce our Smooth Streaming integration tests
982
976
 
983
977
  ## v3.9.2 (2018-11-14)
984
978
 
985
979
  ### Bug fixes
986
980
 
987
- - smooth: authorize empty tracks ("StreamIndex") in Smooth manifests
988
-
981
+ - smooth: authorize empty tracks ("StreamIndex") in Smooth manifests
989
982
 
990
983
  ## v3.9.1 (2018-11-13)
991
984
 
992
985
  ### Bug fixes
993
986
 
994
- - smooth: fix issue preventing emergency manifest updates
995
- - dash: fix timeout for minimumUpdatePeriod in cases where the time at which the manifest was last requested is not known (like when setting a customManifestLoader argument)
987
+ - smooth: fix issue preventing emergency manifest updates
988
+ - dash: fix timeout for minimumUpdatePeriod in cases where the time at which the manifest was last requested is not known (like when setting a customManifestLoader argument)
996
989
 
997
990
  ### Other improvements
998
991
 
999
- - smooth: keep supplementary segment information when updating the manifest
1000
- - smooth: when updating segment information, perform garbage-collection of those concerning unreachable segments
1001
-
992
+ - smooth: keep supplementary segment information when updating the manifest
993
+ - smooth: when updating segment information, perform garbage-collection of those concerning unreachable segments
1002
994
 
1003
995
  ## v3.9.0 (2018-11-08)
1004
996
 
1005
997
  ### Features
1006
998
 
1007
- - dash: consider ``minimumUpdatePeriod`` attribute in MPDs
1008
- - buffer: add codec-switching for browsers supporting the `SourceBuffer.prototype.changeType` API
1009
- - dash/smooth: accept and parse segments with a "stpp.ttml.im1t" codec (TTML IMSC1 in MP4)
999
+ - dash: consider `minimumUpdatePeriod` attribute in MPDs
1000
+ - buffer: add codec-switching for browsers supporting the `SourceBuffer.prototype.changeType` API
1001
+ - dash/smooth: accept and parse segments with a "stpp.ttml.im1t" codec (TTML IMSC1 in MP4)
1010
1002
 
1011
1003
  ### Bug fixes
1012
1004
 
1013
- - smooth: fix calculations of the initial time, duration and minimum position for HSS VOD contents not starting at a '0' time
1014
- - buffer: fix priority updates for segment requests
1015
- - dash: calculate VOD duration from the last period if undefined in the MPD's root
1016
- - dash: remove possibility of obtaining two periods with the same id
1017
- - typings: make `manualBitrateSwitchingMode` ``loadVideo`` option an optional TypeScript typing (thanks @fnatte again!)
1005
+ - smooth: fix calculations of the initial time, duration and minimum position for HSS VOD contents not starting at a '0' time
1006
+ - buffer: fix priority updates for segment requests
1007
+ - dash: calculate VOD duration from the last period if undefined in the MPD's root
1008
+ - dash: remove possibility of obtaining two periods with the same id
1009
+ - typings: make `manualBitrateSwitchingMode` `loadVideo` option an optional TypeScript typing (thanks @fnatte again!)
1018
1010
 
1019
1011
  ### Other improvements
1020
1012
 
1021
- - abr: do not always cancel pending requests when switching to a new bitrate
1022
- - abr: re-estimate the bandwidth immediately after each request
1023
- - buffer: remove automatic garbage-collection of the "image" source-buffer (its rules should be more complex than those in place)
1024
- - tools/mediaCapabilitiesProber: Make ``getCompatibleDRMConfigurations`` work under IE11 and old webkit versions
1025
- - tools/mediaCapabilitiesProber: Add a multitude of bug fixes to the experimental mediaCapabilitiesProber
1026
- - package: divide by more than 2 the size of our package published in `npm` (thanks @necccc)
1027
- - tests: add memory tests to detect memory leaks
1028
- - demo: add 'favicon' to the demo page
1029
-
1013
+ - abr: do not always cancel pending requests when switching to a new bitrate
1014
+ - abr: re-estimate the bandwidth immediately after each request
1015
+ - buffer: remove automatic garbage-collection of the "image" source-buffer (its rules should be more complex than those in place)
1016
+ - tools/mediaCapabilitiesProber: Make `getCompatibleDRMConfigurations` work under IE11 and old webkit versions
1017
+ - tools/mediaCapabilitiesProber: Add a multitude of bug fixes to the experimental mediaCapabilitiesProber
1018
+ - package: divide by more than 2 the size of our package published in `npm` (thanks @necccc)
1019
+ - tests: add memory tests to detect memory leaks
1020
+ - demo: add 'favicon' to the demo page
1030
1021
 
1031
1022
  ## v3.8.1 (2018-10-17)
1032
1023
 
1033
1024
  ### Bug fixes
1034
1025
 
1035
- - abr: fix memory leak in ABR Management
1036
- - eme: avoid re-attaching a server certificate at each encrypted event
1026
+ - abr: fix memory leak in ABR Management
1027
+ - eme: avoid re-attaching a server certificate at each encrypted event
1037
1028
 
1038
1029
  ### Other improvements
1039
1030
 
1040
- - buffer: lower the "paddings" applied to the video buffer when raising the quality
1041
- - abr: when pratical, avoid relying on the "Content-Length" header to protect against miscalculations when downloading from misconfigured servers
1042
- - abr: lower the minimum number of bytes we wait to download before we evaluate the bandwidth
1043
- - abr: use performance.now instead of Date.now for better precision
1044
- - module: move express from the dependencies to the devDependencies
1045
- - demo: fix standalone demo and add possibility to launch it via HTTPS
1046
-
1031
+ - buffer: lower the "paddings" applied to the video buffer when raising the quality
1032
+ - abr: when pratical, avoid relying on the "Content-Length" header to protect against miscalculations when downloading from misconfigured servers
1033
+ - abr: lower the minimum number of bytes we wait to download before we evaluate the bandwidth
1034
+ - abr: use performance.now instead of Date.now for better precision
1035
+ - module: move express from the dependencies to the devDependencies
1036
+ - demo: fix standalone demo and add possibility to launch it via HTTPS
1047
1037
 
1048
1038
  ## v3.8.0 (2018-10-11)
1049
1039
 
1050
1040
  ### Features
1051
1041
 
1052
- - api/dash/smooth: add representationFilter API to prevent Representations (i.e. media qualities) from being played
1053
- - api/buffer: add ``manualBitrateSwitchingMode`` option to allow a direct representation switch when calling ``setVideoBitrate`` and ``setAudioBitrate``
1054
- - api/buffer: emit a ``MEDIA_TIME_BEFORE_MANIFEST`` warning when the wanted time is before what is announced in the manifest
1055
- - api/buffer: emit a ``MEDIA_TIME_AFTER_MANIFEST`` warning when the wanted time is after what is announced in the manifest
1042
+ - api/dash/smooth: add representationFilter API to prevent Representations (i.e. media qualities) from being played
1043
+ - api/buffer: add `manualBitrateSwitchingMode` option to allow a direct representation switch when calling `setVideoBitrate` and `setAudioBitrate`
1044
+ - api/buffer: emit a `MEDIA_TIME_BEFORE_MANIFEST` warning when the wanted time is before what is announced in the manifest
1045
+ - api/buffer: emit a `MEDIA_TIME_AFTER_MANIFEST` warning when the wanted time is after what is announced in the manifest
1056
1046
 
1057
1047
  ### Bug fixes
1058
1048
 
1059
- - remove export of undeclared ``ICompatVTTCue`` from modular build
1049
+ - remove export of undeclared `ICompatVTTCue` from modular build
1060
1050
 
1061
1051
  ### Other improvements
1062
1052
 
1063
- - buffer: to avoid taking too much memory, regularly clean-up text and image buffer 5 hours ahead/behind the current position (customizable)
1064
- - demo: add HTTPS capabilities on local full demo
1065
- - rxjs: update rxjs to 6.3.3
1066
- - typescript: update typescript to 3.1.2
1067
-
1053
+ - buffer: to avoid taking too much memory, regularly clean-up text and image buffer 5 hours ahead/behind the current position (customizable)
1054
+ - demo: add HTTPS capabilities on local full demo
1055
+ - rxjs: update rxjs to 6.3.3
1056
+ - typescript: update typescript to 3.1.2
1068
1057
 
1069
1058
  ## v3.7.0 (2018-09-21)
1070
1059
 
1071
1060
  ### Features
1072
1061
 
1073
- - eme: add ``throwOnLicenseExpiration`` boolean to ``keySystems`` (``loadVideo`` option) to allow better expiration management
1074
- - eme: in the ``getLicense`` property of ``keySystems`` (``loadVideo`` option), it is now possible to resolve with ``null`` to avoid a license update.
1075
- - eme: in the ``onKeyStatusesChange`` property of ``keySystems`` (``loadVideo`` option), it is now possible to resolve with ``null`` to avoid a license update.
1076
- - tools: replace experimental tool ``mediaCapabilitiesProber.isDRMSupported`` by the more useful ``mediaCapabilitiesProber.getCompatibleDRMConfigurations``
1062
+ - eme: add `throwOnLicenseExpiration` boolean to `keySystems` (`loadVideo` option) to allow better expiration management
1063
+ - eme: in the `getLicense` property of `keySystems` (`loadVideo` option), it is now possible to resolve with `null` to avoid a license update.
1064
+ - eme: in the `onKeyStatusesChange` property of `keySystems` (`loadVideo` option), it is now possible to resolve with `null` to avoid a license update.
1065
+ - tools: replace experimental tool `mediaCapabilitiesProber.isDRMSupported` by the more useful `mediaCapabilitiesProber.getCompatibleDRMConfigurations`
1077
1066
 
1078
1067
  ### Deprecated
1079
1068
 
1080
- - smooth: giving a WSX URL instead of the Manifest URL for a smooth content is now deprecated.
1081
- - smooth: giving a _publishing point definition_ URL (.isml) instead of the Manifest URL for a smooth content is now deprecated.
1082
- - smooth: giving a _Smooth Streaming server manifest_ URL (.ism) instead of the Manifest URL for a smooth content is now deprecated.
1069
+ - smooth: giving a WSX URL instead of the Manifest URL for a smooth content is now deprecated.
1070
+ - smooth: giving a _publishing point definition_ URL (.isml) instead of the Manifest URL for a smooth content is now deprecated.
1071
+ - smooth: giving a _Smooth Streaming server manifest_ URL (.ism) instead of the Manifest URL for a smooth content is now deprecated.
1083
1072
 
1084
1073
  ### Bug fixes
1085
1074
 
1086
- - api: switch state to "ENDED" if seeking to the end while the player is in the "LOADED" state.
1087
- - api: switch state to "SEEKING" if seeking in the content while the player is in the "LOADED" state.
1088
- - dash: consider multiple `Role` nodes for an AdaptationSet.
1089
- - typescript: fix typings error when an application build us without the ``skipLibCheck`` TypeScript option enabled.
1090
- - smooth: fix Manifest URL generation when a ".ism" or a ".isml" URL is given.
1091
- - doc: document deprecation of the ``adaptations`` property returned from a ``Manifest`` object (as returned from the ``getManifest`` method).
1075
+ - api: switch state to "ENDED" if seeking to the end while the player is in the "LOADED" state.
1076
+ - api: switch state to "SEEKING" if seeking in the content while the player is in the "LOADED" state.
1077
+ - dash: consider multiple `Role` nodes for an AdaptationSet.
1078
+ - typescript: fix typings error when an application build us without the `skipLibCheck` TypeScript option enabled.
1079
+ - smooth: fix Manifest URL generation when a ".ism" or a ".isml" URL is given.
1080
+ - doc: document deprecation of the `adaptations` property returned from a `Manifest` object (as returned from the `getManifest` method).
1092
1081
 
1093
1082
  ### Other improvements
1094
1083
 
1095
- - doc: add quick start tutorial.
1096
- - doc: add player states documentation.
1097
- - demo: add possibility to play encrypted contents.
1098
- - demo: update demo page.
1099
- - tests: consolidate our integration tests.
1100
-
1084
+ - doc: add quick start tutorial.
1085
+ - doc: add player states documentation.
1086
+ - demo: add possibility to play encrypted contents.
1087
+ - demo: update demo page.
1088
+ - tests: consolidate our integration tests.
1101
1089
 
1102
1090
  ## v3.6.1 (2018-09-03)
1103
1091
 
1104
1092
  ### Bug fixes
1105
1093
 
1106
- - directfile: send ``LOADED`` event again for directfile contents - thanks @Fnatte
1107
- - dash: don't merge "main" AdaptationSet if they are not of a video type
1108
- - eme: fix bug which prevented the ``closeSessionsOnStop`` keySystem option to work properly
1109
- - typescript: export types compatible with project references
1110
-
1094
+ - directfile: send `LOADED` event again for directfile contents - thanks @Fnatte
1095
+ - dash: don't merge "main" AdaptationSet if they are not of a video type
1096
+ - eme: fix bug which prevented the `closeSessionsOnStop` keySystem option to work properly
1097
+ - typescript: export types compatible with project references
1111
1098
 
1112
1099
  ### Other improvements
1113
1100
 
1114
- - directfile/tests: add basic directfile integration tests
1115
- - build: update to Babel 7
1116
- - rxjs: update to RxJS 6.3.1
1117
-
1101
+ - directfile/tests: add basic directfile integration tests
1102
+ - build: update to Babel 7
1103
+ - rxjs: update to RxJS 6.3.1
1118
1104
 
1119
1105
  ## v3.6.0 (2018-08-24)
1120
1106
 
1121
1107
  ### Features
1122
- - api: add video track switching
1123
- - dash: add webm support
1124
- - api: Emit warning if autoPlay is blocked on the current browser
1125
- - api: add ``getAvailableVideoTracks`` method to retrieve every video tracks
1126
- - api: add ``getVideoTrack`` method to get the active video track
1127
- - api: add ``setVideoTrack`` method to switch the video track
1128
- - api: add ``videoTrackChange`` event to know when a video track has been switched
1129
- - api: add ``RELOADING`` event for cases where the player needs to reload (such as during a video track switch)
1108
+
1109
+ - api: add video track switching
1110
+ - dash: add webm support
1111
+ - api: Emit warning if autoPlay is blocked on the current browser
1112
+ - api: add `getAvailableVideoTracks` method to retrieve every video tracks
1113
+ - api: add `getVideoTrack` method to get the active video track
1114
+ - api: add `setVideoTrack` method to switch the video track
1115
+ - api: add `videoTrackChange` event to know when a video track has been switched
1116
+ - api: add `RELOADING` event for cases where the player needs to reload (such as during a video track switch)
1130
1117
 
1131
1118
  ### Deprecated
1132
1119
 
1133
- - api: the method ``isFullscreen`` has been deprecated
1134
- - api: the method ``setFullscreen`` has been deprecated
1135
- - api: the method ``exitFullscreen`` has been deprecated
1136
- - api: the method ``getNativeTextTrack`` has been deprecated
1137
- - api: the event ``fullscreenChange`` has been deprecated
1138
- - api: the event ``nativeTextTrackChange`` has been deprecated
1120
+ - api: the method `isFullscreen` has been deprecated
1121
+ - api: the method `setFullscreen` has been deprecated
1122
+ - api: the method `exitFullscreen` has been deprecated
1123
+ - api: the method `getNativeTextTrack` has been deprecated
1124
+ - api: the event `fullscreenChange` has been deprecated
1125
+ - api: the event `nativeTextTrackChange` has been deprecated
1139
1126
 
1140
1127
  ### Bug Fixes
1141
1128
 
1142
- - ttml: display forbidden characters (such as ">") in a ``"native"`` ``textTrackMode``
1143
- - ttml: process ``xml:space`` even if it is not defined at the top level
1144
- - buffer: perform a better clean-up of previous media in a SourceBuffer when switching audio or text track
1145
- - manifest/dash: throw a MANIFEST_PARSE_ERROR when no AdaptationSet of a given type in a Period is in a compatible codec
1129
+ - ttml: display forbidden characters (such as ">") in a `"native"` `textTrackMode`
1130
+ - ttml: process `xml:space` even if it is not defined at the top level
1131
+ - buffer: perform a better clean-up of previous media in a SourceBuffer when switching audio or text track
1132
+ - manifest/dash: throw a MANIFEST_PARSE_ERROR when no AdaptationSet of a given type in a Period is in a compatible codec
1146
1133
 
1147
1134
  ### Other improvements
1148
1135
 
1149
- - types: export and document main typings used internally such as ILoadVideoOptions (the loadVideo argument)
1150
- - misc: log every fatal errors
1151
- - misc: remove dumb npm inclusion as a project dependency
1152
- - doc: improve architecture documentation
1153
-
1136
+ - types: export and document main typings used internally such as ILoadVideoOptions (the loadVideo argument)
1137
+ - misc: log every fatal errors
1138
+ - misc: remove dumb npm inclusion as a project dependency
1139
+ - doc: improve architecture documentation
1154
1140
 
1155
1141
  ## v3.5.2 (2018-08-06)
1156
1142
 
1157
1143
  ### Bug fixes
1158
1144
 
1159
- - dash: Manage presentationTimeOffset completely (allow advanced multi-period configurations)
1160
- - dash: Fix Adaptations bug when the first DASH adaptation was a "main" one
1161
- - smooth: Remove the limitation of a minimum bitrate in Smooth Streaming
1162
- - dash: Fix condition which prevented to play audio-only live DASH streams
1145
+ - dash: Manage presentationTimeOffset completely (allow advanced multi-period configurations)
1146
+ - dash: Fix Adaptations bug when the first DASH adaptation was a "main" one
1147
+ - smooth: Remove the limitation of a minimum bitrate in Smooth Streaming
1148
+ - dash: Fix condition which prevented to play audio-only live DASH streams
1163
1149
 
1164
1150
  ### Other improvements
1165
1151
 
1166
- - typescript: add typescript declaration files
1167
- - abr: update ABR mechanisms when the estimated bandtwidth fall suddenly
1168
- - api: warn in the log when the browser reject a wanted autoplay
1169
- - drm: Add keyId information to the internal Manifest structure
1170
- - typescript: update typescript to v3.0.1
1171
-
1152
+ - typescript: add typescript declaration files
1153
+ - abr: update ABR mechanisms when the estimated bandtwidth fall suddenly
1154
+ - api: warn in the log when the browser reject a wanted autoplay
1155
+ - drm: Add keyId information to the internal Manifest structure
1156
+ - typescript: update typescript to v3.0.1
1172
1157
 
1173
1158
  ## v3.5.1 (2018-07-11)
1174
1159
 
1175
1160
  ### Bug fixes
1176
1161
 
1177
- - parsers: fix wrong computation of segment time in template index
1178
- - abr: get concerned request in starvation mode
1162
+ - parsers: fix wrong computation of segment time in template index
1163
+ - abr: get concerned request in starvation mode
1179
1164
 
1180
1165
  ## v3.5.0 (2018-07-03)
1181
1166
 
1182
1167
  ### Added
1183
1168
 
1184
- - tools: add ``mediaCapabilitiesProber`` tool as an experimental tool
1185
- - builds: add minimal import with feature selection (allowing cleaner feature switching or lazy-loading)
1186
- - dash: allow multiple "main" adaptation
1187
- - api: add static ``version`` property to the RxPlayer API
1169
+ - tools: add `mediaCapabilitiesProber` tool as an experimental tool
1170
+ - builds: add minimal import with feature selection (allowing cleaner feature switching or lazy-loading)
1171
+ - dash: allow multiple "main" adaptation
1172
+ - api: add static `version` property to the RxPlayer API
1188
1173
 
1189
1174
  ### Bug fixes
1190
1175
 
1191
- - vtt: fix ``line`` setting for vtt tracks in ``"native"`` textTrackMode
1192
- - dash: always play "main" adaptation first
1193
- - misc: don't interfere with a client's RxJS implementation by switching to RxJS 6
1194
- - dash: presentationTimeOffset doesn't have an influence on requested segment anymore
1195
- - smooth/dash: throw a ``"MANIFEST_PARSE_ERROR"`` if no audio and video adaptations/StreamIndex are available in the current content
1176
+ - vtt: fix `line` setting for vtt tracks in `"native"` textTrackMode
1177
+ - dash: always play "main" adaptation first
1178
+ - misc: don't interfere with a client's RxJS implementation by switching to RxJS 6
1179
+ - dash: presentationTimeOffset doesn't have an influence on requested segment anymore
1180
+ - smooth/dash: throw a `"MANIFEST_PARSE_ERROR"` if no audio and video adaptations/StreamIndex are available in the current content
1196
1181
 
1197
1182
  ### Other improvements
1198
1183
 
1199
- - builds: Reduce size of the builds
1200
- - builds: use uglifyJS instead of Closure-compiler
1201
- - builds: update to typescript 2.9
1202
- - rxjs: update to RxJS version 6 (v6.2.1)
1203
- - code: set complete URL in segment's media property
1204
- - demo: add time indicator on the progress bar
1205
- - demo: update fullscreen mode to also display the text track element
1206
- - misc: moved demo server scripts to the respective demo directories
1207
- - misc: moved manifest parsers to the ``src/parsers`` directory
1208
- - misc: moved scripts from ``./tools`` to ``./scripts``
1209
- - misc: moved webpack configs to the root of the project
1210
-
1184
+ - builds: Reduce size of the builds
1185
+ - builds: use uglifyJS instead of Closure-compiler
1186
+ - builds: update to typescript 2.9
1187
+ - rxjs: update to RxJS version 6 (v6.2.1)
1188
+ - code: set complete URL in segment's media property
1189
+ - demo: add time indicator on the progress bar
1190
+ - demo: update fullscreen mode to also display the text track element
1191
+ - misc: moved demo server scripts to the respective demo directories
1192
+ - misc: moved manifest parsers to the `src/parsers` directory
1193
+ - misc: moved scripts from `./tools` to `./scripts`
1194
+ - misc: moved webpack configs to the root of the project
1211
1195
 
1212
1196
  ## v3.4.1 (2018-05-31)
1213
1197
 
1214
1198
  ### Bug fixes
1215
1199
 
1216
- - buffer: fix several bugs happening when calling ``endOfStream`` to announce the end of the current content. Especially prevalent on Chrome.
1217
- - net: use redirected URL as a base for further requests when the manifest request led to a HTTP redirect.
1218
- - vtt/srt: ignore silently (do not throw) when an unknown block has been detected in a vtt or srt file
1219
- - vtt/srt: support styling spans (like b, i and u XML tags) spanning multiple lines
1220
- - api: ``getAvailableTextTracks`` and ``getAvailableAudioTracks`` now always return an array (and never null) as announced in the API documentation
1221
- - api: set default log level to ``"NONE"`` instead of ``"INFO"``
1222
- - misc: remove development-only code from the non-minified code
1200
+ - buffer: fix several bugs happening when calling `endOfStream` to announce the end of the current content. Especially prevalent on Chrome.
1201
+ - net: use redirected URL as a base for further requests when the manifest request led to a HTTP redirect.
1202
+ - vtt/srt: ignore silently (do not throw) when an unknown block has been detected in a vtt or srt file
1203
+ - vtt/srt: support styling spans (like b, i and u XML tags) spanning multiple lines
1204
+ - api: `getAvailableTextTracks` and `getAvailableAudioTracks` now always return an array (and never null) as announced in the API documentation
1205
+ - api: set default log level to `"NONE"` instead of `"INFO"`
1206
+ - misc: remove development-only code from the non-minified code
1223
1207
 
1224
1208
  ### Other improvements
1225
1209
 
1226
- - misc: move some dev dependencies from ``dependencies`` to ``devDependencies`` in ``package.json``
1227
-
1210
+ - misc: move some dev dependencies from `dependencies` to `devDependencies` in `package.json`
1228
1211
 
1229
1212
  ## v3.4.0 (2018-05-17)
1230
1213
 
1231
1214
  ### Added
1232
1215
 
1233
- - eme: allow multiple licenses per content
1234
- - eme: allow different MediaKeys to be attached on multiple media elements
1216
+ - eme: allow multiple licenses per content
1217
+ - eme: allow different MediaKeys to be attached on multiple media elements
1235
1218
 
1236
1219
  ### Bug fixes
1237
1220
 
1238
- - eme: limit simultaneous loaded MediaKeySession to 50 by default (configurable)
1239
- - source-buffer: clean properly the text SourceBuffer on deactivation
1240
- - buffer: perform discontinuity seeks only for native source buffers
1221
+ - eme: limit simultaneous loaded MediaKeySession to 50 by default (configurable)
1222
+ - source-buffer: clean properly the text SourceBuffer on deactivation
1223
+ - buffer: perform discontinuity seeks only for native source buffers
1241
1224
 
1242
1225
  ### Other improvements
1243
1226
 
1244
- - doc: generate documentation pages
1245
- - misc: add sonarqube quality pass
1246
- - code: set a clearer private state for the API
1247
- - tools: update to webpack v4.8.3
1248
- - tools: update to typescript v2.8.3
1249
-
1227
+ - doc: generate documentation pages
1228
+ - misc: add sonarqube quality pass
1229
+ - code: set a clearer private state for the API
1230
+ - tools: update to webpack v4.8.3
1231
+ - tools: update to typescript v2.8.3
1250
1232
 
1251
1233
  ## v3.3.2 (2018-04-17)
1252
1234
 
1253
1235
  ### Bug Fixes
1254
1236
 
1255
- - api: emit SEEKING state instead of BUFFERING when the user seeks to an unbuffered part just after resuming playback
1256
- - api: work around bug found in old versions of Chrome where the ENDED state would never be triggered at the end of the stream
1257
- - api/language: fix bug where an audio or text language would not be switched to on certain conditions in live contents
1258
- - smooth: fix frequent manifest refreshing happening immediately when changing audio/text language
1259
- - eme/error: fix reason string and error message for KEY_STATUS_CHANGE_ERROR
1237
+ - api: emit SEEKING state instead of BUFFERING when the user seeks to an unbuffered part just after resuming playback
1238
+ - api: work around bug found in old versions of Chrome where the ENDED state would never be triggered at the end of the stream
1239
+ - api/language: fix bug where an audio or text language would not be switched to on certain conditions in live contents
1240
+ - smooth: fix frequent manifest refreshing happening immediately when changing audio/text language
1241
+ - eme/error: fix reason string and error message for KEY_STATUS_CHANGE_ERROR
1260
1242
 
1261
1243
  ### Other improvements
1262
1244
 
1263
- - buffer: update download queue immediately when seeking to an already-buffered part, to always prioritize needed segments
1264
- - buffer: schedule segments per level of priority to lower some buffering/seeking/loading time
1265
- - demo: fix "Big Buck Bunny WEBM"'s URL
1266
-
1245
+ - buffer: update download queue immediately when seeking to an already-buffered part, to always prioritize needed segments
1246
+ - buffer: schedule segments per level of priority to lower some buffering/seeking/loading time
1247
+ - demo: fix "Big Buck Bunny WEBM"'s URL
1267
1248
 
1268
1249
  ## v3.3.1 (2018-03-13)
1269
1250
 
1270
1251
  ### Bug Fixes
1271
1252
 
1272
- - misc: fix missing browser API on IE11
1273
- - buffer: end correctly streams which experienced a custom sourcebuffer (text/image) crash
1253
+ - misc: fix missing browser API on IE11
1254
+ - buffer: end correctly streams which experienced a custom sourcebuffer (text/image) crash
1274
1255
 
1275
1256
  ### Other improvements
1276
1257
 
1277
- - tools: support development on windows
1278
-
1258
+ - tools: support development on windows
1279
1259
 
1280
1260
  ## v3.3.0 (2018-03-05)
1281
1261
 
1282
1262
  ### Added
1283
1263
 
1284
- - api: add directfile API to allow the playback of files natively managed by the browser
1264
+ - api: add directfile API to allow the playback of files natively managed by the browser
1285
1265
 
1286
1266
  ### Bug Fixes
1287
1267
 
1288
- - api: fix player state when seeking after the video ended
1289
- - text/api: fix getTextTrack API which could return the current audio track instead
1290
- - text: clean-up custom HTML text track SourceBuffer's buffered when the text track is disabled
1291
-
1268
+ - api: fix player state when seeking after the video ended
1269
+ - text/api: fix getTextTrack API which could return the current audio track instead
1270
+ - text: clean-up custom HTML text track SourceBuffer's buffered when the text track is disabled
1292
1271
 
1293
1272
  ## v3.2.0 (2018-02-23)
1294
1273
 
1295
1274
  ### Added
1296
1275
 
1297
- - dash: Handle multi-periods DASH manifests
1298
- - api: add ``periodChange`` event
1299
- - api: add ``stopAtEnd`` option to the constructor, to deactivate automatic content un-loading when it ends
1300
- - api: add ``manifestLoader`` to the ``transportOptions`` of a ``loadVideo`` call
1276
+ - dash: Handle multi-periods DASH manifests
1277
+ - api: add `periodChange` event
1278
+ - api: add `stopAtEnd` option to the constructor, to deactivate automatic content un-loading when it ends
1279
+ - api: add `manifestLoader` to the `transportOptions` of a `loadVideo` call
1301
1280
 
1302
1281
  ### Bug Fixes
1303
1282
 
1304
- - stream: call ``endOfStream`` for better end detection and to allow the Chrome browser to display the last frames of a video
1305
- - buffer: always play the last possible milliseconds of a content (removed END_OF_PLAY config attribute)
1306
- - eme: workaround a bug found on Chrome where setting a ``keySystems`` option in ``loadVideo`` would always throw on HTTP (not HTTPS) pages.
1307
- - vtt: fix WebVTT parsing when the last line of a WebVTT file is not a new line
1308
- - dash: ignore availabilityStartTime settings for a static MPD
1309
- - buffer: ignore segments for a duration inferior to the MINIMUM_SEGMENT_SIZE (200ms by default) to avoid infinite re-downloading
1283
+ - stream: call `endOfStream` for better end detection and to allow the Chrome browser to display the last frames of a video
1284
+ - buffer: always play the last possible milliseconds of a content (removed END_OF_PLAY config attribute)
1285
+ - eme: workaround a bug found on Chrome where setting a `keySystems` option in `loadVideo` would always throw on HTTP (not HTTPS) pages.
1286
+ - vtt: fix WebVTT parsing when the last line of a WebVTT file is not a new line
1287
+ - dash: ignore availabilityStartTime settings for a static MPD
1288
+ - buffer: ignore segments for a duration inferior to the MINIMUM_SEGMENT_SIZE (200ms by default) to avoid infinite re-downloading
1310
1289
 
1311
1290
  ### Other improvements
1312
1291
 
1313
- - update RxJS to v5.5.6
1314
- - update TypeScript to v2.7.2
1315
-
1292
+ - update RxJS to v5.5.6
1293
+ - update TypeScript to v2.7.2
1316
1294
 
1317
1295
  ## v3.1.0 (2018-01-30)
1318
1296
 
1319
1297
  ### Added
1320
1298
 
1321
- - api: add ``networkConfig`` to ``loadVideo`` options
1322
- - eme: add ``closeSessionsOnStop`` to the ``keySystems`` ``loadVideo`` option
1299
+ - api: add `networkConfig` to `loadVideo` options
1300
+ - eme: add `closeSessionsOnStop` to the `keySystems` `loadVideo` option
1323
1301
 
1324
1302
  ### Bug Fixes
1325
1303
 
1326
- - dash: fix Range request ranges for representations based on a SegmentList index
1327
- - smooth: allows smooth Manifests for non-live contents to begin at a timestamp != 0
1328
-
1304
+ - dash: fix Range request ranges for representations based on a SegmentList index
1305
+ - smooth: allows smooth Manifests for non-live contents to begin at a timestamp != 0
1329
1306
 
1330
1307
  ## v3.0.7 (2018-01-19)
1331
1308
 
1332
1309
  ### Bug fixes
1333
1310
 
1334
- - eme: fix bug which prevented to play encrypted contents on IE11
1335
-
1311
+ - eme: fix bug which prevented to play encrypted contents on IE11
1336
1312
 
1337
1313
  ## v3.0.6 (2018-01-11)
1338
1314
 
1339
1315
  ### Bug Fixes
1340
1316
 
1341
- - buffer: fix issue which could led to multiple video or audio segments being downloaded at the same time
1342
- - dash/text: support MPD AdaptationSet with a "caption" Role as text Adaptations
1343
- - dash/text: remove offset set for subtitles on live contents, which led to unsynchronized subtitles
1344
- - dash: fix issue which could led to segments being re-downloaded too much in a SegmentTemplate scheme
1317
+ - buffer: fix issue which could led to multiple video or audio segments being downloaded at the same time
1318
+ - dash/text: support MPD AdaptationSet with a "caption" Role as text Adaptations
1319
+ - dash/text: remove offset set for subtitles on live contents, which led to unsynchronized subtitles
1320
+ - dash: fix issue which could led to segments being re-downloaded too much in a SegmentTemplate scheme
1345
1321
 
1346
1322
  ### Other improvements
1347
1323
 
1348
- - demo: set "html" textTrackMode by default to have a better stylization of closed captions.
1349
-
1324
+ - demo: set "html" textTrackMode by default to have a better stylization of closed captions.
1350
1325
 
1351
1326
  ## v3.0.5 (2017-12-11)
1352
1327
 
1353
1328
  ### Bug Fixes
1354
1329
 
1355
- - eme: consider unknown errors (e.g. errors coming from the user of the library) as fatal eme errors
1356
-
1330
+ - eme: consider unknown errors (e.g. errors coming from the user of the library) as fatal eme errors
1357
1331
 
1358
1332
  ## v3.0.4 (2017-12-05)
1359
1333
 
1360
1334
  ### Bug Fixes
1361
1335
 
1362
- - text/webvtt: authorize header options without parsing them
1363
- - text/webvtt: authorize timestamps without hours
1336
+ - text/webvtt: authorize header options without parsing them
1337
+ - text/webvtt: authorize timestamps without hours
1364
1338
 
1365
1339
  ### Other improvements
1366
1340
 
1367
- - misc: remove multiple unneeded assertions in DEV mode
1368
- - misc: update DEV mode default debug level from DEBUG to INFO
1369
-
1341
+ - misc: remove multiple unneeded assertions in DEV mode
1342
+ - misc: update DEV mode default debug level from DEBUG to INFO
1370
1343
 
1371
1344
  ## v3.0.3 (2017-11-24)
1372
1345
 
1373
1346
  ### Bug Fixes
1374
1347
 
1375
- - text/ttml: apply correctly a style if directly set on an attribute
1376
- - eme: load new video even if the last EME clean-up failed
1348
+ - text/ttml: apply correctly a style if directly set on an attribute
1349
+ - eme: load new video even if the last EME clean-up failed
1377
1350
 
1378
1351
  ### Other improvements
1379
1352
 
1380
- - misc: set better work arround for typescript issue [20104](https://github.com/Microsoft/TypeScript/issues/20104) to make building npm scripts usable again
1381
- - tools: update the update-version npm script
1382
- - demo: ``npm run start`` and ``npm run standalone`` now build the rx-player in the "development" environment
1383
- - tools: add more logs in DEBUG mode
1384
-
1353
+ - misc: set better work arround for typescript issue [20104](https://github.com/Microsoft/TypeScript/issues/20104) to make building npm scripts usable again
1354
+ - tools: update the update-version npm script
1355
+ - demo: `npm run start` and `npm run standalone` now build the rx-player in the "development" environment
1356
+ - tools: add more logs in DEBUG mode
1385
1357
 
1386
1358
  ## v3.0.2 (2017-11-17)
1387
1359
 
1388
1360
  ### Bug Fixes
1389
1361
 
1390
- - misc: work around typescript issue [20104](https://github.com/Microsoft/TypeScript/issues/20104) temporarly to launch in Chrome in HTTP
1391
-
1362
+ - misc: work around typescript issue [20104](https://github.com/Microsoft/TypeScript/issues/20104) temporarly to launch in Chrome in HTTP
1392
1363
 
1393
1364
  ## v3.0.1 (2017-11-17)
1394
1365
 
1395
1366
  ### Bug Fixes
1396
1367
 
1397
- - abr: adopt a less agressive strategy to avoid re-bufferings
1398
- - smooth: avoid most of the manifest refresh requests
1368
+ - abr: adopt a less agressive strategy to avoid re-bufferings
1369
+ - smooth: avoid most of the manifest refresh requests
1399
1370
 
1400
1371
  ### Other improvements
1401
1372
 
1402
- - Switch codebase to TypeScript
1403
- - Add Travis CI
1404
-
1373
+ - Switch codebase to TypeScript
1374
+ - Add Travis CI
1405
1375
 
1406
1376
  ## v3.0.0 (2017-11-10)
1407
1377
 
1408
1378
  ### Added
1409
1379
 
1410
- - misc: add possibility to do custom builds through environment variables, to remove unwanted features from minified code.
1411
- - languages: add support for segmented VTT subtitles
1412
- - languages/dash: add support for plain text TTML, SAMI, SRT, VTT and MP4-embedded VTT subtitles in DASH manifests
1413
- - languages/smooth: add support for MP4-embedded VTT subtitles in Smooth manifests
1414
- - languages: add possibility to show fragmented or not TTML, SAMI, SRT and VTT text tracks in a <track> element, even for browser that do not support the VTTCue API
1415
- - languages: add possibility to show TTML, SRT, VTT and SAMI text tracks in HTML tags for richer stylisation.
1416
- - api: add ``textTrackElement`` option to ``loadVideo``
1417
- - api: add ``textTrackMode`` option to ``loadVideo``
1418
- - api: add ``nativeTextTracksChange`` event
1419
- - eme: it is now possible to directly set the reverse domain name of the wanted key system in the ``type`` property of ``loadVideo``'s ``keySystems`` option.
1420
- - api: add property ``percentage`` to the ``startAt`` argument of ``loadVideo``.
1421
- - abr: add ``bitrateEstimationChange`` event
1422
- - api: add ``LogLevel`` static property
1423
- - api: a Date object can now be given to the ``loadVideo`` argument ``startAt.wallClockTime``. It will be automatically converted into seconds.
1424
- - languages: add ``normalizedLanguage`` property in manifest-related-APIs to expose the ISO 639-3 language code of the audio and text tracks
1425
- - languages: add ``normalized`` property in language-related-API to expose the ISO 639-3 language code of the audio and text tracks
1426
- - loadVideo: add ``codecs`` property to supplementaryTextTracks
1427
- - api: add ``wantedBufferAhead`` constructor option
1428
- - api: add ``maxBufferAhead`` constructor option
1429
- - api: add ``maxBufferBehind`` constructor option
1430
- - api: add ``getVideoBufferGap`` method
1431
- - api: add ``isMute`` method
1432
- - api: add ``getManualAudioBitrate`` method
1433
- - api: add ``getManualVideoBitrate`` method
1434
- - config: add a global config file (src/config.js) to easily tweak the player behavior
1380
+ - misc: add possibility to do custom builds through environment variables, to remove unwanted features from minified code.
1381
+ - languages: add support for segmented VTT subtitles
1382
+ - languages/dash: add support for plain text TTML, SAMI, SRT, VTT and MP4-embedded VTT subtitles in DASH manifests
1383
+ - languages/smooth: add support for MP4-embedded VTT subtitles in Smooth manifests
1384
+ - languages: add possibility to show fragmented or not TTML, SAMI, SRT and VTT text tracks in a <track> element, even for browser that do not support the VTTCue API
1385
+ - languages: add possibility to show TTML, SRT, VTT and SAMI text tracks in HTML tags for richer stylisation.
1386
+ - api: add `textTrackElement` option to `loadVideo`
1387
+ - api: add `textTrackMode` option to `loadVideo`
1388
+ - api: add `nativeTextTracksChange` event
1389
+ - eme: it is now possible to directly set the reverse domain name of the wanted key system in the `type` property of `loadVideo`'s `keySystems` option.
1390
+ - api: add property `percentage` to the `startAt` argument of `loadVideo`.
1391
+ - abr: add `bitrateEstimationChange` event
1392
+ - api: add `LogLevel` static property
1393
+ - api: a Date object can now be given to the `loadVideo` argument `startAt.wallClockTime`. It will be automatically converted into seconds.
1394
+ - languages: add `normalizedLanguage` property in manifest-related-APIs to expose the ISO 639-3 language code of the audio and text tracks
1395
+ - languages: add `normalized` property in language-related-API to expose the ISO 639-3 language code of the audio and text tracks
1396
+ - loadVideo: add `codecs` property to supplementaryTextTracks
1397
+ - api: add `wantedBufferAhead` constructor option
1398
+ - api: add `maxBufferAhead` constructor option
1399
+ - api: add `maxBufferBehind` constructor option
1400
+ - api: add `getVideoBufferGap` method
1401
+ - api: add `isMute` method
1402
+ - api: add `getManualAudioBitrate` method
1403
+ - api: add `getManualVideoBitrate` method
1404
+ - config: add a global config file (src/config.js) to easily tweak the player behavior
1435
1405
 
1436
1406
  ### Changed
1437
1407
 
1438
- - languages: switch from ISO 639-2 to ISO 639-3 language codes in various APIs
1439
- - languages: the ``language`` property returned by language and manifest related APIs now reflect the exact language as set in the manifest
1440
- - api: ``setVideoBitrate`` can now be called even when no content is playing
1441
- - api: ``setAudioBitrate`` can now be called even when no content is playing
1442
- - api: ``setVideoBitrate`` can now be called even when no video track has the exact same bitrate
1443
- - api: ``setAudioBitrate`` can now be called even when no audio track has the exact same bitrate
1444
- - api: giving a number to ``seekTo`` now has the same effect than setting a position option in argument (``seekTo({ position }) === seekTo(position)``)
1445
- - api: ``getUrl`` now do not throw if no content is playing
1446
- - api: ``isLive`` now do not throw if no content is playing
1447
- - api: ``loadVideo`` does not return anything anymore
1448
- - api: private (undocumented) variables have been isolated on a player instance to a ``_priv`` object.
1449
- - api: the constructor option ``throttleWhenHidden`` is now set to false by default
1450
- - api: the constructor option ``limitVideoWidth`` is now set to false by default
1408
+ - languages: switch from ISO 639-2 to ISO 639-3 language codes in various APIs
1409
+ - languages: the `language` property returned by language and manifest related APIs now reflect the exact language as set in the manifest
1410
+ - api: `setVideoBitrate` can now be called even when no content is playing
1411
+ - api: `setAudioBitrate` can now be called even when no content is playing
1412
+ - api: `setVideoBitrate` can now be called even when no video track has the exact same bitrate
1413
+ - api: `setAudioBitrate` can now be called even when no audio track has the exact same bitrate
1414
+ - api: giving a number to `seekTo` now has the same effect than setting a position option in argument (`seekTo({ position }) === seekTo(position)`)
1415
+ - api: `getUrl` now do not throw if no content is playing
1416
+ - api: `isLive` now do not throw if no content is playing
1417
+ - api: `loadVideo` does not return anything anymore
1418
+ - api: private (undocumented) variables have been isolated on a player instance to a `_priv` object.
1419
+ - api: the constructor option `throttleWhenHidden` is now set to false by default
1420
+ - api: the constructor option `limitVideoWidth` is now set to false by default
1451
1421
 
1452
1422
  ### Removed
1453
1423
 
1454
- - api: remove ``defaultAudioTrack`` constructor option
1455
- - api: remove ``defaultTextTrack`` constructor option
1456
- - api: remove ``transportOptions`` constructor option
1457
- - api: remove ``transport`` constructor option
1458
- - api: remove ``nativeTextTrackChange`` event in favor of ``nativeTextTracksChange`` event (notice the "s")
1459
- - api: remove ``goToStart`` method
1460
- - api: remove ``getStartTime`` method
1461
- - api: remove ``getEndTime`` method
1462
- - api: remove ``toggleDebug`` method
1463
- - api: remove ``hideDebug`` method
1464
- - api: remove ``showDebug`` method
1465
- - api: remove ``getDebug`` method
1466
- - api: remove ``getImageTrack`` method
1467
- - api: remove ``setVideoBufferSize`` method in favor of ``setWantedBufferAhead`` method
1468
- - api: remove ``getVideoBufferSize`` method in favor of ``getWantedBufferAhead`` method
1469
- - api: remove ``setAudioBufferSize`` method in favor of ``setWantedBufferAhead`` method
1470
- - api: remove ``getAudioBufferSize`` method in favor of ``getWantedBufferAhead`` method
1471
- - api: remove ``maximumBufferTime`` property from ``positionUpdate`` events
1472
- - api: remove ``getCurrentTime`` method
1473
- - api: remove ``asObservable`` method
1474
- - api: remove ``loadVideo`` option ``manifests`` in favor of ``url`` and ``keySystems`` options
1475
- - api: remove ``loadVideo`` option ``subtitles`` in favor of ``supplementaryTextTracks`` option
1476
- - api: remove ``loadVideo`` option ``images`` in favor of ``supplementaryImageTracks`` option
1477
- - api: remove constructor option ``initVideoBitrate`` in favor of ``initialVideoBitrate`` option
1478
- - api: remove constructor option ``initAudioBitrate`` in favor of ``initialVideoBitrate`` option
1479
- - api: remove constructor option ``defaultLanguage`` in favor of ``defaultAudioTrack`` option
1480
- - api: remove constructor option ``defaultSubtitle`` in favor of ``defaultTextTrack`` option
1481
- - position: remove ``subtitleChange`` event
1482
- - position: remove ``languageChange`` event
1483
- - position: remove ``progress`` event
1484
- - position: remove ``currentTimeChange`` event in favor of ``positionUpdate`` event
1485
- - adaptive: remove ``getMetrics`` method
1486
- - adaptive: remove ``getAverageBitrates`` method
1487
- - adaptive: remove ``getVideoMaxBitrate`` method in favor of ``getMaxVideoBitrate`` method
1488
- - adaptive: remove ``getAudioMaxBitrate`` method in favor of ``getMaxAudioBitrate`` method
1489
- - errors: remove static method ``getErrorTypes`` in favor of the static property ``errorTypes``
1490
- - errors: remove static method ``getErrorCodes`` in favor of the static property ``errorCodes``
1491
- - languages: remove ``normalizeLanguageCode`` method
1492
- - languages: remove ``getAvailableLanguages`` method
1493
- - languages: remove ``getAvailableSubtitles`` method
1494
- - languages: remove ``isLanguageAvailable`` method
1495
- - languages: remove ``isSubtitleAvailable`` method
1496
- - languages: remove ``getLanguage`` method
1497
- - languages: remove ``getSubtitle`` method
1498
- - languages: remove ``setLanguage`` method
1499
- - languages: remove ``setSubtitle`` method
1424
+ - api: remove `defaultAudioTrack` constructor option
1425
+ - api: remove `defaultTextTrack` constructor option
1426
+ - api: remove `transportOptions` constructor option
1427
+ - api: remove `transport` constructor option
1428
+ - api: remove `nativeTextTrackChange` event in favor of `nativeTextTracksChange` event (notice the "s")
1429
+ - api: remove `goToStart` method
1430
+ - api: remove `getStartTime` method
1431
+ - api: remove `getEndTime` method
1432
+ - api: remove `toggleDebug` method
1433
+ - api: remove `hideDebug` method
1434
+ - api: remove `showDebug` method
1435
+ - api: remove `getDebug` method
1436
+ - api: remove `getImageTrack` method
1437
+ - api: remove `setVideoBufferSize` method in favor of `setWantedBufferAhead` method
1438
+ - api: remove `getVideoBufferSize` method in favor of `getWantedBufferAhead` method
1439
+ - api: remove `setAudioBufferSize` method in favor of `setWantedBufferAhead` method
1440
+ - api: remove `getAudioBufferSize` method in favor of `getWantedBufferAhead` method
1441
+ - api: remove `maximumBufferTime` property from `positionUpdate` events
1442
+ - api: remove `getCurrentTime` method
1443
+ - api: remove `asObservable` method
1444
+ - api: remove `loadVideo` option `manifests` in favor of `url` and `keySystems` options
1445
+ - api: remove `loadVideo` option `subtitles` in favor of `supplementaryTextTracks` option
1446
+ - api: remove `loadVideo` option `images` in favor of `supplementaryImageTracks` option
1447
+ - api: remove constructor option `initVideoBitrate` in favor of `initialVideoBitrate` option
1448
+ - api: remove constructor option `initAudioBitrate` in favor of `initialVideoBitrate` option
1449
+ - api: remove constructor option `defaultLanguage` in favor of `defaultAudioTrack` option
1450
+ - api: remove constructor option `defaultSubtitle` in favor of `defaultTextTrack` option
1451
+ - position: remove `subtitleChange` event
1452
+ - position: remove `languageChange` event
1453
+ - position: remove `progress` event
1454
+ - position: remove `currentTimeChange` event in favor of `positionUpdate` event
1455
+ - adaptive: remove `getMetrics` method
1456
+ - adaptive: remove `getAverageBitrates` method
1457
+ - adaptive: remove `getVideoMaxBitrate` method in favor of `getMaxVideoBitrate` method
1458
+ - adaptive: remove `getAudioMaxBitrate` method in favor of `getMaxAudioBitrate` method
1459
+ - errors: remove static method `getErrorTypes` in favor of the static property `errorTypes`
1460
+ - errors: remove static method `getErrorCodes` in favor of the static property `errorCodes`
1461
+ - languages: remove `normalizeLanguageCode` method
1462
+ - languages: remove `getAvailableLanguages` method
1463
+ - languages: remove `getAvailableSubtitles` method
1464
+ - languages: remove `isLanguageAvailable` method
1465
+ - languages: remove `isSubtitleAvailable` method
1466
+ - languages: remove `getLanguage` method
1467
+ - languages: remove `getSubtitle` method
1468
+ - languages: remove `setLanguage` method
1469
+ - languages: remove `setSubtitle` method
1500
1470
 
1501
1471
  ### Bug Fixes:
1502
1472
 
1503
- - dash: fix bug that prevented to play most dash contents with SegmentTemplate-based manifests
1504
- - dash: it's now possible to play SegmentTimeline-based contents with a numbering scheme
1505
- - dash/text: calculate the text track time offset for dynamic DASH contents (prevented most text tracks from live DASH contents to be displayed)
1506
- - eme: fix EME issues when loading multiple videos in IE/Edge
1507
- - api: The state of the player when ready to play with autoPlay === false is now ``"LOADED"`` and not ``"PAUSED"``
1508
- - api: fix infinite loading bug when a new content is synchronously launched as soon as the previous one is ended or fell on error
1509
- - dash: allow absolute BaseURL in Periods
1510
- - languages: avoid excessive re-downloads if a ``supplementaryTextTracks`` is provided and either a ``maxBufferBehind`` or a ``maxBufferAhead`` is set.
1511
- - eme: the ``reason`` for the eme error ``KEY_STATUS_CHANGE_ERROR`` is now correctly filled in
1512
- - eme: do not set widevine robustnesses for non-widevine key systems
1513
- - languages: fix bug which led the text buffer to _crash_ when the ``wantedBufferBehind`` option is set
1514
- - languages: fix bug which led to TextTracks chunks being re-downloaded multiple times
1515
- - speed: fix playback rate bug when setting it while the player is stalled
1516
- - smooth: fix "fallback" callback in the segmentLoader API for smooth contents.
1517
- - smooth: fix some minor risks of infinite rebuffering for live contents, when the isobmff's tfrf box is not well parsed.
1518
- - buffer: avoid infinite player rebuffering when the manifest is not exactly aligned with the real duration of the content
1519
- - buffer: avoid multiple causes of infinite player rebuffering by managing segment garbage collection
1520
- - languages: getAudioTrack now always returns the currently set audio track
1521
- - languages: getTextTrack now always returns the currently set text track
1473
+ - dash: fix bug that prevented to play most dash contents with SegmentTemplate-based manifests
1474
+ - dash: it's now possible to play SegmentTimeline-based contents with a numbering scheme
1475
+ - dash/text: calculate the text track time offset for dynamic DASH contents (prevented most text tracks from live DASH contents to be displayed)
1476
+ - eme: fix EME issues when loading multiple videos in IE/Edge
1477
+ - api: The state of the player when ready to play with autoPlay === false is now `"LOADED"` and not `"PAUSED"`
1478
+ - api: fix infinite loading bug when a new content is synchronously launched as soon as the previous one is ended or fell on error
1479
+ - dash: allow absolute BaseURL in Periods
1480
+ - languages: avoid excessive re-downloads if a `supplementaryTextTracks` is provided and either a `maxBufferBehind` or a `maxBufferAhead` is set.
1481
+ - eme: the `reason` for the eme error `KEY_STATUS_CHANGE_ERROR` is now correctly filled in
1482
+ - eme: do not set widevine robustnesses for non-widevine key systems
1483
+ - languages: fix bug which led the text buffer to _crash_ when the `wantedBufferBehind` option is set
1484
+ - languages: fix bug which led to TextTracks chunks being re-downloaded multiple times
1485
+ - speed: fix playback rate bug when setting it while the player is stalled
1486
+ - smooth: fix "fallback" callback in the segmentLoader API for smooth contents.
1487
+ - smooth: fix some minor risks of infinite rebuffering for live contents, when the isobmff's tfrf box is not well parsed.
1488
+ - buffer: avoid infinite player rebuffering when the manifest is not exactly aligned with the real duration of the content
1489
+ - buffer: avoid multiple causes of infinite player rebuffering by managing segment garbage collection
1490
+ - languages: getAudioTrack now always returns the currently set audio track
1491
+ - languages: getTextTrack now always returns the currently set text track
1522
1492
 
1523
1493
  ### Other improvements
1524
1494
 
1525
- - manifest: improve manifest refreshing logic, by not downloading it when unnecessary
1526
- - smooth: begin to play arround 10s before the live edge instead of 20 seconds for smooth contents
1527
- - network: the backoff algorithm has been refactored for better network error resilience
1528
- - adaptive: improved ABR management to provide a better, faster and more stable bandwidth estimation
1529
- - adaptive: add strategies for abrupt changes of bandwidth to avoid excessive re-buffering on network fluctuations
1530
- - adaptive: the adaptive algorithm now take into account the current playback rate
1531
- - doc: added file architecture documentation
1532
- - tests: fixed and added integration tests
1533
- - demo: the demo now manages most languages defined by in the ISO 639-3 standard
1534
-
1495
+ - manifest: improve manifest refreshing logic, by not downloading it when unnecessary
1496
+ - smooth: begin to play arround 10s before the live edge instead of 20 seconds for smooth contents
1497
+ - network: the backoff algorithm has been refactored for better network error resilience
1498
+ - adaptive: improved ABR management to provide a better, faster and more stable bandwidth estimation
1499
+ - adaptive: add strategies for abrupt changes of bandwidth to avoid excessive re-buffering on network fluctuations
1500
+ - adaptive: the adaptive algorithm now take into account the current playback rate
1501
+ - doc: added file architecture documentation
1502
+ - tests: fixed and added integration tests
1503
+ - demo: the demo now manages most languages defined by in the ISO 639-3 standard
1535
1504
 
1536
1505
  ## v2.3.2 (2017-07-25)
1537
1506
 
1538
1507
  ### Bug Fixes
1539
1508
 
1540
- - eme: update EME workflow to improve support (especially chromebooks)
1541
-
1509
+ - eme: update EME workflow to improve support (especially chromebooks)
1542
1510
 
1543
1511
  ## v2.3.1 (2017-07-10)
1544
1512
 
1545
1513
  ### Bug Fixes
1546
1514
 
1547
- - buffer: improve buffer ranges "bookeeping" logic to avoid re-downloading the same segments
1548
-
1515
+ - buffer: improve buffer ranges "bookeeping" logic to avoid re-downloading the same segments
1549
1516
 
1550
1517
  ## v2.3.0 (2017-07-07)
1551
1518
 
1552
1519
  ### Added
1553
1520
 
1554
- - eme: add audioRobustnesses to loadVideo's keySystems argument (/!\ undocumented API - can break without official notice)
1555
- - eme: add videoRobustnesses to loadVideo's keySystems argument (/!\ undocumented API - can break without official notice)
1556
- - eme: add serverCertificate to loadVideo's keySystems argument
1557
- - buffer: add {set,get}MaxBufferAhead methods
1558
- - buffer: add {set,get}MaxBufferBehind methods
1559
- - buffer: add {set,get}WantedBufferAhead methods replacing the deprecated buffer size methods
1521
+ - eme: add audioRobustnesses to loadVideo's keySystems argument (/!\ undocumented API - can break without official notice)
1522
+ - eme: add videoRobustnesses to loadVideo's keySystems argument (/!\ undocumented API - can break without official notice)
1523
+ - eme: add serverCertificate to loadVideo's keySystems argument
1524
+ - buffer: add {set,get}MaxBufferAhead methods
1525
+ - buffer: add {set,get}MaxBufferBehind methods
1526
+ - buffer: add {set,get}WantedBufferAhead methods replacing the deprecated buffer size methods
1560
1527
 
1561
1528
  ### Deprecated
1562
1529
 
1563
- - setVideoBufferSize has been deprecated in favor of setWantedBufferAhead
1564
- - getVideoBufferSize has been deprecated in favor of getWantedBufferAhead
1565
- - setAudioBufferSize has been deprecated in favor of setWantedBufferAhead
1566
- - getAudioBufferSize has been deprecated in favor of getWantedBufferAhead
1530
+ - setVideoBufferSize has been deprecated in favor of setWantedBufferAhead
1531
+ - getVideoBufferSize has been deprecated in favor of getWantedBufferAhead
1532
+ - setAudioBufferSize has been deprecated in favor of setWantedBufferAhead
1533
+ - getAudioBufferSize has been deprecated in favor of getWantedBufferAhead
1567
1534
 
1568
1535
  ### Bug Fixes
1569
1536
 
1570
- - buffer: avoid some infinite re-buffering by re-calculating buffer ranges at every tick
1571
- - eme: add eme support for some legacy browser without video or audio capabilities
1572
- - general: add support for older browsers (which does not support array.prototype.{find,findIndex,includes})
1573
- - general: use Object.assign ponyfill instead of the previous polyfill to avoid malicious interferences with other codebases
1574
-
1537
+ - buffer: avoid some infinite re-buffering by re-calculating buffer ranges at every tick
1538
+ - eme: add eme support for some legacy browser without video or audio capabilities
1539
+ - general: add support for older browsers (which does not support array.prototype.{find,findIndex,includes})
1540
+ - general: use Object.assign ponyfill instead of the previous polyfill to avoid malicious interferences with other codebases
1575
1541
 
1576
1542
  ## v2.2.1 (2017-06-27)
1577
1543
 
1578
1544
  ### Bug fixes
1579
1545
 
1580
- - adaptive: fix width limitation bug. Impacted limitVideoWidth + setMaxVideoBitrate APIs
1581
-
1546
+ - adaptive: fix width limitation bug. Impacted limitVideoWidth + setMaxVideoBitrate APIs
1582
1547
 
1583
1548
  ## v2.2.0 (2017-06-19)
1584
1549
 
1585
1550
  ### Added
1586
1551
 
1587
- - position: add maximumBufferPosition to the positionUpdate event's payload to replace the previous "liveGap" from currentTimeChange event
1552
+ - position: add maximumBufferPosition to the positionUpdate event's payload to replace the previous "liveGap" from currentTimeChange event
1588
1553
 
1589
1554
  ### Bug fixes
1590
1555
 
1591
- - upgrade to rxjs 5.4.1 to escape memory leak
1592
- - position: "liveGap" from currentTimeChange event now means the difference to the maximum "bufferisable" position to keep compatibility with the old API
1593
-
1556
+ - upgrade to rxjs 5.4.1 to escape memory leak
1557
+ - position: "liveGap" from currentTimeChange event now means the difference to the maximum "bufferisable" position to keep compatibility with the old API
1594
1558
 
1595
1559
  ## v2.1.3 (2017-06-15)
1596
1560
 
1597
1561
  ### Bug fixes
1598
1562
 
1599
- - api: fix timeFragment.start handling
1600
-
1563
+ - api: fix timeFragment.start handling
1601
1564
 
1602
1565
  ## v2.1.2 (2017-06-14)
1603
1566
 
1604
1567
  ### Bug fixes
1605
1568
 
1606
- - stream: the BUFFER_APPEND_ERROR error, happening when a SourceBuffer.appendBuffer failed for an unknown reason, is now a fatal error for audio/video segments
1607
- - eme: fix rxjs timeout management which prevented from playing DRM-protected contents
1608
- - api: add securities to avoid useless errors to be thrown when the player (already) encounter an error
1609
- - position: fix bug which prevented to seek at the beginning of the content with the new api
1610
- - position: fix typo which prevented to perform absolute seeks with the new api
1611
- - buffer: automatically seek if there is discontinuity in a live stream
1612
- - adaptive: take the lowest bitrate (instead of the initial/default one) when the player is not displayed/too small
1613
-
1569
+ - stream: the BUFFER_APPEND_ERROR error, happening when a SourceBuffer.appendBuffer failed for an unknown reason, is now a fatal error for audio/video segments
1570
+ - eme: fix rxjs timeout management which prevented from playing DRM-protected contents
1571
+ - api: add securities to avoid useless errors to be thrown when the player (already) encounter an error
1572
+ - position: fix bug which prevented to seek at the beginning of the content with the new api
1573
+ - position: fix typo which prevented to perform absolute seeks with the new api
1574
+ - buffer: automatically seek if there is discontinuity in a live stream
1575
+ - adaptive: take the lowest bitrate (instead of the initial/default one) when the player is not displayed/too small
1614
1576
 
1615
1577
  ## v2.1.1 (2017-06-02)
1616
1578
 
1617
1579
  ### Bug fixes
1618
1580
 
1619
- - hotfix: fixed rxjs imports
1620
- - hotfix: the player can now be imported through a commonjs require
1621
- - hotfix: the player could not play if the video element's width was too short
1622
- - manifest: segment id were not always the same on a segmentLoader and on the API calls.
1623
- - adaptive: setVideoBitrate now throw a more meaningful error if no content is playing
1624
- - adaptive: setAudioBitrate now throw a more meaningful error if no content is playing
1625
- - language: setSubtitle now throw a more meaningful error if no content is playing
1626
- - language: setLanguage now throw a more meaningful error if no content is playing
1627
- - language: isLanguageAvailable do not throw and return false if no content is playing
1628
- - language: isSubtitleAvailable do not throw and return false if no content is playing
1581
+ - hotfix: fixed rxjs imports
1582
+ - hotfix: the player can now be imported through a commonjs require
1583
+ - hotfix: the player could not play if the video element's width was too short
1584
+ - manifest: segment id were not always the same on a segmentLoader and on the API calls.
1585
+ - adaptive: setVideoBitrate now throw a more meaningful error if no content is playing
1586
+ - adaptive: setAudioBitrate now throw a more meaningful error if no content is playing
1587
+ - language: setSubtitle now throw a more meaningful error if no content is playing
1588
+ - language: setLanguage now throw a more meaningful error if no content is playing
1589
+ - language: isLanguageAvailable do not throw and return false if no content is playing
1590
+ - language: isSubtitleAvailable do not throw and return false if no content is playing
1629
1591
 
1630
1592
  ### Other improvements
1631
1593
 
1632
- - api: deprecated api now only warn once
1633
- - tests: integration tests have been added
1634
- - manifest: the manifest object and the management of its index has been refactored for future improvements
1635
-
1594
+ - api: deprecated api now only warn once
1595
+ - tests: integration tests have been added
1596
+ - manifest: the manifest object and the management of its index has been refactored for future improvements
1636
1597
 
1637
1598
  ## v2.1.0 (2017-05-29)
1638
1599
 
1639
1600
  ### Added
1640
1601
 
1641
- - images/dash: add BIF support in DASH MPD
1642
- - subtitles/smooth: add support for closed captions in smooth manifest
1643
- - subtitles: add closed caption support in supplementaryTextTracks loadVideo arguments
1644
- - position: add getMinimumPosition and getMaximumPosition methods
1645
- - position: add startAt loadVideo argument (replace the timeFragment API)
1646
- - position: add positionUpdate event
1647
- - images: add getImageTrackData method
1648
- - images: add imageTrackUpdate event
1649
- - position: add possibility to use relative, absolute and wall-clock time on seekTo API
1650
- - transport: add segmentLoader transportOption for constructor and loadVideo API
1651
- - api: add setMaxAudioBitrate and setMaxVideoBitrate method
1652
- - api: add exitFullscreen method
1653
- - api: add ErrorTypes and ErrorCodes static properties
1654
- - api: add getPosition method
1655
- - api: add getWallClockTime method
1656
- - manifest: add getCurrentRepresentations method
1657
- - manifest: add getCurrentAdaptations method
1658
- - api: add throttleWhenHidden option to constructor (to disable throttling when the current page is hidden for an extended time)
1659
- - api: add limitVideoWidth option to constructor (to disable throttling to match the video element's width)
1660
- - api: add initialAudioBitrate and initialVideoBitrate to constructor's options
1661
- - api: add defaultTextTrack and defaultAudioTrack to loadVideo and constructor's options
1662
- - languages: add getAvailableAudioTracks method with audio description support
1663
- - languages: add getAvailableTextTracks method with closed caption support
1664
- - languages: add getAudioTrack method with audio description support
1665
- - languages: add getTextTrack method with closed caption support
1666
- - languages: add setAudioTrack method with audio description support
1667
- - languages: add setTextTrack method with closed caption support
1668
- - audiotrack/dash: add audio description support in DASH MPD
1669
- - subtitles/dash: add closed captions support in DASH MPD
1670
- - subtitles/dash: add subtitles support in DASH MPD (only ttml for now)
1602
+ - images/dash: add BIF support in DASH MPD
1603
+ - subtitles/smooth: add support for closed captions in smooth manifest
1604
+ - subtitles: add closed caption support in supplementaryTextTracks loadVideo arguments
1605
+ - position: add getMinimumPosition and getMaximumPosition methods
1606
+ - position: add startAt loadVideo argument (replace the timeFragment API)
1607
+ - position: add positionUpdate event
1608
+ - images: add getImageTrackData method
1609
+ - images: add imageTrackUpdate event
1610
+ - position: add possibility to use relative, absolute and wall-clock time on seekTo API
1611
+ - transport: add segmentLoader transportOption for constructor and loadVideo API
1612
+ - api: add setMaxAudioBitrate and setMaxVideoBitrate method
1613
+ - api: add exitFullscreen method
1614
+ - api: add ErrorTypes and ErrorCodes static properties
1615
+ - api: add getPosition method
1616
+ - api: add getWallClockTime method
1617
+ - manifest: add getCurrentRepresentations method
1618
+ - manifest: add getCurrentAdaptations method
1619
+ - api: add throttleWhenHidden option to constructor (to disable throttling when the current page is hidden for an extended time)
1620
+ - api: add limitVideoWidth option to constructor (to disable throttling to match the video element's width)
1621
+ - api: add initialAudioBitrate and initialVideoBitrate to constructor's options
1622
+ - api: add defaultTextTrack and defaultAudioTrack to loadVideo and constructor's options
1623
+ - languages: add getAvailableAudioTracks method with audio description support
1624
+ - languages: add getAvailableTextTracks method with closed caption support
1625
+ - languages: add getAudioTrack method with audio description support
1626
+ - languages: add getTextTrack method with closed caption support
1627
+ - languages: add setAudioTrack method with audio description support
1628
+ - languages: add setTextTrack method with closed caption support
1629
+ - audiotrack/dash: add audio description support in DASH MPD
1630
+ - subtitles/dash: add closed captions support in DASH MPD
1631
+ - subtitles/dash: add subtitles support in DASH MPD (only ttml for now)
1671
1632
 
1672
1633
  ### Deprecated
1673
1634
 
1674
- - position: the timeFragment API is deprecated (loadVideo's timeFragment argument, getStartTime, getEndTime and goToStart)
1675
- - api: currentTimeChange event is replaced by the positionUpdate event
1676
- - api: progress event is deprecated and not replaced
1677
- - api: getImageTrack is replaced by the imageTrackUpdate event
1678
- - api: loadVideo parameter subtitles is replaced by supplementaryTextTracks
1679
- - api: loadVideo parameter images is replaced by supplementaryImageTracks
1680
- - api: getVideoMaxBitrate is replaced by getMaxVideoBitrate
1681
- - api: getAudioMaxBitrate is replaced by getMaxAudioBitrate
1682
- - api: toggleDebug is deprecated and not replaced
1683
- - api: hideDebug is deprecated and not replaced
1684
- - api: showDebug is deprecated and not replaced
1685
- - api: getDebug is deprecated and not replaced
1686
- - api: asObservable is deprecated and not replaced
1687
- - api: getAverageBitrates is deprecated and not replaced
1688
- - api: getMetrics is deprecated and not replaced
1689
- - position: using seekTo with a Number argument is deprecated.
1690
- - position: getCurrentTime is deprecated in favor of getWallClockTime
1691
- - api: setVideoMaxBitrate is replaced by setMaxVideoBitrate
1692
- - api: setAudioMaxBitrate is replaced by setMaxAudioBitrate
1693
- - api: using setFullscreen(false) is replaced by exitFullscreen
1694
- - api: getErrorTypes method has been deprecated in favor of the ErrorTypes property
1695
- - api: getErrorCodes method has been deprecated in favor of the ErrorCodes property
1696
- - languages: initAudioBitrate option in constructor is deprecated in favor of initialAudioBitrate
1697
- - languages: initVideoBitrate option in constructor is deprecated in favor of initialVideoBitrate
1698
- - languages: defaultSubtitle option in constructor and loadVideo is deprecated in favor of defaultTextTrack
1699
- - languages: defaultLanguage option in constructor and loadVideo is deprecated in favor of defaultAudioTrack
1700
- - languages: getAvailableLanguages is deprecated in favor of getAvailableAudioTracks
1701
- - languages: getAvailableSubtitles is deprecated in favor of getAvailableTextTracks
1702
- - languages: getLanguage is deprecated in favor of getAudioTrack
1703
- - languages: getSubtitle is deprecated in favor of getTextTrack
1704
- - languages: isLanguageAvailable is deprecated and not replaced
1705
- - languages: isSubtitleAvailable is deprecated and not replaced
1706
- - languages: setLanguage is deprecated in favor of setAudioTrack
1707
- - languages: setSubtitle is deprecated in favor of setTextTrack
1635
+ - position: the timeFragment API is deprecated (loadVideo's timeFragment argument, getStartTime, getEndTime and goToStart)
1636
+ - api: currentTimeChange event is replaced by the positionUpdate event
1637
+ - api: progress event is deprecated and not replaced
1638
+ - api: getImageTrack is replaced by the imageTrackUpdate event
1639
+ - api: loadVideo parameter subtitles is replaced by supplementaryTextTracks
1640
+ - api: loadVideo parameter images is replaced by supplementaryImageTracks
1641
+ - api: getVideoMaxBitrate is replaced by getMaxVideoBitrate
1642
+ - api: getAudioMaxBitrate is replaced by getMaxAudioBitrate
1643
+ - api: toggleDebug is deprecated and not replaced
1644
+ - api: hideDebug is deprecated and not replaced
1645
+ - api: showDebug is deprecated and not replaced
1646
+ - api: getDebug is deprecated and not replaced
1647
+ - api: asObservable is deprecated and not replaced
1648
+ - api: getAverageBitrates is deprecated and not replaced
1649
+ - api: getMetrics is deprecated and not replaced
1650
+ - position: using seekTo with a Number argument is deprecated.
1651
+ - position: getCurrentTime is deprecated in favor of getWallClockTime
1652
+ - api: setVideoMaxBitrate is replaced by setMaxVideoBitrate
1653
+ - api: setAudioMaxBitrate is replaced by setMaxAudioBitrate
1654
+ - api: using setFullscreen(false) is replaced by exitFullscreen
1655
+ - api: getErrorTypes method has been deprecated in favor of the ErrorTypes property
1656
+ - api: getErrorCodes method has been deprecated in favor of the ErrorCodes property
1657
+ - languages: initAudioBitrate option in constructor is deprecated in favor of initialAudioBitrate
1658
+ - languages: initVideoBitrate option in constructor is deprecated in favor of initialVideoBitrate
1659
+ - languages: defaultSubtitle option in constructor and loadVideo is deprecated in favor of defaultTextTrack
1660
+ - languages: defaultLanguage option in constructor and loadVideo is deprecated in favor of defaultAudioTrack
1661
+ - languages: getAvailableLanguages is deprecated in favor of getAvailableAudioTracks
1662
+ - languages: getAvailableSubtitles is deprecated in favor of getAvailableTextTracks
1663
+ - languages: getLanguage is deprecated in favor of getAudioTrack
1664
+ - languages: getSubtitle is deprecated in favor of getTextTrack
1665
+ - languages: isLanguageAvailable is deprecated and not replaced
1666
+ - languages: isSubtitleAvailable is deprecated and not replaced
1667
+ - languages: setLanguage is deprecated in favor of setAudioTrack
1668
+ - languages: setSubtitle is deprecated in favor of setTextTrack
1708
1669
 
1709
1670
  ### Bug fixes
1710
1671
 
1711
- - adaptive: fix a bug where it was impossible to switch between multiple videos representations with the same width
1712
- - languages: fix bug where the user could switch to a closed caption track unknowngly
1713
- - languages: fix bug where the user could switch to an audio description track unknowngly
1714
- - manifest: improved and documented getManifest's return value
1715
- - manifest: defined and documented a generic manifest object structure (slowly replacing the old object).
1716
- - images: image playlists are now not re-fetched if the request failed (no retry)
1717
- - dash: lowered security time raising the startup time for SegmentTemplate-based contents
1718
- - api: getLanguage/getSubtitle returns now the language of the last chunk received, not the last set
1719
- - manifest: fixed manifest-refreshing logic (mainly for live contents)
1720
- - dash: fixed support for dash SegmentTimeline-based contents
1721
- - api: differentiate unset default languages from empty strings
1722
- - languages: handle undefined languages (to an empty string)
1723
- - api: allow the player to be instanciated with no option
1724
- - mp4: fix minor bugs with isobmff parsing
1725
- - images: keep externally-given BIF track when the manifest is refreshed
1726
- - timings: fix timeFragment arguments RegExp
1727
- - subtitles: fix webVTT management for unsupported user agents
1728
- - timings: fix calculation of the position and duration for non-dynamic contetns
1672
+ - adaptive: fix a bug where it was impossible to switch between multiple videos representations with the same width
1673
+ - languages: fix bug where the user could switch to a closed caption track unknowngly
1674
+ - languages: fix bug where the user could switch to an audio description track unknowngly
1675
+ - manifest: improved and documented getManifest's return value
1676
+ - manifest: defined and documented a generic manifest object structure (slowly replacing the old object).
1677
+ - images: image playlists are now not re-fetched if the request failed (no retry)
1678
+ - dash: lowered security time raising the startup time for SegmentTemplate-based contents
1679
+ - api: getLanguage/getSubtitle returns now the language of the last chunk received, not the last set
1680
+ - manifest: fixed manifest-refreshing logic (mainly for live contents)
1681
+ - dash: fixed support for dash SegmentTimeline-based contents
1682
+ - api: differentiate unset default languages from empty strings
1683
+ - languages: handle undefined languages (to an empty string)
1684
+ - api: allow the player to be instanciated with no option
1685
+ - mp4: fix minor bugs with isobmff parsing
1686
+ - images: keep externally-given BIF track when the manifest is refreshed
1687
+ - timings: fix timeFragment arguments RegExp
1688
+ - subtitles: fix webVTT management for unsupported user agents
1689
+ - timings: fix calculation of the position and duration for non-dynamic contetns
1729
1690
 
1730
1691
  ### Other improvements
1731
1692
 
1732
- - documentation: The API documentation has been completely rewritten
1733
- - manifest: The DASH manifest handling has been refactored
1734
- - smooth: Smooth index handling has been completely separated from the DASH logic
1735
- - tests: fix and re-wrote unit tests
1736
- - documentation: Code documentation has been added
1737
- - demo: The Demo has been completely rewritten
1738
- - demo: The bundle has been removed from the code committed.
1739
-
1693
+ - documentation: The API documentation has been completely rewritten
1694
+ - manifest: The DASH manifest handling has been refactored
1695
+ - smooth: Smooth index handling has been completely separated from the DASH logic
1696
+ - tests: fix and re-wrote unit tests
1697
+ - documentation: Code documentation has been added
1698
+ - demo: The Demo has been completely rewritten
1699
+ - demo: The bundle has been removed from the code committed.
1740
1700
 
1741
1701
  ## v2.0.0-alpha1 (2016-02-09)
1742
1702
 
1743
- - RxJS: use RxJS5.beta1
1744
- - Promise: remove es6-promise dependency and stop relying completely
1745
- on promises
1703
+ - RxJS: use RxJS5.beta1
1704
+ - Promise: remove es6-promise dependency and stop relying completely
1705
+ on promises
1746
1706
 
1747
- - eme: improve IE11 and Edge support on EME
1748
- - smooth: activate patch in place on non IE targets for less memory allocation
1749
- - player: deprecate directFile api and skip MediaSource assert for directfile
1750
- - player: clone array for getAvailableBitrates methods
1751
- - player: fix when no adaptation or no representation
1752
- - player: record subtitle state as empty string
1753
- - buffer: start with buffer infos to cache infos asap
1754
- - stream: start stalling system after having first metadata
1755
- - refacto: clean pipelined objects and POO where needed
1756
-
1757
- - lint: add new rules (no-var, prefer-const, enforce brackets)
1707
+ - eme: improve IE11 and Edge support on EME
1708
+ - smooth: activate patch in place on non IE targets for less memory allocation
1709
+ - player: deprecate directFile api and skip MediaSource assert for directfile
1710
+ - player: clone array for getAvailableBitrates methods
1711
+ - player: fix when no adaptation or no representation
1712
+ - player: record subtitle state as empty string
1713
+ - buffer: start with buffer infos to cache infos asap
1714
+ - stream: start stalling system after having first metadata
1715
+ - refacto: clean pipelined objects and POO where needed
1758
1716
 
1717
+ - lint: add new rules (no-var, prefer-const, enforce brackets)
1759
1718
 
1760
1719
  ## v1.4.0 (2016-01-26)
1761
1720
 
1762
1721
  ### Added
1763
1722
 
1764
- - buffer: add garbage collector
1765
- - player: emit currentTimeChange synchronously
1766
- - player: add {defaultLanguage,defaultSubtitle} api
1767
- - log: warn to info for some logs
1723
+ - buffer: add garbage collector
1724
+ - player: emit currentTimeChange synchronously
1725
+ - player: add {defaultLanguage,defaultSubtitle} api
1726
+ - log: warn to info for some logs
1768
1727
 
1769
1728
  ### Bug fixes
1770
1729
 
1771
- - player: fix getAvailable* for direct files
1772
- - player: fix subtle race on loadedmetadata after retry
1773
- - eme: remove compat code for old chrome versions with eme flags
1774
- - eme: always ask for temporary session type
1775
- - eme: fix template error message
1776
- - eme: improve persistent license support and compat
1777
- - smooth: fix index timeline if no duration
1778
-
1779
- Demo
1780
- ----
1730
+ - player: fix getAvailable\* for direct files
1731
+ - player: fix subtle race on loadedmetadata after retry
1732
+ - eme: remove compat code for old chrome versions with eme flags
1733
+ - eme: always ask for temporary session type
1734
+ - eme: fix template error message
1735
+ - eme: improve persistent license support and compat
1736
+ - smooth: fix index timeline if no duration
1781
1737
 
1782
- - allow to pass query parameters
1738
+ ## Demo
1783
1739
 
1740
+ - allow to pass query parameters
1784
1741
 
1785
1742
  ## v1.3.1 (2015-10-14)
1786
1743
 
1787
1744
  ### Bug fixes
1788
1745
 
1789
- - smooth: fix parseBoolean causing isLive to be always true
1790
-
1746
+ - smooth: fix parseBoolean causing isLive to be always true
1791
1747
 
1792
1748
  ## v1.3.0 (2015-10-14)
1793
1749
 
1794
1750
  ### Added
1795
1751
 
1796
- - eme: license persistency support
1797
- - timings: add progress sampling
1798
- - compat: add firefox workaround for autoplay
1799
-
1752
+ - eme: license persistency support
1753
+ - timings: add progress sampling
1754
+ - compat: add firefox workaround for autoplay
1800
1755
 
1801
1756
  ## v1.2.1 (2015-09-23)
1802
1757
 
1803
1758
  ### Bug fixes
1804
1759
 
1805
- - stream: do not stall on loadedmetadata event
1806
-
1760
+ - stream: do not stall on loadedmetadata event
1807
1761
 
1808
1762
  ## v1.2.0 (2015-09-23)
1809
1763
 
@@ -1815,41 +1769,38 @@ We also started using eslint as our main linter instead of jshint.
1815
1769
 
1816
1770
  ### Added
1817
1771
 
1818
- - smooth: customizable parser (7b50ce9)
1819
- - smooth: add application/smil as SAMI content-type (e0aa2bb)
1820
- - improve video start time by ticking on loadedmetadata (27bd43c)
1821
- - dash: incremental id from adaptations/representations (c24fecb)
1822
- - stream: discontinuity check on each stalled tick (3a5b796)
1823
-
1772
+ - smooth: customizable parser (7b50ce9)
1773
+ - smooth: add application/smil as SAMI content-type (e0aa2bb)
1774
+ - improve video start time by ticking on loadedmetadata (27bd43c)
1775
+ - dash: incremental id from adaptations/representations (c24fecb)
1776
+ - stream: discontinuity check on each stalled tick (3a5b796)
1824
1777
 
1825
1778
  ### Bug fixes
1826
1779
 
1827
- - fix missing new on Promise (4679632)
1828
- - compat: fix IE11 compat for setMediaKeys (2ccb11f)
1829
- - player: fix synchronous dispose on loadVideo (dc79bd1)
1830
- - pipelines: fix audio/video init segment caches (ea3422f)
1831
- - stream: remove initial seek hack (ae0ac23)
1832
- - player: fix getVideoLoaded/PlayedTime (63bf304)
1833
- - player: fix getUrl (577ce87)
1834
- - manifest: enforce id setting to parsers (927d275)
1835
-
1780
+ - fix missing new on Promise (4679632)
1781
+ - compat: fix IE11 compat for setMediaKeys (2ccb11f)
1782
+ - player: fix synchronous dispose on loadVideo (dc79bd1)
1783
+ - pipelines: fix audio/video init segment caches (ea3422f)
1784
+ - stream: remove initial seek hack (ae0ac23)
1785
+ - player: fix getVideoLoaded/PlayedTime (63bf304)
1786
+ - player: fix getUrl (577ce87)
1787
+ - manifest: enforce id setting to parsers (927d275)
1836
1788
 
1837
1789
  ## v1.1.0 (2015-08-14)
1838
1790
 
1839
1791
  ### Added
1840
1792
 
1841
- - smoothstreaming transport support
1842
- - api for initial aubio/video bitrate choice
1843
- - simplify WebVTT support and implementation
1844
- - allow percentage values on start/end time values
1793
+ - smoothstreaming transport support
1794
+ - api for initial aubio/video bitrate choice
1795
+ - simplify WebVTT support and implementation
1796
+ - allow percentage values on start/end time values
1845
1797
 
1846
1798
  ### Bug fixes
1847
1799
 
1848
- - fix local buffer representation out-of-sync with native ones
1849
- - fix no retry for > 500 http codes
1850
- - fix no MediaKeySession reuse on Chrome
1851
- - fix quota error with MediaKeys attached to multiple video elements on Chrome
1852
-
1800
+ - fix local buffer representation out-of-sync with native ones
1801
+ - fix no retry for > 500 http codes
1802
+ - fix no MediaKeySession reuse on Chrome
1803
+ - fix quota error with MediaKeys attached to multiple video elements on Chrome
1853
1804
 
1854
1805
  ## v1.0.0 (2015-06-16)
1855
1806