rx-player 3.25.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 (925) hide show
  1. package/.eslintrc.js +1 -1
  2. package/.github/workflows/checks.yml +99 -0
  3. package/.github/workflows/perfs.yml +22 -0
  4. package/.github/workflows/sonarcloud_analysis.yml +20 -0
  5. package/CHANGELOG.md +142 -70
  6. package/CONTRIBUTING.md +68 -3
  7. package/MAINTAINERS.md +1 -1
  8. package/README.md +121 -73
  9. package/VERSION +1 -1
  10. package/dist/_esm5.processed/compat/browser_compatibility_types.d.ts +14 -9
  11. package/dist/_esm5.processed/compat/browser_compatibility_types.js +7 -19
  12. package/dist/_esm5.processed/compat/browser_detection.js +4 -12
  13. package/dist/_esm5.processed/compat/can_rely_on_video_visibility_and_size.js +2 -4
  14. package/dist/_esm5.processed/compat/clear_element_src.js +8 -6
  15. package/dist/_esm5.processed/compat/eme/close_session.js +4 -2
  16. package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +7 -20
  17. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -1
  18. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +18 -27
  19. package/dist/_esm5.processed/compat/eme/custom_media_keys/moz_media_keys_constructor.js +7 -14
  20. package/dist/_esm5.processed/compat/eme/custom_media_keys/ms_media_keys_constructor.d.ts +21 -0
  21. package/dist/_esm5.processed/compat/eme/custom_media_keys/ms_media_keys_constructor.js +9 -10
  22. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +6 -12
  23. package/dist/_esm5.processed/compat/eme/custom_media_keys/types.d.ts +1 -1
  24. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +22 -25
  25. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys_constructor.js +2 -1
  26. package/dist/_esm5.processed/compat/eme/generate_key_request.js +1 -2
  27. package/dist/_esm5.processed/compat/eme/load_session.js +2 -3
  28. package/dist/_esm5.processed/compat/event_listeners.d.ts +5 -4
  29. package/dist/_esm5.processed/compat/event_listeners.js +21 -35
  30. package/dist/_esm5.processed/compat/fullscreen.js +1 -5
  31. package/dist/_esm5.processed/compat/index.d.ts +3 -4
  32. package/dist/_esm5.processed/compat/index.js +3 -4
  33. package/dist/_esm5.processed/compat/is_vtt_cue.js +1 -2
  34. package/dist/_esm5.processed/compat/make_vtt_cue.js +11 -6
  35. package/dist/_esm5.processed/compat/on_height_width_change.js +1 -2
  36. package/dist/_esm5.processed/compat/patch_webkit_source_buffer.js +3 -0
  37. package/dist/_esm5.processed/compat/play.d.ts +1 -1
  38. package/dist/_esm5.processed/compat/play.js +1 -1
  39. package/dist/_esm5.processed/compat/set_element_src.js +1 -1
  40. package/dist/_esm5.processed/compat/when_loaded_metadata.js +1 -2
  41. package/dist/_esm5.processed/compat/when_media_source_open.js +1 -2
  42. package/dist/_esm5.processed/config.d.ts +72 -13
  43. package/dist/_esm5.processed/config.js +73 -14
  44. package/dist/_esm5.processed/core/abr/abr_manager.d.ts +11 -10
  45. package/dist/_esm5.processed/core/abr/abr_manager.js +47 -17
  46. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +1 -1
  47. package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
  48. package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
  49. package/dist/_esm5.processed/core/abr/get_buffer_levels.js +3 -0
  50. package/dist/_esm5.processed/core/abr/guess_based_chooser.d.ts +95 -0
  51. package/dist/_esm5.processed/core/abr/guess_based_chooser.js +242 -0
  52. package/dist/_esm5.processed/core/abr/index.d.ts +3 -3
  53. package/dist/_esm5.processed/core/abr/last_estimate_storage.d.ts +61 -0
  54. package/dist/_esm5.processed/core/abr/last_estimate_storage.js +37 -0
  55. package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +26 -8
  56. package/dist/_esm5.processed/core/abr/network_analyzer.js +68 -31
  57. package/dist/_esm5.processed/core/abr/pending_requests_store.d.ts +56 -28
  58. package/dist/_esm5.processed/core/abr/pending_requests_store.js +5 -8
  59. package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +35 -52
  60. package/dist/_esm5.processed/core/abr/representation_estimator.js +114 -65
  61. package/dist/_esm5.processed/core/abr/representation_score_calculator.d.ts +5 -8
  62. package/dist/_esm5.processed/core/abr/representation_score_calculator.js +20 -23
  63. package/dist/_esm5.processed/core/abr/{ewma.d.ts → utils/ewma.d.ts} +0 -0
  64. package/dist/_esm5.processed/core/abr/{ewma.js → utils/ewma.js} +0 -0
  65. package/dist/_esm5.processed/core/abr/{filter_by_bitrate.d.ts → utils/filter_by_bitrate.d.ts} +1 -1
  66. package/dist/_esm5.processed/core/abr/{filter_by_bitrate.js → utils/filter_by_bitrate.js} +1 -1
  67. package/dist/_esm5.processed/core/abr/{filter_by_width.d.ts → utils/filter_by_width.d.ts} +1 -1
  68. package/dist/_esm5.processed/core/abr/{filter_by_width.js → utils/filter_by_width.js} +2 -2
  69. package/dist/_esm5.processed/core/abr/{select_optimal_representation.d.ts → utils/select_optimal_representation.d.ts} +1 -1
  70. package/dist/_esm5.processed/core/abr/{select_optimal_representation.js → utils/select_optimal_representation.js} +1 -1
  71. package/dist/_esm5.processed/core/api/emit_seek_events.d.ts +4 -4
  72. package/dist/_esm5.processed/core/api/emit_seek_events.js +12 -10
  73. package/dist/_esm5.processed/core/api/get_player_state.d.ts +3 -4
  74. package/dist/_esm5.processed/core/api/get_player_state.js +2 -2
  75. package/dist/_esm5.processed/core/api/index.d.ts +3 -1
  76. package/dist/_esm5.processed/core/api/index.js +2 -0
  77. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +6 -0
  78. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +25 -15
  79. package/dist/_esm5.processed/core/api/option_utils.d.ts +5 -5
  80. package/dist/_esm5.processed/core/api/option_utils.js +6 -40
  81. package/dist/_esm5.processed/core/api/playback_observer.d.ts +280 -0
  82. package/dist/_esm5.processed/core/api/playback_observer.js +461 -0
  83. package/dist/_esm5.processed/core/api/public_api.d.ts +11 -10
  84. package/dist/_esm5.processed/core/api/public_api.js +118 -140
  85. package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +7 -8
  86. package/dist/_esm5.processed/core/api/track_choice_manager.js +54 -57
  87. package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.d.ts +4 -6
  88. package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.js +25 -32
  89. package/dist/_esm5.processed/core/eme/attach_media_keys.js +2 -6
  90. package/dist/_esm5.processed/core/eme/check_key_statuses.js +4 -9
  91. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js +1 -2
  92. package/dist/_esm5.processed/core/eme/clear_eme_session.js +6 -2
  93. package/dist/_esm5.processed/core/eme/create_session.js +1 -2
  94. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +2 -3
  95. package/dist/_esm5.processed/core/eme/eme_manager.js +5 -7
  96. package/dist/_esm5.processed/core/eme/find_key_system.js +20 -21
  97. package/dist/_esm5.processed/core/eme/get_media_keys.js +4 -11
  98. package/dist/_esm5.processed/core/eme/get_session.js +3 -6
  99. package/dist/_esm5.processed/core/eme/init_media_keys.js +6 -14
  100. package/dist/_esm5.processed/core/eme/session_events_listener.js +12 -10
  101. package/dist/_esm5.processed/core/eme/set_server_certificate.js +8 -3
  102. package/dist/_esm5.processed/core/eme/types.d.ts +14 -6
  103. package/dist/_esm5.processed/core/eme/utils/close_session.js +2 -3
  104. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +3 -9
  105. package/dist/_esm5.processed/core/eme/utils/is_session_usable.js +1 -1
  106. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +3 -4
  107. package/dist/_esm5.processed/core/eme/utils/persistent_sessions_store.js +5 -8
  108. package/dist/_esm5.processed/core/fetchers/index.d.ts +2 -2
  109. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +28 -13
  110. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +258 -65
  111. package/dist/_esm5.processed/core/fetchers/segment/index.d.ts +2 -2
  112. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.d.ts +13 -31
  113. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.js +3 -7
  114. package/dist/_esm5.processed/core/fetchers/segment/prioritizer.d.ts +53 -53
  115. package/dist/_esm5.processed/core/fetchers/segment/prioritizer.js +1 -4
  116. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +101 -19
  117. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +239 -99
  118. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +38 -21
  119. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +13 -10
  120. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.d.ts +37 -22
  121. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +129 -59
  122. package/dist/_esm5.processed/core/init/create_eme_manager.js +1 -2
  123. package/dist/_esm5.processed/core/init/create_media_source.js +3 -4
  124. package/dist/_esm5.processed/core/init/create_stream_playback_observer.d.ts +39 -0
  125. package/dist/_esm5.processed/core/init/create_stream_playback_observer.js +50 -0
  126. package/dist/_esm5.processed/core/init/duration_updater.js +17 -8
  127. package/dist/_esm5.processed/{transports/utils/return_parsed_manifest.d.ts → core/init/emit_loaded_event.d.ts} +9 -8
  128. package/dist/_esm5.processed/core/init/emit_loaded_event.js +47 -0
  129. package/dist/_esm5.processed/core/init/end_of_stream.js +1 -2
  130. package/dist/_esm5.processed/core/init/events_generators.d.ts +3 -5
  131. package/dist/_esm5.processed/core/init/events_generators.js +5 -16
  132. package/dist/_esm5.processed/core/init/get_initial_time.js +2 -3
  133. package/dist/_esm5.processed/core/init/initial_seek_and_play.d.ts +56 -22
  134. package/dist/_esm5.processed/core/init/initial_seek_and_play.js +65 -56
  135. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +8 -7
  136. package/dist/_esm5.processed/core/init/initialize_directfile.js +31 -33
  137. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +12 -12
  138. package/dist/_esm5.processed/core/init/initialize_media_source.js +20 -18
  139. package/dist/_esm5.processed/core/init/load_on_media_source.d.ts +9 -12
  140. package/dist/_esm5.processed/core/init/load_on_media_source.js +30 -43
  141. package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
  142. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +11 -18
  143. package/dist/_esm5.processed/core/init/stall_avoider.d.ts +12 -7
  144. package/dist/_esm5.processed/core/init/stall_avoider.js +102 -39
  145. package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
  146. package/dist/_esm5.processed/core/init/stream_events_emitter/refresh_scheduled_events_list.js +2 -12
  147. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.d.ts +2 -2
  148. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +20 -15
  149. package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +2 -2
  150. package/dist/_esm5.processed/core/init/throw_on_media_error.js +1 -2
  151. package/dist/_esm5.processed/core/init/types.d.ts +11 -28
  152. package/dist/_esm5.processed/core/init/update_playback_rate.d.ts +7 -6
  153. package/dist/_esm5.processed/core/init/update_playback_rate.js +11 -12
  154. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.d.ts +5 -5
  155. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.js +12 -7
  156. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.d.ts +2 -2
  157. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +32 -8
  158. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.d.ts +15 -15
  159. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +4 -2
  160. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +20 -4
  161. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +52 -7
  162. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +33 -32
  163. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +20 -4
  164. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +47 -1
  165. package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +18 -4
  166. package/dist/_esm5.processed/core/segment_buffers/implementations/types.js +17 -1
  167. package/dist/_esm5.processed/core/segment_buffers/implementations/utils/manual_time_ranges.js +2 -2
  168. package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
  169. package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.d.ts +81 -0
  170. package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.js +91 -0
  171. package/dist/_esm5.processed/core/{fetchers/utils/create_request_scheduler.d.ts → segment_buffers/inventory/index.d.ts} +5 -4
  172. package/dist/_esm5.processed/core/{fetchers/manifest/get_manifest_backoff_options.d.ts → segment_buffers/inventory/index.js} +2 -11
  173. package/dist/_esm5.processed/core/segment_buffers/{segment_inventory.d.ts → inventory/segment_inventory.d.ts} +38 -39
  174. package/dist/_esm5.processed/core/segment_buffers/{segment_inventory.js → inventory/segment_inventory.js} +65 -28
  175. package/dist/_esm5.processed/core/{abr/cached_segment_detector.d.ts → segment_buffers/inventory/types.d.ts} +10 -9
  176. package/dist/_esm5.processed/core/segment_buffers/inventory/types.js +16 -0
  177. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +2 -2
  178. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +1 -1
  179. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +18 -16
  180. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +38 -34
  181. package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.d.ts +9 -17
  182. package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.js +11 -22
  183. package/dist/_esm5.processed/core/stream/adaptation/index.d.ts +2 -2
  184. package/dist/_esm5.processed/core/stream/events_generators.d.ts +13 -6
  185. package/dist/_esm5.processed/core/stream/events_generators.js +20 -12
  186. package/dist/_esm5.processed/core/stream/index.d.ts +2 -2
  187. package/dist/_esm5.processed/core/stream/orchestrator/active_period_emitter.d.ts +2 -2
  188. package/dist/_esm5.processed/core/stream/orchestrator/active_period_emitter.js +5 -6
  189. package/dist/_esm5.processed/core/stream/orchestrator/are_streams_complete.d.ts +2 -2
  190. package/dist/_esm5.processed/core/stream/orchestrator/are_streams_complete.js +1 -2
  191. package/dist/_esm5.processed/core/stream/orchestrator/get_blacklisted_ranges.d.ts +1 -1
  192. package/dist/_esm5.processed/core/stream/orchestrator/index.d.ts +2 -2
  193. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +10 -8
  194. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +41 -41
  195. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.d.ts +6 -4
  196. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +12 -15
  197. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.d.ts +1 -1
  198. package/dist/_esm5.processed/core/stream/period/index.d.ts +2 -2
  199. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +25 -11
  200. package/dist/_esm5.processed/core/stream/period/period_stream.js +39 -30
  201. package/dist/_esm5.processed/core/stream/reload_after_switch.d.ts +45 -0
  202. package/dist/_esm5.processed/core/stream/reload_after_switch.js +48 -0
  203. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.d.ts +5 -3
  204. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.js +10 -8
  205. package/dist/_esm5.processed/core/stream/representation/downloading_queue.d.ts +222 -0
  206. package/dist/_esm5.processed/core/stream/representation/downloading_queue.js +254 -0
  207. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.d.ts +1 -3
  208. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +9 -12
  209. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +3 -7
  210. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +10 -18
  211. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +3 -1
  212. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +108 -6
  213. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.d.ts +6 -9
  214. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +7 -8
  215. package/dist/_esm5.processed/core/stream/representation/index.d.ts +2 -2
  216. package/dist/_esm5.processed/core/stream/representation/push_init_segment.d.ts +5 -3
  217. package/dist/_esm5.processed/core/stream/representation/push_init_segment.js +4 -8
  218. package/dist/_esm5.processed/core/stream/representation/push_media_segment.d.ts +7 -5
  219. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +5 -9
  220. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +12 -18
  221. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +150 -209
  222. package/dist/_esm5.processed/core/stream/types.d.ts +65 -17
  223. package/dist/_esm5.processed/errors/error_message.js +1 -1
  224. package/dist/_esm5.processed/errors/request_error.js +3 -1
  225. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.d.ts +7 -5
  226. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.js +26 -13
  227. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_content_infos.js +3 -6
  228. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.d.ts +3 -6
  229. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.js +32 -36
  230. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.d.ts +4 -3
  231. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.js +6 -2
  232. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +2 -3
  233. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +2 -2
  234. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.js +9 -23
  235. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
  236. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +28 -29
  237. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/types.d.ts +1 -1
  238. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +12 -10
  239. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/index.js +5 -13
  240. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.d.ts +1 -1
  241. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.js +10 -3
  242. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
  243. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
  244. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +12 -2
  245. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.js +6 -1
  246. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -1
  247. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
  248. package/dist/_esm5.processed/features/initialize_features.js +49 -47
  249. package/dist/_esm5.processed/features/list/directfile.js +1 -2
  250. package/dist/_esm5.processed/features/types.d.ts +3 -10
  251. package/dist/_esm5.processed/index.js +2 -2
  252. package/dist/_esm5.processed/manifest/adaptation.d.ts +10 -16
  253. package/dist/_esm5.processed/manifest/adaptation.js +3 -25
  254. package/dist/_esm5.processed/manifest/index.d.ts +5 -4
  255. package/dist/_esm5.processed/manifest/index.js +3 -2
  256. package/dist/_esm5.processed/manifest/manifest.d.ts +11 -11
  257. package/dist/_esm5.processed/manifest/manifest.js +14 -11
  258. package/dist/_esm5.processed/manifest/period.d.ts +4 -4
  259. package/dist/_esm5.processed/manifest/period.js +7 -16
  260. package/dist/_esm5.processed/manifest/representation.d.ts +3 -3
  261. package/dist/_esm5.processed/manifest/representation.js +3 -7
  262. package/dist/_esm5.processed/manifest/representation_index/static.js +1 -0
  263. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +42 -21
  264. package/dist/_esm5.processed/manifest/types.d.ts +95 -3
  265. package/dist/_esm5.processed/manifest/update_period_in_place.js +1 -1
  266. package/dist/_esm5.processed/manifest/update_periods.js +11 -7
  267. package/dist/_esm5.processed/manifest/{are_same_content.d.ts → utils.d.ts} +9 -7
  268. package/dist/_esm5.processed/manifest/utils.js +44 -0
  269. package/dist/_esm5.processed/minimal.js +2 -2
  270. package/dist/_esm5.processed/parsers/containers/isobmff/get_box.d.ts +18 -9
  271. package/dist/_esm5.processed/parsers/containers/isobmff/get_box.js +32 -9
  272. package/dist/_esm5.processed/parsers/containers/isobmff/read.d.ts +18 -5
  273. package/dist/_esm5.processed/parsers/containers/isobmff/read.js +28 -6
  274. package/dist/_esm5.processed/parsers/containers/isobmff/utils.js +54 -58
  275. package/dist/_esm5.processed/parsers/images/bif.js +2 -11
  276. package/dist/_esm5.processed/parsers/manifest/dash/common/attach_trickmode_track.js +9 -8
  277. package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +2 -2
  278. package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
  279. package/dist/_esm5.processed/parsers/manifest/dash/common/get_http_utc-timing_url.js +2 -2
  280. package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
  281. package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.js +1 -3
  282. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +8 -7
  283. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +5 -7
  284. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
  285. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.js +1 -2
  286. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -1
  287. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +8 -12
  288. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +16 -15
  289. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +7 -15
  290. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +19 -18
  291. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +12 -12
  292. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
  293. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.js +11 -12
  294. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/find_first_common_start_time.js +3 -8
  295. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/parse_s_element.js +3 -3
  296. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +34 -21
  297. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +26 -18
  298. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.d.ts +1 -1
  299. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.js +4 -4
  300. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  301. package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
  302. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -33
  303. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +50 -57
  304. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +10 -9
  305. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +29 -30
  306. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +26 -26
  307. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +70 -65
  308. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +24 -16
  309. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +30 -42
  310. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -36
  311. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +28 -22
  312. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.d.ts +7 -2
  313. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.js +22 -21
  314. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +10 -0
  315. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/BaseURL.js +9 -9
  316. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +24 -0
  317. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.js +7 -5
  318. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +13 -11
  319. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +6 -6
  320. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +70 -29
  321. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +14 -5
  322. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +9 -21
  323. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +11 -0
  324. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.js +7 -1
  325. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.js +22 -0
  326. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/MPD.js +23 -0
  327. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Period.js +31 -0
  328. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +23 -0
  329. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.js +5 -0
  330. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/XLink.js +6 -0
  331. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/root.js +6 -0
  332. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/parsers_stack.js +1 -3
  333. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
  334. package/dist/_esm5.processed/parsers/manifest/local/parse_local_manifest.js +6 -11
  335. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +13 -7
  336. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
  337. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +4 -13
  338. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
  339. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +9 -30
  340. package/dist/_esm5.processed/parsers/manifest/smooth/get_codecs.js +1 -1
  341. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
  342. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +5 -6
  343. package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
  344. package/dist/_esm5.processed/parsers/manifest/utils/check_manifest_ids.js +1 -1
  345. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
  346. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +16 -6
  347. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +12 -4
  348. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.js +5 -5
  349. package/dist/_esm5.processed/parsers/manifest/utils/is_segment_still_available.js +3 -6
  350. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.d.ts +11 -1
  351. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +45 -29
  352. package/dist/_esm5.processed/parsers/texttracks/sami/html.js +2 -2
  353. package/dist/_esm5.processed/parsers/texttracks/sami/native.js +2 -2
  354. package/dist/_esm5.processed/parsers/texttracks/srt/html.js +11 -7
  355. package/dist/_esm5.processed/parsers/texttracks/srt/parse_cue.js +1 -2
  356. package/dist/_esm5.processed/parsers/texttracks/ttml/get_parameters.js +1 -5
  357. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_font_size.js +13 -1
  358. package/dist/_esm5.processed/parsers/texttracks/ttml/html/create_element.js +10 -6
  359. package/dist/_esm5.processed/parsers/texttracks/ttml/html/generate_css_test_outline.js +4 -4
  360. package/dist/_esm5.processed/parsers/texttracks/ttml/html/parse_cue.js +1 -2
  361. package/dist/_esm5.processed/parsers/texttracks/ttml/nodes.js +2 -1
  362. package/dist/_esm5.processed/parsers/texttracks/ttml/parse_ttml.js +11 -15
  363. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_default_style_elements.js +2 -2
  364. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_style_attribute.js +5 -5
  365. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
  366. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.js +1 -3
  367. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
  368. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.js +2 -7
  369. package/dist/_esm5.processed/public_types.d.ts +4 -0
  370. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +1 -3
  371. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.d.ts +3 -4
  372. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +70 -9
  373. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +12 -6
  374. package/dist/_esm5.processed/transports/dash/image_pipelines.js +34 -36
  375. package/dist/_esm5.processed/transports/dash/init_segment_loader.d.ts +8 -4
  376. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +32 -36
  377. package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.d.ts +14 -3
  378. package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +38 -40
  379. package/dist/_esm5.processed/transports/dash/manifest_parser.d.ts +3 -7
  380. package/dist/_esm5.processed/transports/dash/manifest_parser.js +115 -52
  381. package/dist/_esm5.processed/transports/dash/pipelines.js +10 -10
  382. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +14 -3
  383. package/dist/_esm5.processed/transports/dash/segment_loader.js +70 -57
  384. package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +3 -4
  385. package/dist/_esm5.processed/transports/dash/segment_parser.js +15 -32
  386. package/dist/_esm5.processed/transports/dash/text_loader.d.ts +3 -4
  387. package/dist/_esm5.processed/transports/dash/text_loader.js +28 -18
  388. package/dist/_esm5.processed/transports/dash/text_parser.d.ts +5 -4
  389. package/dist/_esm5.processed/transports/dash/text_parser.js +58 -51
  390. package/dist/_esm5.processed/transports/local/pipelines.js +16 -14
  391. package/dist/_esm5.processed/transports/local/segment_loader.d.ts +8 -5
  392. package/dist/_esm5.processed/transports/local/segment_loader.js +69 -28
  393. package/dist/_esm5.processed/transports/local/segment_parser.d.ts +5 -3
  394. package/dist/_esm5.processed/transports/local/segment_parser.js +15 -27
  395. package/dist/_esm5.processed/transports/local/text_parser.d.ts +9 -5
  396. package/dist/_esm5.processed/transports/local/text_parser.js +54 -53
  397. package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +5 -5
  398. package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.js +7 -9
  399. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +82 -138
  400. package/dist/_esm5.processed/transports/smooth/extract_timings_infos.js +3 -6
  401. package/dist/_esm5.processed/transports/smooth/isobmff/create_video_init_segment.d.ts +1 -4
  402. package/dist/_esm5.processed/transports/smooth/isobmff/create_video_init_segment.js +1 -4
  403. package/dist/_esm5.processed/transports/smooth/pipelines.js +149 -155
  404. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +6 -3
  405. package/dist/_esm5.processed/transports/smooth/segment_loader.js +150 -107
  406. package/dist/_esm5.processed/transports/smooth/utils.d.ts +9 -1
  407. package/dist/_esm5.processed/transports/smooth/utils.js +11 -1
  408. package/dist/_esm5.processed/transports/types.d.ts +533 -376
  409. package/dist/_esm5.processed/transports/utils/byte_range.js +2 -2
  410. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.d.ts +3 -3
  411. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +45 -32
  412. package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +4 -4
  413. package/dist/_esm5.processed/transports/utils/generate_manifest_loader.js +16 -5
  414. package/dist/_esm5.processed/transports/utils/get_isobmff_timing_infos.js +6 -1
  415. package/dist/_esm5.processed/transports/utils/parse_text_track.js +8 -12
  416. package/dist/_esm5.processed/utils/array_find.d.ts +1 -1
  417. package/dist/_esm5.processed/utils/array_find.js +0 -5
  418. package/dist/_esm5.processed/utils/array_find_index.d.ts +1 -1
  419. package/dist/_esm5.processed/utils/array_find_index.js +0 -5
  420. package/dist/_esm5.processed/utils/assert.d.ts +1 -1
  421. package/dist/_esm5.processed/utils/assert.js +3 -3
  422. package/dist/_esm5.processed/utils/cancellable_sleep.d.ts +30 -0
  423. package/dist/_esm5.processed/utils/cancellable_sleep.js +42 -0
  424. package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
  425. package/dist/_esm5.processed/utils/cast_to_observable.js +11 -6
  426. package/dist/_esm5.processed/utils/concat_map_latest.js +1 -2
  427. package/dist/_esm5.processed/utils/defer_subscriptions.js +1 -2
  428. package/dist/_esm5.processed/utils/filter_map.js +1 -2
  429. package/dist/_esm5.processed/utils/flat_map.js +0 -6
  430. package/dist/_esm5.processed/utils/id_generator.d.ts +2 -1
  431. package/dist/_esm5.processed/utils/id_generator.js +2 -1
  432. package/dist/_esm5.processed/utils/languages/normalize.js +1 -3
  433. package/dist/_esm5.processed/utils/ranges.js +1 -2
  434. package/dist/_esm5.processed/utils/reference.d.ts +108 -0
  435. package/dist/_esm5.processed/utils/reference.js +137 -0
  436. package/dist/_esm5.processed/utils/request/fetch.d.ts +64 -27
  437. package/dist/_esm5.processed/utils/request/fetch.js +95 -113
  438. package/dist/_esm5.processed/utils/request/index.d.ts +3 -3
  439. package/dist/_esm5.processed/utils/request/xhr.d.ts +64 -47
  440. package/dist/_esm5.processed/utils/request/xhr.js +49 -43
  441. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +39 -0
  442. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +58 -0
  443. package/dist/_esm5.processed/utils/rx-retry_with_backoff.js +1 -2
  444. package/dist/_esm5.processed/utils/task_canceller.d.ts +240 -0
  445. package/dist/_esm5.processed/utils/task_canceller.js +289 -0
  446. package/dist/mpd-parser.wasm +0 -0
  447. package/dist/rx-player.d.ts +1 -15
  448. package/dist/rx-player.js +8775 -6211
  449. package/dist/rx-player.min.d.ts +1 -15
  450. package/dist/rx-player.min.js +1 -1
  451. package/jest.config.js +28 -4
  452. package/package.json +122 -106
  453. package/scripts/README.md +11 -0
  454. package/scripts/build/constants.d.ts +50 -0
  455. package/scripts/build/generate_build.js +197 -0
  456. package/scripts/build/templates/experimental/features/index.d.ts +16 -0
  457. package/scripts/build/templates/experimental/features/index.js +16 -0
  458. package/scripts/build/templates/experimental/tools/VideoThumbnailLoader/index.d.ts +18 -0
  459. package/scripts/build/templates/experimental/tools/VideoThumbnailLoader/index.js +18 -0
  460. package/scripts/build/templates/experimental/tools/index.d.ts +16 -0
  461. package/scripts/build/templates/experimental/tools/index.js +16 -0
  462. package/scripts/build/templates/features/index.d.ts +16 -0
  463. package/scripts/build/templates/features/index.js +16 -0
  464. package/scripts/build/templates/logger/index.d.ts +17 -0
  465. package/scripts/build/templates/logger/index.js +17 -0
  466. package/scripts/build/templates/minimal/index.d.ts +17 -0
  467. package/scripts/build/templates/minimal/index.js +17 -0
  468. package/scripts/build/templates/tools/TextTrackRenderer.d.ts +18 -0
  469. package/scripts/build/templates/tools/TextTrackRenderer.js +18 -0
  470. package/scripts/build/templates/tools/index.d.ts +16 -0
  471. package/scripts/build/templates/tools/index.js +16 -0
  472. package/scripts/build/templates/tools/string-utils.d.ts +18 -0
  473. package/{dist/_esm5.processed/core/fetchers/segment/get_segment_backoff_options.d.ts → scripts/build/templates/tools/string-utils.js} +3 -11
  474. package/scripts/build/templates/types/index.d.ts +16 -0
  475. package/scripts/build/templates/types/index.js +15 -0
  476. package/scripts/check_nodejs_import_compatibility.js +35 -1
  477. package/scripts/doc-generator/construct_table_of_contents.js +31 -24
  478. package/scripts/doc-generator/convert_MD_to_HMTL.js +4 -8
  479. package/scripts/doc-generator/create_documentation.js +331 -0
  480. package/scripts/doc-generator/create_documentation_page.js +209 -0
  481. package/scripts/doc-generator/create_page.js +117 -35
  482. package/scripts/doc-generator/generate_header_html.js +147 -0
  483. package/scripts/doc-generator/generate_page_html.js +115 -0
  484. package/scripts/doc-generator/generate_page_list_html.js +92 -0
  485. package/scripts/doc-generator/generate_sidebar_html.js +85 -0
  486. package/scripts/doc-generator/get_search_data_for_content.js +137 -0
  487. package/scripts/doc-generator/index.js +14 -15
  488. package/scripts/doc-generator/parse_doc_configs.js +327 -0
  489. package/scripts/doc-generator/scripts/lunr.js +10 -0
  490. package/scripts/doc-generator/scripts/script.js +451 -0
  491. package/scripts/doc-generator/styles/style.css +712 -144
  492. package/scripts/doc-generator/utils.js +74 -0
  493. package/scripts/fast_demo_build.js +143 -0
  494. package/scripts/generate_demo_list.js +3 -3
  495. package/scripts/generate_documentation_list.js +9 -5
  496. package/scripts/generate_full_demo.js +108 -10
  497. package/scripts/generate_standalone_demo.js +15 -8
  498. package/scripts/launch_static_server.js +139 -56
  499. package/scripts/list-npm-scripts.js +99 -0
  500. package/scripts/run_standalone_demo.js +1 -0
  501. package/scripts/{run_full_demo.js → start_demo_web_server.js} +16 -3
  502. package/scripts/update-version +8 -1
  503. package/scripts/{display_webpack_errors.js → utils/display_webpack_errors.js} +0 -4
  504. package/scripts/{get_human_readable_hours.js → utils/get_human_readable_hours.js} +0 -4
  505. package/sonar-project.properties +2 -1
  506. package/src/compat/__tests__/add_text_track.test.ts +12 -11
  507. package/src/compat/__tests__/browser_compatibility_types.test.ts +69 -60
  508. package/src/compat/__tests__/browser_version.test.ts +3 -1
  509. package/src/compat/__tests__/change_source_buffer_type.test.ts +3 -3
  510. package/src/compat/__tests__/clear_element_src.test.ts +62 -36
  511. package/src/compat/__tests__/fullscreen.test.ts +154 -139
  512. package/src/compat/__tests__/is_offline.test.ts +20 -12
  513. package/src/compat/__tests__/is_vtt_cue.test.ts +14 -10
  514. package/src/compat/__tests__/make_vtt_cue.test.ts +16 -15
  515. package/src/compat/__tests__/patch_webkit_source_buffer.test.ts +30 -48
  516. package/src/compat/__tests__/play.test.ts +2 -2
  517. package/src/compat/__tests__/remove_cue.test.ts +5 -5
  518. package/src/compat/__tests__/set_element_src.test.ts +3 -3
  519. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +14 -6
  520. package/src/compat/__tests__/when_loaded_metadata.test.ts +4 -5
  521. package/src/compat/__tests__/when_media_source_open.test.ts +4 -5
  522. package/src/compat/browser_compatibility_types.ts +38 -36
  523. package/src/compat/browser_detection.ts +17 -12
  524. package/src/compat/can_rely_on_video_visibility_and_size.ts +3 -3
  525. package/src/compat/clear_element_src.ts +8 -6
  526. package/src/compat/eme/close_session.ts +7 -6
  527. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +22 -26
  528. package/src/compat/eme/custom_media_keys/index.ts +32 -38
  529. package/src/compat/eme/custom_media_keys/moz_media_keys_constructor.ts +16 -19
  530. package/src/compat/eme/custom_media_keys/ms_media_keys_constructor.ts +39 -9
  531. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +10 -12
  532. package/src/compat/eme/custom_media_keys/types.ts +1 -1
  533. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +27 -30
  534. package/src/compat/eme/custom_media_keys/webkit_media_keys_constructor.ts +6 -2
  535. package/src/compat/eme/generate_key_request.ts +1 -1
  536. package/src/compat/eme/load_session.ts +4 -6
  537. package/src/compat/event_listeners.ts +30 -46
  538. package/src/compat/fullscreen.ts +2 -4
  539. package/src/compat/index.ts +2 -6
  540. package/src/compat/is_vtt_cue.ts +1 -2
  541. package/src/compat/make_vtt_cue.ts +10 -8
  542. package/src/compat/on_height_width_change.ts +4 -6
  543. package/src/compat/patch_webkit_source_buffer.ts +11 -5
  544. package/src/compat/play.ts +1 -1
  545. package/src/compat/set_element_src.ts +1 -1
  546. package/src/compat/when_loaded_metadata.ts +1 -1
  547. package/src/compat/when_media_source_open.ts +1 -1
  548. package/src/config.ts +79 -14
  549. package/src/core/abr/README.md +7 -7
  550. package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
  551. package/src/core/abr/abr_manager.ts +62 -21
  552. package/src/core/abr/bandwidth_estimator.ts +1 -1
  553. package/src/core/abr/buffer_based_chooser.ts +85 -18
  554. package/src/core/abr/get_buffer_levels.ts +3 -0
  555. package/src/core/abr/guess_based_chooser.ts +308 -0
  556. package/src/core/abr/index.ts +7 -3
  557. package/src/core/abr/last_estimate_storage.ts +79 -0
  558. package/src/core/abr/network_analyzer.ts +75 -32
  559. package/src/core/abr/pending_requests_store.ts +72 -40
  560. package/src/core/abr/representation_estimator.ts +205 -135
  561. package/src/core/abr/representation_score_calculator.ts +33 -26
  562. package/src/core/abr/{__tests__ → utils/__tests__}/ewma.test.ts +0 -0
  563. package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_bitrate.test.ts +1 -1
  564. package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_width.test.ts +1 -1
  565. package/src/core/abr/{__tests__ → utils/__tests__}/select_optimal_representation.test.ts +1 -1
  566. package/src/core/abr/{ewma.ts → utils/ewma.ts} +0 -0
  567. package/src/core/abr/{filter_by_bitrate.ts → utils/filter_by_bitrate.ts} +2 -2
  568. package/src/core/abr/{filter_by_width.ts → utils/filter_by_width.ts} +3 -3
  569. package/src/core/abr/{select_optimal_representation.ts → utils/select_optimal_representation.ts} +2 -2
  570. package/src/core/api/README.md +4 -3
  571. package/src/core/api/__tests__/get_player_state.test.ts +58 -110
  572. package/src/core/api/__tests__/media_element_track_choice_manager.test.ts +35 -31
  573. package/src/core/api/__tests__/option_utils.test.ts +104 -17
  574. package/src/core/api/emit_seek_events.ts +21 -20
  575. package/src/core/api/get_player_state.ts +5 -7
  576. package/src/core/api/index.ts +8 -3
  577. package/src/core/api/media_element_track_choice_manager.ts +22 -3
  578. package/src/core/api/option_utils.ts +7 -7
  579. package/src/core/api/playback_observer.ts +768 -0
  580. package/src/core/api/public_api.ts +128 -130
  581. package/src/core/api/track_choice_manager.ts +82 -78
  582. package/src/core/eme/__tests__/__global__/get_license.test.ts +14 -9
  583. package/src/core/eme/__tests__/__global__/init_data.test.ts +12 -12
  584. package/src/core/eme/__tests__/__global__/media_key_system_access.test.ts +3 -1
  585. package/src/core/eme/__tests__/__global__/media_keys.test.ts +6 -8
  586. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +18 -12
  587. package/src/core/eme/__tests__/__global__/utils.ts +21 -17
  588. package/src/core/eme/__tests__/clean_old_loaded_sessions.test.ts +4 -4
  589. package/src/core/eme/__tests__/clean_old_stored_persistent_info.test.ts +3 -2
  590. package/src/core/eme/__tests__/init_media_keys.test.ts +10 -66
  591. package/src/core/eme/attach_media_keys.ts +2 -1
  592. package/src/core/eme/check_key_statuses.ts +24 -13
  593. package/src/core/eme/clean_old_loaded_sessions.ts +2 -4
  594. package/src/core/eme/clear_eme_session.ts +6 -1
  595. package/src/core/eme/create_session.ts +3 -5
  596. package/src/core/eme/dispose_media_keys.ts +2 -2
  597. package/src/core/eme/eme_manager.ts +10 -12
  598. package/src/core/eme/find_key_system.ts +17 -17
  599. package/src/core/eme/get_media_keys.ts +4 -6
  600. package/src/core/eme/get_session.ts +2 -4
  601. package/src/core/eme/init_media_keys.ts +9 -9
  602. package/src/core/eme/session_events_listener.ts +21 -18
  603. package/src/core/eme/set_server_certificate.ts +9 -5
  604. package/src/core/eme/types.ts +17 -6
  605. package/src/core/eme/utils/close_session.ts +7 -7
  606. package/src/core/eme/utils/is_session_usable.ts +1 -1
  607. package/src/core/eme/utils/loaded_sessions_store.ts +2 -2
  608. package/src/core/eme/utils/persistent_sessions_store.ts +2 -2
  609. package/src/core/fetchers/index.ts +2 -2
  610. package/src/core/fetchers/manifest/manifest_fetcher.ts +256 -109
  611. package/src/core/fetchers/segment/__tests__/prioritizer.test.ts +4 -5
  612. package/src/core/fetchers/segment/index.ts +2 -2
  613. package/src/core/fetchers/segment/prioritized_segment_fetcher.ts +48 -51
  614. package/src/core/fetchers/segment/prioritizer.ts +82 -82
  615. package/src/core/fetchers/segment/segment_fetcher.ts +396 -177
  616. package/src/core/fetchers/segment/segment_fetcher_creator.ts +56 -39
  617. package/src/core/fetchers/utils/try_urls_with_backoff.ts +123 -91
  618. package/src/core/init/__tests__/refresh_scheduled_events_list.test.ts +1 -1
  619. package/src/core/init/create_eme_manager.ts +1 -1
  620. package/src/core/init/create_media_source.ts +5 -7
  621. package/src/core/init/create_stream_playback_observer.ts +88 -0
  622. package/src/core/init/duration_updater.ts +21 -18
  623. package/src/core/init/emit_loaded_event.ts +71 -0
  624. package/src/core/init/end_of_stream.ts +2 -4
  625. package/src/core/init/events_generators.ts +4 -5
  626. package/src/core/init/get_initial_time.ts +0 -1
  627. package/src/core/init/initial_seek_and_play.ts +128 -96
  628. package/src/core/init/initialize_directfile.ts +49 -57
  629. package/src/core/init/initialize_media_source.ts +31 -31
  630. package/src/core/init/load_on_media_source.ts +70 -74
  631. package/src/core/init/manifest_update_scheduler.ts +18 -19
  632. package/src/core/init/stall_avoider.ts +142 -51
  633. package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
  634. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +24 -21
  635. package/src/core/init/stream_events_emitter/types.ts +2 -2
  636. package/src/core/init/throw_on_media_error.ts +1 -1
  637. package/src/core/init/types.ts +15 -28
  638. package/src/core/init/update_playback_rate.ts +17 -18
  639. package/src/core/segment_buffers/README.md +3 -3
  640. package/src/core/segment_buffers/garbage_collector.ts +17 -13
  641. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +46 -11
  642. package/src/core/segment_buffers/implementations/image/image_segment_buffer.ts +21 -18
  643. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +92 -18
  644. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +33 -32
  645. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +82 -6
  646. package/src/core/segment_buffers/implementations/types.ts +23 -4
  647. package/src/core/segment_buffers/implementations/utils/manual_time_ranges.ts +2 -2
  648. package/src/core/segment_buffers/index.ts +6 -1
  649. package/src/core/segment_buffers/inventory/buffered_history.ts +127 -0
  650. package/src/core/segment_buffers/inventory/index.ts +28 -0
  651. package/src/core/segment_buffers/{segment_inventory.ts → inventory/segment_inventory.ts} +85 -52
  652. package/{dist/_esm5.processed/manifest/are_same_content.js → src/core/segment_buffers/inventory/types.ts} +19 -11
  653. package/src/core/segment_buffers/segment_buffers_store.ts +4 -13
  654. package/src/core/stream/adaptation/adaptation_stream.ts +90 -65
  655. package/src/core/stream/adaptation/create_representation_estimator.ts +19 -45
  656. package/src/core/stream/adaptation/index.ts +2 -2
  657. package/src/core/stream/events_generators.ts +31 -7
  658. package/src/core/stream/index.ts +2 -2
  659. package/src/core/stream/orchestrator/active_period_emitter.ts +9 -11
  660. package/src/core/stream/orchestrator/are_streams_complete.ts +4 -6
  661. package/src/core/stream/orchestrator/get_blacklisted_ranges.ts +1 -1
  662. package/src/core/stream/orchestrator/index.ts +2 -2
  663. package/src/core/stream/orchestrator/stream_orchestrator.ts +70 -62
  664. package/src/core/stream/period/create_empty_adaptation_stream.ts +14 -10
  665. package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
  666. package/src/core/stream/period/index.ts +2 -2
  667. package/src/core/stream/period/period_stream.ts +126 -85
  668. package/src/core/stream/reload_after_switch.ts +70 -0
  669. package/src/core/stream/representation/append_segment_to_buffer.ts +21 -17
  670. package/src/core/stream/representation/downloading_queue.ts +502 -0
  671. package/src/core/stream/representation/force_garbage_collection.ts +20 -29
  672. package/src/core/stream/representation/get_buffer_status.ts +15 -13
  673. package/src/core/stream/representation/get_needed_segments.ts +135 -6
  674. package/src/core/stream/representation/get_segment_priority.ts +8 -10
  675. package/src/core/stream/representation/index.ts +2 -2
  676. package/src/core/stream/representation/push_init_segment.ts +19 -16
  677. package/src/core/stream/representation/push_media_segment.ts +21 -17
  678. package/src/core/stream/representation/representation_stream.ts +238 -307
  679. package/src/core/stream/types.ts +91 -39
  680. package/src/errors/request_error.ts +4 -1
  681. package/src/experimental/features/__tests__/dash_wasm.test.ts +2 -0
  682. package/src/experimental/tools/VideoThumbnailLoader/create_request.ts +47 -30
  683. package/src/experimental/tools/VideoThumbnailLoader/get_content_infos.ts +1 -2
  684. package/src/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.ts +41 -72
  685. package/src/experimental/tools/VideoThumbnailLoader/load_segments.ts +20 -13
  686. package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +7 -7
  687. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +13 -27
  688. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +38 -37
  689. package/src/experimental/tools/VideoThumbnailLoader/types.ts +0 -1
  690. package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +56 -47
  691. package/src/experimental/tools/createMetaplaylist/index.ts +1 -1
  692. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +6 -4
  693. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +3 -3
  694. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +5 -7
  695. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaContentType.test.ts +7 -7
  696. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaDisplayInfos.test.ts +1 -0
  697. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +12 -4
  698. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
  699. package/src/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.ts +12 -2
  700. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts +6 -1
  701. package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
  702. package/src/features/__tests__/initialize_features.test.ts +207 -110
  703. package/src/features/initialize_features.ts +40 -37
  704. package/src/features/list/__tests__/bif_parser.test.ts +2 -0
  705. package/src/features/list/__tests__/dash.test.ts +2 -0
  706. package/src/features/list/__tests__/directfile.test.ts +2 -0
  707. package/src/features/list/__tests__/eme.test.ts +2 -0
  708. package/src/features/list/__tests__/html_sami_parser.test.ts +2 -0
  709. package/src/features/list/__tests__/html_srt_parser.test.ts +2 -0
  710. package/src/features/list/__tests__/html_text_buffer.test.ts +2 -0
  711. package/src/features/list/__tests__/html_ttml_parser.test.ts +2 -0
  712. package/src/features/list/__tests__/html_vtt_parser.test.ts +2 -0
  713. package/src/features/list/__tests__/image_buffer.test.ts +2 -0
  714. package/src/features/list/__tests__/native_sami_parser.test.ts +2 -0
  715. package/src/features/list/__tests__/native_srt_parser.test.ts +2 -0
  716. package/src/features/list/__tests__/native_text_buffer.test.ts +2 -0
  717. package/src/features/list/__tests__/native_ttml_parser.test.ts +2 -0
  718. package/src/features/list/__tests__/native_vtt_parser.test.ts +2 -0
  719. package/src/features/list/__tests__/smooth.test.ts +2 -0
  720. package/src/features/types.ts +3 -11
  721. package/src/index.ts +2 -2
  722. package/src/manifest/__tests__/adaptation.test.ts +0 -79
  723. package/src/manifest/__tests__/manifest.test.ts +68 -67
  724. package/src/manifest/__tests__/period.test.ts +142 -118
  725. package/src/manifest/__tests__/update_period_in_place.test.ts +85 -62
  726. package/src/manifest/__tests__/update_periods.test.ts +33 -12
  727. package/src/manifest/adaptation.ts +17 -51
  728. package/src/manifest/index.ts +15 -2
  729. package/src/manifest/manifest.ts +31 -18
  730. package/src/manifest/period.ts +13 -20
  731. package/src/manifest/representation.ts +3 -3
  732. package/src/manifest/representation_index/__tests__/static.test.ts +1 -0
  733. package/src/manifest/representation_index/static.ts +1 -0
  734. package/src/manifest/representation_index/types.ts +43 -21
  735. package/src/manifest/types.ts +97 -3
  736. package/src/manifest/{are_same_content.ts → utils.ts} +26 -9
  737. package/src/minimal.ts +3 -2
  738. package/src/parsers/containers/isobmff/get_box.ts +35 -8
  739. package/src/parsers/containers/isobmff/read.ts +32 -5
  740. package/src/parsers/containers/isobmff/utils.ts +52 -47
  741. package/src/parsers/manifest/dash/common/__tests__/attach_trickmode_track.test.ts +7 -4
  742. package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +4 -4
  743. package/src/parsers/manifest/dash/common/__tests__/get_periods_time_infos.test.ts +29 -6
  744. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
  745. package/src/parsers/manifest/dash/common/attach_trickmode_track.ts +5 -8
  746. package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +4 -2
  747. package/src/parsers/manifest/dash/common/get_clock_offset.ts +3 -3
  748. package/src/parsers/manifest/dash/common/get_hdr_information.ts +1 -1
  749. package/src/parsers/manifest/dash/common/get_http_utc-timing_url.ts +15 -6
  750. package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
  751. package/src/parsers/manifest/dash/common/indexes/base.ts +11 -9
  752. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +5 -2
  753. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +10 -10
  754. package/src/parsers/manifest/dash/common/indexes/list.ts +20 -17
  755. package/src/parsers/manifest/dash/common/indexes/template.ts +30 -22
  756. package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
  757. package/src/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.ts +10 -9
  758. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +63 -27
  759. package/src/parsers/manifest/dash/common/indexes/tokens.ts +4 -4
  760. package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
  761. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
  762. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +64 -73
  763. package/src/parsers/manifest/dash/common/parse_mpd.ts +33 -24
  764. package/src/parsers/manifest/dash/common/parse_periods.ts +115 -87
  765. package/src/parsers/manifest/dash/common/parse_representation_index.ts +88 -80
  766. package/src/parsers/manifest/dash/common/parse_representations.ts +61 -64
  767. package/src/parsers/manifest/dash/common/resolve_base_urls.ts +33 -24
  768. package/src/parsers/manifest/dash/js-parser/__tests__/parse_from_document.test.ts +1 -1
  769. package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +12 -0
  770. package/src/parsers/manifest/dash/js-parser/node_parsers/BaseURL.ts +13 -9
  771. package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +28 -0
  772. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.ts +8 -5
  773. package/src/parsers/manifest/dash/js-parser/node_parsers/utils.ts +3 -0
  774. package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +5 -2
  775. package/src/parsers/manifest/dash/node_parser_types.ts +66 -29
  776. package/src/parsers/manifest/dash/parsers_types.ts +11 -5
  777. package/src/parsers/manifest/dash/wasm-parser/Cargo.lock +4 -2
  778. package/src/parsers/manifest/dash/wasm-parser/Cargo.toml +1 -1
  779. package/src/parsers/manifest/dash/wasm-parser/rs/events.rs +43 -0
  780. package/src/parsers/manifest/dash/wasm-parser/rs/lib.rs +1 -8
  781. package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +41 -8
  782. package/src/parsers/manifest/dash/wasm-parser/rs/processor/mod.rs +75 -521
  783. package/src/parsers/manifest/dash/wasm-parser/rs/reportable.rs +22 -1
  784. package/src/parsers/manifest/dash/wasm-parser/rs/utils.rs +40 -1
  785. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +10 -19
  786. package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +13 -0
  787. package/src/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.ts +8 -1
  788. package/src/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.ts +25 -0
  789. package/src/parsers/manifest/dash/wasm-parser/ts/generators/MPD.ts +26 -0
  790. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Period.ts +34 -0
  791. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +26 -0
  792. package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.ts +6 -0
  793. package/src/parsers/manifest/dash/wasm-parser/ts/generators/XLink.ts +7 -0
  794. package/src/parsers/manifest/dash/wasm-parser/ts/generators/root.ts +7 -0
  795. package/src/parsers/manifest/dash/wasm-parser/ts/parsers_stack.ts +0 -1
  796. package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +31 -1
  797. package/src/parsers/manifest/local/representation_index.ts +2 -0
  798. package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +6 -5
  799. package/src/parsers/manifest/smooth/create_parser.ts +24 -22
  800. package/src/parsers/manifest/smooth/representation_index.ts +17 -15
  801. package/src/parsers/manifest/types.ts +28 -28
  802. package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +39 -36
  803. package/src/parsers/manifest/utils/check_manifest_ids.ts +2 -2
  804. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +16 -7
  805. package/src/parsers/manifest/utils/index_helpers.ts +22 -12
  806. package/src/parsers/manifest/utils/is_segment_still_available.ts +4 -6
  807. package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
  808. package/src/parsers/texttracks/sami/html.ts +1 -1
  809. package/src/parsers/texttracks/sami/native.ts +1 -1
  810. package/src/parsers/texttracks/srt/html.ts +16 -10
  811. package/src/parsers/texttracks/ttml/html/apply_font_size.ts +11 -1
  812. package/src/parsers/texttracks/ttml/nodes.ts +2 -1
  813. package/src/parsers/texttracks/webvtt/html/__tests__/convert_payload_to_html.test.ts +9 -6
  814. package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
  815. package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
  816. package/src/public_types.ts +18 -0
  817. package/src/transports/README.md +8 -4
  818. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +68 -27
  819. package/src/transports/dash/image_pipelines.ts +58 -45
  820. package/src/transports/dash/init_segment_loader.ts +68 -45
  821. package/src/transports/dash/low_latency_segment_loader.ts +52 -68
  822. package/src/transports/dash/manifest_parser.ts +148 -78
  823. package/src/transports/dash/pipelines.ts +10 -10
  824. package/src/transports/dash/segment_loader.ts +117 -90
  825. package/src/transports/dash/segment_parser.ts +46 -45
  826. package/src/transports/dash/text_loader.ts +55 -34
  827. package/src/transports/dash/text_parser.ts +91 -78
  828. package/src/transports/local/pipelines.ts +19 -21
  829. package/src/transports/local/segment_loader.ts +86 -40
  830. package/src/transports/local/segment_parser.ts +31 -38
  831. package/src/transports/local/text_parser.ts +82 -74
  832. package/src/transports/metaplaylist/manifest_loader.ts +17 -15
  833. package/src/transports/metaplaylist/pipelines.ts +158 -181
  834. package/src/transports/smooth/extract_timings_infos.ts +1 -1
  835. package/src/transports/smooth/isobmff/create_boxes.ts +5 -5
  836. package/src/transports/smooth/isobmff/create_video_init_segment.ts +1 -4
  837. package/src/transports/smooth/pipelines.ts +206 -187
  838. package/src/transports/smooth/segment_loader.ts +138 -87
  839. package/src/transports/smooth/utils.ts +13 -0
  840. package/src/transports/types.ts +639 -439
  841. package/src/transports/utils/__tests__/check_isobmff_integrity.test.ts +24 -24
  842. package/src/transports/utils/__tests__/infer_segment_container.test.ts +31 -30
  843. package/src/transports/utils/call_custom_manifest_loader.ts +83 -60
  844. package/src/transports/utils/generate_manifest_loader.ts +34 -12
  845. package/src/transports/utils/get_isobmff_timing_infos.ts +6 -1
  846. package/src/transports/utils/parse_text_track.ts +4 -2
  847. package/src/typings/globals.d.ts +57 -40
  848. package/src/utils/__tests__/array_find.test.ts +5 -5
  849. package/src/utils/__tests__/array_find_index.test.ts +6 -5
  850. package/src/utils/__tests__/array_includes.test.ts +1 -0
  851. package/src/utils/__tests__/assert.test.ts +38 -21
  852. package/src/utils/__tests__/assert_unreachable.test.ts +8 -7
  853. package/src/utils/__tests__/concat_map_latest.test.ts +7 -9
  854. package/src/utils/__tests__/defer_subscriptions.test.ts +4 -4
  855. package/src/utils/__tests__/event_emitter.test.ts +1 -1
  856. package/src/utils/__tests__/flat_map.test.ts +18 -6
  857. package/src/utils/__tests__/id_generator.test.ts +3 -3
  858. package/src/utils/__tests__/initialization_segment_cache.test.ts +7 -0
  859. package/src/utils/__tests__/promise.test.ts +1 -1
  860. package/src/utils/__tests__/starts_with.test.ts +2 -0
  861. package/src/utils/array_find.ts +11 -3
  862. package/src/utils/array_find_index.ts +11 -3
  863. package/src/utils/assert.ts +5 -2
  864. package/src/utils/cancellable_sleep.ts +51 -0
  865. package/src/utils/cast_to_observable.ts +12 -13
  866. package/src/utils/concat_map_latest.ts +2 -4
  867. package/src/utils/defer_subscriptions.ts +1 -1
  868. package/src/utils/filter_map.ts +2 -4
  869. package/src/utils/flat_map.ts +10 -8
  870. package/src/utils/id_generator.ts +2 -1
  871. package/src/utils/object_assign.ts +1 -1
  872. package/src/utils/reference.ts +234 -0
  873. package/src/utils/request/fetch.ts +175 -147
  874. package/src/utils/request/index.ts +6 -6
  875. package/src/utils/request/xhr.ts +144 -128
  876. package/src/utils/rx-from_cancellable_promise.ts +66 -0
  877. package/src/utils/rx-retry_with_backoff.ts +2 -4
  878. package/src/utils/task_canceller.ts +326 -0
  879. package/src/utils/uniq.ts +1 -1
  880. package/tsconfig.json +5 -1
  881. package/tsconfig.modules.json +9 -3
  882. package/dist/_esm5.processed/compat/is_playback_stuck.d.ts +0 -28
  883. package/dist/_esm5.processed/compat/is_playback_stuck.js +0 -33
  884. package/dist/_esm5.processed/core/abr/cached_segment_detector.js +0 -60
  885. package/dist/_esm5.processed/core/abr/create_filters.d.ts +0 -27
  886. package/dist/_esm5.processed/core/abr/create_filters.js +0 -52
  887. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
  888. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
  889. package/dist/_esm5.processed/core/api/clock.d.ts +0 -129
  890. package/dist/_esm5.processed/core/api/clock.js +0 -335
  891. package/dist/_esm5.processed/core/fetchers/manifest/get_manifest_backoff_options.js +0 -38
  892. package/dist/_esm5.processed/core/fetchers/segment/create_segment_loader.d.ts +0 -98
  893. package/dist/_esm5.processed/core/fetchers/segment/create_segment_loader.js +0 -124
  894. package/dist/_esm5.processed/core/fetchers/segment/get_segment_backoff_options.js +0 -32
  895. package/dist/_esm5.processed/core/fetchers/utils/create_request_scheduler.js +0 -38
  896. package/dist/_esm5.processed/core/init/create_stream_clock.d.ts +0 -34
  897. package/dist/_esm5.processed/core/init/create_stream_clock.js +0 -56
  898. package/dist/_esm5.processed/core/stream/utils.d.ts +0 -60
  899. package/dist/_esm5.processed/core/stream/utils.js +0 -70
  900. package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.d.ts +0 -31
  901. package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.js +0 -37
  902. package/dist/_esm5.processed/transports/utils/return_parsed_manifest.js +0 -32
  903. package/scripts/clean-up_builds +0 -18
  904. package/scripts/doc-generator/construct_html.js +0 -135
  905. package/scripts/doc-generator/construct_page_list.js +0 -120
  906. package/scripts/doc-generator/create_for_dir.js +0 -151
  907. package/scripts/doc-generator/get_files_to_convert.js +0 -71
  908. package/scripts/doc-generator/mkdir_parent.js +0 -21
  909. package/scripts/doc-generator/read_title_from_md.js +0 -22
  910. package/scripts/doc-generator/remove_toc_from_md.js +0 -20
  911. package/scripts/generate_builds +0 -224
  912. package/scripts/list-npm-scripts-info.js +0 -39
  913. package/src/compat/is_playback_stuck.ts +0 -42
  914. package/src/core/abr/cached_segment_detector.ts +0 -86
  915. package/src/core/abr/create_filters.ts +0 -59
  916. package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
  917. package/src/core/api/clock.ts +0 -497
  918. package/src/core/fetchers/manifest/get_manifest_backoff_options.ts +0 -50
  919. package/src/core/fetchers/segment/create_segment_loader.ts +0 -251
  920. package/src/core/fetchers/segment/get_segment_backoff_options.ts +0 -45
  921. package/src/core/fetchers/utils/create_request_scheduler.ts +0 -56
  922. package/src/core/init/create_stream_clock.ts +0 -94
  923. package/src/core/stream/utils.ts +0 -97
  924. package/src/parsers/manifest/dash/common/extract_minimum_availability_time_offset.ts +0 -41
  925. package/src/transports/utils/return_parsed_manifest.ts +0 -47
@@ -178,12 +178,12 @@ export interface ISmoothRepresentationIndexContextInformation {
178
178
 
179
179
  /** Information allowing to generate a Smooth initialization segment. */
180
180
  interface ISmoothInitSegmentPrivateInfos {
181
- bitsPerSample? : number;
182
- channels? : number;
183
- codecPrivateData? : string;
184
- packetSize? : number;
185
- samplingRate? : number;
186
- protection? : { keyId : Uint8Array };
181
+ bitsPerSample? : number | undefined;
182
+ channels? : number | undefined;
183
+ codecPrivateData? : string | undefined;
184
+ packetSize? : number | undefined;
185
+ samplingRate? : number | undefined;
186
+ protection? : { keyId : Uint8Array } | undefined;
187
187
  }
188
188
 
189
189
  /**
@@ -198,13 +198,13 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
198
198
  * Information needed to generate an initialization segment.
199
199
  * Taken from the Manifest.
200
200
  */
201
- private _initSegmentInfos : { codecPrivateData? : string;
202
- bitsPerSample? : number;
203
- channels? : number;
204
- packetSize? : number;
205
- samplingRate? : number;
201
+ private _initSegmentInfos : { codecPrivateData? : string | undefined;
202
+ bitsPerSample? : number | undefined;
203
+ channels? : number | undefined;
204
+ packetSize? : number | undefined;
205
+ samplingRate? : number | undefined;
206
206
  timescale : number;
207
- protection? : { keyId : Uint8Array }; };
207
+ protection? : { keyId : Uint8Array } | undefined; };
208
208
 
209
209
  /**
210
210
  * if `true`, this class will return segments even if we're not sure they had
@@ -225,13 +225,13 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
225
225
  * Useful to know if a segment present in the timeline has actually been
226
226
  * generated on the server-side
227
227
  */
228
- private _scaledLiveGap? : number;
228
+ private _scaledLiveGap : number | undefined;
229
229
 
230
230
  /**
231
231
  * Defines the end of the latest available segment when this index was known to
232
232
  * be valid, in the index's timescale.
233
233
  */
234
- private _initialScaledLastPosition? : number;
234
+ private _initialScaledLastPosition : number | undefined;
235
235
 
236
236
  /**
237
237
  * Defines the earliest time when this index was known to be valid (that is, when
@@ -312,7 +312,8 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
312
312
  time: 0,
313
313
  end: 0,
314
314
  duration: 0,
315
- timescale: 1 };
315
+ timescale: 1,
316
+ complete: true };
316
317
  }
317
318
 
318
319
  /**
@@ -362,6 +363,7 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
362
363
  timescale: 1 as const,
363
364
  number,
364
365
  mediaURLs: [replaceSegmentSmoothTokens(media, time)],
366
+ complete: true,
365
367
  privateInfos: { smoothMediaSegment: { time,
366
368
  duration } } };
367
369
  segments.push(segment);
@@ -18,8 +18,8 @@ import { IRepresentationIndex } from "../../manifest";
18
18
  import { IHDRInformation } from "../../manifest/types";
19
19
 
20
20
  export interface IManifestStreamEvent { start: number;
21
- end?: number;
22
- id?: string;
21
+ end?: number | undefined;
22
+ id?: string | undefined;
23
23
  data: IParsedStreamEventData; }
24
24
 
25
25
  export interface IParsedStreamEventData {
@@ -33,7 +33,7 @@ export interface IParsedStreamEventData {
33
33
 
34
34
  /** Describes information about an encryption Key ID of a given media. */
35
35
  export interface IContentProtectionKID { keyId : Uint8Array;
36
- systemId?: string; }
36
+ systemId?: string | undefined; }
37
37
 
38
38
  /**
39
39
  * Encryption initialization data.
@@ -92,37 +92,37 @@ export interface IParsedRepresentation {
92
92
  id: string;
93
93
 
94
94
  /** Codec(s) associated with this Representation. */
95
- codecs?: string;
95
+ codecs?: string | undefined;
96
96
  /**
97
97
  * Information about the encryption associated with this Representation.
98
98
  * Not set if unknown or if the content is not encrypted.
99
99
  */
100
- contentProtections? : IContentProtections;
100
+ contentProtections? : IContentProtections | undefined;
101
101
  /**
102
102
  * Frame rate (images per seconds) associated with this Representation.
103
103
  * Not set if unknown or if it makes no sense (e.g. for subtitles).
104
104
  */
105
- frameRate?: string;
105
+ frameRate?: string | undefined;
106
106
  /**
107
107
  * Height (top to bottom) in pixels this Representation has.
108
108
  * Not set if unknown or if it makes no sense (e.g. for audio).
109
109
  */
110
- height?: number;
110
+ height?: number | undefined;
111
111
  /**
112
112
  * Defines the mime-type of the content.
113
113
  * This allows to deduce the media container but most of the time, the
114
114
  * `codecs` will also be needed to know how to decode that media.
115
115
  */
116
- mimeType?: string;
116
+ mimeType?: string | undefined;
117
117
  /**
118
118
  * Width (left to right) in pixels this Representation has.
119
119
  * Not set if unknown or if it makes no sense (e.g. for audio).
120
120
  */
121
- width?: number;
121
+ width?: number | undefined;
122
122
  /**
123
123
  * Information about the HDR characteristic of a content.
124
124
  */
125
- hdrInfo?: IHDRInformation;
125
+ hdrInfo?: IHDRInformation | undefined;
126
126
  }
127
127
 
128
128
  /** Every possible types an Adaptation can have. */
@@ -155,34 +155,34 @@ export interface IParsedAdaptation {
155
155
  * Not set if unknown or if it makes no sense for the current track (e.g. for
156
156
  * a video track).
157
157
  */
158
- audioDescription? : boolean;
158
+ audioDescription? : boolean | undefined;
159
159
  /**
160
160
  * Whether this Adaptation are closed captions for the hard of hearing.
161
161
  * Not set if unknown or if it makes no sense for the current track (e.g. for
162
162
  * a video track).
163
163
  */
164
- closedCaption? : boolean;
164
+ closedCaption? : boolean | undefined;
165
165
  /**
166
166
  * If true this Adaptation is in a dub: it was recorded in another language
167
167
  * than the original(s) one(s).
168
168
  */
169
- isDub? : boolean;
169
+ isDub? : boolean | undefined;
170
170
  /**
171
171
  * If true this Adaptation is in a sign interpreted: which is a variant of the
172
172
  * video with sign language.
173
173
  */
174
- isSignInterpreted? : boolean;
174
+ isSignInterpreted? : boolean | undefined;
175
175
  /** Tells if the track is a trick mode track. */
176
- isTrickModeTrack? : boolean;
176
+ isTrickModeTrack? : boolean | undefined;
177
177
  /**
178
178
  * Language the `Adaptation` is in.
179
179
  * Not set if unknown or if it makes no sense for the current track.
180
180
  */
181
- language?: string;
181
+ language?: string | undefined;
182
182
  /**
183
183
  * TrickMode tracks attached to the adaptation.
184
184
  */
185
- trickModeTracks?: IParsedAdaptation[];
185
+ trickModeTracks?: IParsedAdaptation[] | undefined;
186
186
  }
187
187
 
188
188
  /** Information on a given period of time in the Manifest */
@@ -205,18 +205,18 @@ export interface IParsedPeriod {
205
205
  * Duration of the Period (from the start to the end), in seconds.
206
206
  * `undefined` if the Period is the last one and is still being updated.
207
207
  */
208
- duration? : number;
208
+ duration? : number | undefined;
209
209
  /**
210
210
  * Time at which the Period ends, in seconds.
211
211
  * `undefined` if the Period is the last one and is still
212
212
  * being updated.
213
213
  */
214
- end? : number;
214
+ end? : number | undefined;
215
215
  /**
216
216
  * Array containing every stream event from period in manifest.
217
217
  * `undefined` if no parsed stream event in manifest.
218
218
  */
219
- streamEvents?: IManifestStreamEvent[];
219
+ streamEvents?: IManifestStreamEvent[] | undefined;
220
220
  }
221
221
 
222
222
  /** Information on the whole content */
@@ -240,23 +240,23 @@ export interface IParsedManifest {
240
240
  * The wall-clock time when the manifest was generated and published at the
241
241
  * origin server
242
242
  */
243
- publishTime?: number;
243
+ publishTime? : number | undefined;
244
244
  /** Underlying transport protocol: "smooth", "dash", "metaplaylist" etc. */
245
245
  transportType: string;
246
246
  /** Base time from which the segments are generated. */
247
- availabilityStartTime? : number;
247
+ availabilityStartTime? : number | undefined;
248
248
  /**
249
249
  * Offset, in milliseconds, the client's clock (in terms of `performance.now`)
250
250
  * has relatively to the server's
251
251
  */
252
- clockOffset?: number;
252
+ clockOffset? : number | undefined;
253
253
  /** If set, the Manifest needs to be updated when that Promise resolves. */
254
- expired? : Promise<void>;
254
+ expired? : Promise<void> | undefined;
255
255
  /**
256
256
  * Duration of the validity of this Manifest from its download time.
257
257
  * After that time has elapsed, the Manifest should be refreshed.
258
258
  */
259
- lifetime?: number;
259
+ lifetime? : number | undefined;
260
260
  /**
261
261
  * Data allowing to calculate the minimum and maximum seekable positions at
262
262
  * any given time.
@@ -266,7 +266,7 @@ export interface IParsedManifest {
266
266
  * The minimum time, in seconds, available in this Manifest.
267
267
  * `undefined` if that value is unknown.
268
268
  */
269
- absoluteMinimumTime? : number;
269
+ absoluteMinimumTime? : number | undefined;
270
270
  /**
271
271
  * Some dynamic contents have the concept of a "window depth" (or "buffer
272
272
  * depth") which allows to set a minimum position for all reachable
@@ -311,8 +311,8 @@ export interface IParsedManifest {
311
311
  * Suggested delay from the last position the player should start from by
312
312
  * default.
313
313
  */
314
- suggestedPresentationDelay? : number;
314
+ suggestedPresentationDelay? : number | undefined;
315
315
  /** URIs where the manifest can be refreshed by order of importance. */
316
- uris?: string[];
316
+ uris? : string[] | undefined;
317
317
  }
318
318
 
@@ -26,7 +26,7 @@ import { IIndexSegment } from "../index_helpers";
26
26
  describe("Manifest Parsers utils - updateSegmentTimeline", () => {
27
27
  let logWarnSpy : jest.MockInstance<void, unknown[]> | undefined;
28
28
  let updateSegmentTimeline : ((a : IIndexSegment[],
29
- b : IIndexSegment[]) => void) | undefined;
29
+ b : IIndexSegment[]) => boolean) | undefined;
30
30
  beforeEach(() => {
31
31
  jest.resetModules();
32
32
 
@@ -44,7 +44,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
44
44
  const oldTimeline : IIndexSegment[] = [];
45
45
  const newTimeline1 = [{ start: 0, duration: 1000, repeatCount: 10 }];
46
46
  const newTimeline2 : IIndexSegment[] = [];
47
- updateSegmentTimeline?.(oldTimeline, newTimeline1);
47
+ expect(updateSegmentTimeline?.(oldTimeline, newTimeline1)).toEqual(true);
48
48
  expect(oldTimeline).toEqual(newTimeline1);
49
49
 
50
50
  oldTimeline.length = 0; // reset
@@ -57,7 +57,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
57
57
  const oldTimeline = [{ start: 0, duration: 1000, repeatCount: 10 }];
58
58
  const newTimeline : IIndexSegment[] = [];
59
59
  const oldTimelineCloned = oldTimeline.slice();
60
- updateSegmentTimeline?.(oldTimeline, newTimeline);
60
+ expect(updateSegmentTimeline?.(oldTimeline, newTimeline)).toEqual(false);
61
61
  expect(oldTimeline).toEqual(oldTimelineCloned);
62
62
  expect(logWarnSpy).not.toHaveBeenCalled();
63
63
  });
@@ -66,7 +66,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
66
66
  const oldTimeline1 = [{ start: 0, duration: 1000, repeatCount: 10 }];
67
67
  const newTimeline1 = [{ start: 0, duration: 1000, repeatCount: 10 }];
68
68
  const oldTimeline1Cloned = oldTimeline1.slice();
69
- updateSegmentTimeline?.(oldTimeline1, newTimeline1);
69
+ expect(updateSegmentTimeline?.(oldTimeline1, newTimeline1)).toEqual(false);
70
70
  expect(oldTimeline1).toEqual(oldTimeline1Cloned);
71
71
 
72
72
  const oldTimeline2 = [ { start: 0, duration: 1000, repeatCount: 10 },
@@ -76,7 +76,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
76
76
  { start: 11000, duration: 1000, repeatCount: 0 },
77
77
  { start: 12000, duration: 1000, repeatCount: 1 } ];
78
78
  const oldTimeline2Cloned = oldTimeline2.slice();
79
- updateSegmentTimeline?.(oldTimeline2, newTimeline2);
79
+ expect(updateSegmentTimeline?.(oldTimeline2, newTimeline2)).toEqual(false);
80
80
  expect(oldTimeline2).toEqual(oldTimeline2Cloned);
81
81
  expect(logWarnSpy).not.toHaveBeenCalled();
82
82
  });
@@ -93,14 +93,19 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
93
93
 
94
94
  let err = null;
95
95
  try {
96
- updateSegmentTimeline?.(oldTimeline1, newTimeline1);
96
+ expect(updateSegmentTimeline?.(oldTimeline1, newTimeline1)).not.toHaveReturned();
97
97
  } catch (e) {
98
98
  err = e;
99
99
  }
100
100
 
101
- expect(err).not.toBeNull();
102
- expect(err.type).toEqual("MEDIA_ERROR");
103
- expect(err.code).toEqual("MANIFEST_UPDATE_ERROR");
101
+ expect(err).toBeInstanceOf(Error);
102
+
103
+ // Impossible check to shut-up TypeScript
104
+ if (!(err instanceof Error)) {
105
+ throw new Error("Impossible: already checked it was an Error instance");
106
+ }
107
+ expect((err as { type? : string }).type).toEqual("MEDIA_ERROR");
108
+ expect((err as { code? : string }).code).toEqual("MANIFEST_UPDATE_ERROR");
104
109
  expect(err.message)
105
110
  .toEqual("MediaError (MANIFEST_UPDATE_ERROR) Cannot perform " +
106
111
  "partial update: not enough data");
@@ -116,7 +121,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
116
121
  { start: 25100, duration: 1000, repeatCount: 1 } ];
117
122
  const oldTimeline1Cloned = oldTimeline1.slice();
118
123
  const newTimeline1Cloned = newTimeline1.slice();
119
- updateSegmentTimeline?.(oldTimeline1, newTimeline1);
124
+ expect(updateSegmentTimeline?.(oldTimeline1, newTimeline1)).toEqual(false);
120
125
  expect(oldTimeline1).toEqual([...oldTimeline1Cloned, ...newTimeline1Cloned]);
121
126
  expect(logWarnSpy).not.toHaveBeenCalled();
122
127
 
@@ -129,7 +134,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
129
134
  { start: 25100, duration: 1000, repeatCount: 1 } ];
130
135
  const oldTimeline2Cloned = oldTimeline2.slice();
131
136
  const newTimeline2Cloned = newTimeline2.slice();
132
- updateSegmentTimeline?.(oldTimeline2, newTimeline2);
137
+ expect(updateSegmentTimeline?.(oldTimeline2, newTimeline2)).toEqual(false);
133
138
  expect(oldTimeline2).toEqual([...oldTimeline2Cloned, ...newTimeline2Cloned]);
134
139
  expect(logWarnSpy).not.toHaveBeenCalled();
135
140
  });
@@ -142,7 +147,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
142
147
  const newTimeline1 = [ { start: 12000, duration: 1000, repeatCount: 11 },
143
148
  { start: 24000, duration: 1100, repeatCount: 0 },
144
149
  { start: 25100, duration: 1000, repeatCount: 1 } ];
145
- updateSegmentTimeline?.(oldTimeline1, newTimeline1);
150
+ expect(updateSegmentTimeline?.(oldTimeline1, newTimeline1)).toEqual(false);
146
151
  expect(oldTimeline1).toEqual([
147
152
  { start: 0, duration: 500, repeatCount: 20 },
148
153
  { start: 11000, duration: 1000, repeatCount: 0 },
@@ -156,7 +161,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
156
161
  const newTimeline2 = [ { start: 20000, duration: 1000, repeatCount: 3 },
157
162
  { start: 24000, duration: 1100, repeatCount: 0 },
158
163
  { start: 25100, duration: 1000, repeatCount: 1 } ];
159
- updateSegmentTimeline?.(oldTimeline2, newTimeline2);
164
+ expect(updateSegmentTimeline?.(oldTimeline2, newTimeline2)).toEqual(false);
160
165
  expect(oldTimeline2).toEqual([
161
166
  { start: 0, duration: 500, repeatCount: 20 },
162
167
  { start: 11000, duration: 1000, repeatCount: 8 },
@@ -175,7 +180,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
175
180
  { start: 1500, duration: 1000, repeatCount: 0 },
176
181
  { start: 2500, duration: 500, repeatCount: 0 },
177
182
  { start: 3000, duration: 5000, repeatCount: 0 } ];
178
- updateSegmentTimeline?.(oldTimeline1, newTimeline1);
183
+ expect(updateSegmentTimeline?.(oldTimeline1, newTimeline1)).toEqual(false);
179
184
  expect(oldTimeline1).toEqual([
180
185
  { start: 0, duration: 1000, repeatCount: 0 },
181
186
  { start: 1000, duration: 500, repeatCount: 0 },
@@ -194,7 +199,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
194
199
  { start: 12000, duration: 1000, repeatCount: 0 },
195
200
  { start: 13000, duration: 7000, repeatCount: 0 },
196
201
  { start: 20000, duration: 5000, repeatCount: 0 } ];
197
- updateSegmentTimeline?.(oldTimeline1, newTimeline1);
202
+ expect(updateSegmentTimeline?.(oldTimeline1, newTimeline1)).toEqual(false);
198
203
  expect(oldTimeline1).toEqual([
199
204
  { start: 0, duration: 1000, repeatCount: 0 },
200
205
  { start: 1000, duration: 500, repeatCount: 21 },
@@ -210,7 +215,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
210
215
  { start: 12000, duration: 1000, repeatCount: 0 },
211
216
  { start: 13000, duration: 7000, repeatCount: 0 },
212
217
  { start: 20000, duration: 5000, repeatCount: 0 } ];
213
- updateSegmentTimeline?.(oldTimeline2, newTimeline2);
218
+ expect(updateSegmentTimeline?.(oldTimeline2, newTimeline2)).toEqual(false);
214
219
  expect(oldTimeline2).toEqual([
215
220
  { start: 1000, duration: 500, repeatCount: 21 },
216
221
  { start: 12000, duration: 1000, repeatCount: 0 },
@@ -224,7 +229,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
224
229
  { start: 12000, duration: 1000, repeatCount: 0 },
225
230
  { start: 13000, duration: 7000, repeatCount: 0 },
226
231
  { start: 20000, duration: 5000, repeatCount: 0 } ];
227
- updateSegmentTimeline?.(oldTimeline3, newTimeline3);
232
+ expect(updateSegmentTimeline?.(oldTimeline3, newTimeline3)).toEqual(false);
228
233
  expect(oldTimeline3).toEqual([
229
234
  { start: 1000, duration: 500, repeatCount: -1 },
230
235
  { start: 12000, duration: 1000, repeatCount: 0 },
@@ -242,7 +247,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
242
247
  { start: 12000, duration: 1000, repeatCount: 0 },
243
248
  { start: 13000, duration: 7000, repeatCount: 0 },
244
249
  { start: 20000, duration: 5000, repeatCount: 0 } ];
245
- updateSegmentTimeline?.(oldTimeline1, newTimeline1);
250
+ expect(updateSegmentTimeline?.(oldTimeline1, newTimeline1)).toEqual(false);
246
251
  expect(oldTimeline1).toEqual([
247
252
  { start: 0, duration: 1000, repeatCount: 0 },
248
253
  { start: 1000, duration: 500, repeatCount: 0 },
@@ -259,7 +264,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
259
264
  { start: 12000, duration: 1000, repeatCount: 0 },
260
265
  { start: 13000, duration: 7000, repeatCount: 0 },
261
266
  { start: 20000, duration: 5000, repeatCount: 0 } ];
262
- updateSegmentTimeline?.(oldTimeline2, newTimeline2);
267
+ expect(updateSegmentTimeline?.(oldTimeline2, newTimeline2)).toEqual(false);
263
268
  expect(oldTimeline2).toEqual([
264
269
  { start: 0, duration: 1000, repeatCount: 0 },
265
270
  { start: 1000, duration: 500, repeatCount: 3 },
@@ -282,7 +287,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
282
287
  { start: 12700, duration: 1000, repeatCount: 0 },
283
288
  { start: 13700, duration: 7000, repeatCount: 0 },
284
289
  { start: 20700, duration: 5000, repeatCount: 0 } ];
285
- updateSegmentTimeline?.(oldTimeline1, newTimeline1);
290
+ expect(updateSegmentTimeline?.(oldTimeline1, newTimeline1)).toEqual(false);
286
291
  expect(oldTimeline1).toEqual([
287
292
  { start: 0, duration: 1000, repeatCount: 0 },
288
293
  { start: 1000, duration: 500, repeatCount: 2 },
@@ -303,7 +308,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
303
308
  { start: 12700, duration: 1000, repeatCount: 0 },
304
309
  { start: 13700, duration: 7000, repeatCount: 0 },
305
310
  { start: 20700, duration: 5000, repeatCount: 0 } ];
306
- updateSegmentTimeline?.(oldTimeline2, newTimeline2);
311
+ expect(updateSegmentTimeline?.(oldTimeline2, newTimeline2)).toEqual(false);
307
312
  expect(oldTimeline2).toEqual([
308
313
  { start: 0, duration: 1000, repeatCount: 0 },
309
314
  { start: 1000, duration: 500, repeatCount: 2 },
@@ -321,7 +326,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
321
326
  const oldTimeline3 = [ { start: 0, duration: 1000, repeatCount: 0 },
322
327
  { start: 1000, duration: 500, repeatCount: 21 } ];
323
328
  const newTimeline3 = [ { start: 2700, duration: 500, repeatCount: 19 } ];
324
- updateSegmentTimeline?.(oldTimeline3, newTimeline3);
329
+ expect(updateSegmentTimeline?.(oldTimeline3, newTimeline3)).toEqual(false);
325
330
  expect(oldTimeline3).toEqual([
326
331
  { start: 0, duration: 1000, repeatCount: 0 },
327
332
  { start: 1000, duration: 500, repeatCount: 2 },
@@ -343,7 +348,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
343
348
  { start: 12000, duration: 1000, repeatCount: 0 },
344
349
  { start: 13000, duration: 7000, repeatCount: 0 },
345
350
  { start: 20000, duration: 5000, repeatCount: 0 } ];
346
- updateSegmentTimeline?.(oldTimeline1, newTimeline1);
351
+ expect(updateSegmentTimeline?.(oldTimeline1, newTimeline1)).toEqual(false);
347
352
  expect(oldTimeline1).toEqual([
348
353
  { start: 0, duration: 1000, repeatCount: 0 },
349
354
  { start: 1000, duration: 500, repeatCount: 1 },
@@ -364,7 +369,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
364
369
  { start: 12000, duration: 1000, repeatCount: 0 },
365
370
  { start: 13000, duration: 7000, repeatCount: 0 },
366
371
  { start: 20000, duration: 5000, repeatCount: 0 } ];
367
- updateSegmentTimeline?.(oldTimeline2, newTimeline2);
372
+ expect(updateSegmentTimeline?.(oldTimeline2, newTimeline2)).toEqual(false);
368
373
  expect(oldTimeline2).toEqual([
369
374
  { start: 0, duration: 1000, repeatCount: 0 },
370
375
  { start: 1000, duration: 500, repeatCount: 1 },
@@ -381,7 +386,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
381
386
 
382
387
  const oldTimeline3 = [ { start: 1000, duration: 500, repeatCount: 21 } ];
383
388
  const newTimeline3 = [ { start: 2000, duration: 1000, repeatCount: 9 } ];
384
- updateSegmentTimeline?.(oldTimeline3, newTimeline3);
389
+ expect(updateSegmentTimeline?.(oldTimeline3, newTimeline3)).toEqual(false);
385
390
  expect(oldTimeline3).toEqual([
386
391
  { start: 1000, duration: 500, repeatCount: 1 },
387
392
  { start: 2000, duration: 1000, repeatCount: 9 },
@@ -402,10 +407,8 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
402
407
  { start: 12000, duration: 1000, repeatCount: 0 },
403
408
  { start: 13000, duration: 7000, repeatCount: 0 },
404
409
  { start: 20000, duration: 5000, repeatCount: 0 } ];
405
- updateSegmentTimeline?.(oldTimeline1, newTimeline1);
410
+ expect(updateSegmentTimeline?.(oldTimeline1, newTimeline1)).toEqual(true);
406
411
  expect(oldTimeline1).toEqual([
407
- { start: 0, duration: 1000, repeatCount: 0 },
408
- { start: 1000, duration: 500, repeatCount: 0 },
409
412
  { start: 2000, duration: 1000, repeatCount: 0 },
410
413
  { start: 3000, duration: 9000, repeatCount: 0 },
411
414
  { start: 12000, duration: 1000, repeatCount: 0 },
@@ -414,7 +417,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
414
417
  ]);
415
418
  expect(logWarnSpy).toHaveBeenCalledTimes(1);
416
419
  expect(logWarnSpy).toHaveBeenCalledWith(
417
- "RepresentationIndex: Manifest update removed previous segments"
420
+ "RepresentationIndex: Manifest update removed all previous segments"
418
421
  );
419
422
  });
420
423
 
@@ -424,7 +427,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
424
427
  const oldTimeline1 = [ { start: 0, duration: 1000, repeatCount: 0 },
425
428
  { start: 1000, duration: 500, repeatCount: 21 } ];
426
429
  const newTimeline1 = [ { start: 1000, duration: 500, repeatCount: 51 } ];
427
- updateSegmentTimeline?.(oldTimeline1, newTimeline1);
430
+ expect(updateSegmentTimeline?.(oldTimeline1, newTimeline1)).toEqual(false);
428
431
  expect(oldTimeline1).toEqual([
429
432
  { start: 0, duration: 1000, repeatCount: 0 },
430
433
  { start: 1000, duration: 500, repeatCount: 51 },
@@ -432,13 +435,13 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
432
435
 
433
436
  const oldTimeline2 = [ { start: 1000, duration: 500, repeatCount: 64 } ];
434
437
  const newTimeline2 = [ { start: 1000, duration: 500, repeatCount: 72 } ];
435
- updateSegmentTimeline?.(oldTimeline2, newTimeline2);
438
+ expect(updateSegmentTimeline?.(oldTimeline2, newTimeline2)).toEqual(false);
436
439
  expect(oldTimeline2).toEqual([ { start: 1000, duration: 500, repeatCount: 72 } ]);
437
440
 
438
441
  const oldTimeline3 = [ { start: 1000, duration: 500, repeatCount: 64 } ];
439
442
  const newTimeline3 = [ { start: 1000, duration: 500, repeatCount: 72 },
440
443
  { start: 37500, duration: 1000, repeatCount: 5 }];
441
- updateSegmentTimeline?.(oldTimeline3, newTimeline3);
444
+ expect(updateSegmentTimeline?.(oldTimeline3, newTimeline3)).toEqual(false);
442
445
  expect(oldTimeline3).toEqual([
443
446
  { start: 1000, duration: 500, repeatCount: 72 },
444
447
  { start: 37500, duration: 1000, repeatCount: 5 },
@@ -455,7 +458,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
455
458
  { start: 12000, duration: 1000, repeatCount: 0 },
456
459
  { start: 13000, duration: 7000, repeatCount: 0 },
457
460
  { start: 20000, duration: 5000, repeatCount: 0 } ];
458
- updateSegmentTimeline?.(oldTimeline1, newTimeline1);
461
+ expect(updateSegmentTimeline?.(oldTimeline1, newTimeline1)).toEqual(true);
459
462
  expect(oldTimeline1).toEqual([
460
463
  { start: 0, duration: 1000, repeatCount: 0 },
461
464
  { start: 1000, duration: 500, repeatCount: 21 },
@@ -479,7 +482,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
479
482
  { start: 12000, duration: 1000, repeatCount: 0 },
480
483
  { start: 13000, duration: 7000, repeatCount: 0 },
481
484
  { start: 20000, duration: 5000, repeatCount: 0 } ];
482
- updateSegmentTimeline?.(oldTimeline2, newTimeline2);
485
+ expect(updateSegmentTimeline?.(oldTimeline2, newTimeline2)).toEqual(true);
483
486
  expect(oldTimeline2).toEqual([
484
487
  { start: 0, duration: 1000, repeatCount: 0 },
485
488
  { start: 1000, duration: 500, repeatCount: 21 },
@@ -502,7 +505,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
502
505
  { start: 20000, duration: 5000, repeatCount: 0 } ];
503
506
  const newTimeline1 = [ { start: 0, duration: 1000, repeatCount: 0 },
504
507
  { start: 1000, duration: 500, repeatCount: 21 } ];
505
- updateSegmentTimeline?.(oldTimeline1, newTimeline1);
508
+ expect(updateSegmentTimeline?.(oldTimeline1, newTimeline1)).toEqual(false);
506
509
  expect(oldTimeline1).toEqual([
507
510
  { start: 1000, duration: 500, repeatCount: 21 },
508
511
  { start: 12000, duration: 1000, repeatCount: 0 },
@@ -524,7 +527,7 @@ describe("Manifest Parsers utils - updateSegmentTimeline", () => {
524
527
  { start: 20000, duration: 5000, repeatCount: -1 } ];
525
528
  const newTimeline2 = [ { start: 0, duration: 1000, repeatCount: 0 },
526
529
  { start: 1000, duration: 500, repeatCount: 21 } ];
527
- updateSegmentTimeline?.(oldTimeline2, newTimeline2);
530
+ expect(updateSegmentTimeline?.(oldTimeline2, newTimeline2)).toEqual(false);
528
531
  expect(oldTimeline2).toEqual([
529
532
  { start: 1000, duration: 500, repeatCount: 21 },
530
533
  { start: 12000, duration: 1000, repeatCount: 0 },
@@ -63,13 +63,13 @@ export default function checkManifestIDs(
63
63
  } else {
64
64
  adaptationIDs.push(adaptationID);
65
65
  }
66
- const representationIDs : string[] = [];
66
+ const representationIDs : Array<number|string> = [];
67
67
  adaptation.representations.forEach(representation => {
68
68
  const representationID = representation.id;
69
69
  if (arrayIncludes(representationIDs, representationID)) {
70
70
  log.warn("Two representations with the same ID found. Updating.",
71
71
  representationID);
72
- const newID = representationID + "-dup";
72
+ const newID = `${representationID}-dup`;
73
73
  representation.id = newID;
74
74
  checkManifestIDs(manifest);
75
75
  representationIDs.push(newID);
@@ -20,27 +20,33 @@ import { IIndexSegment } from "./index_helpers";
20
20
  * Remove segments which starts before the given `firstAvailablePosition` from
21
21
  * the timeline. `firstAvailablePosition` has to be time scaled.
22
22
  * @param {Array.<Object>}
23
- * @returns {number}
23
+ * @returns {number} - Returns the number of removed segments. This includes
24
+ * potential implicit segment from decremented `repeatCount` attributes.
24
25
  */
25
26
  export default function clearTimelineFromPosition(
26
27
  timeline : IIndexSegment[],
27
28
  firstAvailablePosition : number
28
- ) : void {
29
+ ) : number {
30
+ let nbEltsRemoved = 0;
29
31
  while (timeline.length > 0) {
30
32
  const firstElt = timeline[0];
31
33
  if (firstElt.start >= firstAvailablePosition) {
32
- return; // all clear
34
+ return nbEltsRemoved; // all clear
33
35
  }
34
36
 
35
- if (firstElt.repeatCount <= 0) {
37
+ if (firstElt.repeatCount === -1) {
38
+ return nbEltsRemoved;
39
+ } else if (firstElt.repeatCount === 0) {
36
40
  timeline.shift();
41
+ nbEltsRemoved += 1;
37
42
  } else { // we have a segment repetition
38
43
  const nextElt = timeline[1];
39
- if (nextElt != null && nextElt.start <= firstAvailablePosition) {
44
+ if (nextElt !== undefined && nextElt.start <= firstAvailablePosition) {
40
45
  timeline.shift();
46
+ nbEltsRemoved += 1;
41
47
  } else { // no next segment or next segment is available
42
48
  if (firstElt.duration <= 0) {
43
- return;
49
+ return nbEltsRemoved;
44
50
  }
45
51
 
46
52
  let nextStart = firstElt.start + firstElt.duration;
@@ -53,13 +59,16 @@ export default function clearTimelineFromPosition(
53
59
  }
54
60
  if (nextRepeat > firstElt.repeatCount) { // every start is before
55
61
  timeline.shift();
62
+ nbEltsRemoved = firstElt.repeatCount + 1;
56
63
  } else { // some repetitions start after and some before
57
64
  const newRepeat = firstElt.repeatCount - nextRepeat;
58
65
  firstElt.start = nextStart;
59
66
  firstElt.repeatCount = newRepeat;
60
- return;
67
+ nbEltsRemoved += nextRepeat;
68
+ return nbEltsRemoved;
61
69
  }
62
70
  }
63
71
  }
64
72
  }
73
+ return nbEltsRemoved;
65
74
  }