rx-player 4.0.0-beta.0 → 4.0.0-beta.2

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 (297) hide show
  1. package/.eslintrc.js +8 -0
  2. package/CHANGELOG.md +93 -0
  3. package/CONTRIBUTING.md +48 -168
  4. package/FILES.md +40 -92
  5. package/VERSION +1 -1
  6. package/dist/_esm5.processed/compat/browser_detection.d.ts +25 -12
  7. package/dist/_esm5.processed/compat/browser_detection.js +85 -38
  8. package/dist/_esm5.processed/compat/can_reuse_media_keys.js +2 -2
  9. package/dist/_esm5.processed/compat/eme/close_session.js +2 -2
  10. package/dist/_esm5.processed/compat/eme/load_session.js +1 -1
  11. package/dist/_esm5.processed/compat/event_listeners.js +1 -1
  12. package/dist/_esm5.processed/compat/has_issues_with_high_media_source_duration.d.ts +21 -0
  13. package/dist/_esm5.processed/compat/has_issues_with_high_media_source_duration.js +26 -0
  14. package/dist/_esm5.processed/config.d.ts +4 -0
  15. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +9 -6
  16. package/dist/_esm5.processed/core/adaptive/buffer_based_chooser.d.ts +18 -1
  17. package/dist/_esm5.processed/core/adaptive/buffer_based_chooser.js +106 -25
  18. package/dist/_esm5.processed/core/adaptive/guess_based_chooser.js +6 -6
  19. package/dist/_esm5.processed/core/adaptive/network_analyzer.js +8 -5
  20. package/dist/_esm5.processed/core/adaptive/utils/representation_score_calculator.d.ts +19 -1
  21. package/dist/_esm5.processed/core/adaptive/utils/representation_score_calculator.js +1 -1
  22. package/dist/_esm5.processed/core/api/debug/buffer_graph.d.ts +28 -0
  23. package/dist/_esm5.processed/core/api/debug/buffer_graph.js +175 -0
  24. package/dist/_esm5.processed/core/api/debug/buffer_size_graph.d.ts +10 -0
  25. package/dist/_esm5.processed/core/api/debug/buffer_size_graph.js +104 -0
  26. package/dist/_esm5.processed/core/api/debug/constants.d.ts +2 -0
  27. package/dist/_esm5.processed/core/api/debug/constants.js +2 -0
  28. package/dist/_esm5.processed/core/api/debug/index.d.ts +2 -0
  29. package/dist/_esm5.processed/core/api/debug/index.js +2 -0
  30. package/dist/_esm5.processed/core/api/debug/modules/general_info.d.ts +3 -0
  31. package/dist/_esm5.processed/core/api/debug/modules/general_info.js +180 -0
  32. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.d.ts +4 -0
  33. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +121 -0
  34. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.d.ts +3 -0
  35. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +35 -0
  36. package/dist/_esm5.processed/core/api/debug/render.d.ts +3 -0
  37. package/dist/_esm5.processed/core/api/debug/render.js +32 -0
  38. package/dist/_esm5.processed/core/api/debug/utils.d.ts +39 -0
  39. package/dist/_esm5.processed/core/api/debug/utils.js +57 -0
  40. package/dist/_esm5.processed/core/api/playback_observer.js +4 -2
  41. package/dist/_esm5.processed/core/api/public_api.d.ts +60 -3
  42. package/dist/_esm5.processed/core/api/public_api.js +280 -60
  43. package/dist/_esm5.processed/core/api/track_management/media_element_tracks_store.js +10 -1
  44. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.d.ts +13 -1
  45. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +30 -15
  46. package/dist/_esm5.processed/core/api/track_management/tracks_store.d.ts +3 -1
  47. package/dist/_esm5.processed/core/api/track_management/tracks_store.js +67 -152
  48. package/dist/_esm5.processed/core/api/utils.d.ts +10 -0
  49. package/dist/_esm5.processed/core/api/utils.js +23 -3
  50. package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.d.ts +27 -8
  51. package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.js +28 -7
  52. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +1 -1
  53. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +1 -1
  54. package/dist/_esm5.processed/core/decrypt/find_key_system.js +29 -6
  55. package/dist/_esm5.processed/core/decrypt/session_events_listener.js +42 -32
  56. package/dist/_esm5.processed/core/decrypt/utils/check_key_statuses.js +4 -0
  57. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +2 -0
  58. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +5 -1
  59. package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.d.ts +17 -8
  60. package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.js +10 -6
  61. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +5 -4
  62. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +22 -5
  63. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +37 -21
  64. package/dist/_esm5.processed/core/fetchers/segment/task_prioritizer.js +21 -23
  65. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +17 -7
  66. package/dist/_esm5.processed/core/init/directfile_content_initializer.js +2 -2
  67. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +74 -41
  68. package/dist/_esm5.processed/core/init/types.d.ts +9 -1
  69. package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.d.ts +28 -1
  70. package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.js +24 -11
  71. package/dist/_esm5.processed/core/init/utils/create_media_source.js +3 -12
  72. package/dist/_esm5.processed/core/init/utils/end_of_stream.js +6 -3
  73. package/dist/_esm5.processed/core/init/utils/get_loaded_reference.js +2 -1
  74. package/dist/_esm5.processed/core/init/utils/initial_seek_and_play.js +9 -5
  75. package/dist/_esm5.processed/core/init/utils/initialize_content_decryption.js +2 -1
  76. package/dist/_esm5.processed/core/init/utils/media_source_duration_updater.d.ts +58 -0
  77. package/dist/_esm5.processed/core/init/utils/{media_duration_updater.js → media_source_duration_updater.js} +87 -86
  78. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.d.ts +36 -2
  79. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +83 -3
  80. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/stream_events_emitter.js +6 -4
  81. package/dist/_esm5.processed/core/init/utils/throw_on_media_error.js +1 -1
  82. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.d.ts +18 -7
  83. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +38 -50
  84. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +8 -0
  85. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +16 -2
  86. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +8 -0
  87. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +12 -0
  88. package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +11 -4
  89. package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
  90. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +13 -9
  91. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +30 -16
  92. package/dist/_esm5.processed/core/stream/adaptation/utils/create_representation_estimator.d.ts +47 -0
  93. package/dist/_esm5.processed/core/stream/adaptation/utils/create_representation_estimator.js +70 -0
  94. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +41 -20
  95. package/dist/_esm5.processed/core/stream/period/period_stream.js +12 -11
  96. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +37 -28
  97. package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.d.ts +4 -2
  98. package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.js +3 -3
  99. package/dist/_esm5.processed/core/stream/representation/utils/downloading_queue.js +16 -6
  100. package/dist/_esm5.processed/core/stream/representation/utils/push_init_segment.d.ts +3 -2
  101. package/dist/_esm5.processed/core/stream/representation/utils/push_init_segment.js +8 -8
  102. package/dist/_esm5.processed/core/stream/representation/utils/push_media_segment.d.ts +2 -2
  103. package/dist/_esm5.processed/core/stream/representation/utils/push_media_segment.js +2 -3
  104. package/dist/_esm5.processed/core/stream/utils/create_reload_request.js +1 -1
  105. package/dist/_esm5.processed/default_config.d.ts +41 -0
  106. package/dist/_esm5.processed/default_config.js +46 -2
  107. package/dist/_esm5.processed/errors/index.d.ts +2 -2
  108. package/dist/_esm5.processed/errors/media_error.d.ts +23 -1
  109. package/dist/_esm5.processed/errors/media_error.js +18 -5
  110. package/dist/_esm5.processed/experimental/features/debug_element.d.ts +8 -0
  111. package/dist/_esm5.processed/experimental/features/debug_element.js +10 -0
  112. package/dist/_esm5.processed/experimental/features/index.d.ts +1 -0
  113. package/dist/_esm5.processed/experimental/features/index.js +1 -0
  114. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_and_push_segment.d.ts +1 -1
  115. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_and_push_segment.js +8 -7
  116. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +7 -4
  117. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +24 -12
  118. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/index.js +0 -2
  119. package/dist/_esm5.processed/features/features_object.js +1 -0
  120. package/dist/_esm5.processed/features/initialize_features.js +13 -10
  121. package/dist/_esm5.processed/features/types.d.ts +3 -0
  122. package/dist/_esm5.processed/manifest/adaptation.d.ts +21 -2
  123. package/dist/_esm5.processed/manifest/adaptation.js +80 -1
  124. package/dist/_esm5.processed/manifest/manifest.js +2 -0
  125. package/dist/_esm5.processed/manifest/period.js +2 -2
  126. package/dist/_esm5.processed/manifest/representation.d.ts +33 -2
  127. package/dist/_esm5.processed/manifest/representation.js +32 -4
  128. package/dist/_esm5.processed/manifest/utils.js +1 -3
  129. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +105 -137
  130. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +25 -5
  131. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.d.ts +1 -1
  132. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +1 -1
  133. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -0
  134. package/dist/_esm5.processed/public_types.d.ts +13 -3
  135. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +1 -1
  136. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +15 -11
  137. package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +2 -2
  138. package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
  139. package/dist/_esm5.processed/transports/dash/segment_loader.js +4 -4
  140. package/dist/_esm5.processed/transports/local/segment_loader.js +13 -26
  141. package/dist/_esm5.processed/transports/smooth/isobmff/create_boxes.d.ts +4 -6
  142. package/dist/_esm5.processed/transports/smooth/isobmff/create_boxes.js +4 -6
  143. package/dist/_esm5.processed/transports/smooth/segment_loader.js +4 -4
  144. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
  145. package/dist/_esm5.processed/utils/cancellable_sleep.js +4 -10
  146. package/dist/_esm5.processed/utils/create_cancellable_promise.d.ts +26 -0
  147. package/dist/_esm5.processed/utils/create_cancellable_promise.js +52 -0
  148. package/dist/_esm5.processed/utils/is_null_or_undefined.d.ts +1 -1
  149. package/dist/_esm5.processed/utils/is_null_or_undefined.js +1 -1
  150. package/dist/_esm5.processed/utils/reference.js +6 -0
  151. package/dist/_esm5.processed/utils/request/xhr.js +1 -1
  152. package/dist/_esm5.processed/utils/task_canceller.d.ts +34 -15
  153. package/dist/_esm5.processed/utils/task_canceller.js +55 -22
  154. package/dist/mpd-parser.wasm +0 -0
  155. package/dist/rx-player.js +5424 -4712
  156. package/dist/rx-player.min.js +1 -1
  157. package/jest.config.js +1 -5
  158. package/package.json +44 -40
  159. package/scripts/build/constants.d.ts +1 -0
  160. package/scripts/build/generate_build.js +1 -1
  161. package/scripts/fast_demo_build.js +40 -40
  162. package/scripts/generate_full_demo.js +1 -1
  163. package/sonar-project.properties +1 -1
  164. package/src/compat/browser_detection.ts +105 -52
  165. package/src/compat/can_reuse_media_keys.ts +5 -2
  166. package/src/compat/eme/close_session.ts +2 -2
  167. package/src/compat/eme/load_session.ts +1 -1
  168. package/src/compat/event_listeners.ts +1 -1
  169. package/src/compat/has_issues_with_high_media_source_duration.ts +27 -0
  170. package/src/core/adaptive/__tests__/buffer_based_chooser.test.ts +147 -48
  171. package/src/core/adaptive/adaptive_representation_selector.ts +11 -6
  172. package/src/core/adaptive/buffer_based_chooser.ts +144 -26
  173. package/src/core/adaptive/guess_based_chooser.ts +9 -8
  174. package/src/core/adaptive/network_analyzer.ts +9 -4
  175. package/src/core/adaptive/utils/representation_score_calculator.ts +22 -2
  176. package/src/core/api/debug/buffer_graph.ts +247 -0
  177. package/src/core/api/debug/buffer_size_graph.ts +130 -0
  178. package/src/core/api/debug/constants.ts +2 -0
  179. package/src/core/api/debug/index.ts +3 -0
  180. package/src/core/api/debug/modules/general_info.ts +184 -0
  181. package/src/core/api/debug/modules/segment_buffer_content.ts +155 -0
  182. package/src/core/api/debug/modules/segment_buffer_size.ts +48 -0
  183. package/src/core/api/debug/render.ts +40 -0
  184. package/src/core/api/debug/utils.ts +103 -0
  185. package/src/core/api/playback_observer.ts +5 -2
  186. package/src/core/api/public_api.ts +334 -73
  187. package/src/core/api/track_management/media_element_tracks_store.ts +17 -8
  188. package/src/core/api/track_management/track_dispatcher.ts +37 -14
  189. package/src/core/api/track_management/tracks_store.ts +77 -167
  190. package/src/core/api/utils.ts +29 -3
  191. package/src/core/decrypt/__tests__/__global__/utils.ts +61 -40
  192. package/src/core/decrypt/attach_media_keys.ts +1 -1
  193. package/src/core/decrypt/content_decryptor.ts +1 -1
  194. package/src/core/decrypt/find_key_system.ts +25 -11
  195. package/src/core/decrypt/session_events_listener.ts +45 -39
  196. package/src/core/decrypt/utils/check_key_statuses.ts +6 -0
  197. package/src/core/decrypt/utils/clean_old_loaded_sessions.ts +2 -1
  198. package/src/core/decrypt/utils/loaded_sessions_store.ts +8 -1
  199. package/src/core/fetchers/cdn_prioritizer.ts +18 -9
  200. package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -4
  201. package/src/core/fetchers/segment/segment_fetcher.ts +36 -14
  202. package/src/core/fetchers/segment/task_prioritizer.ts +25 -30
  203. package/src/core/fetchers/utils/schedule_request.ts +18 -7
  204. package/src/core/init/directfile_content_initializer.ts +2 -1
  205. package/src/core/init/media_source_content_initializer.ts +89 -50
  206. package/src/core/init/types.ts +9 -1
  207. package/src/core/init/utils/content_time_boundaries_observer.ts +48 -12
  208. package/src/core/init/utils/create_media_source.ts +4 -16
  209. package/src/core/init/utils/end_of_stream.ts +6 -3
  210. package/src/core/init/utils/get_loaded_reference.ts +2 -1
  211. package/src/core/init/utils/initial_seek_and_play.ts +9 -5
  212. package/src/core/init/utils/initialize_content_decryption.ts +2 -1
  213. package/src/core/init/utils/{media_duration_updater.ts → media_source_duration_updater.ts} +103 -110
  214. package/src/core/init/utils/rebuffering_controller.ts +115 -4
  215. package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +6 -4
  216. package/src/core/init/utils/throw_on_media_error.ts +1 -1
  217. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +63 -66
  218. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +20 -2
  219. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +16 -0
  220. package/src/core/segment_buffers/implementations/types.ts +16 -4
  221. package/src/core/segment_buffers/index.ts +2 -0
  222. package/src/core/segment_buffers/segment_buffers_store.ts +16 -13
  223. package/src/core/stream/adaptation/adaptation_stream.ts +33 -19
  224. package/src/core/stream/adaptation/utils/create_representation_estimator.ts +114 -0
  225. package/src/core/stream/orchestrator/stream_orchestrator.ts +42 -20
  226. package/src/core/stream/period/period_stream.ts +13 -11
  227. package/src/core/stream/representation/representation_stream.ts +49 -37
  228. package/src/core/stream/representation/utils/append_segment_to_buffer.ts +9 -4
  229. package/src/core/stream/representation/utils/downloading_queue.ts +16 -4
  230. package/src/core/stream/representation/utils/push_init_segment.ts +11 -6
  231. package/src/core/stream/representation/utils/push_media_segment.ts +3 -3
  232. package/src/core/stream/utils/create_reload_request.ts +1 -1
  233. package/src/default_config.ts +59 -11
  234. package/src/errors/__tests__/media_error.test.ts +6 -6
  235. package/src/errors/index.ts +4 -1
  236. package/src/errors/media_error.ts +67 -1
  237. package/src/experimental/features/__tests__/debug_element.test.ts +26 -0
  238. package/src/experimental/features/debug_element.ts +13 -0
  239. package/src/experimental/features/index.ts +1 -0
  240. package/src/experimental/tools/VideoThumbnailLoader/load_and_push_segment.ts +10 -7
  241. package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +7 -4
  242. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +25 -10
  243. package/src/experimental/tools/mediaCapabilitiesProber/index.ts +0 -4
  244. package/src/features/__tests__/initialize_features.test.ts +11 -0
  245. package/src/features/features_object.ts +1 -0
  246. package/src/features/initialize_features.ts +15 -10
  247. package/src/features/types.ts +9 -0
  248. package/src/manifest/__tests__/manifest.test.ts +7 -7
  249. package/src/manifest/__tests__/period.test.ts +90 -45
  250. package/src/manifest/adaptation.ts +96 -1
  251. package/src/manifest/manifest.ts +4 -0
  252. package/src/manifest/period.ts +4 -2
  253. package/src/manifest/representation.ts +77 -5
  254. package/src/manifest/utils.ts +1 -3
  255. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +116 -151
  256. package/src/parsers/manifest/dash/common/parse_representations.ts +21 -4
  257. package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +1 -1
  258. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -0
  259. package/src/parsers/texttracks/ttml/parse_ttml.ts +1 -1
  260. package/src/public_types.ts +16 -1
  261. package/src/tools/TextTrackRenderer/text_track_renderer.ts +1 -1
  262. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +31 -22
  263. package/src/transports/dash/low_latency_segment_loader.ts +2 -2
  264. package/src/transports/dash/manifest_parser.ts +1 -1
  265. package/src/transports/dash/segment_loader.ts +4 -4
  266. package/src/transports/local/segment_loader.ts +14 -30
  267. package/src/transports/smooth/isobmff/create_boxes.ts +4 -6
  268. package/src/transports/smooth/segment_loader.ts +4 -4
  269. package/src/transports/utils/call_custom_manifest_loader.ts +3 -3
  270. package/src/typings/globals.d.ts +21 -19
  271. package/src/utils/cancellable_sleep.ts +5 -14
  272. package/src/utils/create_cancellable_promise.ts +69 -0
  273. package/src/utils/is_null_or_undefined.ts +1 -1
  274. package/src/utils/reference.ts +6 -0
  275. package/src/utils/request/xhr.ts +1 -1
  276. package/src/utils/task_canceller.ts +63 -34
  277. package/tsconfig.json +1 -1
  278. package/tsconfig.modules.json +1 -1
  279. package/dist/_esm5.processed/core/init/utils/media_duration_updater.d.ts +0 -56
  280. package/locked_reps.js +0 -46
  281. package/scripts/doc-generator/construct_table_of_contents.js +0 -76
  282. package/scripts/doc-generator/convert_MD_to_HMTL.js +0 -26
  283. package/scripts/doc-generator/create_documentation.js +0 -331
  284. package/scripts/doc-generator/create_documentation_page.js +0 -209
  285. package/scripts/doc-generator/create_page.js +0 -210
  286. package/scripts/doc-generator/generate_header_html.js +0 -147
  287. package/scripts/doc-generator/generate_page_html.js +0 -115
  288. package/scripts/doc-generator/generate_page_list_html.js +0 -92
  289. package/scripts/doc-generator/generate_sidebar_html.js +0 -85
  290. package/scripts/doc-generator/get_search_data_for_content.js +0 -137
  291. package/scripts/doc-generator/index.js +0 -34
  292. package/scripts/doc-generator/parse_doc_configs.js +0 -327
  293. package/scripts/doc-generator/scripts/lunr.js +0 -10
  294. package/scripts/doc-generator/scripts/script.js +0 -451
  295. package/scripts/doc-generator/styles/code.css +0 -99
  296. package/scripts/doc-generator/styles/style.css +0 -835
  297. package/scripts/doc-generator/utils.js +0 -74
@@ -65,14 +65,14 @@ export default function lowLatencySegmentLoader(
65
65
  partialChunk = res[1];
66
66
  for (let i = 0; i < completeChunks.length; i++) {
67
67
  callbacks.onNewChunk(completeChunks[i]);
68
- if (cancelSignal.isCancelled) {
68
+ if (cancelSignal.isCancelled()) {
69
69
  return;
70
70
  }
71
71
  }
72
72
  callbacks.onProgress({ duration: info.duration,
73
73
  size: info.size,
74
74
  totalSize: info.totalSize });
75
- if (cancelSignal.isCancelled) {
75
+ if (cancelSignal.isCancelled()) {
76
76
  return;
77
77
  }
78
78
  }
@@ -136,7 +136,7 @@ export default function generateManifestParser(
136
136
  if (parserResponse.value.warnings.length > 0) {
137
137
  onWarnings(parserResponse.value.warnings);
138
138
  }
139
- if (cancelSignal.isCancelled) {
139
+ if (cancelSignal.isCancelled()) {
140
140
  return Promise.reject(cancelSignal.cancellationError);
141
141
  }
142
142
  const manifest = new Manifest(parserResponse.value.parsed, options);
@@ -150,7 +150,7 @@ export default function generateSegmentLoader(
150
150
  size? : number | undefined;
151
151
  duration? : number | undefined; }
152
152
  ) => {
153
- if (hasFinished || cancelSignal.isCancelled) {
153
+ if (hasFinished || cancelSignal.isCancelled()) {
154
154
  return;
155
155
  }
156
156
  hasFinished = true;
@@ -166,7 +166,7 @@ export default function generateSegmentLoader(
166
166
  * @param {*} err - The corresponding error encountered
167
167
  */
168
168
  const reject = (err : unknown) : void => {
169
- if (hasFinished || cancelSignal.isCancelled) {
169
+ if (hasFinished || cancelSignal.isCancelled()) {
170
170
  return;
171
171
  }
172
172
  hasFinished = true;
@@ -190,7 +190,7 @@ export default function generateSegmentLoader(
190
190
  size : number;
191
191
  totalSize? : number | undefined; }
192
192
  ) => {
193
- if (hasFinished || cancelSignal.isCancelled) {
193
+ if (hasFinished || cancelSignal.isCancelled()) {
194
194
  return;
195
195
  }
196
196
  callbacks.onProgress({ duration: _args.duration,
@@ -203,7 +203,7 @@ export default function generateSegmentLoader(
203
203
  * the "regular" implementation
204
204
  */
205
205
  const fallback = () => {
206
- if (hasFinished || cancelSignal.isCancelled) {
206
+ if (hasFinished || cancelSignal.isCancelled()) {
207
207
  return;
208
208
  }
209
209
  hasFinished = true;
@@ -20,11 +20,9 @@ import {
20
20
  ILocalManifestInitSegmentLoader,
21
21
  ILocalManifestSegmentLoader,
22
22
  } from "../../parsers/manifest/local";
23
+ import createCancellablePromise from "../../utils/create_cancellable_promise";
23
24
  import isNullOrUndefined from "../../utils/is_null_or_undefined";
24
- import {
25
- CancellationError,
26
- CancellationSignal,
27
- } from "../../utils/task_canceller";
25
+ import { CancellationSignal } from "../../utils/task_canceller";
28
26
  import {
29
27
  ISegmentContext,
30
28
  ISegmentLoaderCallbacks,
@@ -41,7 +39,7 @@ function loadInitSegment(
41
39
  customSegmentLoader : ILocalManifestInitSegmentLoader,
42
40
  cancelSignal : CancellationSignal
43
41
  ) : Promise<ISegmentLoaderResultSegmentLoaded<ArrayBuffer | null>> {
44
- return new Promise((res, rej) => {
42
+ return createCancellablePromise(cancelSignal, (res, rej) => {
45
43
  /** `true` when the custom segmentLoader should not be active anymore. */
46
44
  let hasFinished = false;
47
45
 
@@ -54,11 +52,10 @@ function loadInitSegment(
54
52
  size? : number;
55
53
  duration? : number;
56
54
  }) => {
57
- if (hasFinished || cancelSignal.isCancelled) {
55
+ if (hasFinished || cancelSignal.isCancelled()) {
58
56
  return;
59
57
  }
60
58
  hasFinished = true;
61
- cancelSignal.deregister(abortLoader);
62
59
  res({ resultType: "segment-loaded",
63
60
  resultData: { responseData: _args.data,
64
61
  size: _args.size,
@@ -70,22 +67,17 @@ function loadInitSegment(
70
67
  * @param {*} err - The corresponding error encountered
71
68
  */
72
69
  const reject = (err? : Error) => {
73
- if (hasFinished || cancelSignal.isCancelled) {
70
+ if (hasFinished || cancelSignal.isCancelled()) {
74
71
  return;
75
72
  }
76
73
  hasFinished = true;
77
- cancelSignal.deregister(abortLoader);
78
74
  rej(err);
79
75
  };
80
76
 
81
77
  const abort = customSegmentLoader({ resolve, reject });
82
78
 
83
- cancelSignal.register(abortLoader);
84
- /**
85
- * The logic to run when this loader is cancelled while pending.
86
- * @param {Error} err
87
- */
88
- function abortLoader(err : CancellationError) {
79
+ /** The logic to run when this loader is cancelled while pending. */
80
+ return () => {
89
81
  if (hasFinished) {
90
82
  return;
91
83
  }
@@ -93,8 +85,7 @@ function loadInitSegment(
93
85
  if (typeof abort === "function") {
94
86
  abort();
95
87
  }
96
- rej(err);
97
- }
88
+ };
98
89
  });
99
90
  }
100
91
 
@@ -109,7 +100,7 @@ function loadSegment(
109
100
  customSegmentLoader : ILocalManifestSegmentLoader,
110
101
  cancelSignal : CancellationSignal
111
102
  ) : Promise< ISegmentLoaderResultSegmentLoaded<ArrayBuffer | null>> {
112
- return new Promise((res, rej) => {
103
+ return createCancellablePromise(cancelSignal, (res, rej) => {
113
104
  /** `true` when the custom segmentLoader should not be active anymore. */
114
105
  let hasFinished = false;
115
106
 
@@ -122,11 +113,10 @@ function loadSegment(
122
113
  size? : number;
123
114
  duration? : number;
124
115
  }) => {
125
- if (hasFinished || cancelSignal.isCancelled) {
116
+ if (hasFinished || cancelSignal.isCancelled()) {
126
117
  return;
127
118
  }
128
119
  hasFinished = true;
129
- cancelSignal.deregister(abortLoader);
130
120
  res({ resultType: "segment-loaded",
131
121
  resultData: { responseData: _args.data,
132
122
  size: _args.size,
@@ -138,11 +128,10 @@ function loadSegment(
138
128
  * @param {*} err - The corresponding error encountered
139
129
  */
140
130
  const reject = (err? : Error) => {
141
- if (hasFinished || cancelSignal.isCancelled) {
131
+ if (hasFinished || cancelSignal.isCancelled()) {
142
132
  return;
143
133
  }
144
134
  hasFinished = true;
145
- cancelSignal.deregister(abortLoader);
146
135
 
147
136
  // Format error and send it
148
137
  const castedErr = err as (null | undefined | { message? : string;
@@ -159,12 +148,8 @@ function loadSegment(
159
148
 
160
149
  const abort = customSegmentLoader(segment, { resolve, reject });
161
150
 
162
- cancelSignal.register(abortLoader);
163
- /**
164
- * The logic to run when this loader is cancelled while pending.
165
- * @param {Error} err
166
- */
167
- function abortLoader(err : CancellationError) {
151
+ /** The logic to run when this loader is cancelled while pending. */
152
+ return () => {
168
153
  if (hasFinished) {
169
154
  return;
170
155
  }
@@ -172,8 +157,7 @@ function loadSegment(
172
157
  if (typeof abort === "function") {
173
158
  abort();
174
159
  }
175
- rej(err);
176
- }
160
+ };
177
161
  });
178
162
  }
179
163
 
@@ -33,7 +33,7 @@ import {
33
33
  * @param {Number} height
34
34
  * @param {Number} hRes - horizontal resolution, eg 72
35
35
  * @param {Number} vRes - vertical resolution, eg 72
36
- * @param {string} encDepth
36
+ * @param {string} encName
37
37
  * @param {Number} colorDepth - eg 24
38
38
  * @param {Uint8Array} avcc - Uint8Array representing the avcC atom
39
39
  * @returns {Uint8Array}
@@ -68,7 +68,7 @@ function createAVC1Box(
68
68
  * @param {Number} height
69
69
  * @param {Number} hRes - horizontal resolution, eg 72
70
70
  * @param {Number} vRes - vertical resolution, eg 72
71
- * @param {string} encDepth
71
+ * @param {string} encName
72
72
  * @param {Number} colorDepth - eg 24
73
73
  * @param {Uint8Array} avcc - Uint8Array representing the avcC atom
74
74
  * @param {Uint8Array} sinf - Uint8Array representing the sinf atom
@@ -108,8 +108,6 @@ function createENCVBox(
108
108
  * @param {Number} packetSize
109
109
  * @param {Number} sampleRate
110
110
  * @param {Uint8Array} esds - Uint8Array representing the esds atom
111
- * @param {Uint8Array} [sinf] - Uint8Array representing the sinf atom,
112
- * only if name == "enca"
113
111
  * @returns {Uint8Array}
114
112
  */
115
113
  function createMP4ABox(
@@ -164,7 +162,7 @@ function createENCABox(
164
162
  }
165
163
 
166
164
  /**
167
- * @param {url} Uint8Array
165
+ * @param {Uint8Array} url
168
166
  * @returns {Uint8Array}
169
167
  */
170
168
  function createDREFBox(url : Uint8Array) : Uint8Array {
@@ -415,7 +413,7 @@ function createSMHDBox() : Uint8Array {
415
413
  }
416
414
 
417
415
  /**
418
- * @param {Array.<Uint8Array>} representations - arrays of Uint8Array,
416
+ * @param {Array.<Uint8Array>} reps - arrays of Uint8Array,
419
417
  * typically [avc1] or [encv, avc1]
420
418
  * @returns {Uint8Array}
421
419
  */
@@ -177,7 +177,7 @@ const generateSegmentLoader = ({
177
177
  size? : number | undefined;
178
178
  duration? : number | undefined;
179
179
  }) => {
180
- if (hasFinished || cancelSignal.isCancelled) {
180
+ if (hasFinished || cancelSignal.isCancelled()) {
181
181
  return;
182
182
  }
183
183
  hasFinished = true;
@@ -205,7 +205,7 @@ const generateSegmentLoader = ({
205
205
  * @param {*} err - The corresponding error encountered
206
206
  */
207
207
  const reject = (err : unknown) => {
208
- if (hasFinished || cancelSignal.isCancelled) {
208
+ if (hasFinished || cancelSignal.isCancelled()) {
209
209
  return;
210
210
  }
211
211
  hasFinished = true;
@@ -229,7 +229,7 @@ const generateSegmentLoader = ({
229
229
  size : number;
230
230
  totalSize? : number | undefined; }
231
231
  ) => {
232
- if (hasFinished || cancelSignal.isCancelled) {
232
+ if (hasFinished || cancelSignal.isCancelled()) {
233
233
  return;
234
234
  }
235
235
  callbacks.onProgress({ duration: _args.duration,
@@ -238,7 +238,7 @@ const generateSegmentLoader = ({
238
238
  };
239
239
 
240
240
  const fallback = () => {
241
- if (hasFinished || cancelSignal.isCancelled) {
241
+ if (hasFinished || cancelSignal.isCancelled()) {
242
242
  return;
243
243
  }
244
244
  hasFinished = true;
@@ -62,7 +62,7 @@ export default function callCustomManifestLoader(
62
62
  receivingTime? : number | undefined;
63
63
  sendingTime? : number | undefined; }) =>
64
64
  {
65
- if (hasFinished || cancelSignal.isCancelled) {
65
+ if (hasFinished || cancelSignal.isCancelled()) {
66
66
  return;
67
67
  }
68
68
  hasFinished = true;
@@ -87,7 +87,7 @@ export default function callCustomManifestLoader(
87
87
  * @param {*} err - The corresponding error encountered
88
88
  */
89
89
  const reject = (err : unknown) : void => {
90
- if (hasFinished || cancelSignal.isCancelled) {
90
+ if (hasFinished || cancelSignal.isCancelled()) {
91
91
  return;
92
92
  }
93
93
  hasFinished = true;
@@ -111,7 +111,7 @@ export default function callCustomManifestLoader(
111
111
  * the "regular" implementation
112
112
  */
113
113
  const fallback = () => {
114
- if (hasFinished || cancelSignal.isCancelled) {
114
+ if (hasFinished || cancelSignal.isCancelled()) {
115
115
  return;
116
116
  }
117
117
  hasFinished = true;
@@ -20,23 +20,24 @@
20
20
  /* eslint-disable @typescript-eslint/naming-convention */
21
21
 
22
22
  declare const __FEATURES__ : {
23
- IS_ENABLED : number;
24
- IS_DISABLED : number;
23
+ IS_DISABLED : 0;
24
+ IS_ENABLED : 1;
25
25
 
26
- DASH : number;
27
- DIRECTFILE : number;
28
- EME : number;
29
- HTML_SAMI : number;
30
- HTML_SRT : number;
31
- HTML_TTML : number;
32
- HTML_VTT : number;
33
- LOCAL_MANIFEST : number;
34
- METAPLAYLIST : number;
35
- NATIVE_SAMI : number;
36
- NATIVE_SRT : number;
37
- NATIVE_TTML : number;
38
- NATIVE_VTT : number;
39
- SMOOTH : number;
26
+ DASH : 0 | 1;
27
+ DIRECTFILE : 0 | 1;
28
+ EME : 0 | 1;
29
+ HTML_SAMI : 0 | 1;
30
+ HTML_SRT : 0 | 1;
31
+ HTML_TTML : 0 | 1;
32
+ HTML_VTT : 0 | 1;
33
+ LOCAL_MANIFEST : 0 | 1;
34
+ METAPLAYLIST : 0 | 1;
35
+ DEBUG_ELEMENT : 0 | 1;
36
+ NATIVE_SAMI : 0 | 1;
37
+ NATIVE_SRT : 0 | 1;
38
+ NATIVE_TTML : 0 | 1;
39
+ NATIVE_VTT : 0 | 1;
40
+ SMOOTH : 0 | 1;
40
41
  } | typeof FEATURES_ENUM;
41
42
 
42
43
  declare const enum FEATURES_ENUM {
@@ -52,6 +53,7 @@ declare const enum FEATURES_ENUM {
52
53
  HTML_VTT,
53
54
  LOCAL_MANIFEST,
54
55
  METAPLAYLIST,
56
+ DEBUG_ELEMENT,
55
57
  NATIVE_SAMI,
56
58
  NATIVE_SRT,
57
59
  NATIVE_TTML,
@@ -60,9 +62,9 @@ declare const enum FEATURES_ENUM {
60
62
  }
61
63
 
62
64
  declare const __ENVIRONMENT__ : {
63
- CURRENT_ENV : number;
64
- DEV : number;
65
- PRODUCTION : number;
65
+ CURRENT_ENV : 0 | 1;
66
+ DEV : 0;
67
+ PRODUCTION : 1;
66
68
  } | typeof ENVIRONMENT_ENUM;
67
69
 
68
70
  declare const enum ENVIRONMENT_ENUM {
@@ -14,10 +14,8 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import {
18
- CancellationError,
19
- CancellationSignal,
20
- } from "./task_canceller";
17
+ import createCancellablePromise from "./create_cancellable_promise";
18
+ import { CancellationSignal } from "./task_canceller";
21
19
 
22
20
  /**
23
21
  * Wait the given `delay`, resolving the Promise when finished.
@@ -36,15 +34,8 @@ export default function cancellableSleep(
36
34
  delay: number,
37
35
  cancellationSignal: CancellationSignal
38
36
  ) : Promise<void> {
39
- return new Promise((res, rej) => {
40
- const timeout = setTimeout(() => {
41
- unregisterCancelSignal();
42
- res();
43
- }, delay);
44
- const unregisterCancelSignal = cancellationSignal
45
- .register(function onCancel(cancellationError : CancellationError) {
46
- clearTimeout(timeout);
47
- rej(cancellationError);
48
- });
37
+ return createCancellablePromise(cancellationSignal, (res) => {
38
+ const timeout = setTimeout(() => res(), delay);
39
+ return () => clearTimeout(timeout);
49
40
  });
50
41
  }
@@ -0,0 +1,69 @@
1
+ import {
2
+ CancellationError,
3
+ CancellationSignal,
4
+ } from "./task_canceller";
5
+
6
+ /**
7
+ * Returns a Promise linked to a `CancellationSignal`, which will reject the
8
+ * corresponding `CancellationError` if that signal emits before the wanted
9
+ * task finishes (either on success or on error).
10
+ *
11
+ * The given callback mimicks the Promise interface with the added possibility
12
+ * of returning a callback which will be called when and if the task is
13
+ * cancelled before being either resolved or rejected.
14
+ * In that case, that logic will be called just before the Promise is rejected
15
+ * with the corresponding `CancellationError`.
16
+ * The point of this callback is to implement aborting logic, such as for
17
+ * example aborting a request.
18
+ *
19
+ * @param {Object} cancellationSignal - The `CancellationSignal` the returned
20
+ * Promise will be linked to.
21
+ * @param {Function} cb - The function implementing the cancellable Promise. Its
22
+ * arguments follow Promise's semantics but it can also return a function which
23
+ * will be called when and if `cancellationSignal` emits before either arguments
24
+ * are called.
25
+ * @returns {Promise} - The created Promise, which will resolve when and if the
26
+ * first argument to `cb` is called first and reject either if the second
27
+ * argument to `cb` is called first or if the given `CancellationSignal` emits
28
+ * before either of the two previous conditions.
29
+ */
30
+ export default function createCancellablePromise<T>(
31
+ cancellationSignal : CancellationSignal,
32
+ cb : (
33
+ resolve : (val : T) => void,
34
+ reject : (err : unknown) => void,
35
+ ) => (() => void) | void
36
+ ) : Promise<T> {
37
+ let abortingLogic : (() => void) | void;
38
+ return new Promise((res, rej) => {
39
+ if (cancellationSignal.cancellationError !== null) {
40
+ // If the signal was already triggered before, do not even call `cb`
41
+ return rej(cancellationSignal.cancellationError);
42
+ }
43
+
44
+ let hasUnregistered = false;
45
+ abortingLogic = cb(
46
+ function onCancellablePromiseSuccess(val : T) {
47
+ cancellationSignal.deregister(onCancellablePromiseCancellation);
48
+ hasUnregistered = true;
49
+ res(val);
50
+ },
51
+ function onCancellablePromiseFailure(err : unknown) {
52
+ cancellationSignal.deregister(onCancellablePromiseCancellation);
53
+ hasUnregistered = true;
54
+ rej(err);
55
+ }
56
+ );
57
+
58
+ if (!hasUnregistered) {
59
+ cancellationSignal.register(onCancellablePromiseCancellation);
60
+ }
61
+
62
+ function onCancellablePromiseCancellation(error : CancellationError) {
63
+ if (abortingLogic !== undefined) {
64
+ abortingLogic();
65
+ }
66
+ rej(error);
67
+ }
68
+ });
69
+ }
@@ -20,7 +20,7 @@
20
20
  * not always understood by newcomers to the code, and which can be overused when
21
21
  * only one of the possibility can arise.
22
22
  * @param {*} x
23
- * @returns {*}
23
+ * @returns {boolean}
24
24
  */
25
25
  export default function isNullOrUndefined(x : unknown) : x is null | undefined | void {
26
26
  return x === null || x === undefined;
@@ -294,6 +294,9 @@ export default function createSharedReference<T>(
294
294
  options.clearSignal.register(unlisten);
295
295
 
296
296
  function unlisten() : void {
297
+ if (options?.clearSignal !== undefined) {
298
+ options.clearSignal.deregister(unlisten);
299
+ }
297
300
  if (cbObj.hasBeenCleared) {
298
301
  return;
299
302
  }
@@ -339,6 +342,9 @@ export default function createSharedReference<T>(
339
342
  finish,
340
343
  };
341
344
  function finish() {
345
+ if (cancelSignal !== undefined) {
346
+ cancelSignal.deregister(finish);
347
+ }
342
348
  isFinished = true;
343
349
  const clonedCbs = cbs.slice();
344
350
  for (const cbObj of clonedCbs) {
@@ -125,7 +125,7 @@ export default function request<T>(
125
125
  reject(err);
126
126
  });
127
127
 
128
- if (cancelSignal.isCancelled) {
128
+ if (cancelSignal.isCancelled()) {
129
129
  return;
130
130
  }
131
131
  }