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
@@ -15,28 +15,25 @@
15
15
  */
16
16
 
17
17
  import {
18
+ catchError,
18
19
  combineLatest as observableCombineLatest,
19
20
  defer as observableDefer,
21
+ distinctUntilChanged,
20
22
  EMPTY,
23
+ filter,
21
24
  fromEvent as observableFromEvent,
25
+ ignoreElements,
22
26
  interval as observableInterval,
27
+ map,
23
28
  merge as observableMerge,
29
+ mergeMap,
24
30
  Observable,
25
31
  of as observableOf,
26
- } from "rxjs";
27
- import {
28
- catchError,
29
- distinctUntilChanged,
30
- filter,
31
- ignoreElements,
32
- map,
33
- mapTo,
34
- mergeMap,
35
32
  startWith,
36
33
  switchMap,
37
34
  take,
38
35
  tap,
39
- } from "rxjs/operators";
36
+ } from "rxjs";
40
37
  import {
41
38
  onSourceOpen$,
42
39
  onSourceClose$,
@@ -83,6 +80,11 @@ export default function DurationUpdater(
83
80
  })
84
81
  );
85
82
  }),
83
+ // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
84
+ // first type parameter as `any` instead of the perfectly fine `unknown`,
85
+ // leading to linter issues, as it forbids the usage of `any`.
86
+ // This is why we're disabling the eslint rule.
87
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
86
88
  ignoreElements()
87
89
  );
88
90
  });
@@ -170,9 +172,9 @@ function whenSourceBuffersEndedUpdates$(
170
172
  const sourceBuffer = sourceBuffers[i];
171
173
  sourceBufferUpdatingStatuses.push(
172
174
  observableMerge(
173
- observableFromEvent(sourceBuffer, "updatestart").pipe(mapTo(true)),
174
- observableFromEvent(sourceBuffer, "update").pipe(mapTo(false)),
175
- observableInterval(500).pipe(mapTo(sourceBuffer.updating))
175
+ observableFromEvent(sourceBuffer, "updatestart").pipe(map(() => true)),
176
+ observableFromEvent(sourceBuffer, "update").pipe(map(() => false)),
177
+ observableInterval(500).pipe(map(() => sourceBuffer.updating))
176
178
  ).pipe(
177
179
  startWith(sourceBuffer.updating),
178
180
  distinctUntilChanged()
@@ -183,7 +185,7 @@ function whenSourceBuffersEndedUpdates$(
183
185
  filter((areUpdating) => {
184
186
  return areUpdating.every((isUpdating) => !isUpdating);
185
187
  }),
186
- mapTo(undefined)
188
+ map(() => undefined)
187
189
  );
188
190
  }
189
191
 
@@ -193,11 +195,12 @@ function whenSourceBuffersEndedUpdates$(
193
195
  * @returns {Object}
194
196
  */
195
197
  function isMediaSourceOpened$(mediaSource: MediaSource): Observable<boolean> {
196
- return observableMerge(onSourceOpen$(mediaSource).pipe(mapTo(true)),
197
- onSourceEnded$(mediaSource).pipe(mapTo(false)),
198
- onSourceClose$(mediaSource).pipe(mapTo(false))
198
+ return observableMerge(onSourceOpen$(mediaSource).pipe(map(() => true)),
199
+ onSourceEnded$(mediaSource).pipe(map(() => false)),
200
+ onSourceClose$(mediaSource).pipe(map(() => false))
199
201
  ).pipe(
200
202
  startWith(mediaSource.readyState === "open"),
201
203
  distinctUntilChanged()
202
204
  );
203
205
  }
206
+ /* eslint-enable @typescript-eslint/no-unsafe-argument */
@@ -17,41 +17,37 @@
17
17
 
18
18
  import {
19
19
  Observable,
20
- } from "rxjs";
21
- import {
22
20
  take,
23
- } from "rxjs/operators";
21
+ } from "rxjs";
24
22
  import {
25
23
  shouldValidateMetadata,
26
24
  shouldWaitForDataBeforeLoaded,
27
25
  } from "../../compat";
28
26
  import filterMap from "../../utils/filter_map";
27
+ import { IPlaybackObservation } from "../api";
29
28
  import SegmentBuffersStore from "../segment_buffers";
30
29
  import EVENTS from "./events_generators";
31
- import {
32
- IInitClockTick,
33
- ILoadedEvent,
34
- } from "./types";
30
+ import { ILoadedEvent } from "./types";
35
31
 
36
32
  /**
37
33
  * Emit a `ILoadedEvent` once the content can be considered as loaded.
38
- * @param {Observable} clock$
34
+ * @param {Observable} observation$
39
35
  * @param {HTMLMediaElement} mediaElement
40
36
  * @param {Object|null} segmentBuffersStore
41
37
  * @param {boolean} isDirectfile - `true` if this is a directfile content
42
38
  * @returns {Observable}
43
39
  */
44
40
  export default function emitLoadedEvent(
45
- clock$ : Observable<IInitClockTick>,
41
+ observation$ : Observable<IPlaybackObservation>,
46
42
  mediaElement : HTMLMediaElement,
47
43
  segmentBuffersStore : SegmentBuffersStore | null,
48
44
  isDirectfile : boolean
49
45
  ) : Observable<ILoadedEvent> {
50
- return clock$.pipe(
51
- filterMap<IInitClockTick, ILoadedEvent, null>((tick) => {
52
- if (tick.rebuffering !== null ||
53
- tick.freezing !== null ||
54
- tick.readyState === 0)
46
+ return observation$.pipe(
47
+ filterMap<IPlaybackObservation, ILoadedEvent, null>((observation) => {
48
+ if (observation.rebuffering !== null ||
49
+ observation.freezing !== null ||
50
+ observation.readyState === 0)
55
51
  {
56
52
  return null;
57
53
  }
@@ -63,7 +59,7 @@ export default function emitLoadedEvent(
63
59
  null;
64
60
  }
65
61
 
66
- if (tick.readyState >= 3 && tick.currentRange !== null) {
62
+ if (observation.readyState >= 3 && observation.currentRange !== null) {
67
63
  if (!shouldValidateMetadata() || mediaElement.duration > 0) {
68
64
  return EVENTS.loaded(segmentBuffersStore);
69
65
  }
@@ -17,17 +17,15 @@
17
17
  import {
18
18
  defer as observableDefer,
19
19
  merge as observableMerge,
20
+ mergeMap,
20
21
  Observable,
21
22
  of as observableOf,
22
23
  race as observableRace,
23
- } from "rxjs";
24
- import {
25
- mergeMap,
26
24
  startWith,
27
25
  switchMap,
28
26
  take,
29
27
  takeLast,
30
- } from "rxjs/operators";
28
+ } from "rxjs";
31
29
  import { events } from "../../compat";
32
30
  import log from "../../log";
33
31
 
@@ -44,7 +44,6 @@ export default function getInitialTime(
44
44
  lowLatencyMode : boolean,
45
45
  startAt? : IInitialTimeOptions
46
46
  ) : number {
47
- log.debug("Init: calculating initial time");
48
47
  if (startAt != null) {
49
48
  const min = manifest.getMinimumPosition();
50
49
  const max = manifest.getMaximumPosition();
@@ -14,21 +14,19 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import {
18
- concat as observableConcat,
19
- Observable,
20
- of as observableOf,
21
- } from "rxjs";
22
17
  import {
23
18
  catchError,
19
+ concat as observableConcat,
24
20
  filter,
25
- mapTo,
21
+ map,
26
22
  mergeMap,
23
+ Observable,
24
+ of as observableOf,
27
25
  shareReplay,
28
26
  startWith,
29
27
  take,
30
28
  tap,
31
- } from "rxjs/operators";
29
+ } from "rxjs";
32
30
  import {
33
31
  play,
34
32
  shouldValidateMetadata,
@@ -36,11 +34,16 @@ import {
36
34
  } from "../../compat";
37
35
  import { MediaError } from "../../errors";
38
36
  import log from "../../log";
39
- import EVENTS from "./events_generators";
40
37
  import {
41
- IInitClockTick,
42
- IWarningEvent,
43
- } from "./types";
38
+ createSharedReference,
39
+ IReadOnlySharedReference,
40
+ } from "../../utils/reference";
41
+ import {
42
+ IPlaybackObservation,
43
+ PlaybackObserver,
44
+ } from "../api";
45
+ import EVENTS from "./events_generators";
46
+ import { IWarningEvent } from "./types";
44
47
 
45
48
  /** Event emitted when trying to perform the initial `play`. */
46
49
  export type IInitialPlayEvent =
@@ -57,24 +60,24 @@ export type IInitialPlayEvent =
57
60
  IWarningEvent;
58
61
 
59
62
  /**
60
- * Emit once as soon as the clock$ announce that the content can begin to be
61
- * played by calling the `play` method.
63
+ * Emit once as soon as the playback observation announces that the content can
64
+ * begin to be played by calling the `play` method.
62
65
  *
63
66
  * This depends on browser-defined criteria (e.g. the readyState status) as well
64
67
  * as RxPlayer-defined ones (e.g.) not rebuffering.
65
68
  *
66
- * @param {Observable} clock$
69
+ * @param {Observable} observation$
67
70
  * @returns {Observable.<undefined>}
68
71
  */
69
72
  export function waitUntilPlayable(
70
- clock$ : Observable<IInitClockTick>
73
+ observation$ : Observable<IPlaybackObservation>
71
74
  ) : Observable<undefined> {
72
- return clock$.pipe(
75
+ return observation$.pipe(
73
76
  filter(({ seeking, rebuffering, readyState }) => !seeking &&
74
77
  rebuffering === null &&
75
78
  readyState >= 1),
76
79
  take(1),
77
- mapTo(undefined)
80
+ map(() => undefined)
78
81
  );
79
82
  }
80
83
 
@@ -87,7 +90,7 @@ function autoPlay(
87
90
  mediaElement: HTMLMediaElement
88
91
  ): Observable<"autoplay"|"autoplay-blocked"> {
89
92
  return play(mediaElement).pipe(
90
- mapTo("autoplay" as const),
93
+ map(() => "autoplay" as const),
91
94
  catchError((error : unknown) => {
92
95
  if (error instanceof Error && error.name === "NotAllowedError") {
93
96
  // auto-play was probably prevented.
@@ -101,60 +104,69 @@ function autoPlay(
101
104
  );
102
105
  }
103
106
 
107
+ /** Object returned by `initialSeekAndPlay`. */
108
+ export interface IInitialSeekAndPlayObject {
109
+ /**
110
+ * Observable which, when subscribed, will try to seek at the initial position
111
+ * then play if needed as soon as the HTMLMediaElement's properties are right.
112
+ *
113
+ * Emits various events relative to the status of this operation.
114
+ */
115
+ seekAndPlay$ : Observable<IInitialPlayEvent>;
116
+
117
+ /**
118
+ * Shared reference whose value becomes `true` once the initial seek has
119
+ * been considered / has been done by `seekAndPlay$`.
120
+ */
121
+ initialSeekPerformed : IReadOnlySharedReference<boolean>;
122
+
123
+ /**
124
+ * Shared reference whose value becomes `true` once the initial play has
125
+ * been considered / has been done by `seekAndPlay$`.
126
+ */
127
+ initialPlayPerformed: IReadOnlySharedReference<boolean>;
128
+ }
129
+
104
130
  /**
105
- * Returns two Observables:
106
- *
107
- * - seek$: when subscribed, will seek to the wanted started time as soon as
108
- * it can. Emit and complete when done.
109
- *
110
- * - play$: when subscribed, will autoplay if and only if the `mustAutoPlay`
111
- * option is set as soon as it can.
112
- * Emit and complete when done.
113
- * Might also emit some warning events if issues related to the initial
114
- * playback arised
115
- *
116
- * Both Observables are `shareReplay`, meaning that they re-emit everything on
117
- * subscription.
118
- *
119
- * /!\ `play$` has a dependency on `seek$`, as such, the player will try to seek
120
- * as soon as either Observable is subscribed to.
121
- *
131
+ * Creates an Observable allowing to seek at the initially wanted position and
132
+ * to play if autoPlay is wanted.
122
133
  * @param {Object} args
123
134
  * @returns {Object}
124
135
  */
125
136
  export default function initialSeekAndPlay(
126
- { clock$,
127
- mediaElement,
137
+ { mediaElement,
138
+ playbackObserver,
128
139
  startTime,
129
- mustAutoPlay,
130
- setCurrentTime } : { clock$ : Observable<IInitClockTick>;
131
- isDirectfile : boolean;
132
- mediaElement : HTMLMediaElement;
133
- mustAutoPlay : boolean;
134
- /** Perform an internal seek. */
135
- setCurrentTime: (nb: number) => void;
136
- startTime : number|(() => number); }
137
- ) : { seek$ : Observable<unknown>; play$ : Observable<IInitialPlayEvent> } {
140
+ mustAutoPlay } : { playbackObserver : PlaybackObserver;
141
+ mediaElement : HTMLMediaElement;
142
+ mustAutoPlay : boolean;
143
+ startTime : number|(() => number); }
144
+ ) : IInitialSeekAndPlayObject {
145
+ const initialSeekPerformed = createSharedReference(false);
146
+ const initialPlayPerformed = createSharedReference(false);
147
+
138
148
  const seek$ = whenLoadedMetadata$(mediaElement).pipe(
139
149
  take(1),
140
150
  tap(() => {
141
151
  log.info("Init: Set initial time", startTime);
142
152
  const initialTime = typeof startTime === "function" ? startTime() :
143
153
  startTime;
144
- setCurrentTime(initialTime);
154
+ playbackObserver.setCurrentTime(initialTime);
155
+ initialSeekPerformed.setValue(true);
156
+ initialSeekPerformed.finish();
145
157
  }),
146
158
  shareReplay({ refCount: true })
147
159
  );
148
160
 
149
- const play$ = seek$.pipe(
161
+ const seekAndPlay$ = seek$.pipe(
150
162
  mergeMap(() : Observable<IWarningEvent | undefined> => {
151
163
  if (!shouldValidateMetadata() || mediaElement.duration > 0) {
152
- return waitUntilPlayable(clock$);
164
+ return waitUntilPlayable(playbackObserver.observe(true));
153
165
  } else {
154
166
  const error = new MediaError("MEDIA_ERR_NOT_LOADED_METADATA",
155
167
  "Cannot load automatically: your browser " +
156
168
  "falsely announced having loaded the content.");
157
- return waitUntilPlayable(clock$)
169
+ return waitUntilPlayable(playbackObserver.observe(true))
158
170
  .pipe(startWith(EVENTS.warning(error)));
159
171
  }
160
172
  }),
@@ -169,9 +181,13 @@ export default function initialSeekAndPlay(
169
181
  log.warn("Init: autoplay is enabled on HTML media element. " +
170
182
  "Media will play as soon as possible.");
171
183
  }
184
+ initialPlayPerformed.setValue(true);
185
+ initialPlayPerformed.finish();
172
186
  return observableOf({ type: "skipped" as const });
173
187
  }
174
188
  return autoPlay(mediaElement).pipe(mergeMap((autoplayEvt) => {
189
+ initialPlayPerformed.setValue(true);
190
+ initialPlayPerformed.finish();
175
191
  if (autoplayEvt === "autoplay") {
176
192
  return observableOf({ type: "autoplay" as const });
177
193
  } else {
@@ -188,5 +204,5 @@ export default function initialSeekAndPlay(
188
204
  shareReplay({ refCount: true })
189
205
  );
190
206
 
191
- return { seek$, play$ };
207
+ return { seekAndPlay$, initialPlayPerformed, initialSeekPerformed };
192
208
  }
@@ -21,25 +21,24 @@
21
21
 
22
22
  import {
23
23
  EMPTY,
24
- merge as observableMerge,
25
- Observable,
26
- of as observableOf,
27
- } from "rxjs";
28
- import {
29
24
  filter,
30
25
  ignoreElements,
26
+ merge as observableMerge,
31
27
  mergeMap,
32
- mergeMapTo,
33
28
  switchMap,
29
+ Observable,
30
+ of as observableOf,
34
31
  share,
35
32
  take,
36
- } from "rxjs/operators";
33
+ } from "rxjs";
37
34
  import {
38
35
  clearElementSrc,
39
36
  setElementSrc$,
40
37
  } from "../../compat";
41
38
  import log from "../../log";
42
39
  import deferSubscriptions from "../../utils/defer_subscriptions";
40
+ import { IReadOnlySharedReference } from "../../utils/reference";
41
+ import { PlaybackObserver } from "../api";
43
42
  import { IKeySystemOption } from "../eme";
44
43
  import createEMEManager from "./create_eme_manager";
45
44
  import emitLoadedEvent from "./emit_loaded_event";
@@ -47,10 +46,7 @@ import { IInitialTimeOptions } from "./get_initial_time";
47
46
  import initialSeekAndPlay from "./initial_seek_and_play";
48
47
  import StallAvoider from "./stall_avoider";
49
48
  import throwOnMediaError from "./throw_on_media_error";
50
- import {
51
- IDirectfileEvent,
52
- IInitClockTick,
53
- } from "./types";
49
+ import { IDirectfileEvent } from "./types";
54
50
  import updatePlaybackRate from "./update_playback_rate";
55
51
 
56
52
  /**
@@ -100,11 +96,10 @@ function getDirectFileInitialTime(
100
96
 
101
97
  // Argument used by `initializeDirectfileContent`
102
98
  export interface IDirectFileOptions { autoPlay : boolean;
103
- clock$ : Observable<IInitClockTick>;
104
99
  keySystems : IKeySystemOption[];
105
100
  mediaElement : HTMLMediaElement;
106
- speed$ : Observable<number>;
107
- setCurrentTime: (nb: number) => void;
101
+ playbackObserver : PlaybackObserver;
102
+ speed : IReadOnlySharedReference<number>;
108
103
  startAt? : IInitialTimeOptions;
109
104
  url? : string; }
110
105
 
@@ -115,11 +110,10 @@ export interface IDirectFileOptions { autoPlay : boolean;
115
110
  */
116
111
  export default function initializeDirectfileContent({
117
112
  autoPlay,
118
- clock$,
119
113
  keySystems,
120
114
  mediaElement,
121
- speed$,
122
- setCurrentTime,
115
+ playbackObserver,
116
+ speed,
123
117
  startAt,
124
118
  url,
125
119
  } : IDirectFileOptions) : Observable<IDirectfileEvent> {
@@ -137,12 +131,10 @@ export default function initializeDirectfileContent({
137
131
  const initialTime = () => getDirectFileInitialTime(mediaElement, startAt);
138
132
  log.debug("Init: Initial time calculated:", initialTime);
139
133
 
140
- const { seek$, play$ } = initialSeekAndPlay({ clock$,
141
- mediaElement,
134
+ const { seekAndPlay$ } = initialSeekAndPlay({ mediaElement,
135
+ playbackObserver,
142
136
  startTime: initialTime,
143
- mustAutoPlay: autoPlay,
144
- setCurrentTime,
145
- isDirectfile: true });
137
+ mustAutoPlay: autoPlay });
146
138
 
147
139
  // Create EME Manager, an observable which will manage every EME-related
148
140
  // issue.
@@ -156,22 +148,24 @@ export default function initializeDirectfileContent({
156
148
  // through a throwing Observable.
157
149
  const mediaError$ = throwOnMediaError(mediaElement);
158
150
 
151
+ const observation$ = playbackObserver.observe(true);
152
+
159
153
  // Set the speed set by the user on the media element while pausing a
160
154
  // little longer while the buffer is empty.
161
155
  const playbackRate$ =
162
- updatePlaybackRate(mediaElement, speed$, clock$)
156
+ updatePlaybackRate(mediaElement, speed, observation$)
157
+ // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
158
+ // first type parameter as `any` instead of the perfectly fine `unknown`,
159
+ // leading to linter issues, as it forbids the usage of `any`.
160
+ // This is why we're disabling the eslint rule.
161
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
163
162
  .pipe(ignoreElements());
164
163
 
165
164
  /**
166
165
  * Observable trying to avoid various stalling situations, emitting "stalled"
167
166
  * events when it cannot, as well as "unstalled" events when it get out of one.
168
167
  */
169
- const stallAvoider$ = StallAvoider(clock$,
170
- mediaElement,
171
- null,
172
- EMPTY,
173
- EMPTY,
174
- setCurrentTime);
168
+ const stallAvoider$ = StallAvoider(playbackObserver, null, EMPTY, EMPTY);
175
169
 
176
170
  /**
177
171
  * Emit a "loaded" events once the initial play has been performed and the
@@ -181,24 +175,21 @@ export default function initializeDirectfileContent({
181
175
  const loadingEvts$ = emeManager$.pipe(
182
176
  filter(function isEMEReady(evt) {
183
177
  if (evt.type === "created-media-keys") {
184
- evt.value.attachMediaKeys$.next();
178
+ evt.value.canAttachMediaKeys.setValue(true);
185
179
  return true;
186
180
  }
187
181
  return evt.type === "eme-disabled" || evt.type === "attached-media-keys";
188
182
  }),
189
183
  take(1),
190
- mergeMapTo(play$),
184
+ mergeMap(() => seekAndPlay$),
191
185
  switchMap((evt) => {
192
186
  if (evt.type === "warning") {
193
187
  return observableOf(evt);
194
188
  }
195
- return emitLoadedEvent(clock$, mediaElement, null, true);
189
+ return emitLoadedEvent(observation$, mediaElement, null, true);
196
190
  }));
197
191
 
198
- const initialSeek$ = seek$.pipe(ignoreElements());
199
-
200
192
  return observableMerge(loadingEvts$,
201
- initialSeek$,
202
193
  emeManager$,
203
194
  mediaError$,
204
195
  playbackRate$,