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
@@ -14,17 +14,15 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import {
18
- Observable,
19
- merge as observableMerge,
20
- } from "rxjs";
21
17
  import {
22
18
  ignoreElements,
23
19
  map,
20
+ merge as observableMerge,
21
+ Observable,
24
22
  scan,
25
23
  tap,
26
24
  withLatestFrom,
27
- } from "rxjs/operators";
25
+ } from "rxjs";
28
26
  import isSeekingApproximate from "../../compat/is_seeking_approximate";
29
27
  import config from "../../config";
30
28
  import { MediaError } from "../../errors";
@@ -33,11 +31,15 @@ import Manifest, {
33
31
  Period,
34
32
  } from "../../manifest";
35
33
  import { getNextRangeGap } from "../../utils/ranges";
34
+ import {
35
+ IPlaybackObservation,
36
+ PlaybackObserver,
37
+ } from "../api";
36
38
  import { IBufferType } from "../segment_buffers";
37
39
  import EVENTS from "../stream/events_generators";
38
40
  import {
39
- IInitClockTick,
40
41
  IStalledEvent,
42
+ IStallingSituation,
41
43
  IUnstalledEvent,
42
44
  IWarningEvent,
43
45
  } from "./types";
@@ -122,10 +124,7 @@ interface IDiscontinuityStoredInfo {
122
124
  * Monitor situations where playback is stalled and try to get out of those.
123
125
  * Emit "stalled" then "unstalled" respectively when an unavoidable stall is
124
126
  * encountered and exited.
125
- * @param {Observable} clock$ - Observable emitting the current playback
126
- * conditions.
127
- * @param {HTMLMediaElement} mediaElement - The HTMLMediaElement on which the
128
- * media is played.
127
+ * @param {object} playbackObserver - emit the current playback conditions.
129
128
  * @param {Object} manifest - The Manifest of the currently-played content.
130
129
  * @param {Observable} discontinuityUpdate$ - Observable emitting encountered
131
130
  * discontinuities for loaded Period and buffer types.
@@ -133,12 +132,10 @@ interface IDiscontinuityStoredInfo {
133
132
  * @returns {Observable}
134
133
  */
135
134
  export default function StallAvoider(
136
- clock$: Observable<IInitClockTick>,
137
- mediaElement : HTMLMediaElement,
135
+ playbackObserver : PlaybackObserver,
138
136
  manifest: Manifest | null,
139
- discontinuityUpdate$: Observable<IDiscontinuityEvent>,
140
137
  lockedStream$ : Observable<ILockedStreamEvent>,
141
- setCurrentTime: (nb: number) => void
138
+ discontinuityUpdate$: Observable<IDiscontinuityEvent>
142
139
  ) : Observable<IStalledEvent | IUnstalledEvent | IWarningEvent> {
143
140
  const initialDiscontinuitiesStore : IDiscontinuityStoredInfo[] = [];
144
141
 
@@ -147,10 +144,10 @@ export default function StallAvoider(
147
144
  * order (first ordered by Period's start, then by bufferType in any order.
148
145
  */
149
146
  const discontinuitiesStore$ = discontinuityUpdate$.pipe(
150
- withLatestFrom(clock$), // listen to clock to clean-up old discontinuities
147
+ withLatestFrom(playbackObserver.observe(true)),
151
148
  scan(
152
- (discontinuitiesStore, [evt, tick]) =>
153
- updateDiscontinuitiesStore(discontinuitiesStore, evt, tick),
149
+ (discontinuitiesStore, [evt, observation]) =>
150
+ updateDiscontinuitiesStore(discontinuitiesStore, evt, observation),
154
151
  initialDiscontinuitiesStore));
155
152
 
156
153
  /**
@@ -187,41 +184,47 @@ export default function StallAvoider(
187
184
  * Period handled by that stream to unlock the situation.
188
185
  */
189
186
  const unlock$ = lockedStream$.pipe(
190
- withLatestFrom(clock$),
191
- tap(([lockedStreamEvt, tick]) => {
187
+ withLatestFrom(playbackObserver.observe(true)),
188
+ tap(([lockedStreamEvt, observation]) => {
192
189
  // TODO(PaulB) also skip when the user's wanted speed is set to `0`, as we
193
190
  // might not want to seek in that case?
194
191
  if (
195
- !tick.rebuffering ||
196
- tick.paused || (
192
+ !observation.rebuffering ||
193
+ observation.paused || (
197
194
  lockedStreamEvt.bufferType !== "audio" &&
198
195
  lockedStreamEvt.bufferType !== "video"
199
196
  )
200
197
  ) {
201
198
  return;
202
199
  }
203
- const currPos = tick.position;
204
- const rebufferingPos = tick.rebuffering.position ?? currPos;
200
+ const currPos = observation.position;
201
+ const rebufferingPos = observation.rebuffering.position ?? currPos;
205
202
  const lockedPeriodStart = lockedStreamEvt.period.start;
206
203
  if (currPos < lockedPeriodStart &&
207
204
  Math.abs(rebufferingPos - lockedPeriodStart) < 1)
208
205
  {
209
206
  log.warn("Init: rebuffering because of a future locked stream.\n" +
210
207
  "Trying to unlock by seeking to the next Period");
211
- setCurrentTime(lockedPeriodStart + 0.001);
208
+ playbackObserver.setCurrentTime(lockedPeriodStart + 0.001);
212
209
  }
213
210
  }),
211
+ // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
212
+ // first type parameter as `any` instead of the perfectly fine `unknown`,
213
+ // leading to linter issues, as it forbids the usage of `any`.
214
+ // This is why we're disabling the eslint rule.
215
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
214
216
  ignoreElements()
215
217
  );
216
218
 
217
- const stall$ = clock$.pipe(
219
+ const stall$ = playbackObserver.observe(true).pipe(
218
220
  withLatestFrom(discontinuitiesStore$),
219
- map(([tick, discontinuitiesStore]) => {
221
+ map(([observation, discontinuitiesStore]) => {
220
222
  const { buffered,
221
223
  position,
222
224
  readyState,
223
225
  rebuffering,
224
- freezing } = tick;
226
+ freezing } = observation;
227
+
225
228
  if (freezing !== null) {
226
229
  const now = performance.now();
227
230
 
@@ -231,7 +234,8 @@ export default function StallAvoider(
231
234
 
232
235
  if (now - referenceTimestamp > UNFREEZING_SEEK_DELAY) {
233
236
  log.warn("Init: trying to seek to un-freeze player");
234
- setCurrentTime(tick.getCurrentTime() + UNFREEZING_DELTA_POSITION);
237
+ playbackObserver.setCurrentTime(
238
+ playbackObserver.getCurrentTime() + UNFREEZING_DELTA_POSITION);
235
239
  prevFreezingState = { attemptTimestamp: now };
236
240
  }
237
241
 
@@ -245,28 +249,41 @@ export default function StallAvoider(
245
249
 
246
250
  if (rebuffering === null) {
247
251
  if (readyState === 1) {
248
- // With a readyState set to 1, we should still be not able to play,
249
- // anounce that we're stalled due to an unknown "freezing" status.
252
+ // With a readyState set to 1, we should still not be able to play:
253
+ // Return that we're stalled
254
+ let reason : IStallingSituation;
255
+ if (observation.seeking) {
256
+ reason = observation.internalSeeking ? "internal-seek" :
257
+ "seeking";
258
+ } else {
259
+ reason = "not-ready";
260
+ }
250
261
  return { type: "stalled" as const,
251
- value: "freezing" as const };
262
+ value: reason };
252
263
  }
253
264
  return { type: "unstalled" as const,
254
265
  value: null };
255
266
  }
256
267
 
257
- if (tick.seeking) {
258
- lastSeekingPosition = tick.position;
268
+ // We want to separate a stall situation when a seek is due to a seek done
269
+ // internally by the player to when its due to a regular user seek.
270
+ const stalledReason = rebuffering.reason === "seeking" &&
271
+ observation.internalSeeking ? "internal-seek" as const :
272
+ rebuffering.reason;
273
+
274
+ if (observation.seeking) {
275
+ lastSeekingPosition = observation.position;
259
276
  } else if (lastSeekingPosition !== null) {
260
277
  const now = performance.now();
261
278
  if (ignoredStallTimeStamp === null) {
262
279
  ignoredStallTimeStamp = now;
263
280
  }
264
281
  if (isSeekingApproximate &&
265
- tick.position < lastSeekingPosition &&
282
+ observation.position < lastSeekingPosition &&
266
283
  now - ignoredStallTimeStamp < FORCE_DISCONTINUITY_SEEK_DELAY)
267
284
  {
268
285
  return { type: "stalled" as const,
269
- value: rebuffering.reason };
286
+ value: stalledReason };
270
287
  }
271
288
  lastSeekingPosition = null;
272
289
  }
@@ -275,7 +292,7 @@ export default function StallAvoider(
275
292
 
276
293
  if (manifest === null) {
277
294
  return { type: "stalled" as const,
278
- value: rebuffering.reason };
295
+ value: stalledReason };
279
296
  }
280
297
 
281
298
  /** Position at which data is awaited. */
@@ -287,13 +304,13 @@ export default function StallAvoider(
287
304
  stalledPosition);
288
305
  if (skippableDiscontinuity !== null) {
289
306
  const realSeekTime = skippableDiscontinuity + 0.001;
290
- if (realSeekTime <= mediaElement.currentTime) {
307
+ if (realSeekTime <= playbackObserver.getCurrentTime()) {
291
308
  log.info("Init: position to seek already reached, no seeking",
292
- mediaElement.currentTime, realSeekTime);
309
+ playbackObserver.getCurrentTime(), realSeekTime);
293
310
  } else {
294
311
  log.warn("SA: skippable discontinuity found in the stream",
295
312
  position, realSeekTime);
296
- setCurrentTime(realSeekTime);
313
+ playbackObserver.setCurrentTime(realSeekTime);
297
314
  return EVENTS.warning(generateDiscontinuityError(stalledPosition,
298
315
  realSeekTime));
299
316
  }
@@ -312,10 +329,10 @@ export default function StallAvoider(
312
329
  const nextBufferRangeGap = getNextRangeGap(buffered, freezePosition);
313
330
  if (nextBufferRangeGap < BUFFER_DISCONTINUITY_THRESHOLD) {
314
331
  const seekTo = (freezePosition + nextBufferRangeGap + EPSILON);
315
- if (mediaElement.currentTime < seekTo) {
332
+ if (playbackObserver.getCurrentTime() < seekTo) {
316
333
  log.warn("Init: discontinuity encountered inferior to the threshold",
317
334
  freezePosition, seekTo, BUFFER_DISCONTINUITY_THRESHOLD);
318
- setCurrentTime(seekTo);
335
+ playbackObserver.setCurrentTime(seekTo);
319
336
  return EVENTS.warning(generateDiscontinuityError(freezePosition, seekTo));
320
337
  }
321
338
  }
@@ -326,10 +343,10 @@ export default function StallAvoider(
326
343
  const period = manifest.periods[i];
327
344
  if (period.end !== undefined && period.end <= freezePosition) {
328
345
  if (manifest.periods[i + 1].start > freezePosition &&
329
- manifest.periods[i + 1].start > mediaElement.currentTime)
346
+ manifest.periods[i + 1].start > playbackObserver.getCurrentTime())
330
347
  {
331
348
  const nextPeriod = manifest.periods[i + 1];
332
- setCurrentTime(nextPeriod.start);
349
+ playbackObserver.setCurrentTime(nextPeriod.start);
333
350
  return EVENTS.warning(generateDiscontinuityError(freezePosition,
334
351
  nextPeriod.start));
335
352
 
@@ -339,7 +356,7 @@ export default function StallAvoider(
339
356
  }
340
357
 
341
358
  return { type: "stalled" as const,
342
- value: rebuffering.reason };
359
+ value: stalledReason };
343
360
  }));
344
361
  return observableMerge(unlock$, stall$);
345
362
  }
@@ -418,18 +435,18 @@ function eventContainsDiscontinuity(
418
435
  * store it in Period's chronological order in the Array.
419
436
  * @param {Array.<Object>} discontinuitiesStore
420
437
  * @param {Object} evt
421
- * @param {Object} tick
438
+ * @param {Object} observation
422
439
  * @returns {Array.<Object>}
423
440
  */
424
441
  function updateDiscontinuitiesStore(
425
442
  discontinuitiesStore : IDiscontinuityStoredInfo[],
426
443
  evt : IDiscontinuityEvent,
427
- tick : IInitClockTick
444
+ observation : IPlaybackObservation
428
445
  ) : IDiscontinuityStoredInfo[] {
429
446
  // First, perform clean-up of old discontinuities
430
447
  while (discontinuitiesStore.length > 0 &&
431
448
  discontinuitiesStore[0].period.end !== undefined &&
432
- discontinuitiesStore[0].period.end + 10 < tick.position)
449
+ discontinuitiesStore[0].period.end + 10 < observation.position)
433
450
  {
434
451
  discontinuitiesStore.shift();
435
452
  }
@@ -17,26 +17,24 @@
17
17
  import {
18
18
  combineLatest as observableCombineLatest,
19
19
  concat as observableConcat,
20
- EMPTY,
21
- interval,
22
- Observable,
23
- of as observableOf,
24
- } from "rxjs";
25
- import {
26
20
  distinctUntilChanged,
21
+ EMPTY,
27
22
  ignoreElements,
23
+ interval,
28
24
  map,
29
25
  mergeMap,
26
+ Observable,
30
27
  pairwise,
31
28
  scan,
32
29
  startWith,
33
30
  switchMap,
34
31
  tap,
35
- } from "rxjs/operators";
32
+ of as observableOf,
33
+ } from "rxjs";
36
34
  import config from "../../../config";
37
35
  import Manifest from "../../../manifest";
38
36
  import { fromEvent } from "../../../utils/event_emitter";
39
- import { IInitClockTick } from "../types";
37
+ import { IPlaybackObservation } from "../../api";
40
38
  import refreshScheduledEventsList from "./refresh_scheduled_events_list";
41
39
  import {
42
40
  INonFiniteStreamEventPayload,
@@ -66,7 +64,7 @@ function isFiniteStreamEvent(
66
64
  */
67
65
  function streamEventsEmitter(manifest: Manifest,
68
66
  mediaElement: HTMLMediaElement,
69
- clock$: Observable<IInitClockTick>
67
+ observation$: Observable<IPlaybackObservation>
70
68
  ): Observable<IStreamEvent> {
71
69
  const eventsBeingPlayed =
72
70
  new WeakMap<IStreamEventPayload|INonFiniteStreamEventPayload, true>();
@@ -79,20 +77,20 @@ function streamEventsEmitter(manifest: Manifest,
79
77
  );
80
78
 
81
79
  /**
82
- * Examine playback situation from clock ticks to emit stream events and
80
+ * Examine playback situation from playback observations to emit stream events and
83
81
  * prepare set onExit callbacks if needed.
84
82
  * @param {Array.<Object>} scheduledEvents
85
- * @param {Object} oldTick
86
- * @param {Object} newTick
83
+ * @param {Object} oldObservation
84
+ * @param {Object} newObservation
87
85
  * @returns {Observable}
88
86
  */
89
87
  function emitStreamEvents$(
90
88
  scheduledEvents: Array<IStreamEventPayload|INonFiniteStreamEventPayload>,
91
- oldClockTick: { currentTime: number; isSeeking: boolean },
92
- newClockTick: { currentTime: number; isSeeking: boolean }
89
+ oldObservation: { currentTime: number; isSeeking: boolean },
90
+ newObservation: { currentTime: number; isSeeking: boolean }
93
91
  ): Observable<IStreamEvent> {
94
- const { currentTime: previousTime } = oldClockTick;
95
- const { isSeeking, currentTime } = newClockTick;
92
+ const { currentTime: previousTime } = oldObservation;
93
+ const { isSeeking, currentTime } = newObservation;
96
94
  const eventsToSend: IStreamEvent[] = [];
97
95
  const eventsToExit: IPublicStreamEvent[] = [];
98
96
 
@@ -141,6 +139,11 @@ function streamEventsEmitter(manifest: Manifest,
141
139
  evt.onExit();
142
140
  }
143
141
  }),
142
+ // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
143
+ // first type parameter as `any` instead of the perfectly fine `unknown`,
144
+ // leading to linter issues, as it forbids the usage of `any`.
145
+ // This is why we're disabling the eslint rule.
146
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
144
147
  ignoreElements()
145
148
  ) : EMPTY
146
149
  );
@@ -160,16 +163,16 @@ function streamEventsEmitter(manifest: Manifest,
160
163
  }
161
164
  return observableCombineLatest([
162
165
  interval(STREAM_EVENT_EMITTER_POLL_INTERVAL).pipe(startWith(null)),
163
- clock$,
166
+ observation$,
164
167
  ]).pipe(
165
- map(([_, clockTick]) => {
166
- const { seeking } = clockTick;
168
+ map(([_, observation]) => {
169
+ const { seeking } = observation;
167
170
  return { isSeeking: seeking,
168
171
  currentTime: mediaElement.currentTime };
169
172
  }),
170
173
  pairwise(),
171
- mergeMap(([oldTick, newTick]) =>
172
- emitStreamEvents$(lastScheduledEvents, oldTick, newTick))
174
+ mergeMap(([oldObservation, newObservation]) =>
175
+ emitStreamEvents$(lastScheduledEvents, oldObservation, newObservation))
173
176
  );
174
177
  })
175
178
  );
@@ -16,9 +16,9 @@
16
16
 
17
17
  import {
18
18
  fromEvent as observableFromEvent,
19
+ mergeMap,
19
20
  Observable,
20
21
  } from "rxjs";
21
- import { mergeMap } from "rxjs/operators";
22
22
  import { MediaError } from "../../errors";
23
23
 
24
24
  /**
@@ -20,11 +20,6 @@ import Manifest, {
20
20
  Period,
21
21
  Representation,
22
22
  } from "../../manifest";
23
- import {
24
- IClockMediaEventType,
25
- IFreezingStatus,
26
- IRebufferingStatus,
27
- } from "../api";
28
23
  import {
29
24
  IAttachedMediaKeysEvent,
30
25
  IBlacklistProtectionDataEvent,
@@ -60,25 +55,6 @@ import {
60
55
  IStreamEventSkipEvent,
61
56
  } from "./stream_events_emitter";
62
57
 
63
- /** Object awaited by the `Init` on each clock tick. */
64
- export interface IInitClockTick { position : number;
65
- getCurrentTime : () => number;
66
- buffered : TimeRanges;
67
- duration : number;
68
- bufferGap : number;
69
- event : IClockMediaEventType;
70
- playbackRate : number;
71
- currentRange : { start : number;
72
- end : number; } |
73
- null;
74
- readyState : number;
75
- paused : boolean;
76
- rebuffering : IRebufferingStatus |
77
- null;
78
- freezing : IFreezingStatus |
79
- null;
80
- seeking : boolean; }
81
-
82
58
  /** Event sent after the Manifest has been loaded and parsed for the first time. */
83
59
  export interface IManifestReadyEvent {
84
60
  type : "manifestReady";
@@ -16,18 +16,17 @@
16
16
 
17
17
  import {
18
18
  defer as observableDefer,
19
- Observable,
20
- of as observableOf,
21
- } from "rxjs";
22
- import {
23
19
  distinctUntilChanged,
24
20
  map,
21
+ Observable,
22
+ of as observableOf,
25
23
  startWith,
26
24
  switchMap,
27
25
  tap,
28
- } from "rxjs/operators";
26
+ } from "rxjs";
29
27
  import log from "../../log";
30
- import { IInitClockTick } from "./types";
28
+ import { IReadOnlySharedReference } from "../../utils/reference";
29
+ import { IPlaybackObservation } from "../api";
31
30
 
32
31
  export interface IPlaybackRateOptions { pauseWhenRebuffering? : boolean }
33
32
 
@@ -37,18 +36,18 @@ export interface IPlaybackRateOptions { pauseWhenRebuffering? : boolean }
37
36
  * rebuffering and restore the speed once it appears to exit rebuffering status.
38
37
  *
39
38
  * @param {HTMLMediaElement} mediaElement
40
- * @param {Observable} speed$ - emit speed set by the user
41
- * @param {Observable} clock$ - Current playback conditions
39
+ * @param {Observable} speed - last speed set by the user
40
+ * @param {Observable} observation$ - Current playback conditions
42
41
  * @returns {Observable}
43
42
  */
44
43
  export default function updatePlaybackRate(
45
44
  mediaElement : HTMLMediaElement,
46
- speed$ : Observable<number>,
47
- clock$ : Observable<IInitClockTick>
45
+ speed : IReadOnlySharedReference<number>,
46
+ observation$ : Observable<IPlaybackObservation>
48
47
  ) : Observable<number> {
49
- const forcePause$ = clock$
48
+ const forcePause$ = observation$
50
49
  .pipe(
51
- map((timing) => timing.rebuffering !== null),
50
+ map((observation) => observation.rebuffering !== null),
52
51
  startWith(false),
53
52
  distinctUntilChanged()
54
53
  );
@@ -62,10 +61,10 @@ export default function updatePlaybackRate(
62
61
  return observableOf(0);
63
62
  });
64
63
  }
65
- return speed$
66
- .pipe(tap((speed) => {
67
- log.info("Init: Resume playback speed", speed);
68
- mediaElement.playbackRate = speed;
64
+ return speed.asObservable()
65
+ .pipe(tap((lastSpeed) => {
66
+ log.info("Init: Resume playback speed", lastSpeed);
67
+ mediaElement.playbackRate = lastSpeed;
69
68
  }));
70
69
  }));
71
70
  }
@@ -134,8 +134,8 @@ periodically perform "garbage collection" manually on a given
134
134
 
135
135
  It is based on the following building bricks:
136
136
 
137
- - A clock, which is an observable emitting the current time (in seconds) when
138
- the garbage collection task should be performed
137
+ - An observable emitting the current time (in seconds) when the garbage
138
+ collection task should be performed
139
139
 
140
140
  - The `SegmentBuffer` on which the garbage collection task should run
141
141
 
@@ -145,7 +145,7 @@ It is based on the following building bricks:
145
145
  - The maximum time margin authorized for the buffer ahead of the current
146
146
  position
147
147
 
148
- Basically, each times the given clock ticks, the BufferGarbageCollector will
148
+ Basically, each times the given Observable emits, the BufferGarbageCollector will
149
149
  ensure that the volume of data before and ahead of the current position does not
150
150
  grow into a larger value than what is configured.
151
151
 
@@ -16,15 +16,13 @@
16
16
 
17
17
  import {
18
18
  combineLatest as observableCombineLatest,
19
+ concatAll,
19
20
  EMPTY,
20
21
  from as observableFrom,
21
- Observable,
22
- } from "rxjs";
23
- import {
24
- concatAll,
25
22
  ignoreElements,
26
23
  mergeMap,
27
- } from "rxjs/operators";
24
+ Observable,
25
+ } from "rxjs";
28
26
  import log from "../../log";
29
27
  import { getInnerAndOuterTimeRanges } from "../../utils/ranges";
30
28
  import { SegmentBuffer } from "./implementations";
@@ -33,7 +31,7 @@ export interface IGarbageCollectorArgument {
33
31
  /** SegmentBuffer implementation */
34
32
  segmentBuffer : SegmentBuffer;
35
33
  /** Emit current position in seconds regularly */
36
- clock$ : Observable<number>;
34
+ currentTime$ : Observable<number>;
37
35
  /** Maximum time to keep behind current time position, in seconds */
38
36
  maxBufferBehind$ : Observable<number>;
39
37
  /** Minimum time to keep behind current time position, in seconds */
@@ -42,19 +40,19 @@ export interface IGarbageCollectorArgument {
42
40
 
43
41
  /**
44
42
  * Perform cleaning of the buffer according to the values set by the user
45
- * at each clock tick and each times the maxBufferBehind/maxBufferAhead values
46
- * change.
43
+ * each time `currentTime$` emits and each times the
44
+ * maxBufferBehind/maxBufferAhead values change.
47
45
  *
48
46
  * @param {Object} opt
49
47
  * @returns {Observable}
50
48
  */
51
49
  export default function BufferGarbageCollector({
52
50
  segmentBuffer,
53
- clock$,
51
+ currentTime$,
54
52
  maxBufferBehind$,
55
53
  maxBufferAhead$,
56
54
  } : IGarbageCollectorArgument) : Observable<never> {
57
- return observableCombineLatest([clock$, maxBufferBehind$, maxBufferAhead$]).pipe(
55
+ return observableCombineLatest([currentTime$, maxBufferBehind$, maxBufferAhead$]).pipe(
58
56
  mergeMap(([currentTime, maxBufferBehind, maxBufferAhead]) => {
59
57
  return clearBuffer(segmentBuffer,
60
58
  currentTime,
@@ -156,7 +154,13 @@ function clearBuffer(
156
154
  log.debug("GC: cleaning range from SegmentBuffer", range);
157
155
  return segmentBuffer.removeBuffer(range.start, range.end);
158
156
  })
159
- ).pipe(concatAll(), ignoreElements());
157
+ ).pipe(concatAll(),
158
+ // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
159
+ // first type parameter as `any` instead of the perfectly fine `unknown`,
160
+ // leading to linter issues, as it forbids the usage of `any`.
161
+ // This is why we're disabling the eslint rule.
162
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
163
+ ignoreElements());
160
164
 
161
165
  return clean$;
162
166
  }
@@ -20,17 +20,16 @@ import {
20
20
  Observable,
21
21
  Observer,
22
22
  Subject,
23
- } from "rxjs";
24
- import {
25
23
  takeUntil,
26
24
  tap,
27
- } from "rxjs/operators";
25
+ } from "rxjs";
28
26
  import {
29
27
  ICompatSourceBuffer,
30
28
  tryToChangeSourceBufferType,
31
29
  } from "../../../../compat";
32
30
  import config from "../../../../config";
33
31
  import log from "../../../../log";
32
+ import { getLoggableSegmentId } from "../../../../manifest";
34
33
  import areArraysOfNumbersEqual from "../../../../utils/are_arrays_of_numbers_equal";
35
34
  import assertUnreachable from "../../../../utils/assert_unreachable";
36
35
  import { toUint8Array } from "../../../../utils/byte_parsing";
@@ -224,7 +223,7 @@ export default class AudioVideoSegmentBuffer extends SegmentBuffer {
224
223
  assertPushedDataIsBufferSource(infos);
225
224
  log.debug("AVSB: receiving order to push data to the SourceBuffer",
226
225
  this.bufferType,
227
- infos);
226
+ getLoggableSegmentId(infos.inventoryInfos));
228
227
  return this._addToQueue({ type: SegmentBufferOperation.Push,
229
228
  value: infos });
230
229
  }
@@ -256,7 +255,7 @@ export default class AudioVideoSegmentBuffer extends SegmentBuffer {
256
255
  public endOfSegment(infos : IEndOfSegmentInfos) : Observable<void> {
257
256
  log.debug("AVSB: receiving order for validating end of segment",
258
257
  this.bufferType,
259
- infos.segment);
258
+ getLoggableSegmentId(infos));
260
259
  return this._addToQueue({ type: SegmentBufferOperation.EndOfSegment,
261
260
  value: infos });
262
261
  }
@@ -449,7 +448,8 @@ export default class AudioVideoSegmentBuffer extends SegmentBuffer {
449
448
  switch (this._pendingTask.type) {
450
449
  case SegmentBufferOperation.EndOfSegment:
451
450
  // nothing to do, we will just acknowledge the segment.
452
- log.debug("AVSB: Acknowledging complete segment", this._pendingTask.value);
451
+ log.debug("AVSB: Acknowledging complete segment",
452
+ getLoggableSegmentId(this._pendingTask.value));
453
453
  this._flush();
454
454
  return;
455
455
 
@@ -459,6 +459,9 @@ export default class AudioVideoSegmentBuffer extends SegmentBuffer {
459
459
  this._flush();
460
460
  return;
461
461
  }
462
+ log.debug("AVSB: pushing segment",
463
+ this.bufferType,
464
+ getLoggableSegmentId(this._pendingTask.inventoryData));
462
465
  this._sourceBuffer.appendBuffer(segmentData);
463
466
  break;
464
467
 
@@ -593,7 +596,7 @@ export default class AudioVideoSegmentBuffer extends SegmentBuffer {
593
596
  function assertPushedDataIsBufferSource(
594
597
  pushedData : IPushChunkInfos<unknown>
595
598
  ) : asserts pushedData is IPushChunkInfos<BufferSource> {
596
- if (!__DEV__) {
599
+ if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.PRODUCTION as number) {
597
600
  return;
598
601
  }
599
602
  const { chunk, initSegment } = pushedData.data;