rx-player 3.26.1 → 3.26.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (580) hide show
  1. package/.github/workflows/checks.yml +99 -0
  2. package/.github/workflows/sonarcloud_analysis.yml +20 -0
  3. package/CHANGELOG.md +99 -71
  4. package/README.md +19 -18
  5. package/VERSION +1 -1
  6. package/dist/_esm5.processed/compat/clear_element_src.js +8 -6
  7. package/dist/_esm5.processed/compat/eme/close_session.js +1 -2
  8. package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +1 -2
  9. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -1
  10. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +6 -4
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +1 -2
  12. package/dist/_esm5.processed/compat/eme/generate_key_request.js +1 -2
  13. package/dist/_esm5.processed/compat/eme/load_session.js +2 -3
  14. package/dist/_esm5.processed/compat/event_listeners.d.ts +3 -2
  15. package/dist/_esm5.processed/compat/event_listeners.js +8 -14
  16. package/dist/_esm5.processed/compat/make_vtt_cue.js +1 -1
  17. package/dist/_esm5.processed/compat/on_height_width_change.js +1 -2
  18. package/dist/_esm5.processed/compat/set_element_src.js +1 -1
  19. package/dist/_esm5.processed/compat/when_loaded_metadata.js +1 -2
  20. package/dist/_esm5.processed/compat/when_media_source_open.js +1 -2
  21. package/dist/_esm5.processed/config.d.ts +3 -8
  22. package/dist/_esm5.processed/config.js +4 -9
  23. package/dist/_esm5.processed/core/abr/abr_manager.d.ts +11 -10
  24. package/dist/_esm5.processed/core/abr/abr_manager.js +47 -8
  25. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +1 -1
  26. package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +2 -2
  27. package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +3 -3
  28. package/dist/_esm5.processed/core/abr/get_buffer_levels.js +3 -0
  29. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +3 -3
  30. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +3 -3
  31. package/dist/_esm5.processed/core/abr/guess_based_chooser.d.ts +95 -0
  32. package/dist/_esm5.processed/core/abr/guess_based_chooser.js +242 -0
  33. package/dist/_esm5.processed/core/abr/index.d.ts +3 -3
  34. package/dist/_esm5.processed/core/abr/last_estimate_storage.d.ts +61 -0
  35. package/dist/_esm5.processed/core/abr/last_estimate_storage.js +37 -0
  36. package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +25 -7
  37. package/dist/_esm5.processed/core/abr/network_analyzer.js +68 -31
  38. package/dist/_esm5.processed/core/abr/pending_requests_store.d.ts +56 -28
  39. package/dist/_esm5.processed/core/abr/pending_requests_store.js +9 -7
  40. package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +34 -51
  41. package/dist/_esm5.processed/core/abr/representation_estimator.js +111 -52
  42. package/dist/_esm5.processed/core/abr/representation_score_calculator.d.ts +5 -8
  43. package/dist/_esm5.processed/core/abr/representation_score_calculator.js +20 -23
  44. package/dist/_esm5.processed/core/abr/{ewma.d.ts → utils/ewma.d.ts} +0 -0
  45. package/dist/_esm5.processed/core/abr/{ewma.js → utils/ewma.js} +0 -0
  46. package/dist/_esm5.processed/core/abr/{filter_by_bitrate.d.ts → utils/filter_by_bitrate.d.ts} +1 -1
  47. package/dist/_esm5.processed/core/abr/{filter_by_bitrate.js → utils/filter_by_bitrate.js} +1 -1
  48. package/dist/_esm5.processed/core/abr/{filter_by_width.d.ts → utils/filter_by_width.d.ts} +1 -1
  49. package/dist/_esm5.processed/core/abr/{filter_by_width.js → utils/filter_by_width.js} +2 -2
  50. package/dist/_esm5.processed/core/abr/{select_optimal_representation.d.ts → utils/select_optimal_representation.d.ts} +1 -1
  51. package/dist/_esm5.processed/core/abr/{select_optimal_representation.js → utils/select_optimal_representation.js} +1 -1
  52. package/dist/_esm5.processed/core/api/emit_seek_events.d.ts +4 -4
  53. package/dist/_esm5.processed/core/api/emit_seek_events.js +12 -10
  54. package/dist/_esm5.processed/core/api/index.d.ts +3 -1
  55. package/dist/_esm5.processed/core/api/index.js +2 -0
  56. package/dist/_esm5.processed/core/api/option_utils.js +4 -4
  57. package/dist/_esm5.processed/core/api/playback_observer.d.ts +280 -0
  58. package/dist/_esm5.processed/core/api/playback_observer.js +461 -0
  59. package/dist/_esm5.processed/core/api/public_api.d.ts +8 -7
  60. package/dist/_esm5.processed/core/api/public_api.js +98 -94
  61. package/dist/_esm5.processed/core/api/track_choice_manager.js +3 -3
  62. package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.js +1 -0
  63. package/dist/_esm5.processed/core/eme/attach_media_keys.js +1 -2
  64. package/dist/_esm5.processed/core/eme/check_key_statuses.js +4 -5
  65. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js +1 -2
  66. package/dist/_esm5.processed/core/eme/clear_eme_session.js +6 -2
  67. package/dist/_esm5.processed/core/eme/create_session.js +1 -2
  68. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +2 -3
  69. package/dist/_esm5.processed/core/eme/eme_manager.js +4 -5
  70. package/dist/_esm5.processed/core/eme/find_key_system.js +4 -5
  71. package/dist/_esm5.processed/core/eme/get_media_keys.js +2 -3
  72. package/dist/_esm5.processed/core/eme/get_session.js +1 -2
  73. package/dist/_esm5.processed/core/eme/init_media_keys.js +5 -5
  74. package/dist/_esm5.processed/core/eme/session_events_listener.js +6 -7
  75. package/dist/_esm5.processed/core/eme/set_server_certificate.js +8 -3
  76. package/dist/_esm5.processed/core/eme/types.d.ts +12 -4
  77. package/dist/_esm5.processed/core/eme/utils/close_session.js +2 -3
  78. package/dist/_esm5.processed/core/eme/utils/is_session_usable.js +1 -1
  79. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +3 -4
  80. package/dist/_esm5.processed/core/eme/utils/persistent_sessions_store.js +3 -3
  81. package/dist/_esm5.processed/core/fetchers/index.d.ts +2 -2
  82. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +2 -2
  83. package/dist/_esm5.processed/core/fetchers/segment/index.d.ts +2 -2
  84. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.d.ts +12 -29
  85. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.js +3 -7
  86. package/dist/_esm5.processed/core/fetchers/segment/prioritizer.d.ts +53 -53
  87. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +42 -11
  88. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +118 -46
  89. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +21 -20
  90. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +9 -8
  91. package/dist/_esm5.processed/core/init/create_eme_manager.js +1 -2
  92. package/dist/_esm5.processed/core/init/create_media_source.js +3 -4
  93. package/dist/_esm5.processed/core/init/create_stream_playback_observer.d.ts +39 -0
  94. package/dist/_esm5.processed/core/init/create_stream_playback_observer.js +50 -0
  95. package/dist/_esm5.processed/core/init/duration_updater.js +16 -7
  96. package/dist/_esm5.processed/core/init/emit_loaded_event.d.ts +4 -3
  97. package/dist/_esm5.processed/core/init/emit_loaded_event.js +8 -8
  98. package/dist/_esm5.processed/core/init/end_of_stream.js +1 -2
  99. package/dist/_esm5.processed/core/init/get_initial_time.js +2 -3
  100. package/dist/_esm5.processed/core/init/initial_seek_and_play.d.ts +32 -31
  101. package/dist/_esm5.processed/core/init/initial_seek_and_play.js +25 -32
  102. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +6 -5
  103. package/dist/_esm5.processed/core/init/initialize_directfile.js +16 -12
  104. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +10 -10
  105. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -12
  106. package/dist/_esm5.processed/core/init/load_on_media_source.d.ts +8 -11
  107. package/dist/_esm5.processed/core/init/load_on_media_source.js +16 -19
  108. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +8 -7
  109. package/dist/_esm5.processed/core/init/stall_avoider.d.ts +4 -6
  110. package/dist/_esm5.processed/core/init/stall_avoider.js +56 -42
  111. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.d.ts +2 -2
  112. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +20 -15
  113. package/dist/_esm5.processed/core/init/throw_on_media_error.js +1 -2
  114. package/dist/_esm5.processed/core/init/types.d.ts +0 -20
  115. package/dist/_esm5.processed/core/init/update_playback_rate.d.ts +5 -4
  116. package/dist/_esm5.processed/core/init/update_playback_rate.js +10 -11
  117. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.d.ts +4 -4
  118. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.js +12 -7
  119. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +8 -7
  120. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +9 -10
  121. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +1 -1
  122. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +4 -4
  123. package/dist/_esm5.processed/core/segment_buffers/implementations/utils/manual_time_ranges.js +2 -2
  124. package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.js +2 -2
  125. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +1 -12
  126. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +10 -10
  127. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +1 -1
  128. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +15 -13
  129. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +36 -23
  130. package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.d.ts +9 -17
  131. package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.js +11 -20
  132. package/dist/_esm5.processed/core/stream/adaptation/index.d.ts +2 -2
  133. package/dist/_esm5.processed/core/stream/index.d.ts +2 -2
  134. package/dist/_esm5.processed/core/stream/orchestrator/active_period_emitter.js +5 -6
  135. package/dist/_esm5.processed/core/stream/orchestrator/are_streams_complete.js +1 -2
  136. package/dist/_esm5.processed/core/stream/orchestrator/index.d.ts +2 -2
  137. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +10 -8
  138. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +22 -21
  139. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.d.ts +6 -4
  140. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +11 -10
  141. package/dist/_esm5.processed/core/stream/period/index.d.ts +2 -2
  142. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +23 -7
  143. package/dist/_esm5.processed/core/stream/period/period_stream.js +38 -24
  144. package/dist/_esm5.processed/core/stream/reload_after_switch.d.ts +5 -4
  145. package/dist/_esm5.processed/core/stream/reload_after_switch.js +8 -7
  146. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.d.ts +4 -2
  147. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.js +10 -8
  148. package/dist/_esm5.processed/core/stream/representation/downloading_queue.d.ts +9 -9
  149. package/dist/_esm5.processed/core/stream/representation/downloading_queue.js +10 -12
  150. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.d.ts +1 -3
  151. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +6 -8
  152. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +3 -7
  153. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +7 -8
  154. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +1 -1
  155. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.d.ts +6 -9
  156. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +7 -8
  157. package/dist/_esm5.processed/core/stream/representation/index.d.ts +2 -2
  158. package/dist/_esm5.processed/core/stream/representation/push_init_segment.d.ts +4 -2
  159. package/dist/_esm5.processed/core/stream/representation/push_init_segment.js +3 -5
  160. package/dist/_esm5.processed/core/stream/representation/push_media_segment.d.ts +6 -4
  161. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -5
  162. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +9 -12
  163. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +30 -21
  164. package/dist/_esm5.processed/errors/error_message.js +1 -1
  165. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.d.ts +5 -3
  166. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.js +21 -8
  167. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.js +2 -3
  168. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.d.ts +2 -2
  169. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.js +4 -0
  170. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +1 -1
  171. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +2 -2
  172. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +17 -6
  173. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +1 -2
  174. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/index.js +1 -2
  175. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -1
  176. package/dist/_esm5.processed/features/initialize_features.js +47 -44
  177. package/dist/_esm5.processed/index.js +2 -2
  178. package/dist/_esm5.processed/manifest/index.d.ts +2 -2
  179. package/dist/_esm5.processed/manifest/index.js +2 -2
  180. package/dist/_esm5.processed/manifest/representation.js +1 -1
  181. package/dist/_esm5.processed/manifest/representation_index/static.js +1 -0
  182. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +24 -3
  183. package/dist/_esm5.processed/manifest/update_period_in_place.js +1 -1
  184. package/dist/_esm5.processed/manifest/{are_same_content.d.ts → utils.d.ts} +9 -7
  185. package/dist/_esm5.processed/manifest/{are_same_content.js → utils.js} +18 -1
  186. package/dist/_esm5.processed/minimal.js +2 -2
  187. package/dist/_esm5.processed/parsers/containers/isobmff/get_box.d.ts +18 -9
  188. package/dist/_esm5.processed/parsers/containers/isobmff/get_box.js +32 -9
  189. package/dist/_esm5.processed/parsers/containers/isobmff/read.d.ts +18 -5
  190. package/dist/_esm5.processed/parsers/containers/isobmff/read.js +28 -6
  191. package/dist/_esm5.processed/parsers/containers/isobmff/utils.js +52 -47
  192. package/dist/_esm5.processed/parsers/images/bif.js +1 -1
  193. package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +2 -2
  194. package/dist/_esm5.processed/parsers/manifest/dash/common/get_http_utc-timing_url.js +2 -2
  195. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +2 -1
  196. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +3 -2
  197. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.js +2 -1
  198. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +1 -0
  199. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +7 -9
  200. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +2 -1
  201. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +4 -2
  202. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +2 -1
  203. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +11 -5
  204. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.js +10 -9
  205. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/parse_s_element.js +3 -3
  206. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +6 -1
  207. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +5 -4
  208. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.d.ts +1 -1
  209. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.js +4 -4
  210. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +3 -1
  211. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +19 -18
  212. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +2 -1
  213. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +14 -8
  214. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +2 -2
  215. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +7 -8
  216. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +3 -1
  217. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +5 -10
  218. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +3 -1
  219. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +17 -8
  220. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.d.ts +7 -2
  221. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.js +22 -21
  222. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +10 -0
  223. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/BaseURL.js +9 -9
  224. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +24 -0
  225. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.js +7 -5
  226. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +12 -9
  227. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +5 -2
  228. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +8 -0
  229. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +11 -2
  230. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +7 -4
  231. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +11 -0
  232. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.js +7 -1
  233. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.js +5 -0
  234. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/MPD.js +5 -0
  235. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Period.js +13 -0
  236. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +23 -0
  237. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.js +5 -0
  238. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/XLink.js +6 -0
  239. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/root.js +6 -0
  240. package/dist/_esm5.processed/parsers/manifest/local/parse_local_manifest.js +1 -1
  241. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +4 -2
  242. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -1
  243. package/dist/_esm5.processed/parsers/manifest/smooth/get_codecs.js +1 -1
  244. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +3 -1
  245. package/dist/_esm5.processed/parsers/manifest/utils/check_manifest_ids.js +1 -1
  246. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +1 -1
  247. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +11 -3
  248. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.js +5 -5
  249. package/dist/_esm5.processed/parsers/manifest/utils/is_segment_still_available.js +3 -6
  250. package/dist/_esm5.processed/parsers/texttracks/sami/html.js +2 -2
  251. package/dist/_esm5.processed/parsers/texttracks/sami/native.js +2 -2
  252. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_font_size.js +13 -1
  253. package/dist/_esm5.processed/parsers/texttracks/ttml/html/generate_css_test_outline.js +4 -4
  254. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_default_style_elements.js +2 -2
  255. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_style_attribute.js +5 -5
  256. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +2 -2
  257. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
  258. package/dist/_esm5.processed/transports/dash/manifest_parser.js +89 -20
  259. package/dist/_esm5.processed/transports/dash/segment_loader.js +1 -1
  260. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
  261. package/dist/_esm5.processed/transports/local/segment_parser.d.ts +2 -2
  262. package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
  263. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
  264. package/dist/_esm5.processed/transports/smooth/extract_timings_infos.js +1 -1
  265. package/dist/_esm5.processed/transports/smooth/pipelines.js +2 -2
  266. package/dist/_esm5.processed/transports/smooth/segment_loader.js +3 -3
  267. package/dist/_esm5.processed/transports/types.d.ts +29 -15
  268. package/dist/_esm5.processed/transports/utils/byte_range.js +2 -2
  269. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
  270. package/dist/_esm5.processed/transports/utils/get_isobmff_timing_infos.js +6 -1
  271. package/dist/_esm5.processed/transports/utils/parse_text_track.js +6 -4
  272. package/dist/_esm5.processed/utils/assert.js +3 -3
  273. package/dist/_esm5.processed/utils/concat_map_latest.js +1 -2
  274. package/dist/_esm5.processed/utils/defer_subscriptions.js +1 -2
  275. package/dist/_esm5.processed/utils/filter_map.js +1 -2
  276. package/dist/_esm5.processed/utils/reference.d.ts +108 -0
  277. package/dist/_esm5.processed/utils/reference.js +137 -0
  278. package/dist/_esm5.processed/utils/request/fetch.d.ts +1 -1
  279. package/dist/_esm5.processed/utils/request/fetch.js +3 -3
  280. package/dist/_esm5.processed/utils/request/xhr.d.ts +1 -1
  281. package/dist/_esm5.processed/utils/request/xhr.js +1 -1
  282. package/dist/_esm5.processed/utils/rx-retry_with_backoff.js +1 -2
  283. package/dist/mpd-parser.wasm +0 -0
  284. package/dist/rx-player.d.ts +1 -15
  285. package/dist/rx-player.js +3666 -2470
  286. package/dist/rx-player.min.d.ts +1 -15
  287. package/dist/rx-player.min.js +1 -1
  288. package/jest.config.js +28 -1
  289. package/package.json +43 -43
  290. package/scripts/build/constants.d.ts +50 -0
  291. package/scripts/build/generate_build.js +1 -189
  292. package/scripts/doc-generator/construct_table_of_contents.js +31 -24
  293. package/scripts/doc-generator/convert_MD_to_HMTL.js +4 -8
  294. package/scripts/doc-generator/create_documentation.js +331 -0
  295. package/scripts/doc-generator/create_documentation_page.js +209 -0
  296. package/scripts/doc-generator/create_page.js +117 -35
  297. package/scripts/doc-generator/generate_header_html.js +148 -0
  298. package/scripts/doc-generator/generate_page_html.js +116 -0
  299. package/scripts/doc-generator/generate_page_list_html.js +93 -0
  300. package/scripts/doc-generator/generate_sidebar_html.js +88 -0
  301. package/scripts/doc-generator/get_search_data_for_content.js +137 -0
  302. package/scripts/doc-generator/index.js +14 -15
  303. package/scripts/doc-generator/parse_doc_configs.js +327 -0
  304. package/scripts/doc-generator/scripts/lunr.js +10 -0
  305. package/scripts/doc-generator/scripts/script.js +451 -0
  306. package/scripts/doc-generator/styles/style.css +712 -144
  307. package/scripts/doc-generator/utils.js +85 -0
  308. package/scripts/fast_demo_build.js +143 -0
  309. package/scripts/generate_documentation_list.js +6 -2
  310. package/scripts/generate_full_demo.js +26 -49
  311. package/scripts/start_demo_web_server.js +14 -4
  312. package/scripts/update-version +1 -1
  313. package/sonar-project.properties +2 -1
  314. package/src/compat/__tests__/add_text_track.test.ts +1 -0
  315. package/src/compat/__tests__/clear_element_src.test.ts +55 -28
  316. package/src/compat/__tests__/set_element_src.test.ts +2 -2
  317. package/src/compat/__tests__/when_loaded_metadata.test.ts +4 -5
  318. package/src/compat/__tests__/when_media_source_open.test.ts +4 -5
  319. package/src/compat/clear_element_src.ts +8 -6
  320. package/src/compat/eme/close_session.ts +3 -5
  321. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
  322. package/src/compat/eme/custom_media_keys/index.ts +6 -6
  323. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +6 -3
  324. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +1 -1
  325. package/src/compat/eme/generate_key_request.ts +1 -1
  326. package/src/compat/eme/load_session.ts +4 -6
  327. package/src/compat/event_listeners.ts +12 -21
  328. package/src/compat/on_height_width_change.ts +3 -5
  329. package/src/compat/set_element_src.ts +1 -1
  330. package/src/compat/when_loaded_metadata.ts +1 -1
  331. package/src/compat/when_media_source_open.ts +1 -1
  332. package/src/config.ts +4 -9
  333. package/src/core/abr/README.md +7 -7
  334. package/src/core/abr/abr_manager.ts +62 -21
  335. package/src/core/abr/bandwidth_estimator.ts +1 -1
  336. package/src/core/abr/buffer_based_chooser.ts +8 -6
  337. package/src/core/abr/get_buffer_levels.ts +3 -0
  338. package/src/core/abr/get_estimate_from_buffer_levels.ts +4 -4
  339. package/src/core/abr/guess_based_chooser.ts +308 -0
  340. package/src/core/abr/index.ts +7 -3
  341. package/src/core/abr/last_estimate_storage.ts +79 -0
  342. package/src/core/abr/network_analyzer.ts +74 -31
  343. package/src/core/abr/pending_requests_store.ts +76 -42
  344. package/src/core/abr/representation_estimator.ts +200 -125
  345. package/src/core/abr/representation_score_calculator.ts +33 -26
  346. package/src/core/abr/{__tests__ → utils/__tests__}/ewma.test.ts +0 -0
  347. package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_bitrate.test.ts +1 -1
  348. package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_width.test.ts +1 -1
  349. package/src/core/abr/{__tests__ → utils/__tests__}/select_optimal_representation.test.ts +1 -1
  350. package/src/core/abr/{ewma.ts → utils/ewma.ts} +0 -0
  351. package/src/core/abr/{filter_by_bitrate.ts → utils/filter_by_bitrate.ts} +2 -2
  352. package/src/core/abr/{filter_by_width.ts → utils/filter_by_width.ts} +3 -3
  353. package/src/core/abr/{select_optimal_representation.ts → utils/select_optimal_representation.ts} +2 -2
  354. package/src/core/api/README.md +4 -3
  355. package/src/core/api/__tests__/option_utils.test.ts +1 -0
  356. package/src/core/api/emit_seek_events.ts +21 -20
  357. package/src/core/api/index.ts +6 -2
  358. package/src/core/api/playback_observer.ts +768 -0
  359. package/src/core/api/public_api.ts +111 -111
  360. package/src/core/api/track_choice_manager.ts +6 -3
  361. package/src/core/eme/__tests__/__global__/get_license.test.ts +5 -3
  362. package/src/core/eme/__tests__/__global__/init_data.test.ts +11 -12
  363. package/src/core/eme/__tests__/__global__/media_key_system_access.test.ts +2 -1
  364. package/src/core/eme/__tests__/__global__/media_keys.test.ts +5 -8
  365. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +8 -6
  366. package/src/core/eme/__tests__/__global__/utils.ts +1 -0
  367. package/src/core/eme/__tests__/init_media_keys.test.ts +6 -65
  368. package/src/core/eme/attach_media_keys.ts +2 -1
  369. package/src/core/eme/check_key_statuses.ts +10 -8
  370. package/src/core/eme/clean_old_loaded_sessions.ts +2 -4
  371. package/src/core/eme/clear_eme_session.ts +6 -1
  372. package/src/core/eme/create_session.ts +3 -5
  373. package/src/core/eme/dispose_media_keys.ts +2 -2
  374. package/src/core/eme/eme_manager.ts +10 -12
  375. package/src/core/eme/find_key_system.ts +3 -5
  376. package/src/core/eme/get_media_keys.ts +4 -6
  377. package/src/core/eme/get_session.ts +2 -4
  378. package/src/core/eme/init_media_keys.ts +9 -9
  379. package/src/core/eme/session_events_listener.ts +14 -15
  380. package/src/core/eme/set_server_certificate.ts +9 -5
  381. package/src/core/eme/types.ts +15 -4
  382. package/src/core/eme/utils/close_session.ts +7 -7
  383. package/src/core/eme/utils/is_session_usable.ts +1 -1
  384. package/src/core/eme/utils/loaded_sessions_store.ts +2 -2
  385. package/src/core/eme/utils/persistent_sessions_store.ts +2 -2
  386. package/src/core/fetchers/index.ts +2 -2
  387. package/src/core/fetchers/manifest/manifest_fetcher.ts +1 -1
  388. package/src/core/fetchers/segment/__tests__/prioritizer.test.ts +3 -4
  389. package/src/core/fetchers/segment/index.ts +2 -2
  390. package/src/core/fetchers/segment/prioritized_segment_fetcher.ts +37 -45
  391. package/src/core/fetchers/segment/prioritizer.ts +82 -82
  392. package/src/core/fetchers/segment/segment_fetcher.ts +178 -80
  393. package/src/core/fetchers/segment/segment_fetcher_creator.ts +23 -31
  394. package/src/core/init/create_eme_manager.ts +1 -1
  395. package/src/core/init/create_media_source.ts +5 -7
  396. package/src/core/init/create_stream_playback_observer.ts +88 -0
  397. package/src/core/init/duration_updater.ts +20 -17
  398. package/src/core/init/emit_loaded_event.ts +11 -15
  399. package/src/core/init/end_of_stream.ts +2 -4
  400. package/src/core/init/get_initial_time.ts +0 -1
  401. package/src/core/init/initial_seek_and_play.ts +67 -51
  402. package/src/core/init/initialize_directfile.ts +26 -35
  403. package/src/core/init/initialize_media_source.ts +28 -28
  404. package/src/core/init/load_on_media_source.ts +51 -58
  405. package/src/core/init/manifest_update_scheduler.ts +11 -12
  406. package/src/core/init/stall_avoider.ts +64 -47
  407. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +24 -21
  408. package/src/core/init/throw_on_media_error.ts +1 -1
  409. package/src/core/init/types.ts +0 -24
  410. package/src/core/init/update_playback_rate.ts +15 -16
  411. package/src/core/segment_buffers/README.md +3 -3
  412. package/src/core/segment_buffers/garbage_collector.ts +15 -11
  413. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +10 -7
  414. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +14 -16
  415. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +1 -1
  416. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
  417. package/src/core/segment_buffers/implementations/utils/manual_time_ranges.ts +2 -2
  418. package/src/core/segment_buffers/inventory/buffered_history.ts +2 -2
  419. package/src/core/segment_buffers/inventory/segment_inventory.ts +1 -13
  420. package/src/core/stream/adaptation/adaptation_stream.ts +78 -56
  421. package/src/core/stream/adaptation/create_representation_estimator.ts +19 -45
  422. package/src/core/stream/adaptation/index.ts +2 -2
  423. package/src/core/stream/index.ts +2 -2
  424. package/src/core/stream/orchestrator/active_period_emitter.ts +6 -8
  425. package/src/core/stream/orchestrator/are_streams_complete.ts +2 -4
  426. package/src/core/stream/orchestrator/index.ts +2 -2
  427. package/src/core/stream/orchestrator/stream_orchestrator.ts +58 -49
  428. package/src/core/stream/period/create_empty_adaptation_stream.ts +14 -10
  429. package/src/core/stream/period/index.ts +2 -2
  430. package/src/core/stream/period/period_stream.ts +118 -75
  431. package/src/core/stream/reload_after_switch.ts +13 -10
  432. package/src/core/stream/representation/append_segment_to_buffer.ts +20 -16
  433. package/src/core/stream/representation/downloading_queue.ts +21 -24
  434. package/src/core/stream/representation/force_garbage_collection.ts +16 -23
  435. package/src/core/stream/representation/get_buffer_status.ts +9 -11
  436. package/src/core/stream/representation/get_needed_segments.ts +1 -1
  437. package/src/core/stream/representation/get_segment_priority.ts +8 -10
  438. package/src/core/stream/representation/index.ts +2 -2
  439. package/src/core/stream/representation/push_init_segment.ts +19 -16
  440. package/src/core/stream/representation/push_media_segment.ts +21 -17
  441. package/src/core/stream/representation/representation_stream.ts +50 -47
  442. package/src/experimental/features/__tests__/dash_wasm.test.ts +1 -0
  443. package/src/experimental/tools/VideoThumbnailLoader/create_request.ts +32 -17
  444. package/src/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.ts +6 -9
  445. package/src/experimental/tools/VideoThumbnailLoader/load_segments.ts +12 -6
  446. package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +4 -2
  447. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +2 -2
  448. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +21 -12
  449. package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +1 -1
  450. package/src/experimental/tools/createMetaplaylist/index.ts +1 -1
  451. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +4 -2
  452. package/src/features/__tests__/initialize_features.test.ts +191 -101
  453. package/src/features/initialize_features.ts +40 -37
  454. package/src/features/list/__tests__/bif_parser.test.ts +1 -0
  455. package/src/features/list/__tests__/dash.test.ts +1 -0
  456. package/src/features/list/__tests__/directfile.test.ts +1 -0
  457. package/src/features/list/__tests__/eme.test.ts +1 -0
  458. package/src/features/list/__tests__/html_sami_parser.test.ts +1 -0
  459. package/src/features/list/__tests__/html_srt_parser.test.ts +1 -0
  460. package/src/features/list/__tests__/html_text_buffer.test.ts +1 -0
  461. package/src/features/list/__tests__/html_ttml_parser.test.ts +1 -0
  462. package/src/features/list/__tests__/html_vtt_parser.test.ts +1 -0
  463. package/src/features/list/__tests__/image_buffer.test.ts +1 -0
  464. package/src/features/list/__tests__/native_sami_parser.test.ts +1 -0
  465. package/src/features/list/__tests__/native_srt_parser.test.ts +1 -0
  466. package/src/features/list/__tests__/native_text_buffer.test.ts +1 -0
  467. package/src/features/list/__tests__/native_ttml_parser.test.ts +1 -0
  468. package/src/features/list/__tests__/native_vtt_parser.test.ts +1 -0
  469. package/src/features/list/__tests__/smooth.test.ts +1 -0
  470. package/src/index.ts +2 -2
  471. package/src/manifest/__tests__/manifest.test.ts +1 -0
  472. package/src/manifest/index.ts +7 -1
  473. package/src/manifest/representation_index/__tests__/static.test.ts +1 -0
  474. package/src/manifest/representation_index/static.ts +1 -0
  475. package/src/manifest/representation_index/types.ts +25 -3
  476. package/src/manifest/{are_same_content.ts → utils.ts} +26 -9
  477. package/src/minimal.ts +3 -2
  478. package/src/parsers/containers/isobmff/get_box.ts +35 -8
  479. package/src/parsers/containers/isobmff/read.ts +32 -5
  480. package/src/parsers/containers/isobmff/utils.ts +52 -47
  481. package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +4 -4
  482. package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +4 -2
  483. package/src/parsers/manifest/dash/common/get_clock_offset.ts +3 -3
  484. package/src/parsers/manifest/dash/common/get_http_utc-timing_url.ts +15 -6
  485. package/src/parsers/manifest/dash/common/indexes/base.ts +5 -3
  486. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +1 -0
  487. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +9 -9
  488. package/src/parsers/manifest/dash/common/indexes/list.ts +6 -3
  489. package/src/parsers/manifest/dash/common/indexes/template.ts +13 -6
  490. package/src/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.ts +10 -9
  491. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +13 -5
  492. package/src/parsers/manifest/dash/common/indexes/tokens.ts +4 -4
  493. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +10 -4
  494. package/src/parsers/manifest/dash/common/parse_mpd.ts +21 -13
  495. package/src/parsers/manifest/dash/common/parse_periods.ts +7 -8
  496. package/src/parsers/manifest/dash/common/parse_representation_index.ts +12 -12
  497. package/src/parsers/manifest/dash/common/parse_representations.ts +23 -4
  498. package/src/parsers/manifest/dash/common/resolve_base_urls.ts +33 -24
  499. package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +12 -0
  500. package/src/parsers/manifest/dash/js-parser/node_parsers/BaseURL.ts +13 -9
  501. package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +28 -0
  502. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.ts +8 -5
  503. package/src/parsers/manifest/dash/js-parser/node_parsers/utils.ts +3 -0
  504. package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +5 -2
  505. package/src/parsers/manifest/dash/node_parser_types.ts +8 -0
  506. package/src/parsers/manifest/dash/parsers_types.ts +8 -2
  507. package/src/parsers/manifest/dash/wasm-parser/rs/lib.rs +1 -8
  508. package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +26 -5
  509. package/src/parsers/manifest/dash/wasm-parser/rs/processor/mod.rs +75 -521
  510. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +7 -4
  511. package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +13 -0
  512. package/src/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.ts +8 -1
  513. package/src/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.ts +6 -0
  514. package/src/parsers/manifest/dash/wasm-parser/ts/generators/MPD.ts +6 -0
  515. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Period.ts +14 -0
  516. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +26 -0
  517. package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.ts +6 -0
  518. package/src/parsers/manifest/dash/wasm-parser/ts/generators/XLink.ts +7 -0
  519. package/src/parsers/manifest/dash/wasm-parser/ts/generators/root.ts +7 -0
  520. package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +1 -1
  521. package/src/parsers/manifest/local/representation_index.ts +2 -0
  522. package/src/parsers/manifest/smooth/create_parser.ts +1 -1
  523. package/src/parsers/manifest/smooth/representation_index.ts +3 -1
  524. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +1 -1
  525. package/src/parsers/manifest/utils/index_helpers.ts +21 -11
  526. package/src/parsers/manifest/utils/is_segment_still_available.ts +4 -6
  527. package/src/parsers/texttracks/sami/html.ts +1 -1
  528. package/src/parsers/texttracks/sami/native.ts +1 -1
  529. package/src/parsers/texttracks/ttml/html/apply_font_size.ts +11 -1
  530. package/src/transports/dash/image_pipelines.ts +4 -4
  531. package/src/transports/dash/init_segment_loader.ts +1 -1
  532. package/src/transports/dash/manifest_parser.ts +99 -25
  533. package/src/transports/dash/segment_loader.ts +1 -1
  534. package/src/transports/dash/segment_parser.ts +4 -4
  535. package/src/transports/dash/text_parser.ts +8 -8
  536. package/src/transports/local/segment_loader.ts +2 -2
  537. package/src/transports/local/segment_parser.ts +4 -4
  538. package/src/transports/local/text_parser.ts +8 -8
  539. package/src/transports/metaplaylist/pipelines.ts +11 -11
  540. package/src/transports/smooth/extract_timings_infos.ts +1 -1
  541. package/src/transports/smooth/pipelines.ts +8 -8
  542. package/src/transports/smooth/segment_loader.ts +3 -3
  543. package/src/transports/types.ts +31 -17
  544. package/src/transports/utils/call_custom_manifest_loader.ts +1 -1
  545. package/src/transports/utils/get_isobmff_timing_infos.ts +6 -1
  546. package/src/transports/utils/parse_text_track.ts +4 -2
  547. package/src/typings/globals.d.ts +57 -40
  548. package/src/utils/__tests__/concat_map_latest.test.ts +7 -9
  549. package/src/utils/__tests__/defer_subscriptions.test.ts +4 -4
  550. package/src/utils/__tests__/event_emitter.test.ts +1 -1
  551. package/src/utils/__tests__/initialization_segment_cache.test.ts +7 -0
  552. package/src/utils/assert.ts +1 -1
  553. package/src/utils/concat_map_latest.ts +2 -4
  554. package/src/utils/defer_subscriptions.ts +1 -1
  555. package/src/utils/filter_map.ts +2 -4
  556. package/src/utils/reference.ts +234 -0
  557. package/src/utils/request/fetch.ts +3 -3
  558. package/src/utils/request/xhr.ts +2 -2
  559. package/src/utils/rx-retry_with_backoff.ts +2 -4
  560. package/tsconfig.json +4 -1
  561. package/tsconfig.modules.json +8 -3
  562. package/dist/_esm5.processed/core/abr/create_filters.d.ts +0 -27
  563. package/dist/_esm5.processed/core/abr/create_filters.js +0 -56
  564. package/dist/_esm5.processed/core/api/clock.d.ts +0 -157
  565. package/dist/_esm5.processed/core/api/clock.js +0 -363
  566. package/dist/_esm5.processed/core/init/create_stream_clock.d.ts +0 -34
  567. package/dist/_esm5.processed/core/init/create_stream_clock.js +0 -55
  568. package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.d.ts +0 -31
  569. package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.js +0 -37
  570. package/scripts/doc-generator/construct_html.js +0 -135
  571. package/scripts/doc-generator/construct_page_list.js +0 -120
  572. package/scripts/doc-generator/create_for_dir.js +0 -151
  573. package/scripts/doc-generator/get_files_to_convert.js +0 -71
  574. package/scripts/doc-generator/mkdir_parent.js +0 -21
  575. package/scripts/doc-generator/read_title_from_md.js +0 -22
  576. package/scripts/doc-generator/remove_toc_from_md.js +0 -20
  577. package/src/core/abr/create_filters.ts +0 -59
  578. package/src/core/api/clock.ts +0 -573
  579. package/src/core/init/create_stream_clock.ts +0 -93
  580. package/src/parsers/manifest/dash/common/extract_minimum_availability_time_offset.ts +0 -41
@@ -13,13 +13,12 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { EMPTY, merge as observableMerge, of as observableOf, Subject, throwError, } from "rxjs";
17
- import { filter, finalize, ignoreElements, mergeMap, switchMap, takeUntil, } from "rxjs/operators";
16
+ import { EMPTY, filter, finalize, ignoreElements, merge as observableMerge, mergeMap, of as observableOf, Subject, switchMap, takeUntil, throwError, } from "rxjs";
18
17
  import { MediaError } from "../../errors";
19
18
  import log from "../../log";
20
19
  import SegmentBuffersStore from "../segment_buffers";
21
20
  import StreamOrchestrator from "../stream";
22
- import createStreamClock from "./create_stream_clock";
21
+ import createStreamPlaybackObserver from "./create_stream_playback_observer";
23
22
  import DurationUpdater from "./duration_updater";
24
23
  import emitLoadedEvent from "./emit_loaded_event";
25
24
  import { maintainEndOfStream } from "./end_of_stream";
@@ -34,7 +33,7 @@ import updatePlaybackRate from "./update_playback_rate";
34
33
  * @returns {Function}
35
34
  */
36
35
  export default function createMediaSourceLoader(_a) {
37
- var mediaElement = _a.mediaElement, manifest = _a.manifest, clock$ = _a.clock$, speed$ = _a.speed$, bufferOptions = _a.bufferOptions, abrManager = _a.abrManager, segmentFetcherCreator = _a.segmentFetcherCreator, setCurrentTime = _a.setCurrentTime;
36
+ var mediaElement = _a.mediaElement, manifest = _a.manifest, speed = _a.speed, bufferOptions = _a.bufferOptions, abrManager = _a.abrManager, playbackObserver = _a.playbackObserver, segmentFetcherCreator = _a.segmentFetcherCreator;
38
37
  /**
39
38
  * Load the content on the given MediaSource.
40
39
  * @param {MediaSource} mediaSource
@@ -50,14 +49,13 @@ export default function createMediaSourceLoader(_a) {
50
49
  var error_1 = new MediaError("MEDIA_STARTING_TIME_NOT_FOUND", "Wanted starting time not found in the Manifest.");
51
50
  return throwError(function () { return error_1; });
52
51
  }
53
- /** Interface to create media buffers for loaded segments. */
52
+ /** Interface to create media buffers. */
54
53
  var segmentBuffersStore = new SegmentBuffersStore(mediaElement, mediaSource);
55
- var _b = initialSeekAndPlay({ clock$: clock$, mediaElement: mediaElement, startTime: initialTime,
56
- mustAutoPlay: autoPlay, setCurrentTime: setCurrentTime, isDirectfile: false }), seek$ = _b.seek$, play$ = _b.play$;
57
- var playDone$ = play$.pipe(filter(function (evt) { return evt.type !== "warning"; }));
58
- var streamEvents$ = playDone$.pipe(mergeMap(function () { return streamEventsEmitter(manifest, mediaElement, clock$); }));
59
- var streamClock$ = createStreamClock(clock$, { autoPlay: autoPlay, initialPlay$: playDone$,
60
- initialSeek$: seek$, manifest: manifest, speed$: speed$, startTime: initialTime });
54
+ var _b = initialSeekAndPlay({ mediaElement: mediaElement, playbackObserver: playbackObserver, startTime: initialTime,
55
+ mustAutoPlay: autoPlay }), seekAndPlay$ = _b.seekAndPlay$, initialPlayPerformed = _b.initialPlayPerformed, initialSeekPerformed = _b.initialSeekPerformed;
56
+ var observation$ = playbackObserver.observe(true);
57
+ var streamEvents$ = initialPlayPerformed.asObservable().pipe(filter(function (hasPlayed) { return hasPlayed; }), mergeMap(function () { return streamEventsEmitter(manifest, mediaElement, observation$); }));
58
+ var streamObserver = createStreamPlaybackObserver(manifest, playbackObserver, { autoPlay: autoPlay, initialPlayPerformed: initialPlayPerformed, initialSeekPerformed: initialSeekPerformed, speed: speed, startTime: initialTime });
61
59
  /** Cancel endOfStream calls when streams become active again. */
62
60
  var cancelEndOfStream$ = new Subject();
63
61
  /** Emits discontinuities detected by the StreamOrchestrator. */
@@ -65,7 +63,7 @@ export default function createMediaSourceLoader(_a) {
65
63
  /** Emits event when streams are "locked", meaning they cannot load segments. */
66
64
  var lockedStream$ = new Subject();
67
65
  // Creates Observable which will manage every Stream for the given Content.
68
- var streams$ = StreamOrchestrator({ manifest: manifest, initialPeriod: initialPeriod }, streamClock$, abrManager, segmentBuffersStore, segmentFetcherCreator, bufferOptions).pipe(mergeMap(function (evt) {
66
+ var streams$ = StreamOrchestrator({ manifest: manifest, initialPeriod: initialPeriod }, streamObserver, abrManager, segmentBuffersStore, segmentFetcherCreator, bufferOptions).pipe(mergeMap(function (evt) {
69
67
  switch (evt.type) {
70
68
  case "end-of-stream":
71
69
  log.debug("Init: end-of-stream order received.");
@@ -90,23 +88,22 @@ export default function createMediaSourceLoader(_a) {
90
88
  * the user on the media element and force a speed of `0` when the buffer is
91
89
  * empty, so it can build back buffer.
92
90
  */
93
- var playbackRate$ = updatePlaybackRate(mediaElement, speed$, clock$)
91
+ var playbackRate$ = updatePlaybackRate(mediaElement, speed, observation$)
94
92
  .pipe(ignoreElements());
95
93
  /**
96
94
  * Observable trying to avoid various stalling situations, emitting "stalled"
97
95
  * events when it cannot, as well as "unstalled" events when it get out of one.
98
96
  */
99
- var stallAvoider$ = StallAvoider(clock$, mediaElement, manifest, discontinuityUpdate$, lockedStream$, setCurrentTime);
97
+ var stallAvoider$ = StallAvoider(playbackObserver, manifest, lockedStream$, discontinuityUpdate$);
100
98
  /**
101
99
  * Emit a "loaded" events once the initial play has been performed and the
102
100
  * media can begin playback.
103
101
  * Also emits warning events if issues arise when doing so.
104
102
  */
105
- var loadingEvts$ = play$.pipe(switchMap(function (evt) {
106
- if (evt.type === "warning") {
107
- return observableOf(evt);
108
- }
109
- return emitLoadedEvent(clock$, mediaElement, segmentBuffersStore, false);
103
+ var loadingEvts$ = seekAndPlay$.pipe(switchMap(function (evt) {
104
+ return evt.type === "warning" ?
105
+ observableOf(evt) :
106
+ emitLoadedEvent(observation$, mediaElement, segmentBuffersStore, false);
110
107
  }));
111
108
  return observableMerge(durationUpdater$, loadingEvts$, playbackRate$, stallAvoider$, streams$, streamEvents$).pipe(finalize(function () {
112
109
  // clean-up every created SegmentBuffers
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { defer as observableDefer, EMPTY, from as observableFrom, merge as observableMerge, of as observableOf, timer as observableTimer, } from "rxjs";
17
- import { mapTo, mergeMap, mergeMapTo, share, take, } from "rxjs/operators";
16
+ import { defer as observableDefer, EMPTY, from as observableFrom, map, merge as observableMerge, mergeMap, of as observableOf, share, take, timer as observableTimer, } from "rxjs";
18
17
  import config from "../../config";
19
18
  import log from "../../log";
20
19
  import throttle from "../../utils/rx-throttle";
@@ -81,13 +80,15 @@ export default function manifestUpdateScheduler(_a) {
81
80
  var completeRefresh = _a.completeRefresh, delay = _a.delay, canUseUnsafeMode = _a.canUseUnsafeMode;
82
81
  var unsafeMode = canUseUnsafeMode && unsafeModeEnabled;
83
82
  return startManualRefreshTimer(delay !== null && delay !== void 0 ? delay : 0, minimumManifestUpdateInterval, sendingTime)
84
- .pipe(mapTo({ completeRefresh: completeRefresh, unsafeMode: unsafeMode }));
83
+ .pipe(map(function () { return ({ completeRefresh: completeRefresh, unsafeMode: unsafeMode }); }));
85
84
  }));
86
85
  /** Emit when the Manifest tells us that it has "expired". */
87
86
  var expired$ = manifest.expired === null ?
88
87
  EMPTY :
89
- observableTimer(minInterval)
90
- .pipe(mergeMapTo(observableFrom(manifest.expired)), mapTo({ completeRefresh: true, unsafeMode: unsafeModeEnabled }));
88
+ observableTimer(minInterval).pipe(mergeMap(function () {
89
+ return manifest.expired === null ? EMPTY :
90
+ observableFrom(manifest.expired);
91
+ }), map(function () { return ({ completeRefresh: true, unsafeMode: unsafeModeEnabled }); }));
91
92
  /** Emit when the Manifest should normally be refreshed. */
92
93
  var autoRefresh$ = createAutoRefreshObservable();
93
94
  return observableMerge(autoRefresh$, internalRefresh$, expired$).pipe(take(1), mergeMap(function (_a) {
@@ -149,7 +150,7 @@ export default function manifestUpdateScheduler(_a) {
149
150
  actualRefreshInterval = regularRefreshDelay;
150
151
  }
151
152
  return observableTimer(Math.max(actualRefreshInterval, minInterval))
152
- .pipe(mapTo({ completeRefresh: false, unsafeMode: unsafeModeEnabled }));
153
+ .pipe(map(function () { return ({ completeRefresh: false, unsafeMode: unsafeModeEnabled }); }));
153
154
  }
154
155
  }
155
156
  /**
@@ -192,7 +193,7 @@ export default function manifestUpdateScheduler(_a) {
192
193
  catch (e) {
193
194
  var message = e instanceof Error ? e.message :
194
195
  "unknown error";
195
- log.warn("MUS: Attempt to update Manifest failed: " + message, "Re-downloading the Manifest fully");
196
+ log.warn("MUS: Attempt to update Manifest failed: ".concat(message), "Re-downloading the Manifest fully");
196
197
  return startManualRefreshTimer(FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY, minimumManifestUpdateInterval, newSendingTime)
197
198
  .pipe(mergeMap(function () {
198
199
  return refreshManifest({ completeRefresh: true, unsafeMode: false });
@@ -15,8 +15,9 @@
15
15
  */
16
16
  import { Observable } from "rxjs";
17
17
  import Manifest, { Period } from "../../manifest";
18
+ import { PlaybackObserver } from "../api";
18
19
  import { IBufferType } from "../segment_buffers";
19
- import { IInitClockTick, IStalledEvent, IUnstalledEvent, IWarningEvent } from "./types";
20
+ import { IStalledEvent, IUnstalledEvent, IWarningEvent } from "./types";
20
21
  export interface ILockedStreamEvent {
21
22
  /** Buffer type for which no segment will currently load. */
22
23
  bufferType: IBufferType;
@@ -64,14 +65,11 @@ export interface IDiscontinuityTimeInfo {
64
65
  * Monitor situations where playback is stalled and try to get out of those.
65
66
  * Emit "stalled" then "unstalled" respectively when an unavoidable stall is
66
67
  * encountered and exited.
67
- * @param {Observable} clock$ - Observable emitting the current playback
68
- * conditions.
69
- * @param {HTMLMediaElement} mediaElement - The HTMLMediaElement on which the
70
- * media is played.
68
+ * @param {object} playbackObserver - emit the current playback conditions.
71
69
  * @param {Object} manifest - The Manifest of the currently-played content.
72
70
  * @param {Observable} discontinuityUpdate$ - Observable emitting encountered
73
71
  * discontinuities for loaded Period and buffer types.
74
72
  * @param {Function} setCurrentTime
75
73
  * @returns {Observable}
76
74
  */
77
- export default function StallAvoider(clock$: Observable<IInitClockTick>, mediaElement: HTMLMediaElement, manifest: Manifest | null, discontinuityUpdate$: Observable<IDiscontinuityEvent>, lockedStream$: Observable<ILockedStreamEvent>, setCurrentTime: (nb: number) => void): Observable<IStalledEvent | IUnstalledEvent | IWarningEvent>;
75
+ export default function StallAvoider(playbackObserver: PlaybackObserver, manifest: Manifest | null, lockedStream$: Observable<ILockedStreamEvent>, discontinuityUpdate$: Observable<IDiscontinuityEvent>): Observable<IStalledEvent | IUnstalledEvent | IWarningEvent>;
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { merge as observableMerge, } from "rxjs";
17
- import { ignoreElements, map, scan, tap, withLatestFrom, } from "rxjs/operators";
16
+ import { ignoreElements, map, merge as observableMerge, scan, tap, withLatestFrom, } from "rxjs";
18
17
  import isSeekingApproximate from "../../compat/is_seeking_approximate";
19
18
  import config from "../../config";
20
19
  import { MediaError } from "../../errors";
@@ -31,26 +30,22 @@ var EPSILON = 1 / 60;
31
30
  * Monitor situations where playback is stalled and try to get out of those.
32
31
  * Emit "stalled" then "unstalled" respectively when an unavoidable stall is
33
32
  * encountered and exited.
34
- * @param {Observable} clock$ - Observable emitting the current playback
35
- * conditions.
36
- * @param {HTMLMediaElement} mediaElement - The HTMLMediaElement on which the
37
- * media is played.
33
+ * @param {object} playbackObserver - emit the current playback conditions.
38
34
  * @param {Object} manifest - The Manifest of the currently-played content.
39
35
  * @param {Observable} discontinuityUpdate$ - Observable emitting encountered
40
36
  * discontinuities for loaded Period and buffer types.
41
37
  * @param {Function} setCurrentTime
42
38
  * @returns {Observable}
43
39
  */
44
- export default function StallAvoider(clock$, mediaElement, manifest, discontinuityUpdate$, lockedStream$, setCurrentTime) {
40
+ export default function StallAvoider(playbackObserver, manifest, lockedStream$, discontinuityUpdate$) {
45
41
  var initialDiscontinuitiesStore = [];
46
42
  /**
47
43
  * Emit every known audio and video buffer discontinuities in chronological
48
44
  * order (first ordered by Period's start, then by bufferType in any order.
49
45
  */
50
- var discontinuitiesStore$ = discontinuityUpdate$.pipe(withLatestFrom(clock$), // listen to clock to clean-up old discontinuities
51
- scan(function (discontinuitiesStore, _a) {
52
- var evt = _a[0], tick = _a[1];
53
- return updateDiscontinuitiesStore(discontinuitiesStore, evt, tick);
46
+ var discontinuitiesStore$ = discontinuityUpdate$.pipe(withLatestFrom(playbackObserver.observe(true)), scan(function (discontinuitiesStore, _a) {
47
+ var evt = _a[0], observation = _a[1];
48
+ return updateDiscontinuitiesStore(discontinuitiesStore, evt, observation);
54
49
  }, initialDiscontinuitiesStore));
55
50
  /**
56
51
  * On some devices (right now only seen on Tizen), seeking through the
@@ -82,29 +77,35 @@ export default function StallAvoider(clock$, mediaElement, manifest, discontinui
82
77
  * If we're rebuffering waiting on data of a "locked stream", seek into the
83
78
  * Period handled by that stream to unlock the situation.
84
79
  */
85
- var unlock$ = lockedStream$.pipe(withLatestFrom(clock$), tap(function (_a) {
80
+ var unlock$ = lockedStream$.pipe(withLatestFrom(playbackObserver.observe(true)), tap(function (_a) {
86
81
  var _b;
87
- var lockedStreamEvt = _a[0], tick = _a[1];
82
+ var lockedStreamEvt = _a[0], observation = _a[1];
88
83
  // TODO(PaulB) also skip when the user's wanted speed is set to `0`, as we
89
84
  // might not want to seek in that case?
90
- if (!tick.rebuffering ||
91
- tick.paused || (lockedStreamEvt.bufferType !== "audio" &&
85
+ if (!observation.rebuffering ||
86
+ observation.paused || (lockedStreamEvt.bufferType !== "audio" &&
92
87
  lockedStreamEvt.bufferType !== "video")) {
93
88
  return;
94
89
  }
95
- var currPos = tick.position;
96
- var rebufferingPos = (_b = tick.rebuffering.position) !== null && _b !== void 0 ? _b : currPos;
90
+ var currPos = observation.position;
91
+ var rebufferingPos = (_b = observation.rebuffering.position) !== null && _b !== void 0 ? _b : currPos;
97
92
  var lockedPeriodStart = lockedStreamEvt.period.start;
98
93
  if (currPos < lockedPeriodStart &&
99
94
  Math.abs(rebufferingPos - lockedPeriodStart) < 1) {
100
95
  log.warn("Init: rebuffering because of a future locked stream.\n" +
101
96
  "Trying to unlock by seeking to the next Period");
102
- setCurrentTime(lockedPeriodStart + 0.001);
97
+ playbackObserver.setCurrentTime(lockedPeriodStart + 0.001);
103
98
  }
104
- }), ignoreElements());
105
- var stall$ = clock$.pipe(withLatestFrom(discontinuitiesStore$), map(function (_a) {
106
- var tick = _a[0], discontinuitiesStore = _a[1];
107
- var buffered = tick.buffered, position = tick.position, readyState = tick.readyState, rebuffering = tick.rebuffering, freezing = tick.freezing;
99
+ }),
100
+ // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
101
+ // first type parameter as `any` instead of the perfectly fine `unknown`,
102
+ // leading to linter issues, as it forbids the usage of `any`.
103
+ // This is why we're disabling the eslint rule.
104
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
105
+ ignoreElements());
106
+ var stall$ = playbackObserver.observe(true).pipe(withLatestFrom(discontinuitiesStore$), map(function (_a) {
107
+ var observation = _a[0], discontinuitiesStore = _a[1];
108
+ var buffered = observation.buffered, position = observation.position, readyState = observation.readyState, rebuffering = observation.rebuffering, freezing = observation.freezing;
108
109
  if (freezing !== null) {
109
110
  var now = performance.now();
110
111
  var referenceTimestamp = prevFreezingState === null ?
@@ -112,7 +113,7 @@ export default function StallAvoider(clock$, mediaElement, manifest, discontinui
112
113
  prevFreezingState.attemptTimestamp;
113
114
  if (now - referenceTimestamp > UNFREEZING_SEEK_DELAY) {
114
115
  log.warn("Init: trying to seek to un-freeze player");
115
- setCurrentTime(tick.getCurrentTime() + UNFREEZING_DELTA_POSITION);
116
+ playbackObserver.setCurrentTime(playbackObserver.getCurrentTime() + UNFREEZING_DELTA_POSITION);
116
117
  prevFreezingState = { attemptTimestamp: now };
117
118
  }
118
119
  if (now - freezing.timestamp > FREEZING_STALLED_DELAY) {
@@ -125,16 +126,29 @@ export default function StallAvoider(clock$, mediaElement, manifest, discontinui
125
126
  }
126
127
  if (rebuffering === null) {
127
128
  if (readyState === 1) {
128
- // With a readyState set to 1, we should still be not able to play,
129
- // anounce that we're stalled due to an unknown "freezing" status.
129
+ // With a readyState set to 1, we should still not be able to play:
130
+ // Return that we're stalled
131
+ var reason = void 0;
132
+ if (observation.seeking) {
133
+ reason = observation.internalSeeking ? "internal-seek" :
134
+ "seeking";
135
+ }
136
+ else {
137
+ reason = "not-ready";
138
+ }
130
139
  return { type: "stalled",
131
- value: "freezing" };
140
+ value: reason };
132
141
  }
133
142
  return { type: "unstalled",
134
143
  value: null };
135
144
  }
136
- if (tick.seeking) {
137
- lastSeekingPosition = tick.position;
145
+ // We want to separate a stall situation when a seek is due to a seek done
146
+ // internally by the player to when its due to a regular user seek.
147
+ var stalledReason = rebuffering.reason === "seeking" &&
148
+ observation.internalSeeking ? "internal-seek" :
149
+ rebuffering.reason;
150
+ if (observation.seeking) {
151
+ lastSeekingPosition = observation.position;
138
152
  }
139
153
  else if (lastSeekingPosition !== null) {
140
154
  var now = performance.now();
@@ -142,17 +156,17 @@ export default function StallAvoider(clock$, mediaElement, manifest, discontinui
142
156
  ignoredStallTimeStamp = now;
143
157
  }
144
158
  if (isSeekingApproximate &&
145
- tick.position < lastSeekingPosition &&
159
+ observation.position < lastSeekingPosition &&
146
160
  now - ignoredStallTimeStamp < FORCE_DISCONTINUITY_SEEK_DELAY) {
147
161
  return { type: "stalled",
148
- value: rebuffering.reason };
162
+ value: stalledReason };
149
163
  }
150
164
  lastSeekingPosition = null;
151
165
  }
152
166
  ignoredStallTimeStamp = null;
153
167
  if (manifest === null) {
154
168
  return { type: "stalled",
155
- value: rebuffering.reason };
169
+ value: stalledReason };
156
170
  }
157
171
  /** Position at which data is awaited. */
158
172
  var stalledPosition = rebuffering.position;
@@ -160,12 +174,12 @@ export default function StallAvoider(clock$, mediaElement, manifest, discontinui
160
174
  var skippableDiscontinuity = findSeekableDiscontinuity(discontinuitiesStore, manifest, stalledPosition);
161
175
  if (skippableDiscontinuity !== null) {
162
176
  var realSeekTime = skippableDiscontinuity + 0.001;
163
- if (realSeekTime <= mediaElement.currentTime) {
164
- log.info("Init: position to seek already reached, no seeking", mediaElement.currentTime, realSeekTime);
177
+ if (realSeekTime <= playbackObserver.getCurrentTime()) {
178
+ log.info("Init: position to seek already reached, no seeking", playbackObserver.getCurrentTime(), realSeekTime);
165
179
  }
166
180
  else {
167
181
  log.warn("SA: skippable discontinuity found in the stream", position, realSeekTime);
168
- setCurrentTime(realSeekTime);
182
+ playbackObserver.setCurrentTime(realSeekTime);
169
183
  return EVENTS.warning(generateDiscontinuityError(stalledPosition, realSeekTime));
170
184
  }
171
185
  }
@@ -181,9 +195,9 @@ export default function StallAvoider(clock$, mediaElement, manifest, discontinui
181
195
  var nextBufferRangeGap = getNextRangeGap(buffered, freezePosition);
182
196
  if (nextBufferRangeGap < BUFFER_DISCONTINUITY_THRESHOLD) {
183
197
  var seekTo = (freezePosition + nextBufferRangeGap + EPSILON);
184
- if (mediaElement.currentTime < seekTo) {
198
+ if (playbackObserver.getCurrentTime() < seekTo) {
185
199
  log.warn("Init: discontinuity encountered inferior to the threshold", freezePosition, seekTo, BUFFER_DISCONTINUITY_THRESHOLD);
186
- setCurrentTime(seekTo);
200
+ playbackObserver.setCurrentTime(seekTo);
187
201
  return EVENTS.warning(generateDiscontinuityError(freezePosition, seekTo));
188
202
  }
189
203
  }
@@ -193,16 +207,16 @@ export default function StallAvoider(clock$, mediaElement, manifest, discontinui
193
207
  var period = manifest.periods[i];
194
208
  if (period.end !== undefined && period.end <= freezePosition) {
195
209
  if (manifest.periods[i + 1].start > freezePosition &&
196
- manifest.periods[i + 1].start > mediaElement.currentTime) {
210
+ manifest.periods[i + 1].start > playbackObserver.getCurrentTime()) {
197
211
  var nextPeriod = manifest.periods[i + 1];
198
- setCurrentTime(nextPeriod.start);
212
+ playbackObserver.setCurrentTime(nextPeriod.start);
199
213
  return EVENTS.warning(generateDiscontinuityError(freezePosition, nextPeriod.start));
200
214
  }
201
215
  break;
202
216
  }
203
217
  }
204
218
  return { type: "stalled",
205
- value: rebuffering.reason };
219
+ value: stalledReason };
206
220
  }));
207
221
  return observableMerge(unlock$, stall$);
208
222
  }
@@ -272,14 +286,14 @@ function eventContainsDiscontinuity(evt) {
272
286
  * store it in Period's chronological order in the Array.
273
287
  * @param {Array.<Object>} discontinuitiesStore
274
288
  * @param {Object} evt
275
- * @param {Object} tick
289
+ * @param {Object} observation
276
290
  * @returns {Array.<Object>}
277
291
  */
278
- function updateDiscontinuitiesStore(discontinuitiesStore, evt, tick) {
292
+ function updateDiscontinuitiesStore(discontinuitiesStore, evt, observation) {
279
293
  // First, perform clean-up of old discontinuities
280
294
  while (discontinuitiesStore.length > 0 &&
281
295
  discontinuitiesStore[0].period.end !== undefined &&
282
- discontinuitiesStore[0].period.end + 10 < tick.position) {
296
+ discontinuitiesStore[0].period.end + 10 < observation.position) {
283
297
  discontinuitiesStore.shift();
284
298
  }
285
299
  var period = evt.period, bufferType = evt.bufferType;
@@ -15,7 +15,7 @@
15
15
  */
16
16
  import { Observable } from "rxjs";
17
17
  import Manifest from "../../../manifest";
18
- import { IInitClockTick } from "../types";
18
+ import { IPlaybackObservation } from "../../api";
19
19
  import { IStreamEvent } from "./types";
20
20
  /**
21
21
  * Get events from manifest and emit each time an event has to be emitted
@@ -23,5 +23,5 @@ import { IStreamEvent } from "./types";
23
23
  * @param {HTMLMediaElement} mediaElement
24
24
  * @returns {Observable}
25
25
  */
26
- declare function streamEventsEmitter(manifest: Manifest, mediaElement: HTMLMediaElement, clock$: Observable<IInitClockTick>): Observable<IStreamEvent>;
26
+ declare function streamEventsEmitter(manifest: Manifest, mediaElement: HTMLMediaElement, observation$: Observable<IPlaybackObservation>): Observable<IStreamEvent>;
27
27
  export default streamEventsEmitter;
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { combineLatest as observableCombineLatest, concat as observableConcat, EMPTY, interval, of as observableOf, } from "rxjs";
17
- import { distinctUntilChanged, ignoreElements, map, mergeMap, pairwise, scan, startWith, switchMap, tap, } from "rxjs/operators";
16
+ import { combineLatest as observableCombineLatest, concat as observableConcat, distinctUntilChanged, EMPTY, ignoreElements, interval, map, mergeMap, pairwise, scan, startWith, switchMap, tap, of as observableOf, } from "rxjs";
18
17
  import config from "../../../config";
19
18
  import { fromEvent } from "../../../utils/event_emitter";
20
19
  import refreshScheduledEventsList from "./refresh_scheduled_events_list";
@@ -33,23 +32,23 @@ function isFiniteStreamEvent(evt) {
33
32
  * @param {HTMLMediaElement} mediaElement
34
33
  * @returns {Observable}
35
34
  */
36
- function streamEventsEmitter(manifest, mediaElement, clock$) {
35
+ function streamEventsEmitter(manifest, mediaElement, observation$) {
37
36
  var eventsBeingPlayed = new WeakMap();
38
37
  var lastScheduledEvents = [];
39
38
  var scheduledEvents$ = fromEvent(manifest, "manifestUpdate").pipe(startWith(null), scan(function (oldScheduledEvents) {
40
39
  return refreshScheduledEventsList(oldScheduledEvents, manifest);
41
40
  }, []));
42
41
  /**
43
- * Examine playback situation from clock ticks to emit stream events and
42
+ * Examine playback situation from playback observations to emit stream events and
44
43
  * prepare set onExit callbacks if needed.
45
44
  * @param {Array.<Object>} scheduledEvents
46
- * @param {Object} oldTick
47
- * @param {Object} newTick
45
+ * @param {Object} oldObservation
46
+ * @param {Object} newObservation
48
47
  * @returns {Observable}
49
48
  */
50
- function emitStreamEvents$(scheduledEvents, oldClockTick, newClockTick) {
51
- var previousTime = oldClockTick.currentTime;
52
- var isSeeking = newClockTick.isSeeking, currentTime = newClockTick.currentTime;
49
+ function emitStreamEvents$(scheduledEvents, oldObservation, newObservation) {
50
+ var previousTime = oldObservation.currentTime;
51
+ var isSeeking = newObservation.isSeeking, currentTime = newObservation.currentTime;
53
52
  var eventsToSend = [];
54
53
  var eventsToExit = [];
55
54
  for (var i = 0; i < scheduledEvents.length; i++) {
@@ -94,7 +93,13 @@ function streamEventsEmitter(manifest, mediaElement, clock$) {
94
93
  if (typeof evt.onExit === "function") {
95
94
  evt.onExit();
96
95
  }
97
- }), ignoreElements()) : EMPTY);
96
+ }),
97
+ // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
98
+ // first type parameter as `any` instead of the perfectly fine `unknown`,
99
+ // leading to linter issues, as it forbids the usage of `any`.
100
+ // This is why we're disabling the eslint rule.
101
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
102
+ ignoreElements()) : EMPTY);
98
103
  }
99
104
  /**
100
105
  * This pipe allows to control wether the polling should occur, if there
@@ -106,15 +111,15 @@ function streamEventsEmitter(manifest, mediaElement, clock$) {
106
111
  }
107
112
  return observableCombineLatest([
108
113
  interval(STREAM_EVENT_EMITTER_POLL_INTERVAL).pipe(startWith(null)),
109
- clock$,
114
+ observation$,
110
115
  ]).pipe(map(function (_a) {
111
- var _ = _a[0], clockTick = _a[1];
112
- var seeking = clockTick.seeking;
116
+ var _ = _a[0], observation = _a[1];
117
+ var seeking = observation.seeking;
113
118
  return { isSeeking: seeking,
114
119
  currentTime: mediaElement.currentTime };
115
120
  }), pairwise(), mergeMap(function (_a) {
116
- var oldTick = _a[0], newTick = _a[1];
117
- return emitStreamEvents$(lastScheduledEvents, oldTick, newTick);
121
+ var oldObservation = _a[0], newObservation = _a[1];
122
+ return emitStreamEvents$(lastScheduledEvents, oldObservation, newObservation);
118
123
  }));
119
124
  }));
120
125
  }
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { fromEvent as observableFromEvent, } from "rxjs";
17
- import { mergeMap } from "rxjs/operators";
16
+ import { fromEvent as observableFromEvent, mergeMap, } from "rxjs";
18
17
  import { MediaError } from "../../errors";
19
18
  /**
20
19
  * Returns an observable which throws the right MediaError as soon an "error"
@@ -15,31 +15,11 @@
15
15
  */
16
16
  import { ICustomError } from "../../errors";
17
17
  import Manifest, { Adaptation, Period, Representation } from "../../manifest";
18
- import { IClockMediaEventType, IFreezingStatus, IRebufferingStatus } from "../api";
19
18
  import { IAttachedMediaKeysEvent, IBlacklistProtectionDataEvent, ICreatedMediaKeysEvent, IEncryptedEvent, IInitDataIgnoredEvent, IKeysUpdateEvent, INoUpdateEvent, ISessionMessageEvent, ISessionUpdatedEvent } from "../eme";
20
19
  import SegmentBuffersStore from "../segment_buffers";
21
20
  import { IActivePeriodChangedEvent, IAdaptationChangeEvent, IBitrateEstimationChangeEvent, ICompletedStreamEvent, IEncryptionDataEncounteredEvent, IInbandEventsEvent, INeedsBufferFlushEvent, INeedsDecipherabilityFlush, INeedsMediaSourceReload, IPeriodStreamClearedEvent, IPeriodStreamReadyEvent, IRepresentationChangeEvent, IStreamEventAddedSegment, IStreamManifestMightBeOutOfSync, IStreamNeedsManifestRefresh } from "../stream";
22
21
  import { IEMEDisabledEvent } from "./create_eme_manager";
23
22
  import { IStreamEventEvent, IStreamEventSkipEvent } from "./stream_events_emitter";
24
- /** Object awaited by the `Init` on each clock tick. */
25
- export interface IInitClockTick {
26
- position: number;
27
- getCurrentTime: () => number;
28
- buffered: TimeRanges;
29
- duration: number;
30
- bufferGap: number;
31
- event: IClockMediaEventType;
32
- playbackRate: number;
33
- currentRange: {
34
- start: number;
35
- end: number;
36
- } | null;
37
- readyState: number;
38
- paused: boolean;
39
- rebuffering: IRebufferingStatus | null;
40
- freezing: IFreezingStatus | null;
41
- seeking: boolean;
42
- }
43
23
  /** Event sent after the Manifest has been loaded and parsed for the first time. */
44
24
  export interface IManifestReadyEvent {
45
25
  type: "manifestReady";
@@ -14,7 +14,8 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { Observable } from "rxjs";
17
- import { IInitClockTick } from "./types";
17
+ import { IReadOnlySharedReference } from "../../utils/reference";
18
+ import { IPlaybackObservation } from "../api";
18
19
  export interface IPlaybackRateOptions {
19
20
  pauseWhenRebuffering?: boolean;
20
21
  }
@@ -24,8 +25,8 @@ export interface IPlaybackRateOptions {
24
25
  * rebuffering and restore the speed once it appears to exit rebuffering status.
25
26
  *
26
27
  * @param {HTMLMediaElement} mediaElement
27
- * @param {Observable} speed$ - emit speed set by the user
28
- * @param {Observable} clock$ - Current playback conditions
28
+ * @param {Observable} speed - last speed set by the user
29
+ * @param {Observable} observation$ - Current playback conditions
29
30
  * @returns {Observable}
30
31
  */
31
- export default function updatePlaybackRate(mediaElement: HTMLMediaElement, speed$: Observable<number>, clock$: Observable<IInitClockTick>): Observable<number>;
32
+ export default function updatePlaybackRate(mediaElement: HTMLMediaElement, speed: IReadOnlySharedReference<number>, observation$: Observable<IPlaybackObservation>): Observable<number>;
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { defer as observableDefer, of as observableOf, } from "rxjs";
17
- import { distinctUntilChanged, map, startWith, switchMap, tap, } from "rxjs/operators";
16
+ import { defer as observableDefer, distinctUntilChanged, map, of as observableOf, startWith, switchMap, tap, } from "rxjs";
18
17
  import log from "../../log";
19
18
  /**
20
19
  * Manage playback speed.
@@ -22,13 +21,13 @@ import log from "../../log";
22
21
  * rebuffering and restore the speed once it appears to exit rebuffering status.
23
22
  *
24
23
  * @param {HTMLMediaElement} mediaElement
25
- * @param {Observable} speed$ - emit speed set by the user
26
- * @param {Observable} clock$ - Current playback conditions
24
+ * @param {Observable} speed - last speed set by the user
25
+ * @param {Observable} observation$ - Current playback conditions
27
26
  * @returns {Observable}
28
27
  */
29
- export default function updatePlaybackRate(mediaElement, speed$, clock$) {
30
- var forcePause$ = clock$
31
- .pipe(map(function (timing) { return timing.rebuffering !== null; }), startWith(false), distinctUntilChanged());
28
+ export default function updatePlaybackRate(mediaElement, speed, observation$) {
29
+ var forcePause$ = observation$
30
+ .pipe(map(function (observation) { return observation.rebuffering !== null; }), startWith(false), distinctUntilChanged());
32
31
  return forcePause$
33
32
  .pipe(switchMap(function (shouldForcePause) {
34
33
  if (shouldForcePause) {
@@ -38,10 +37,10 @@ export default function updatePlaybackRate(mediaElement, speed$, clock$) {
38
37
  return observableOf(0);
39
38
  });
40
39
  }
41
- return speed$
42
- .pipe(tap(function (speed) {
43
- log.info("Init: Resume playback speed", speed);
44
- mediaElement.playbackRate = speed;
40
+ return speed.asObservable()
41
+ .pipe(tap(function (lastSpeed) {
42
+ log.info("Init: Resume playback speed", lastSpeed);
43
+ mediaElement.playbackRate = lastSpeed;
45
44
  }));
46
45
  }));
47
46
  }
@@ -19,7 +19,7 @@ export interface IGarbageCollectorArgument {
19
19
  /** SegmentBuffer implementation */
20
20
  segmentBuffer: SegmentBuffer;
21
21
  /** Emit current position in seconds regularly */
22
- clock$: Observable<number>;
22
+ currentTime$: Observable<number>;
23
23
  /** Maximum time to keep behind current time position, in seconds */
24
24
  maxBufferBehind$: Observable<number>;
25
25
  /** Minimum time to keep behind current time position, in seconds */
@@ -27,10 +27,10 @@ export interface IGarbageCollectorArgument {
27
27
  }
28
28
  /**
29
29
  * Perform cleaning of the buffer according to the values set by the user
30
- * at each clock tick and each times the maxBufferBehind/maxBufferAhead values
31
- * change.
30
+ * each time `currentTime$` emits and each times the
31
+ * maxBufferBehind/maxBufferAhead values change.
32
32
  *
33
33
  * @param {Object} opt
34
34
  * @returns {Observable}
35
35
  */
36
- export default function BufferGarbageCollector({ segmentBuffer, clock$, maxBufferBehind$, maxBufferAhead$, }: IGarbageCollectorArgument): Observable<never>;
36
+ export default function BufferGarbageCollector({ segmentBuffer, currentTime$, maxBufferBehind$, maxBufferAhead$, }: IGarbageCollectorArgument): Observable<never>;