rx-player 3.26.2 → 3.26.3-dev.2022021400

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 (218) hide show
  1. package/.github/workflows/perfs.yml +22 -0
  2. package/CHANGELOG.md +19 -1
  3. package/VERSION +1 -1
  4. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +6 -2
  5. package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
  6. package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
  7. package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +1 -1
  8. package/dist/_esm5.processed/core/abr/pending_requests_store.js +3 -5
  9. package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +1 -1
  10. package/dist/_esm5.processed/core/abr/representation_estimator.js +2 -2
  11. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +6 -0
  12. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +20 -3
  13. package/dist/_esm5.processed/core/api/public_api.d.ts +3 -3
  14. package/dist/_esm5.processed/core/api/public_api.js +2 -2
  15. package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +6 -6
  16. package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.d.ts +0 -2
  17. package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.js +5 -10
  18. package/dist/_esm5.processed/core/eme/find_key_system.js +15 -5
  19. package/dist/_esm5.processed/core/eme/types.d.ts +2 -2
  20. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +4 -4
  21. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +1 -1
  22. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +2 -2
  23. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +5 -1
  24. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +1 -1
  25. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +2 -2
  26. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +1 -1
  27. package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
  28. package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
  29. package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +2 -2
  30. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +3 -3
  31. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +32 -31
  32. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +4 -4
  33. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +3 -4
  34. package/dist/_esm5.processed/errors/request_error.js +3 -1
  35. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
  36. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +1 -3
  37. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
  38. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
  39. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
  40. package/dist/_esm5.processed/manifest/adaptation.d.ts +2 -2
  41. package/dist/_esm5.processed/manifest/adaptation.js +3 -1
  42. package/dist/_esm5.processed/manifest/manifest.d.ts +9 -9
  43. package/dist/_esm5.processed/manifest/period.d.ts +3 -3
  44. package/dist/_esm5.processed/manifest/representation.d.ts +2 -2
  45. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +18 -18
  46. package/dist/_esm5.processed/manifest/types.d.ts +3 -3
  47. package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
  48. package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
  49. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +6 -6
  50. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
  51. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -2
  52. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +14 -14
  53. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +17 -17
  54. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
  55. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +28 -20
  56. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +19 -4
  57. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  58. package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
  59. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -35
  60. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +24 -23
  61. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +8 -8
  62. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +18 -27
  63. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +25 -23
  64. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +21 -15
  65. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +19 -19
  66. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -38
  67. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +8 -8
  68. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +30 -30
  69. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +3 -3
  70. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -1
  71. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
  72. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
  73. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
  74. package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
  75. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
  76. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +15 -5
  77. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +2 -2
  78. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.d.ts +11 -1
  79. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +31 -19
  80. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
  81. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
  82. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +2 -1
  83. package/dist/_esm5.processed/transports/dash/image_pipelines.js +1 -1
  84. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
  85. package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
  86. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
  87. package/dist/_esm5.processed/transports/dash/segment_loader.js +2 -2
  88. package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +1 -1
  89. package/dist/_esm5.processed/transports/dash/text_loader.d.ts +1 -1
  90. package/dist/_esm5.processed/transports/dash/text_loader.js +1 -1
  91. package/dist/_esm5.processed/transports/dash/text_parser.d.ts +1 -1
  92. package/dist/_esm5.processed/transports/local/segment_loader.d.ts +1 -2
  93. package/dist/_esm5.processed/transports/local/segment_loader.js +1 -1
  94. package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +1 -1
  95. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
  96. package/dist/_esm5.processed/transports/smooth/pipelines.js +1 -1
  97. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +0 -1
  98. package/dist/_esm5.processed/transports/smooth/segment_loader.js +2 -2
  99. package/dist/_esm5.processed/transports/types.d.ts +36 -30
  100. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
  101. package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +1 -1
  102. package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -1
  103. package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
  104. package/dist/_esm5.processed/utils/cast_to_observable.js +1 -1
  105. package/dist/_esm5.processed/utils/request/fetch.d.ts +4 -5
  106. package/dist/_esm5.processed/utils/request/fetch.js +7 -4
  107. package/dist/_esm5.processed/utils/request/xhr.d.ts +6 -6
  108. package/dist/_esm5.processed/utils/request/xhr.js +2 -1
  109. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +1 -2
  110. package/dist/rx-player.js +404 -321
  111. package/dist/rx-player.min.js +1 -1
  112. package/package.json +3 -4
  113. package/scripts/doc-generator/generate_header_html.js +6 -7
  114. package/scripts/doc-generator/generate_page_html.js +3 -4
  115. package/scripts/doc-generator/generate_page_list_html.js +4 -5
  116. package/scripts/doc-generator/generate_sidebar_html.js +4 -7
  117. package/scripts/doc-generator/utils.js +0 -11
  118. package/scripts/generate_demo_list.js +3 -3
  119. package/scripts/generate_documentation_list.js +3 -3
  120. package/scripts/launch_static_server.js +127 -67
  121. package/scripts/run_standalone_demo.js +1 -0
  122. package/scripts/start_demo_web_server.js +1 -0
  123. package/sonar-project.properties +1 -1
  124. package/src/compat/__tests__/fullscreen.test.ts +7 -7
  125. package/src/compat/__tests__/is_vtt_cue.test.ts +1 -1
  126. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
  127. package/src/compat/eme/custom_media_keys/index.ts +7 -3
  128. package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
  129. package/src/core/abr/buffer_based_chooser.ts +85 -20
  130. package/src/core/abr/network_analyzer.ts +1 -1
  131. package/src/core/abr/pending_requests_store.ts +3 -5
  132. package/src/core/abr/representation_estimator.ts +6 -3
  133. package/src/core/api/media_element_track_choice_manager.ts +22 -3
  134. package/src/core/api/public_api.ts +6 -6
  135. package/src/core/api/track_choice_manager.ts +10 -9
  136. package/src/core/eme/__tests__/__global__/utils.ts +5 -10
  137. package/src/core/eme/find_key_system.ts +14 -12
  138. package/src/core/eme/types.ts +2 -2
  139. package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -5
  140. package/src/core/fetchers/segment/segment_fetcher.ts +6 -3
  141. package/src/core/fetchers/utils/try_urls_with_backoff.ts +1 -1
  142. package/src/core/init/initialize_directfile.ts +2 -2
  143. package/src/core/init/initialize_media_source.ts +2 -2
  144. package/src/core/init/manifest_update_scheduler.ts +7 -7
  145. package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
  146. package/src/core/init/stream_events_emitter/types.ts +2 -2
  147. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +3 -3
  148. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +32 -31
  149. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
  150. package/src/core/stream/representation/force_garbage_collection.ts +3 -5
  151. package/src/errors/request_error.ts +4 -1
  152. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +3 -6
  153. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +1 -1
  154. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
  155. package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
  156. package/src/manifest/adaptation.ts +6 -4
  157. package/src/manifest/manifest.ts +10 -10
  158. package/src/manifest/period.ts +3 -3
  159. package/src/manifest/representation.ts +2 -2
  160. package/src/manifest/representation_index/types.ts +18 -18
  161. package/src/manifest/types.ts +3 -3
  162. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
  163. package/src/parsers/manifest/dash/common/get_hdr_information.ts +1 -1
  164. package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
  165. package/src/parsers/manifest/dash/common/indexes/base.ts +6 -6
  166. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +4 -2
  167. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +2 -2
  168. package/src/parsers/manifest/dash/common/indexes/list.ts +14 -14
  169. package/src/parsers/manifest/dash/common/indexes/template.ts +17 -16
  170. package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
  171. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +50 -22
  172. package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
  173. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
  174. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +58 -70
  175. package/src/parsers/manifest/dash/common/parse_mpd.ts +8 -8
  176. package/src/parsers/manifest/dash/common/parse_periods.ts +80 -79
  177. package/src/parsers/manifest/dash/common/parse_representation_index.ts +83 -75
  178. package/src/parsers/manifest/dash/common/parse_representations.ts +44 -63
  179. package/src/parsers/manifest/dash/node_parser_types.ts +30 -30
  180. package/src/parsers/manifest/dash/parsers_types.ts +3 -3
  181. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -1
  182. package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +4 -4
  183. package/src/parsers/manifest/smooth/create_parser.ts +23 -21
  184. package/src/parsers/manifest/smooth/representation_index.ts +14 -14
  185. package/src/parsers/manifest/types.ts +28 -28
  186. package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +31 -33
  187. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +15 -6
  188. package/src/parsers/manifest/utils/index_helpers.ts +2 -2
  189. package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
  190. package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
  191. package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
  192. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +2 -2
  193. package/src/transports/dash/image_pipelines.ts +1 -1
  194. package/src/transports/dash/init_segment_loader.ts +1 -1
  195. package/src/transports/dash/manifest_parser.ts +1 -1
  196. package/src/transports/dash/segment_loader.ts +7 -7
  197. package/src/transports/dash/segment_parser.ts +3 -1
  198. package/src/transports/dash/text_loader.ts +2 -2
  199. package/src/transports/dash/text_parser.ts +3 -1
  200. package/src/transports/local/segment_loader.ts +4 -4
  201. package/src/transports/metaplaylist/manifest_loader.ts +1 -1
  202. package/src/transports/metaplaylist/pipelines.ts +1 -1
  203. package/src/transports/smooth/pipelines.ts +7 -7
  204. package/src/transports/smooth/segment_loader.ts +8 -8
  205. package/src/transports/types.ts +37 -30
  206. package/src/transports/utils/call_custom_manifest_loader.ts +6 -6
  207. package/src/transports/utils/generate_manifest_loader.ts +1 -1
  208. package/src/utils/__tests__/flat_map.test.ts +12 -7
  209. package/src/utils/cancellable_sleep.ts +1 -1
  210. package/src/utils/cast_to_observable.ts +1 -2
  211. package/src/utils/request/fetch.ts +16 -13
  212. package/src/utils/request/xhr.ts +9 -7
  213. package/src/utils/rx-from_cancellable_promise.ts +1 -2
  214. package/tsconfig.json +1 -2
  215. package/tsconfig.modules.json +1 -2
  216. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
  217. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
  218. package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
@@ -163,13 +163,13 @@ interface IPositionUpdateItem {
163
163
  /** Amount of buffer available for now in front of the current position, in seconds. */
164
164
  bufferGap : number;
165
165
  /** Current maximum seekable position. */
166
- maximumBufferTime? : number;
167
- wallClockTime? : number;
166
+ maximumBufferTime? : number | undefined;
167
+ wallClockTime? : number | undefined;
168
168
  /**
169
169
  * Only for live contents. Difference between the "live edge" and the current
170
170
  * position, in seconds.
171
171
  */
172
- liveGap? : number;
172
+ liveGap? : number | undefined;
173
173
  }
174
174
 
175
175
  /** Payload emitted with a `bitrateEstimationChange` event. */
@@ -321,7 +321,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
321
321
  * URL of the Manifest (or just of the content for DirectFile contents)
322
322
  * currently being played.
323
323
  */
324
- url? : string;
324
+ url : string | undefined;
325
325
 
326
326
  /** Subject allowing to stop playing that content. */
327
327
  stop$ : Subject<void>;
@@ -494,7 +494,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
494
494
  // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
495
495
  videoElement.preload = "auto";
496
496
 
497
- this.version = /* PLAYER_VERSION */"3.26.2";
497
+ this.version = /* PLAYER_VERSION */"3.26.3-dev.2022021400";
498
498
  this.log = log;
499
499
  this.state = "STOPPED";
500
500
  this.videoElement = videoElement;
@@ -2975,7 +2975,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
2975
2975
  return activeRepresentations[currentPeriod.id];
2976
2976
  }
2977
2977
  }
2978
- Player.version = /* PLAYER_VERSION */"3.26.2";
2978
+ Player.version = /* PLAYER_VERSION */"3.26.3-dev.2022021400";
2979
2979
 
2980
2980
  export default Player;
2981
2981
  export { IStreamEventData };
@@ -63,7 +63,7 @@ interface IVideoTrackPreferenceObject {
63
63
  */
64
64
  interface ITMAudioRepresentation { id : string|number;
65
65
  bitrate : number;
66
- codec? : string; }
66
+ codec? : string | undefined; }
67
67
 
68
68
  /** Audio track returned by the TrackChoiceManager. */
69
69
  export interface ITMAudioTrack { language : string;
@@ -85,11 +85,11 @@ export interface ITMTextTrack { language : string;
85
85
  */
86
86
  interface ITMVideoRepresentation { id : string|number;
87
87
  bitrate : number;
88
- width? : number;
89
- height? : number;
90
- codec? : string;
91
- frameRate? : string;
92
- hdrInfo?: IHDRInformation; }
88
+ width? : number | undefined;
89
+ height? : number | undefined;
90
+ codec? : string | undefined;
91
+ frameRate? : string | undefined;
92
+ hdrInfo?: IHDRInformation | undefined; }
93
93
 
94
94
  /** Video track returned by the TrackChoiceManager. */
95
95
  export interface ITMVideoTrack { id : number|string;
@@ -134,10 +134,11 @@ type INormalizedPreferredAudioTrack = null |
134
134
 
135
135
  /** Audio track preference when it is not set to `null`. */
136
136
  interface INormalizedPreferredAudioTrackObject {
137
- normalized? : string;
138
- audioDescription? : boolean;
137
+ normalized? : string | undefined;
138
+ audioDescription? : boolean | undefined;
139
139
  codec? : { all: boolean;
140
- test: RegExp; };
140
+ test: RegExp; } |
141
+ undefined;
141
142
  }
142
143
 
143
144
  /** Text track preference once normalized by the TrackChoiceManager. */
@@ -44,20 +44,15 @@ import {
44
44
 
45
45
  /** Default MediaKeySystemAccess configuration used by the RxPlayer. */
46
46
  export const defaultKSConfig = [{
47
- audioCapabilities: [ { contentType: "audio/mp4;codecs=\"mp4a.40.2\"",
48
- robustness: undefined },
49
- { contentType: "audio/webm;codecs=opus",
50
- robustness: undefined } ],
47
+ audioCapabilities: [ { contentType: "audio/mp4;codecs=\"mp4a.40.2\"" },
48
+ { contentType: "audio/webm;codecs=opus" } ],
51
49
  distinctiveIdentifier: "optional" as const,
52
50
  initDataTypes: ["cenc"] as const,
53
51
  persistentState: "optional" as const,
54
52
  sessionTypes: ["temporary"] as const,
55
- videoCapabilities: [ { contentType: "video/mp4;codecs=\"avc1.4d401e\"",
56
- robustness: undefined },
57
- { contentType: "video/mp4;codecs=\"avc1.42e01e\"",
58
- robustness: undefined },
59
- { contentType: "video/webm;codecs=\"vp8\"",
60
- robustness: undefined } ],
53
+ videoCapabilities: [ { contentType: "video/mp4;codecs=\"avc1.4d401e\"" },
54
+ { contentType: "video/mp4;codecs=\"avc1.42e01e\"" },
55
+ { contentType: "video/webm;codecs=\"vp8\"" } ],
61
56
  }];
62
57
 
63
58
  /** Default Widevine MediaKeySystemAccess configuration used by the RxPlayer. */
@@ -192,21 +192,23 @@ function buildKeySystemConfigurations(
192
192
  // More details here:
193
193
  // https://storage.googleapis.com/wvdocs/Chrome_EME_Changes_and_Best_Practices.pdf
194
194
  // https://www.w3.org/TR/encrypted-media/#get-supported-configuration-and-consent
195
+
195
196
  const videoCapabilities: IMediaCapability[] =
196
- flatMap(videoRobustnesses,
197
- robustness => [{ contentType: "video/mp4;codecs=\"avc1.4d401e\"",
198
- robustness },
199
- { contentType: "video/mp4;codecs=\"avc1.42e01e\"",
200
- robustness },
201
- { contentType: "video/webm;codecs=\"vp8\"",
202
- robustness } ]);
197
+ flatMap(audioRobustnesses, (robustness) =>
198
+ ["video/mp4;codecs=\"avc1.4d401e\"",
199
+ "video/mp4;codecs=\"avc1.42e01e\"",
200
+ "video/webm;codecs=\"vp8\""].map(contentType => {
201
+ return robustness !== undefined ? { contentType, robustness } :
202
+ { contentType };
203
+ }));
203
204
 
204
205
  const audioCapabilities: IMediaCapability[] =
205
- flatMap(audioRobustnesses,
206
- robustness => [{ contentType: "audio/mp4;codecs=\"mp4a.40.2\"",
207
- robustness },
208
- { contentType: "audio/webm;codecs=opus",
209
- robustness } ]);
206
+ flatMap(audioRobustnesses, (robustness) =>
207
+ ["audio/mp4;codecs=\"mp4a.40.2\"",
208
+ "audio/webm;codecs=opus"].map(contentType => {
209
+ return robustness !== undefined ? { contentType, robustness } :
210
+ { contentType };
211
+ }));
210
212
 
211
213
  // TODO Re-test with a set contentType but an undefined robustness on the
212
214
  // STBs on which this problem was found.
@@ -40,7 +40,7 @@ export interface IInitializationDataInfo {
40
40
  * `undefined` when not known (different from an empty array - which would
41
41
  * just mean that there's no key id involved).
42
42
  */
43
- keyIds? : Uint8Array[];
43
+ keyIds? : Uint8Array[] | undefined;
44
44
  /** Every initialization data for that type. */
45
45
  values: Array<{
46
46
  /**
@@ -298,7 +298,7 @@ export interface IContentProtection {
298
298
  * `undefined` when not known (different from an empty array - which would
299
299
  * just mean that there's no key id involved).
300
300
  */
301
- keyIds? : Uint8Array[];
301
+ keyIds? : Uint8Array[] | undefined;
302
302
  /** Every initialization data for that type. */
303
303
  values: Array<{
304
304
  /**
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import PPromise from "pinkie";
18
17
  import {
19
18
  Observable,
20
19
  } from "rxjs";
@@ -31,6 +30,7 @@ import {
31
30
  ITransportPipelines,
32
31
  } from "../../../transports";
33
32
  import assert from "../../../utils/assert";
33
+ import PPromise from "../../../utils/promise";
34
34
  import TaskCanceller from "../../../utils/task_canceller";
35
35
  import errorSelector from "../utils/error_selector";
36
36
  import {
@@ -54,11 +54,11 @@ export interface IManifestFetcherParsedResult {
54
54
  * The time (`performance.now()`) at which the request was started (at which
55
55
  * the JavaScript call was done).
56
56
  */
57
- sendingTime? : number;
57
+ sendingTime? : number | undefined;
58
58
  /** The time (`performance.now()`) at which the request was fully received. */
59
- receivedTime? : number;
59
+ receivedTime? : number | undefined;
60
60
  /* The time taken to parse the Manifest through the corresponding parse function. */
61
- parsingTime? : number;
61
+ parsingTime? : number | undefined;
62
62
  }
63
63
 
64
64
  /** Emitted when a fetching or parsing minor error happened. */
@@ -86,7 +86,7 @@ export interface IManifestFetcherParserOptions {
86
86
  * If set, offset to add to `performance.now()` to obtain the current
87
87
  * server's time.
88
88
  */
89
- externalClockOffset? : number;
89
+ externalClockOffset? : number | undefined;
90
90
  /** The previous value of the Manifest (when updating). */
91
91
  previousManifest : Manifest | null;
92
92
  /**
@@ -119,7 +119,8 @@ export default function createSegmentFetcher<TLoadedFormat, TSegmentDataType>(
119
119
  /**
120
120
  * If the request succeeded, set to the corresponding
121
121
  * `IChunkCompleteInformation` object.
122
- * If the request failed or was cancelled, set to `null`.
122
+ * For any other completion cases: if the request either failed, was
123
+ * cancelled or just if no request was needed, set to `null`.
123
124
  *
124
125
  * Stays to `undefined` when the request is still pending.
125
126
  */
@@ -216,6 +217,8 @@ export default function createSegmentFetcher<TLoadedFormat, TSegmentDataType>(
216
217
  if (res.resultType !== "segment-created") {
217
218
  requestInfo = res.resultData;
218
219
  sendNetworkMetricsIfAvailable();
220
+ } else {
221
+ requestInfo = null;
219
222
  }
220
223
 
221
224
  if (!canceller.isUsed) {
@@ -439,8 +442,8 @@ export function getSegmentFetcherOptions(
439
442
  bufferType : string,
440
443
  { maxRetryRegular,
441
444
  maxRetryOffline,
442
- lowLatencyMode } : { maxRetryRegular? : number;
443
- maxRetryOffline? : number;
445
+ lowLatencyMode } : { maxRetryRegular? : number | undefined;
446
+ maxRetryOffline? : number | undefined;
444
447
  lowLatencyMode : boolean; }
445
448
  ) : ISegmentFetcherOptions {
446
449
  return { maxRetryRegular: bufferType === "image" ? 0 :
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import PPromise from "pinkie";
18
17
  import { isOffline } from "../../../compat";
19
18
  import {
20
19
  CustomLoaderError,
@@ -25,6 +24,7 @@ import {
25
24
  import log from "../../../log";
26
25
  import cancellableSleep from "../../../utils/cancellable_sleep";
27
26
  import getFuzzedDelay from "../../../utils/get_fuzzed_delay";
27
+ import PPromise from "../../../utils/promise";
28
28
  import TaskCanceller, {
29
29
  CancellationSignal,
30
30
  } from "../../../utils/task_canceller";
@@ -100,8 +100,8 @@ export interface IDirectFileOptions { autoPlay : boolean;
100
100
  mediaElement : HTMLMediaElement;
101
101
  playbackObserver : PlaybackObserver;
102
102
  speed : IReadOnlySharedReference<number>;
103
- startAt? : IInitialTimeOptions;
104
- url? : string; }
103
+ startAt? : IInitialTimeOptions | undefined;
104
+ url? : string | undefined; }
105
105
 
106
106
  /**
107
107
  * Launch a content in "Directfile mode".
@@ -127,7 +127,7 @@ export interface IInitializeArguments {
127
127
  /** Emit the playback rate (speed) set by the user. */
128
128
  speed : IReadOnlySharedReference<number>;
129
129
  /** The configured starting position. */
130
- startAt? : IInitialTimeOptions;
130
+ startAt? : IInitialTimeOptions | undefined;
131
131
  /** Configuration specific to the text track. */
132
132
  textTrackOptions : ITextTrackSegmentBufferOptions;
133
133
  }
@@ -237,7 +237,7 @@ export default function InitializeOnMediaSource(
237
237
  * ID identifying the current MediaKeys' system ID. Can be used to only
238
238
  * send initialization data linked to that ID as an optimization measure.
239
239
  */
240
- drmSystemId? : string;
240
+ drmSystemId? : string | undefined;
241
241
  },
242
242
  evt : IEMEManagerEvent | IEMEDisabledEvent
243
243
  ) => {
@@ -48,9 +48,9 @@ export interface IManifestUpdateSchedulerArguments {
48
48
  manifestFetcher : ManifestFetcher;
49
49
  /** Information about the initial load of the manifest */
50
50
  initialManifest : { manifest : Manifest;
51
- sendingTime? : number;
52
- receivedTime? : number;
53
- parsingTime? : number; };
51
+ sendingTime? : number | undefined;
52
+ receivedTime? : number | undefined;
53
+ parsingTime? : number | undefined; };
54
54
  /** Minimum interval to keep between Manifest updates */
55
55
  minimumManifestUpdateInterval : number;
56
56
  /** Allows the rest of the code to ask for a Manifest refresh */
@@ -74,7 +74,7 @@ export interface IManifestRefreshSchedulerEvent {
74
74
  * Optional wanted refresh delay, which is the minimum time you want to wait
75
75
  * before updating the Manifest
76
76
  */
77
- delay? : number;
77
+ delay? : number | undefined;
78
78
  /**
79
79
  * Whether the parsing can be done in the more efficient "unsafeMode".
80
80
  * This mode is extremely fast but can lead to de-synchronisation with the
@@ -127,9 +127,9 @@ export default function manifestUpdateScheduler({
127
127
  * encountered.
128
128
  */
129
129
  function handleManifestRefresh$(
130
- { sendingTime, parsingTime, updatingTime } : { sendingTime?: number;
131
- parsingTime? : number;
132
- updatingTime? : number; }
130
+ { sendingTime, parsingTime, updatingTime } : { sendingTime?: number | undefined;
131
+ parsingTime? : number | undefined;
132
+ updatingTime? : number | undefined; }
133
133
  ) : Observable<IWarningEvent> {
134
134
  /**
135
135
  * Total time taken to fully update the last Manifest, in milliseconds.
@@ -28,12 +28,12 @@
28
28
  * @param {Object} evt2
29
29
  * @returns {Boolean}
30
30
  */
31
- function areSameStreamEvents(evt1: { id?: string;
31
+ function areSameStreamEvents(evt1: { id?: string | undefined;
32
32
  start: number;
33
- end?: number; },
34
- evt2: { id?: string;
33
+ end?: number | undefined; },
34
+ evt2: { id?: string | undefined;
35
35
  start: number;
36
- end?: number; }): boolean {
36
+ end?: number | undefined; }): boolean {
37
37
  return evt1.id === evt2.id &&
38
38
  evt1.start === evt2.start &&
39
39
  evt1.end === evt2.end;
@@ -22,7 +22,7 @@ export interface IStreamEventData {
22
22
  }
23
23
 
24
24
  export interface IStreamEventPayload {
25
- id?: string;
25
+ id?: string | undefined;
26
26
  start: number;
27
27
  end: number;
28
28
  data: IStreamEventData;
@@ -30,7 +30,7 @@ export interface IStreamEventPayload {
30
30
  }
31
31
 
32
32
  export interface INonFiniteStreamEventPayload {
33
- id?: string;
33
+ id?: string | undefined;
34
34
  start: number;
35
35
  data: IStreamEventData;
36
36
  publicEvent: IPublicNonFiniteStreamEvent;
@@ -445,11 +445,11 @@ export interface INativeTextTracksBufferSegmentData {
445
445
  * This is mostly needed for "sami" subtitles, to know which cues can / should
446
446
  * be parsed.
447
447
  */
448
- language? : string;
448
+ language? : string | undefined;
449
449
  /** start time from which the segment apply, in seconds. */
450
- start? : number;
450
+ start? : number | undefined;
451
451
  /** end time until which the segment apply, in seconds. */
452
- end? : number;
452
+ end? : number | undefined;
453
453
  }
454
454
 
455
455
  /**
@@ -63,8 +63,8 @@ export default class TextTrackCuesStore {
63
63
 
64
64
  // begins at the end as most of the time the player will ask for the last
65
65
  // CuesGroup
66
- for (let i = cuesBuffer.length - 1; i >= 0; i--) {
67
- const segment = cuesBuffer[i];
66
+ for (let cueIdx = cuesBuffer.length - 1; cueIdx >= 0; cueIdx--) {
67
+ const segment = cuesBuffer[cueIdx];
68
68
  if (time < segment.end && time >= segment.start) {
69
69
  const cues = segment.cues;
70
70
  for (let j = 0; j < cues.length; j++) {
@@ -92,10 +92,10 @@ export default class TextTrackCuesStore {
92
92
 
93
93
  const to = Math.max(from, _to);
94
94
  const cuesBuffer = this._cuesBuffer;
95
- for (let i = 0; i < cuesBuffer.length; i++) {
96
- if (cuesBuffer[i].end > from) {
95
+ for (let cueIdx = 0; cueIdx < cuesBuffer.length; cueIdx++) {
96
+ if (cuesBuffer[cueIdx].end > from) {
97
97
  // this cuesInfos is concerned by the remove
98
- const startCuesInfos = cuesBuffer[i];
98
+ const startCuesInfos = cuesBuffer[cueIdx];
99
99
  if (startCuesInfos.start >= to) {
100
100
  // our cuesInfos is strictly after this interval, we have nothing to do
101
101
  return;
@@ -112,8 +112,8 @@ export default class TextTrackCuesStore {
112
112
  cuesInfos2 ] = removeCuesInfosBetween(startCuesInfos,
113
113
  from,
114
114
  to);
115
- this._cuesBuffer[i] = cuesInfos1;
116
- cuesBuffer.splice(i + 1, 0, cuesInfos2);
115
+ this._cuesBuffer[cueIdx] = cuesInfos1;
116
+ cuesBuffer.splice(cueIdx + 1, 0, cuesInfos2);
117
117
  }
118
118
  // No cuesInfos can be concerned after this one, we can quit
119
119
  return;
@@ -122,8 +122,8 @@ export default class TextTrackCuesStore {
122
122
  // Else remove all part after `from`
123
123
  if (startCuesInfos.start >= from) {
124
124
  // all the segment is concerned
125
- cuesBuffer.splice(i, 1);
126
- i--; // one less element, we have to decrement the loop
125
+ cuesBuffer.splice(cueIdx, 1);
126
+ cueIdx--; // one less element, we have to decrement the loop
127
127
  } else {
128
128
  // only the end is concerned
129
129
  startCuesInfos.cues = getCuesBefore(startCuesInfos.cues, from);
@@ -207,8 +207,8 @@ export default class TextTrackCuesStore {
207
207
  }
208
208
  }
209
209
 
210
- for (let i = 0; i < cuesBuffer.length; i++) {
211
- let cuesInfos = cuesBuffer[i];
210
+ for (let cueIdx = 0; cueIdx < cuesBuffer.length; cueIdx++) {
211
+ let cuesInfos = cuesBuffer[cueIdx];
212
212
  if (start < cuesInfos.end) {
213
213
  if (areNearlyEqual(start, cuesInfos.start)) {
214
214
  if (areNearlyEqual(end, cuesInfos.end)) {
@@ -218,7 +218,7 @@ export default class TextTrackCuesStore {
218
218
  // Result: |AAAAA|
219
219
  // Which means:
220
220
  // 1. replace the current cue with ours
221
- cuesBuffer[i] = cuesInfosToInsert;
221
+ cuesBuffer[cueIdx] = cuesInfosToInsert;
222
222
  return;
223
223
  } else if (end < cuesInfos.end) {
224
224
  // our cue overlaps with the current one:
@@ -231,7 +231,7 @@ export default class TextTrackCuesStore {
231
231
  // 3. add ours before the current one
232
232
  cuesInfos.cues = getCuesAfter(cuesInfos.cues, end);
233
233
  cuesInfos.start = end;
234
- cuesBuffer.splice(i, 0, cuesInfosToInsert);
234
+ cuesBuffer.splice(cueIdx, 0, cuesInfosToInsert);
235
235
  return;
236
236
  }
237
237
 
@@ -242,10 +242,10 @@ export default class TextTrackCuesStore {
242
242
  // Here we have to delete any cuesInfos which end before ours end,
243
243
  // and see about the following one.
244
244
  do {
245
- cuesBuffer.splice(i, 1);
246
- cuesInfos = cuesBuffer[i];
245
+ cuesBuffer.splice(cueIdx, 1);
246
+ cuesInfos = cuesBuffer[cueIdx];
247
247
  } while (cuesInfos !== undefined && end > cuesInfos.end);
248
- onIndexOfNextCueFound(i);
248
+ onIndexOfNextCueFound(cueIdx);
249
249
  return;
250
250
  } else if (start < cuesInfos.start) {
251
251
  if (end < cuesInfos.start) {
@@ -255,7 +255,7 @@ export default class TextTrackCuesStore {
255
255
  // Result: |AAAAAAA| |BBBB|
256
256
  // Which means:
257
257
  // - add ours before the current one
258
- cuesBuffer.splice(i, 0, cuesInfosToInsert);
258
+ cuesBuffer.splice(cueIdx, 0, cuesInfosToInsert);
259
259
  return;
260
260
  } else if (areNearlyEqual(end, cuesInfos.start)) {
261
261
  // our cue goes just before the current one:
@@ -266,14 +266,14 @@ export default class TextTrackCuesStore {
266
266
  // - update start time of the current one to be sure
267
267
  // - add ours before the current one
268
268
  cuesInfos.start = end;
269
- cuesBuffer.splice(i, 0, cuesInfosToInsert);
269
+ cuesBuffer.splice(cueIdx, 0, cuesInfosToInsert);
270
270
  return;
271
271
  } else if (areNearlyEqual(end, cuesInfos.end)) {
272
272
  // ours: |AAAAAAA|
273
273
  // the current one: |BBBB|
274
274
  // Result: |AAAAAAA|
275
275
  // Replace
276
- cuesBuffer.splice(i, 1, cuesInfosToInsert);
276
+ cuesBuffer.splice(cueIdx, 1, cuesInfosToInsert);
277
277
  return;
278
278
  } else if (end < cuesInfos.end) {
279
279
  // ours: |AAAAAAA|
@@ -281,7 +281,7 @@ export default class TextTrackCuesStore {
281
281
  // Result: |AAAAAAABB|
282
282
  cuesInfos.cues = getCuesAfter(cuesInfos.cues, end);
283
283
  cuesInfos.start = end;
284
- cuesBuffer.splice(i, 0, cuesInfosToInsert);
284
+ cuesBuffer.splice(cueIdx, 0, cuesInfosToInsert);
285
285
  return;
286
286
  }
287
287
 
@@ -289,10 +289,10 @@ export default class TextTrackCuesStore {
289
289
  // the current one: |BBB|...
290
290
  // Result: |AAAAAAA|...
291
291
  do {
292
- cuesBuffer.splice(i, 1);
293
- cuesInfos = cuesBuffer[i];
292
+ cuesBuffer.splice(cueIdx, 1);
293
+ cuesInfos = cuesBuffer[cueIdx];
294
294
  } while (cuesInfos !== undefined && end > cuesInfos.end);
295
- onIndexOfNextCueFound(i);
295
+ onIndexOfNextCueFound(cueIdx);
296
296
  return;
297
297
  }
298
298
  // else -> start > cuesInfos.start
@@ -303,7 +303,7 @@ export default class TextTrackCuesStore {
303
303
  // Result: |BBAAAAAA|
304
304
  cuesInfos.cues = getCuesBefore(cuesInfos.cues, start);
305
305
  cuesInfos.end = start;
306
- cuesBuffer.splice(i + 1, 0, cuesInfosToInsert);
306
+ cuesBuffer.splice(cueIdx + 1, 0, cuesInfosToInsert);
307
307
  return;
308
308
  } else if (cuesInfos.end > end) {
309
309
  // ours: |AAAAAA|
@@ -311,9 +311,9 @@ export default class TextTrackCuesStore {
311
311
  // Result: |BBAAAAAABBB|
312
312
  const [ cuesInfos1,
313
313
  cuesInfos2 ] = removeCuesInfosBetween(cuesInfos, start, end);
314
- this._cuesBuffer[i] = cuesInfos1;
315
- cuesBuffer.splice(i + 1, 0, cuesInfosToInsert);
316
- cuesBuffer.splice(i + 2, 0, cuesInfos2);
314
+ this._cuesBuffer[cueIdx] = cuesInfos1;
315
+ cuesBuffer.splice(cueIdx + 1, 0, cuesInfosToInsert);
316
+ cuesBuffer.splice(cueIdx + 2, 0, cuesInfos2);
317
317
  return;
318
318
  } else {
319
319
  // ours: |AAAAAA|
@@ -322,12 +322,13 @@ export default class TextTrackCuesStore {
322
322
  cuesInfos.cues = getCuesBefore(cuesInfos.cues, start);
323
323
  cuesInfos.end = start;
324
324
 
325
- cuesInfos = cuesBuffer[i + 1];
325
+ const nextCueIdx = cueIdx + 1;
326
+ cuesInfos = cuesBuffer[nextCueIdx];
326
327
  while (cuesInfos !== undefined && end > cuesInfos.end) {
327
- cuesBuffer.splice(i, 1);
328
- cuesInfos = cuesBuffer[i];
328
+ cuesBuffer.splice(nextCueIdx, 1);
329
+ cuesInfos = cuesBuffer[nextCueIdx];
329
330
  }
330
- onIndexOfNextCueFound(i);
331
+ onIndexOfNextCueFound(nextCueIdx);
331
332
  return;
332
333
  }
333
334
  }
@@ -45,7 +45,7 @@ export default class NativeTextSegmentBuffer extends SegmentBuffer {
45
45
 
46
46
  private readonly _videoElement : HTMLMediaElement;
47
47
  private readonly _track : ICompatTextTrack;
48
- private readonly _trackElement? : HTMLTrackElement;
48
+ private readonly _trackElement : HTMLTrackElement | undefined;
49
49
 
50
50
  private _buffered : ManualTimeRanges;
51
51
 
@@ -268,11 +268,11 @@ export interface INativeTextTracksBufferSegmentData {
268
268
  * This is mostly needed for "sami" subtitles, to know which cues can / should
269
269
  * be parsed.
270
270
  */
271
- language? : string;
271
+ language? : string | undefined;
272
272
  /** start time from which the segment apply, in seconds. */
273
- start? : number;
273
+ start? : number | undefined;
274
274
  /** end time until which the segment apply, in seconds. */
275
- end? : number;
275
+ end? : number | undefined;
276
276
  }
277
277
 
278
278
  /**
@@ -84,19 +84,17 @@ function selectGCedRanges(
84
84
 
85
85
  // start by trying to remove all ranges that do not contain the
86
86
  // current time and respect the gcGap
87
- // respect the gcGap? FIXME?
88
87
  for (let i = 0; i < outerRanges.length; i++) {
89
88
  const outerRange = outerRanges[i];
90
- if (position - gcGap < outerRange.end) {
89
+ if (position - gcGap > outerRange.end) {
91
90
  cleanedupRanges.push(outerRange);
92
- }
93
- else if (position + gcGap > outerRange.start) {
91
+ } else if (position + gcGap < outerRange.start) {
94
92
  cleanedupRanges.push(outerRange);
95
93
  }
96
94
  }
97
95
 
98
96
  // try to clean up some space in the current range
99
- if (innerRange != null) {
97
+ if (innerRange !== null) {
100
98
  log.debug("Stream: GC removing part of inner range", cleanedupRanges);
101
99
  if (position - gcGap > innerRange.start) {
102
100
  cleanedupRanges.push({ start: innerRange.start,
@@ -50,7 +50,10 @@ export default class RequestError extends Error {
50
50
 
51
51
  this.name = "RequestError";
52
52
  this.url = url;
53
- this.xhr = xhr;
53
+
54
+ if (xhr !== undefined) {
55
+ this.xhr = xhr;
56
+ }
54
57
  this.status = status;
55
58
  this.type = type;
56
59
  this.message = type;
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import pinkie from "pinkie";
18
17
  import {
19
18
  catchError,
20
19
  combineLatest,
@@ -36,6 +35,7 @@ import createSegmentFetcher, {
36
35
  import log from "../../../log";
37
36
  import { ISegment } from "../../../manifest";
38
37
  import objectAssign from "../../../utils/object_assign";
38
+ import PPromise from "../../../utils/promise";
39
39
  import { freeRequest } from "./create_request";
40
40
  import getCompleteSegmentId from "./get_complete_segment_id";
41
41
  import getContentInfos from "./get_content_infos";
@@ -52,9 +52,6 @@ import {
52
52
  } from "./types";
53
53
  import VideoThumbnailLoaderError from "./video_thumbnail_loader_error";
54
54
 
55
- const PPromise = typeof Promise === "function" ? Promise :
56
- pinkie;
57
-
58
55
  const MIN_NEEDED_DATA_AFTER_TIME = 2;
59
56
 
60
57
  interface ITimeSettingTask { contentInfos: IContentInfos;
@@ -75,8 +72,8 @@ export default class VideoThumbnailLoader {
75
72
  private readonly _videoElement: HTMLVideoElement;
76
73
 
77
74
  private _player: Player;
78
- private _currentTask?: ITimeSettingTask;
79
- private _nextTaskSegmentsCompleteIds?: string[];
75
+ private _currentTask : ITimeSettingTask | undefined;
76
+ private _nextTaskSegmentsCompleteIds : string[] | undefined;
80
77
  constructor(videoElement: HTMLVideoElement,
81
78
  player: Player) {
82
79
  this._videoElement = videoElement;