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
@@ -20,35 +20,29 @@
20
20
  */
21
21
 
22
22
  import {
23
- BehaviorSubject,
24
23
  combineLatest as observableCombineLatest,
24
+ Connectable,
25
25
  concat as observableConcat,
26
26
  connectable,
27
+ distinctUntilChanged,
27
28
  EMPTY,
29
+ filter,
30
+ map,
28
31
  merge as observableMerge,
32
+ mergeMap,
29
33
  Observable,
30
34
  of as observableOf,
31
35
  ReplaySubject,
32
- Subject,
33
- Subscription,
34
- } from "rxjs";
35
- // RxJS forgot to make that one more accessible it seems
36
- import { ConnectableObservableLike } from "rxjs/internal/observable/connectable";
37
- import {
38
- distinctUntilChanged,
39
- filter,
40
- map,
41
- mapTo,
42
- mergeMap,
43
- mergeMapTo,
44
36
  share,
45
37
  shareReplay,
46
38
  skipWhile,
47
39
  startWith,
48
- switchMapTo,
40
+ Subject,
41
+ Subscription,
42
+ switchMap,
49
43
  take,
50
44
  takeUntil,
51
- } from "rxjs/operators";
45
+ } from "rxjs";
52
46
  import {
53
47
  events,
54
48
  exitFullscreen,
@@ -81,7 +75,6 @@ import EventEmitter, {
81
75
  } from "../../utils/event_emitter";
82
76
  import isNullOrUndefined from "../../utils/is_null_or_undefined";
83
77
  import Logger from "../../utils/logger";
84
- import noop from "../../utils/noop";
85
78
  import objectAssign from "../../utils/object_assign";
86
79
  import PPromise from "../../utils/promise";
87
80
  import {
@@ -89,6 +82,9 @@ import {
89
82
  getPlayedSizeOfRange,
90
83
  getSizeOfRange,
91
84
  } from "../../utils/ranges";
85
+ import createSharedReference, {
86
+ ISharedReference,
87
+ } from "../../utils/reference";
92
88
  import warnOnce from "../../utils/warn_once";
93
89
  import {
94
90
  clearEMESession,
@@ -113,9 +109,6 @@ import SegmentBuffersStore, {
113
109
  IBufferType,
114
110
  } from "../segment_buffers";
115
111
  import { IInbandEvent } from "../stream";
116
- import createClock, {
117
- IClockTick,
118
- } from "./clock";
119
112
  import emitSeekEvents from "./emit_seek_events";
120
113
  import getPlayerState, {
121
114
  IPlayerState,
@@ -130,6 +123,9 @@ import {
130
123
  parseConstructorOptions,
131
124
  parseLoadVideoOptions,
132
125
  } from "./option_utils";
126
+ import PlaybackObserver, {
127
+ IPlaybackObservation,
128
+ } from "./playback_observer";
133
129
  import TrackChoiceManager, {
134
130
  IAudioTrackPreference,
135
131
  ITextTrackPreference,
@@ -146,7 +142,7 @@ import TrackChoiceManager, {
146
142
 
147
143
  const { DEFAULT_UNMUTED_VOLUME } = config;
148
144
 
149
- const { isActive,
145
+ const { isPageActive,
150
146
  isVideoVisible,
151
147
  onEnded$,
152
148
  onFullscreenChange$,
@@ -167,13 +163,13 @@ interface IPositionUpdateItem {
167
163
  /** Amount of buffer available for now in front of the current position, in seconds. */
168
164
  bufferGap : number;
169
165
  /** Current maximum seekable position. */
170
- maximumBufferTime? : number;
171
- wallClockTime? : number;
166
+ maximumBufferTime? : number | undefined;
167
+ wallClockTime? : number | undefined;
172
168
  /**
173
169
  * Only for live contents. Difference between the "live edge" and the current
174
170
  * position, in seconds.
175
171
  */
176
- liveGap? : number;
172
+ liveGap? : number | undefined;
177
173
  }
178
174
 
179
175
  /** Payload emitted with a `bitrateEstimationChange` event. */
@@ -256,10 +252,11 @@ class Player extends EventEmitter<IPublicAPIEvent> {
256
252
  private readonly _priv_destroy$ : Subject<void>;
257
253
 
258
254
  /**
259
- * Emit true when the previous content is cleaning-up, false when it's done.
260
- * A new content cannot be launched until it emits false.
255
+ * Contains `true` when the previous content is cleaning-up, `false` when it's
256
+ * done.
257
+ * A new content cannot be launched until it stores `false`.
261
258
  */
262
- private readonly _priv_contentLock$ : BehaviorSubject<boolean>;
259
+ private readonly _priv_contentLock : ISharedReference<boolean>;
263
260
 
264
261
  /**
265
262
  * Changes on "play" and "pause" events from the media elements.
@@ -267,22 +264,22 @@ class Player extends EventEmitter<IPublicAPIEvent> {
267
264
  * Switches to ``false`` whent the "pause" event was the last received.
268
265
  * ``false`` if no such event was received for the current loaded content.
269
266
  */
270
- private readonly _priv_playing$ : ReplaySubject<boolean>;
267
+ private readonly _priv_isPlaying : ISharedReference<boolean>;
271
268
 
272
269
  /**
273
270
  * The speed that should be applied to playback.
274
271
  * Used instead of videoElement.playbackRate to allow more flexibility.
275
272
  */
276
- private readonly _priv_speed$ : BehaviorSubject<number>;
273
+ private readonly _priv_speed : ISharedReference<number>;
277
274
 
278
275
  /** Store buffer-related options used needed when initializing a content. */
279
276
  private readonly _priv_bufferOptions : {
280
- /** Emit the last wanted buffer goal. */
281
- wantedBufferAhead$ : BehaviorSubject<number>;
277
+ /** Last wanted buffer goal. */
278
+ wantedBufferAhead : ISharedReference<number>;
282
279
  /** Maximum kept buffer ahead in the current position, in seconds. */
283
- maxBufferAhead$ : BehaviorSubject<number>;
280
+ maxBufferAhead : ISharedReference<number>;
284
281
  /** Maximum kept buffer behind in the current position, in seconds. */
285
- maxBufferBehind$ : BehaviorSubject<number>;
282
+ maxBufferBehind : ISharedReference<number>;
286
283
  };
287
284
 
288
285
  /** Information on the current bitrate settings. */
@@ -297,16 +294,16 @@ class Player extends EventEmitter<IPublicAPIEvent> {
297
294
  image? : number; };
298
295
 
299
296
  /** Store last wanted minAutoBitrates for the next ABRManager instanciation. */
300
- minAutoBitrates : { audio : BehaviorSubject<number>;
301
- video : BehaviorSubject<number>; };
297
+ minAutoBitrates : { audio : ISharedReference<number>;
298
+ video : ISharedReference<number>; };
302
299
 
303
300
  /** Store last wanted maxAutoBitrates for the next ABRManager instanciation. */
304
- maxAutoBitrates : { audio : BehaviorSubject<number>;
305
- video : BehaviorSubject<number>; };
301
+ maxAutoBitrates : { audio : ISharedReference<number>;
302
+ video : ISharedReference<number>; };
306
303
 
307
304
  /** Store last wanted manual bitrates for the next ABRManager instanciation. */
308
- manualBitrates : { audio : BehaviorSubject<number>;
309
- video : BehaviorSubject<number>; };
305
+ manualBitrates : { audio : ISharedReference<number>;
306
+ video : ISharedReference<number>; };
310
307
  };
311
308
 
312
309
  /**
@@ -324,7 +321,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
324
321
  * URL of the Manifest (or just of the content for DirectFile contents)
325
322
  * currently being played.
326
323
  */
327
- url? : string;
324
+ url : string | undefined;
328
325
 
329
326
  /** Subject allowing to stop playing that content. */
330
327
  stop$ : Subject<void>;
@@ -497,7 +494,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
497
494
  // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
498
495
  videoElement.preload = "auto";
499
496
 
500
- this.version = /* PLAYER_VERSION */"3.25.2";
497
+ this.version = /* PLAYER_VERSION */"3.26.3-dev.2022021400";
501
498
  this.log = log;
502
499
  this.state = "STOPPED";
503
500
  this.videoElement = videoElement;
@@ -548,26 +545,26 @@ class Player extends EventEmitter<IPublicAPIEvent> {
548
545
  )
549
546
  .subscribe((x : TextTrack[]) => this._priv_onNativeTextTracksNext(x));
550
547
 
551
- this._priv_playing$ = new ReplaySubject(1);
552
- this._priv_speed$ = new BehaviorSubject(videoElement.playbackRate);
548
+ this._priv_isPlaying = createSharedReference(false);
549
+ this._priv_speed = createSharedReference(videoElement.playbackRate);
553
550
  this._priv_preferTrickModeTracks = false;
554
- this._priv_contentLock$ = new BehaviorSubject<boolean>(false);
551
+ this._priv_contentLock = createSharedReference<boolean>(false);
555
552
 
556
553
  this._priv_bufferOptions = {
557
- wantedBufferAhead$: new BehaviorSubject(wantedBufferAhead),
558
- maxBufferAhead$: new BehaviorSubject(maxBufferAhead),
559
- maxBufferBehind$: new BehaviorSubject(maxBufferBehind),
554
+ wantedBufferAhead: createSharedReference(wantedBufferAhead),
555
+ maxBufferAhead: createSharedReference(maxBufferAhead),
556
+ maxBufferBehind: createSharedReference(maxBufferBehind),
560
557
  };
561
558
 
562
559
  this._priv_bitrateInfos = {
563
560
  lastBitrates: { audio: initialAudioBitrate,
564
561
  video: initialVideoBitrate },
565
- minAutoBitrates: { audio: new BehaviorSubject(minAudioBitrate),
566
- video: new BehaviorSubject(minVideoBitrate) },
567
- maxAutoBitrates: { audio: new BehaviorSubject(maxAudioBitrate),
568
- video: new BehaviorSubject(maxVideoBitrate) },
569
- manualBitrates: { audio: new BehaviorSubject(-1),
570
- video: new BehaviorSubject(-1) },
562
+ minAutoBitrates: { audio: createSharedReference(minAudioBitrate),
563
+ video: createSharedReference(minVideoBitrate) },
564
+ maxAutoBitrates: { audio: createSharedReference(maxAudioBitrate),
565
+ video: createSharedReference(maxVideoBitrate) },
566
+ manualBitrates: { audio: createSharedReference(-1),
567
+ video: createSharedReference(-1) },
571
568
  };
572
569
 
573
570
  this._priv_throttleWhenHidden = throttleWhenHidden;
@@ -624,20 +621,20 @@ class Player extends EventEmitter<IPublicAPIEvent> {
624
621
  this._priv_destroy$.next();
625
622
  this._priv_destroy$.complete();
626
623
 
627
- // Complete all subjects
628
- this._priv_playing$.complete();
629
- this._priv_speed$.complete();
630
- this._priv_contentLock$.complete();
631
- this._priv_bufferOptions.wantedBufferAhead$.complete();
632
- this._priv_bufferOptions.maxBufferAhead$.complete();
633
- this._priv_bufferOptions.maxBufferBehind$.complete();
624
+ // Complete all subjects and references
634
625
  this._priv_pictureInPictureEvent$.complete();
635
- this._priv_bitrateInfos.manualBitrates.video.complete();
636
- this._priv_bitrateInfos.manualBitrates.audio.complete();
637
- this._priv_bitrateInfos.minAutoBitrates.video.complete();
638
- this._priv_bitrateInfos.minAutoBitrates.audio.complete();
639
- this._priv_bitrateInfos.maxAutoBitrates.video.complete();
640
- this._priv_bitrateInfos.maxAutoBitrates.audio.complete();
626
+ this._priv_isPlaying.finish();
627
+ this._priv_speed.finish();
628
+ this._priv_contentLock.finish();
629
+ this._priv_bufferOptions.wantedBufferAhead.finish();
630
+ this._priv_bufferOptions.maxBufferAhead.finish();
631
+ this._priv_bufferOptions.maxBufferBehind.finish();
632
+ this._priv_bitrateInfos.manualBitrates.video.finish();
633
+ this._priv_bitrateInfos.manualBitrates.audio.finish();
634
+ this._priv_bitrateInfos.minAutoBitrates.video.finish();
635
+ this._priv_bitrateInfos.minAutoBitrates.audio.finish();
636
+ this._priv_bitrateInfos.maxAutoBitrates.video.finish();
637
+ this._priv_bitrateInfos.maxAutoBitrates.audio.finish();
641
638
 
642
639
  this._priv_lastContentPlaybackInfos = {};
643
640
 
@@ -747,16 +744,15 @@ class Player extends EventEmitter<IPublicAPIEvent> {
747
744
 
748
745
 
749
746
  const videoElement = this.videoElement;
750
- /** Global "clock" used for content playback */
751
- const { setCurrentTime, clock$ } = createClock(videoElement, {
747
+
748
+ /** Global "playback observer" which will emit playback conditions */
749
+ const playbackObserver = new PlaybackObserver(videoElement, {
752
750
  withMediaSource: !isDirectFile,
753
751
  lowLatencyMode,
754
752
  });
755
753
 
756
754
  /** Emit playback events. */
757
- let playback$ : ConnectableObservableLike<IInitEvent>;
758
-
759
- const speed$ = this._priv_speed$.pipe(distinctUntilChanged());
755
+ let playback$ : Connectable<IInitEvent>;
760
756
 
761
757
  if (!isDirectFile) {
762
758
  const transportFn = features.transports[transport];
@@ -764,7 +760,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
764
760
  // Stop previous content and reset its state
765
761
  this.stop();
766
762
  this._priv_currentError = null;
767
- this._priv_playing$.next(false);
763
+ this._priv_isPlaying.setValue(false);
768
764
  throw new Error(`transport "${transport}" not supported`);
769
765
  }
770
766
 
@@ -780,7 +776,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
780
776
  maxRetryOffline: offlineRetry });
781
777
 
782
778
  /** Interface used to download segments. */
783
- const segmentFetcherCreator = new SegmentFetcherCreator<any>(
779
+ const segmentFetcherCreator = new SegmentFetcherCreator(
784
780
  transportPipelines,
785
781
  { lowLatencyMode,
786
782
  maxRetryOffline: offlineRetry,
@@ -815,7 +811,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
815
811
  this.stop();
816
812
 
817
813
  this._priv_currentError = null;
818
- this._priv_playing$.next(false);
814
+ this._priv_isPlaying.setValue(false);
819
815
  this._priv_contentInfos = contentInfos;
820
816
 
821
817
  const relyOnVideoVisibilityAndSize = canRelyOnVideoVisibilityAndSize();
@@ -829,7 +825,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
829
825
  "browser can't be trusted for visibility.");
830
826
  } else {
831
827
  throttlers.throttle = {
832
- video: isActive().pipe(
828
+ video: isPageActive().pipe(
833
829
  map(active => active ? Infinity :
834
830
  0),
835
831
  takeUntil(stopContent$)),
@@ -888,7 +884,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
888
884
  const init$ = initializeMediaSourcePlayback({ adaptiveOptions,
889
885
  autoPlay,
890
886
  bufferOptions,
891
- clock$,
887
+ playbackObserver,
892
888
  keySystems,
893
889
  lowLatencyMode,
894
890
  manifest$,
@@ -896,8 +892,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
896
892
  mediaElement: videoElement,
897
893
  minimumManifestUpdateInterval,
898
894
  segmentFetcherCreator,
899
- setCurrentTime,
900
- speed$,
895
+ speed: this._priv_speed,
901
896
  startAt,
902
897
  textTrackOptions })
903
898
  .pipe(takeUntil(stopContent$));
@@ -908,7 +903,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
908
903
  // Stop previous content and reset its state
909
904
  this.stop();
910
905
  this._priv_currentError = null;
911
- this._priv_playing$.next(false);
906
+ this._priv_isPlaying.setValue(false);
912
907
  if (features.directfile === null) {
913
908
  throw new Error("DirectFile feature not activated in your build.");
914
909
  }
@@ -971,12 +966,11 @@ class Player extends EventEmitter<IPublicAPIEvent> {
971
966
 
972
967
  const directfileInit$ =
973
968
  features.directfile.initDirectFile({ autoPlay,
974
- clock$,
975
969
  keySystems,
976
970
  mediaElement: videoElement,
977
- speed$: this._priv_speed$,
971
+ speed: this._priv_speed,
972
+ playbackObserver,
978
973
  startAt,
979
- setCurrentTime,
980
974
  url })
981
975
  .pipe(takeUntil(stopContent$));
982
976
 
@@ -989,10 +983,10 @@ class Player extends EventEmitter<IPublicAPIEvent> {
989
983
  filter((evt) : evt is IStalledEvent => evt.type === "stalled" ||
990
984
  evt.type === "unstalled"),
991
985
  map(x => x.value),
992
- distinctUntilChanged((wasStalled, isStalled) => {
993
- return wasStalled === null && isStalled === null ||
994
- (wasStalled !== null && isStalled !== null &&
995
- wasStalled.reason === isStalled.reason);
986
+ distinctUntilChanged((prevStallReason, currStallReason) => {
987
+ return prevStallReason === null && currStallReason === null ||
988
+ (prevStallReason !== null && currStallReason !== null &&
989
+ prevStallReason === currStallReason);
996
990
  }));
997
991
 
998
992
  /** Emit when the content is considered "loaded". */
@@ -1016,7 +1010,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1016
1010
 
1017
1011
  /** Emit state updates once the content is considered "loaded". */
1018
1012
  const loadedStateUpdates$ = observableCombineLatest([
1019
- this._priv_playing$,
1013
+ this._priv_isPlaying.asObservable(),
1020
1014
  stalled$.pipe(startWith(null)),
1021
1015
  endedEvent$.pipe(startWith(null)),
1022
1016
  seekingEvent$.pipe(startWith(null)),
@@ -1032,7 +1026,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1032
1026
  observableOf(PLAYER_STATES.LOADING), // Begin with LOADING
1033
1027
 
1034
1028
  // LOADED as soon as the first "loaded" event is sent
1035
- loaded$.pipe(take(1), mapTo(PLAYER_STATES.LOADED)),
1029
+ loaded$.pipe(take(1), map(() => PLAYER_STATES.LOADED)),
1036
1030
 
1037
1031
  observableMerge(
1038
1032
  loadedStateUpdates$
@@ -1044,10 +1038,10 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1044
1038
 
1045
1039
  // when reloading
1046
1040
  reloading$.pipe(
1047
- switchMapTo(
1041
+ switchMap(() =>
1048
1042
  loaded$.pipe(
1049
1043
  take(1), // wait for the next loaded event
1050
- mergeMapTo(loadedStateUpdates$), // to update the state as usual
1044
+ mergeMap(() => loadedStateUpdates$), // to update the state as usual
1051
1045
  startWith(PLAYER_STATES.RELOADING) // Starts with "RELOADING" state
1052
1046
  )
1053
1047
  )
@@ -1069,14 +1063,16 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1069
1063
  .pipe(takeUntil(stopContent$))
1070
1064
  .subscribe(e => this._priv_onPlayPauseNext(e.type === "play"));
1071
1065
 
1072
- // Link "positionUpdate" events to the clock
1073
- clock$
1066
+ const observation$ = playbackObserver.observe(true);
1067
+
1068
+ // Link "positionUpdate" events to the PlaybackObserver
1069
+ observation$
1074
1070
  .pipe(takeUntil(stopContent$))
1075
- .subscribe(x => this._priv_triggerPositionUpdate(x));
1071
+ .subscribe(o => this._priv_triggerPositionUpdate(o));
1076
1072
 
1077
1073
  // Link "seeking" and "seeked" events (once the content is loaded)
1078
1074
  loaded$.pipe(
1079
- switchMapTo(emitSeekEvents(this.videoElement, clock$)),
1075
+ switchMap(() => emitSeekEvents(this.videoElement, observation$)),
1080
1076
  takeUntil(stopContent$)
1081
1077
  ).subscribe((evt : "seeking" | "seeked") => {
1082
1078
  log.info(`API: Triggering "${evt}" event`);
@@ -1105,7 +1101,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1105
1101
  });
1106
1102
 
1107
1103
  // initialize the content only when the lock is inactive
1108
- this._priv_contentLock$
1104
+ this._priv_contentLock.asObservable()
1109
1105
  .pipe(
1110
1106
  filter((isLocked) => !isLocked),
1111
1107
  take(1),
@@ -1377,7 +1373,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1377
1373
  * @returns {Number}
1378
1374
  */
1379
1375
  getPlaybackRate() : number {
1380
- return this._priv_speed$.getValue();
1376
+ return this._priv_speed.getValue();
1381
1377
  }
1382
1378
 
1383
1379
  /**
@@ -1440,7 +1436,9 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1440
1436
  rate : number,
1441
1437
  opts? : { preferTrickModeTracks? : boolean }
1442
1438
  ) : void {
1443
- this._priv_speed$.next(rate);
1439
+ if (rate !== this._priv_speed.getValue()) {
1440
+ this._priv_speed.setValue(rate);
1441
+ }
1444
1442
 
1445
1443
  const preferTrickModeTracks = opts?.preferTrickModeTracks;
1446
1444
  if (typeof preferTrickModeTracks !== "boolean") {
@@ -1772,7 +1770,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1772
1770
  * @param {Number} btr
1773
1771
  */
1774
1772
  setVideoBitrate(btr : number) : void {
1775
- this._priv_bitrateInfos.manualBitrates.video.next(btr);
1773
+ this._priv_bitrateInfos.manualBitrates.video.setValue(btr);
1776
1774
  }
1777
1775
 
1778
1776
  /**
@@ -1781,7 +1779,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1781
1779
  * @param {Number} btr
1782
1780
  */
1783
1781
  setAudioBitrate(btr : number) : void {
1784
- this._priv_bitrateInfos.manualBitrates.audio.next(btr);
1782
+ this._priv_bitrateInfos.manualBitrates.audio.setValue(btr);
1785
1783
  }
1786
1784
 
1787
1785
  /**
@@ -1795,7 +1793,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1795
1793
  `Its value, "${btr}" is superior the current maximum ` +
1796
1794
  `video birate, "${maxVideoBitrate}".`);
1797
1795
  }
1798
- this._priv_bitrateInfos.minAutoBitrates.video.next(btr);
1796
+ this._priv_bitrateInfos.minAutoBitrates.video.setValue(btr);
1799
1797
  }
1800
1798
 
1801
1799
  /**
@@ -1809,7 +1807,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1809
1807
  `Its value, "${btr}" is superior the current maximum ` +
1810
1808
  `audio birate, "${maxAudioBitrate}".`);
1811
1809
  }
1812
- this._priv_bitrateInfos.minAutoBitrates.audio.next(btr);
1810
+ this._priv_bitrateInfos.minAutoBitrates.audio.setValue(btr);
1813
1811
  }
1814
1812
 
1815
1813
  /**
@@ -1823,7 +1821,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1823
1821
  `Its value, "${btr}" is inferior the current minimum ` +
1824
1822
  `video birate, "${minVideoBitrate}".`);
1825
1823
  }
1826
- this._priv_bitrateInfos.maxAutoBitrates.video.next(btr);
1824
+ this._priv_bitrateInfos.maxAutoBitrates.video.setValue(btr);
1827
1825
  }
1828
1826
 
1829
1827
  /**
@@ -1837,7 +1835,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1837
1835
  `Its value, "${btr}" is inferior the current minimum ` +
1838
1836
  `audio birate, "${minAudioBitrate}".`);
1839
1837
  }
1840
- this._priv_bitrateInfos.maxAutoBitrates.audio.next(btr);
1838
+ this._priv_bitrateInfos.maxAutoBitrates.audio.setValue(btr);
1841
1839
  }
1842
1840
 
1843
1841
  /**
@@ -1846,7 +1844,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1846
1844
  * @param {Number} depthInSeconds
1847
1845
  */
1848
1846
  setMaxBufferBehind(depthInSeconds : number) : void {
1849
- this._priv_bufferOptions.maxBufferBehind$.next(depthInSeconds);
1847
+ this._priv_bufferOptions.maxBufferBehind.setValue(depthInSeconds);
1850
1848
  }
1851
1849
 
1852
1850
  /**
@@ -1855,7 +1853,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1855
1853
  * @param {Number} depthInSeconds
1856
1854
  */
1857
1855
  setMaxBufferAhead(depthInSeconds : number) : void {
1858
- this._priv_bufferOptions.maxBufferAhead$.next(depthInSeconds);
1856
+ this._priv_bufferOptions.maxBufferAhead.setValue(depthInSeconds);
1859
1857
  }
1860
1858
 
1861
1859
  /**
@@ -1864,7 +1862,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1864
1862
  * @param {Number} sizeInSeconds
1865
1863
  */
1866
1864
  setWantedBufferAhead(sizeInSeconds : number) : void {
1867
- this._priv_bufferOptions.wantedBufferAhead$.next(sizeInSeconds);
1865
+ this._priv_bufferOptions.wantedBufferAhead.setValue(sizeInSeconds);
1868
1866
  }
1869
1867
 
1870
1868
  /**
@@ -1872,7 +1870,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1872
1870
  * @returns {Number}
1873
1871
  */
1874
1872
  getMaxBufferBehind() : number {
1875
- return this._priv_bufferOptions.maxBufferBehind$.getValue();
1873
+ return this._priv_bufferOptions.maxBufferBehind.getValue();
1876
1874
  }
1877
1875
 
1878
1876
  /**
@@ -1880,7 +1878,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1880
1878
  * @returns {Number}
1881
1879
  */
1882
1880
  getMaxBufferAhead() : number {
1883
- return this._priv_bufferOptions.maxBufferAhead$.getValue();
1881
+ return this._priv_bufferOptions.maxBufferAhead.getValue();
1884
1882
  }
1885
1883
 
1886
1884
  /**
@@ -1888,7 +1886,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1888
1886
  * @returns {Number}
1889
1887
  */
1890
1888
  getWantedBufferAhead() : number {
1891
- return this._priv_bufferOptions.wantedBufferAhead$.getValue();
1889
+ return this._priv_bufferOptions.wantedBufferAhead.getValue();
1892
1890
  }
1893
1891
 
1894
1892
  /**
@@ -2329,7 +2327,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
2329
2327
  log.debug("Locking `contentLock` to clean-up the current content.");
2330
2328
 
2331
2329
  // lock playback of new contents while cleaning up is pending
2332
- this._priv_contentLock$.next(true);
2330
+ this._priv_contentLock.setValue(true);
2333
2331
 
2334
2332
  this._priv_contentInfos = null;
2335
2333
  this._priv_trackChoiceManager = null;
@@ -2341,23 +2339,23 @@ class Player extends EventEmitter<IPublicAPIEvent> {
2341
2339
  // EME cleaning
2342
2340
  const freeUpContentLock = () => {
2343
2341
  log.debug("Unlocking `contentLock`. Next content can begin.");
2344
- this._priv_contentLock$.next(false);
2342
+ this._priv_contentLock.setValue(false);
2345
2343
  };
2346
2344
 
2347
2345
  if (!isNullOrUndefined(this.videoElement)) {
2348
2346
  clearEMESession(this.videoElement)
2349
- .subscribe(
2350
- noop,
2351
- (err : unknown) => {
2347
+ .subscribe({
2348
+ error: (err : unknown) => {
2352
2349
  log.error("API: An error arised when trying to clean-up the EME session:" +
2353
2350
  (err instanceof Error ? err.toString() :
2354
2351
  "Unknown Error"));
2355
2352
  freeUpContentLock();
2356
2353
  },
2357
- () => {
2354
+ complete: () => {
2358
2355
  log.debug("API: EME session cleaned-up with success!");
2359
2356
  freeUpContentLock();
2360
- });
2357
+ },
2358
+ });
2361
2359
  } else {
2362
2360
  freeUpContentLock();
2363
2361
  }
@@ -2850,7 +2848,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
2850
2848
  throw new Error("Disposed player");
2851
2849
  }
2852
2850
 
2853
- this._priv_playing$.next(isPlaying);
2851
+ this._priv_isPlaying.setValue(isPlaying);
2854
2852
  }
2855
2853
 
2856
2854
  /**
@@ -2880,13 +2878,13 @@ class Player extends EventEmitter<IPublicAPIEvent> {
2880
2878
  }
2881
2879
 
2882
2880
  /**
2883
- * Triggered each time a new clock tick object is emitted.
2881
+ * Triggered each time a playback observation.
2884
2882
  *
2885
2883
  * Trigger the right Player Event
2886
2884
  *
2887
- * @param {Object} clockTick
2885
+ * @param {Object} observation
2888
2886
  */
2889
- private _priv_triggerPositionUpdate(clockTick : IClockTick) : void {
2887
+ private _priv_triggerPositionUpdate(observation : IPlaybackObservation) : void {
2890
2888
  if (this._priv_contentInfos === null) {
2891
2889
  log.warn("API: Cannot perform time update: no content loaded.");
2892
2890
  return;
@@ -2897,33 +2895,33 @@ class Player extends EventEmitter<IPublicAPIEvent> {
2897
2895
  }
2898
2896
 
2899
2897
  const { isDirectFile, manifest } = this._priv_contentInfos;
2900
- if ((!isDirectFile && manifest === null) || isNullOrUndefined(clockTick)) {
2898
+ if ((!isDirectFile && manifest === null) || isNullOrUndefined(observation)) {
2901
2899
  return;
2902
2900
  }
2903
2901
 
2904
- this._priv_lastContentPlaybackInfos.lastPlaybackPosition = clockTick.position;
2902
+ this._priv_lastContentPlaybackInfos.lastPlaybackPosition = observation.position;
2905
2903
 
2906
2904
  const maximumPosition = manifest !== null ? manifest.getMaximumPosition() :
2907
2905
  undefined;
2908
2906
  const positionData : IPositionUpdateItem = {
2909
- position: clockTick.position,
2910
- duration: clockTick.duration,
2911
- playbackRate: clockTick.playbackRate,
2907
+ position: observation.position,
2908
+ duration: observation.duration,
2909
+ playbackRate: observation.playbackRate,
2912
2910
  maximumBufferTime: maximumPosition,
2913
2911
 
2914
2912
  // TODO fix higher up?
2915
- bufferGap: isFinite(clockTick.bufferGap) ? clockTick.bufferGap :
2913
+ bufferGap: isFinite(observation.bufferGap) ? observation.bufferGap :
2916
2914
  0,
2917
2915
  };
2918
2916
 
2919
2917
  if (manifest !== null &&
2920
2918
  maximumPosition !== undefined &&
2921
2919
  manifest.isLive &&
2922
- clockTick.position > 0
2920
+ observation.position > 0
2923
2921
  ) {
2924
2922
  const ast = manifest.availabilityStartTime ?? 0;
2925
- positionData.wallClockTime = clockTick.position + ast;
2926
- positionData.liveGap = maximumPosition - clockTick.position;
2923
+ positionData.wallClockTime = observation.position + ast;
2924
+ positionData.liveGap = maximumPosition - observation.position;
2927
2925
  }
2928
2926
 
2929
2927
  this.trigger("positionUpdate", positionData);
@@ -2940,7 +2938,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
2940
2938
  newVal : number[]
2941
2939
  ) : void {
2942
2940
  const prevVal = this._priv_contentEventsMemory[event];
2943
- if (prevVal === undefined || areArraysOfNumbersEqual(newVal, prevVal)) {
2941
+ if (prevVal === undefined || !areArraysOfNumbersEqual(newVal, prevVal)) {
2944
2942
  this._priv_contentEventsMemory[event] = newVal;
2945
2943
  this.trigger(event, newVal);
2946
2944
  }
@@ -2977,7 +2975,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
2977
2975
  return activeRepresentations[currentPeriod.id];
2978
2976
  }
2979
2977
  }
2980
- Player.version = /* PLAYER_VERSION */"3.25.2";
2978
+ Player.version = /* PLAYER_VERSION */"3.26.3-dev.2022021400";
2981
2979
 
2982
2980
  export default Player;
2983
2981
  export { IStreamEventData };