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
@@ -14,6 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
+ import log from "../log";
17
18
  import assert from "./assert";
18
19
  import noop from "./noop";
19
20
 
@@ -120,12 +121,12 @@ export default class TaskCanceller {
120
121
  * notified that it should be aborted when this `TaskCanceller` is triggered
121
122
  * (through its `cancel` method).
122
123
  */
123
- public signal : CancellationSignal;
124
+ public readonly signal : CancellationSignal;
124
125
  /**
125
126
  * `true` if this `TaskCanceller` has already been triggered.
126
127
  * `false` otherwise.
127
128
  */
128
- public isUsed : boolean;
129
+ private _isUsed : boolean;
129
130
  /**
130
131
  * @private
131
132
  * Internal function called when the `TaskCanceller` is triggered`.
@@ -136,28 +137,43 @@ export default class TaskCanceller {
136
137
  * Creates a new `TaskCanceller`, with its own `CancellationSignal` created
137
138
  * as its `signal` provide.
138
139
  * You can then pass this property to async task you wish to be cancellable.
139
- * @param {Object|undefined} options
140
140
  */
141
- constructor(options? : {
142
- /**
143
- * If set the TaskCanceller created here will automatically be triggered
144
- * when that signal emits.
145
- */
146
- cancelOn? : CancellationSignal | undefined;
147
- } | undefined) {
141
+ constructor() {
148
142
  const [trigger, register] = createCancellationFunctions();
149
- this.isUsed = false;
143
+ this._isUsed = false;
150
144
  this._trigger = trigger;
151
145
  this.signal = new CancellationSignal(register);
146
+ }
152
147
 
153
- if (options?.cancelOn !== undefined) {
154
- const unregisterParent = options.cancelOn.register(() => {
155
- this.cancel();
156
- });
157
- this.signal.register(unregisterParent);
158
- }
148
+ /**
149
+ * Returns `true` if this `TaskCanceller` has already been triggered.
150
+ * `false` otherwise.
151
+ */
152
+ public isUsed() : boolean {
153
+ return this._isUsed;
159
154
  }
160
155
 
156
+ /**
157
+ * Bind this `TaskCanceller` to a `CancellationSignal`, so the former
158
+ * is automatically cancelled when the latter is triggered.
159
+ *
160
+ * Note that this call registers a callback on the given signal, until either
161
+ * the current `TaskCanceller` is cancelled or until this given
162
+ * `CancellationSignal` is triggered.
163
+ * To avoid leaking memory, the returned callback allow to undo this link.
164
+ * It should be called if/when that link is not needed anymore, such as when
165
+ * there is no need for this `TaskCanceller` anymore.
166
+ *
167
+ * @param {Object} signal
168
+ * @returns {Function}
169
+ */
170
+ public linkToSignal(signal : CancellationSignal) : () => void {
171
+ const unregister = signal.register(() => {
172
+ this.cancel();
173
+ });
174
+ this.signal.register(unregister);
175
+ return unregister;
176
+ }
161
177
 
162
178
  /**
163
179
  * "Trigger" the `TaskCanceller`, notify through its associated
@@ -171,10 +187,10 @@ export default class TaskCanceller {
171
187
  * @param {Error} [srcError]
172
188
  */
173
189
  public cancel(srcError? : CancellationError) : void {
174
- if (this.isUsed) {
190
+ if (this._isUsed) {
175
191
  return ;
176
192
  }
177
- this.isUsed = true;
193
+ this._isUsed = true;
178
194
  const cancellationError = srcError ?? new CancellationError();
179
195
  this._trigger(cancellationError);
180
196
  }
@@ -196,11 +212,6 @@ export default class TaskCanceller {
196
212
  * @class
197
213
  */
198
214
  export class CancellationSignal {
199
- /**
200
- * True when the cancellation order was already triggered, meaning that the
201
- * linked task needs to be aborted.
202
- */
203
- public isCancelled : boolean;
204
215
  /**
205
216
  * Error associated to the cancellation, only set if the `CancellationSignal`
206
217
  * has been used (which means that the task has been cancelled).
@@ -220,6 +231,12 @@ export class CancellationSignal {
220
231
  */
221
232
  private _listeners : Array<(error : CancellationError) => void>;
222
233
 
234
+ /**
235
+ * True when the cancellation order was already triggered, meaning that the
236
+ * linked task needs to be aborted.
237
+ */
238
+ private _isCancelled : boolean;
239
+
223
240
  /**
224
241
  * Creates a new CancellationSignal.
225
242
  * /!\ Note: Only a `TaskCanceller` is supposed to be able to create one.
@@ -227,20 +244,35 @@ export class CancellationSignal {
227
244
  * cancelled.
228
245
  */
229
246
  constructor(registerToSource : (listener: ICancellationListener) => void) {
230
- this.isCancelled = false;
247
+ this._isCancelled = false;
231
248
  this.cancellationError = null;
232
249
  this._listeners = [];
233
250
 
234
251
  registerToSource((cancellationError : CancellationError) : void => {
235
252
  this.cancellationError = cancellationError;
236
- this.isCancelled = true;
253
+ this._isCancelled = true;
237
254
  while (this._listeners.length > 0) {
238
- const listener = this._listeners.splice(this._listeners.length - 1, 1)[0];
239
- listener(cancellationError);
255
+ try {
256
+ const listener = this._listeners.pop();
257
+ listener?.(cancellationError);
258
+ } catch (err) {
259
+ log.error("Error while calling clean up listener",
260
+ err instanceof Error ? err.toString() :
261
+ "Unknown error");
262
+ }
240
263
  }
241
264
  });
242
265
  }
243
266
 
267
+ /**
268
+ * Returns `true` when the cancellation order was already triggered, meaning
269
+ * that the linked task needs to be aborted.
270
+ * @returns boolean
271
+ */
272
+ public isCancelled() : boolean {
273
+ return this._isCancelled;
274
+ }
275
+
244
276
  /**
245
277
  * Registers a function that will be called when/if the current task is
246
278
  * cancelled.
@@ -263,9 +295,10 @@ export class CancellationSignal {
263
295
  * performed.
264
296
  */
265
297
  public register(fn : ICancellationListener) : () => void {
266
- if (this.isCancelled) {
298
+ if (this._isCancelled) {
267
299
  assert(this.cancellationError !== null);
268
300
  fn(this.cancellationError);
301
+ return noop;
269
302
  }
270
303
  this._listeners.push(fn);
271
304
  return () => this.deregister(fn);
@@ -280,13 +313,9 @@ export class CancellationSignal {
280
313
  * @param {Function} fn
281
314
  */
282
315
  public deregister(fn : ICancellationListener) : void {
283
- if (this.isCancelled) {
284
- return;
285
- }
286
- for (let i = 0; i < this._listeners.length; i++) {
316
+ for (let i = this._listeners.length - 1; i >= 0; i--) {
287
317
  if (this._listeners[i] === fn) {
288
318
  this._listeners.splice(i, 1);
289
- return;
290
319
  }
291
320
  }
292
321
  }
package/tsconfig.json CHANGED
@@ -13,7 +13,7 @@
13
13
  "strictPropertyInitialization": true,
14
14
  "noUnusedParameters": true,
15
15
  "noUnusedLocals": true,
16
- "types": ["rxjs", "node", "jest"],
16
+ "types": ["node", "jest"],
17
17
  "moduleResolution": "node",
18
18
  "typeRoots": [
19
19
  "./src/typings/next-tick.d.ts",
@@ -13,7 +13,7 @@
13
13
  "strictPropertyInitialization": true,
14
14
  "noUnusedParameters": true,
15
15
  "noUnusedLocals": true,
16
- "types": ["rxjs", "node", "jest"],
16
+ "types": ["node", "jest"],
17
17
  "moduleResolution": "node",
18
18
  "module": "es2015",
19
19
  "typeRoots": [
@@ -1,56 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import Manifest from "../../../manifest";
17
- /**
18
- * Keep the MediaSource's duration up-to-date with what is being played.
19
- * @class MediaDurationUpdater
20
- */
21
- export default class MediaDurationUpdater {
22
- private _canceller;
23
- /**
24
- * The last known audio Adaptation (i.e. track) chosen for the last Period.
25
- * Useful to determinate the duration of the current content.
26
- * `undefined` if the audio track for the last Period has never been known yet.
27
- * `null` if there are no chosen audio Adaptation.
28
- */
29
- private _currentKnownDuration;
30
- /**
31
- * Create a new `MediaDurationUpdater` that will keep the given MediaSource's
32
- * duration as soon as possible.
33
- * This duration will be updated until the `stop` method is called.
34
- * @param {Object} manifest - The Manifest currently played.
35
- * For another content, you will have to create another `MediaDurationUpdater`.
36
- * @param {MediaSource} mediaSource - The MediaSource on which the content is
37
- * pushed.
38
- */
39
- constructor(manifest: Manifest, mediaSource: MediaSource);
40
- /**
41
- * By default, the `MediaDurationUpdater` only set a safe estimate for the
42
- * MediaSource's duration.
43
- * A more precize duration can be set by communicating to it a more precize
44
- * media duration through `updateKnownDuration`.
45
- * If the duration becomes unknown, `undefined` can be given to it so the
46
- * `MediaDurationUpdater` goes back to a safe estimate.
47
- * @param {number | undefined} newDuration
48
- */
49
- updateKnownDuration(newDuration: number | undefined): void;
50
- /**
51
- * Stop the `MediaDurationUpdater` from updating and free its resources.
52
- * Once stopped, it is not possible to start it again, beside creating another
53
- * `MediaDurationUpdater`.
54
- */
55
- stop(): void;
56
- }
package/locked_reps.js DELETED
@@ -1,46 +0,0 @@
1
- function chooseQualityBasedOnHeight(height) {
2
- const videoReps = player.getAvailableVideoRepresentations(period.id);
3
-
4
- const filtered = videoReps
5
- .filter(v => v.height === height);
6
-
7
- if (filtered.length > 0) {
8
- player.lockVideoRepresentations(filtered);
9
- }
10
- }
11
-
12
- function switchVideoToAuto() {
13
- player.unlockVideoRepresentations();
14
- }
15
-
16
- player.areVideoRepresentationsLocked();
17
-
18
-
19
- // -> persisté entre Period => oui
20
- // -> persisté au changement de piste ?
21
- // Si oui, necessité de connaitre d'avance les locked pour une autre piste
22
- //
23
- // -> que faire si Array vide ? On plante
24
- // -> que faire si fallback ? => débloque et on envoie un event
25
-
26
-
27
- player.setVideoBitrate();
28
- player.getVideoBitrate();
29
-
30
- player.lockVideoRepresentations({
31
- representations: filtered,
32
- periodId,
33
- switchBehavior: "reload" | "smooth" | "direct",
34
- });
35
-
36
- player.lockVideoRepresentations({
37
- representations: filtered,
38
- periodId,
39
- switchBehavior: "reload" | "smooth" | "direct",
40
- });
41
-
42
- player.setVideoTrack({
43
- periodId,
44
- trackId,
45
- switchBehavior: "reload" | "smooth" | "direct",
46
- });
@@ -1,76 +0,0 @@
1
- /**
2
- * Create table of contents in markdown referencing the h1 (#), h2 (##) and
3
- * h3 (###) titles.
4
- * Also add links to them to the original markdown.
5
- * @param {string} md - The markdown content
6
- * @returns {string}
7
- */
8
- function constructTableOfContents(md) {
9
- const tocLines = [];
10
- const newContent = [];
11
- const lines = md.split(/\r\n|\n|\r/);
12
-
13
- // Object used to avoid duplicates
14
- const generatedAnchors = {};
15
-
16
- // The inputed markdown is read line by line.
17
- // When a h1, h2 or h3 is encountered in it, add a new list entry
18
- // in the `tocLines` markdown respectively at top, second and third level.
19
- // To be able to link the table of content to the corresponding content,
20
- // add `<a>` links just before the corresponding h1, h2 or h3 elements in the
21
- // inputed markdown.
22
- // All Markdown parsing done here corresponds to the CommonMark spec (v0.29)
23
- // TODO this might be more efficient and less error-prone if integrated as a
24
- // markdown-it plugin.
25
- for (let i = 0, len = lines.length; i < len; i++) {
26
- if (/^ *# +/.test(lines[i])) {
27
- const regExec = /^ *# +(.*)$/.exec(lines[i]);
28
- if (regExec && regExec[1]) {
29
- const tocLine = regExec[1].replace(/ #* *$/, "").trim();
30
- let uri = generateAnchorName(tocLine);
31
- tocLines.push(`[${tocLine}](#${uri})`);
32
- newContent.push(`<a name="${uri}"></a>`);
33
- }
34
- } else if (/^ *## +/.test(lines[i])) {
35
- const regExec = /^ *## +(.*)$/.exec(lines[i]);
36
- if (regExec && regExec[1]) {
37
- const tocLine = regExec[1].replace(/ #* *$/, "").trim();
38
- let uri = generateAnchorName(tocLine);
39
- tocLines.push(` - [${tocLine}](#${uri})`);
40
- newContent.push(`<a name="${uri}"></a>`);
41
- }
42
- } else if (/^ *### +/.test(lines[i])) {
43
- const regExec = /^ *### +(.*)$/.exec(lines[i]);
44
- if (regExec && regExec[1]) {
45
- const tocLine = regExec[1].replace(/ #* *$/, "").trim();
46
- let uri = generateAnchorName(tocLine);
47
- tocLines.push(` - [${tocLine}](#${uri})`);
48
- newContent.push(`<a name="${uri}"></a>`);
49
- }
50
- }
51
- newContent.push(lines[i]);
52
- }
53
- return {
54
- tocMd: tocLines.join("\n"),
55
- nbTocElements: tocLines.length,
56
- content: newContent.join("\n"),
57
- };
58
-
59
- function generateAnchorName(title) {
60
- const baseUri = encodeURI(title.toLowerCase().replace(/ /g, "_"))
61
- if (generatedAnchors[baseUri] !== true) {
62
- generatedAnchors[baseUri] = true;
63
- return baseUri;
64
- }
65
- let i = 1;
66
- let resultUri;
67
- do {
68
- resultUri = `${baseUri}_(${i})`;
69
- i++;
70
- } while (generatedAnchors[resultUri] === true);
71
- generatedAnchors[resultUri] = true;
72
- return resultUri;
73
- }
74
- };
75
-
76
- module.exports = constructTableOfContents;
@@ -1,26 +0,0 @@
1
- const hljs = require("highlight.js");
2
- const md = require("markdown-it")({
3
- highlight(str, lang) {
4
- if (lang && hljs.getLanguage(lang)) {
5
- try {
6
- return hljs.highlight(str, { language: lang }).value;
7
- } catch (_) {
8
- /* don't care for now */
9
- }
10
- }
11
- return "";
12
- },
13
- html: true,
14
- linkify: true,
15
- typographer: true,
16
- xhtmlOut: true,
17
- });
18
-
19
- /**
20
- * Convert the Markdown document given into an HTML page.
21
- * @param {string} mdStr
22
- * @returns {string}
23
- */
24
- module.exports = function convertMDToHTML(mdStr) {
25
- return md.render(mdStr);
26
- };