rx-player 3.26.1 → 3.26.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (580) hide show
  1. package/.github/workflows/checks.yml +99 -0
  2. package/.github/workflows/sonarcloud_analysis.yml +20 -0
  3. package/CHANGELOG.md +99 -71
  4. package/README.md +19 -18
  5. package/VERSION +1 -1
  6. package/dist/_esm5.processed/compat/clear_element_src.js +8 -6
  7. package/dist/_esm5.processed/compat/eme/close_session.js +1 -2
  8. package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +1 -2
  9. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -1
  10. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +6 -4
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +1 -2
  12. package/dist/_esm5.processed/compat/eme/generate_key_request.js +1 -2
  13. package/dist/_esm5.processed/compat/eme/load_session.js +2 -3
  14. package/dist/_esm5.processed/compat/event_listeners.d.ts +3 -2
  15. package/dist/_esm5.processed/compat/event_listeners.js +8 -14
  16. package/dist/_esm5.processed/compat/make_vtt_cue.js +1 -1
  17. package/dist/_esm5.processed/compat/on_height_width_change.js +1 -2
  18. package/dist/_esm5.processed/compat/set_element_src.js +1 -1
  19. package/dist/_esm5.processed/compat/when_loaded_metadata.js +1 -2
  20. package/dist/_esm5.processed/compat/when_media_source_open.js +1 -2
  21. package/dist/_esm5.processed/config.d.ts +3 -8
  22. package/dist/_esm5.processed/config.js +4 -9
  23. package/dist/_esm5.processed/core/abr/abr_manager.d.ts +11 -10
  24. package/dist/_esm5.processed/core/abr/abr_manager.js +47 -8
  25. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +1 -1
  26. package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +2 -2
  27. package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +3 -3
  28. package/dist/_esm5.processed/core/abr/get_buffer_levels.js +3 -0
  29. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +3 -3
  30. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +3 -3
  31. package/dist/_esm5.processed/core/abr/guess_based_chooser.d.ts +95 -0
  32. package/dist/_esm5.processed/core/abr/guess_based_chooser.js +242 -0
  33. package/dist/_esm5.processed/core/abr/index.d.ts +3 -3
  34. package/dist/_esm5.processed/core/abr/last_estimate_storage.d.ts +61 -0
  35. package/dist/_esm5.processed/core/abr/last_estimate_storage.js +37 -0
  36. package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +25 -7
  37. package/dist/_esm5.processed/core/abr/network_analyzer.js +68 -31
  38. package/dist/_esm5.processed/core/abr/pending_requests_store.d.ts +56 -28
  39. package/dist/_esm5.processed/core/abr/pending_requests_store.js +9 -7
  40. package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +34 -51
  41. package/dist/_esm5.processed/core/abr/representation_estimator.js +111 -52
  42. package/dist/_esm5.processed/core/abr/representation_score_calculator.d.ts +5 -8
  43. package/dist/_esm5.processed/core/abr/representation_score_calculator.js +20 -23
  44. package/dist/_esm5.processed/core/abr/{ewma.d.ts → utils/ewma.d.ts} +0 -0
  45. package/dist/_esm5.processed/core/abr/{ewma.js → utils/ewma.js} +0 -0
  46. package/dist/_esm5.processed/core/abr/{filter_by_bitrate.d.ts → utils/filter_by_bitrate.d.ts} +1 -1
  47. package/dist/_esm5.processed/core/abr/{filter_by_bitrate.js → utils/filter_by_bitrate.js} +1 -1
  48. package/dist/_esm5.processed/core/abr/{filter_by_width.d.ts → utils/filter_by_width.d.ts} +1 -1
  49. package/dist/_esm5.processed/core/abr/{filter_by_width.js → utils/filter_by_width.js} +2 -2
  50. package/dist/_esm5.processed/core/abr/{select_optimal_representation.d.ts → utils/select_optimal_representation.d.ts} +1 -1
  51. package/dist/_esm5.processed/core/abr/{select_optimal_representation.js → utils/select_optimal_representation.js} +1 -1
  52. package/dist/_esm5.processed/core/api/emit_seek_events.d.ts +4 -4
  53. package/dist/_esm5.processed/core/api/emit_seek_events.js +12 -10
  54. package/dist/_esm5.processed/core/api/index.d.ts +3 -1
  55. package/dist/_esm5.processed/core/api/index.js +2 -0
  56. package/dist/_esm5.processed/core/api/option_utils.js +4 -4
  57. package/dist/_esm5.processed/core/api/playback_observer.d.ts +280 -0
  58. package/dist/_esm5.processed/core/api/playback_observer.js +461 -0
  59. package/dist/_esm5.processed/core/api/public_api.d.ts +8 -7
  60. package/dist/_esm5.processed/core/api/public_api.js +98 -94
  61. package/dist/_esm5.processed/core/api/track_choice_manager.js +3 -3
  62. package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.js +1 -0
  63. package/dist/_esm5.processed/core/eme/attach_media_keys.js +1 -2
  64. package/dist/_esm5.processed/core/eme/check_key_statuses.js +4 -5
  65. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js +1 -2
  66. package/dist/_esm5.processed/core/eme/clear_eme_session.js +6 -2
  67. package/dist/_esm5.processed/core/eme/create_session.js +1 -2
  68. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +2 -3
  69. package/dist/_esm5.processed/core/eme/eme_manager.js +4 -5
  70. package/dist/_esm5.processed/core/eme/find_key_system.js +4 -5
  71. package/dist/_esm5.processed/core/eme/get_media_keys.js +2 -3
  72. package/dist/_esm5.processed/core/eme/get_session.js +1 -2
  73. package/dist/_esm5.processed/core/eme/init_media_keys.js +5 -5
  74. package/dist/_esm5.processed/core/eme/session_events_listener.js +6 -7
  75. package/dist/_esm5.processed/core/eme/set_server_certificate.js +8 -3
  76. package/dist/_esm5.processed/core/eme/types.d.ts +12 -4
  77. package/dist/_esm5.processed/core/eme/utils/close_session.js +2 -3
  78. package/dist/_esm5.processed/core/eme/utils/is_session_usable.js +1 -1
  79. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +3 -4
  80. package/dist/_esm5.processed/core/eme/utils/persistent_sessions_store.js +3 -3
  81. package/dist/_esm5.processed/core/fetchers/index.d.ts +2 -2
  82. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +2 -2
  83. package/dist/_esm5.processed/core/fetchers/segment/index.d.ts +2 -2
  84. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.d.ts +12 -29
  85. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.js +3 -7
  86. package/dist/_esm5.processed/core/fetchers/segment/prioritizer.d.ts +53 -53
  87. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +42 -11
  88. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +118 -46
  89. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +21 -20
  90. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +9 -8
  91. package/dist/_esm5.processed/core/init/create_eme_manager.js +1 -2
  92. package/dist/_esm5.processed/core/init/create_media_source.js +3 -4
  93. package/dist/_esm5.processed/core/init/create_stream_playback_observer.d.ts +39 -0
  94. package/dist/_esm5.processed/core/init/create_stream_playback_observer.js +50 -0
  95. package/dist/_esm5.processed/core/init/duration_updater.js +16 -7
  96. package/dist/_esm5.processed/core/init/emit_loaded_event.d.ts +4 -3
  97. package/dist/_esm5.processed/core/init/emit_loaded_event.js +8 -8
  98. package/dist/_esm5.processed/core/init/end_of_stream.js +1 -2
  99. package/dist/_esm5.processed/core/init/get_initial_time.js +2 -3
  100. package/dist/_esm5.processed/core/init/initial_seek_and_play.d.ts +32 -31
  101. package/dist/_esm5.processed/core/init/initial_seek_and_play.js +25 -32
  102. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +6 -5
  103. package/dist/_esm5.processed/core/init/initialize_directfile.js +16 -12
  104. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +10 -10
  105. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -12
  106. package/dist/_esm5.processed/core/init/load_on_media_source.d.ts +8 -11
  107. package/dist/_esm5.processed/core/init/load_on_media_source.js +16 -19
  108. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +8 -7
  109. package/dist/_esm5.processed/core/init/stall_avoider.d.ts +4 -6
  110. package/dist/_esm5.processed/core/init/stall_avoider.js +56 -42
  111. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.d.ts +2 -2
  112. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +20 -15
  113. package/dist/_esm5.processed/core/init/throw_on_media_error.js +1 -2
  114. package/dist/_esm5.processed/core/init/types.d.ts +0 -20
  115. package/dist/_esm5.processed/core/init/update_playback_rate.d.ts +5 -4
  116. package/dist/_esm5.processed/core/init/update_playback_rate.js +10 -11
  117. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.d.ts +4 -4
  118. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.js +12 -7
  119. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +8 -7
  120. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +9 -10
  121. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +1 -1
  122. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +4 -4
  123. package/dist/_esm5.processed/core/segment_buffers/implementations/utils/manual_time_ranges.js +2 -2
  124. package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.js +2 -2
  125. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +1 -12
  126. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +10 -10
  127. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +1 -1
  128. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +15 -13
  129. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +36 -23
  130. package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.d.ts +9 -17
  131. package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.js +11 -20
  132. package/dist/_esm5.processed/core/stream/adaptation/index.d.ts +2 -2
  133. package/dist/_esm5.processed/core/stream/index.d.ts +2 -2
  134. package/dist/_esm5.processed/core/stream/orchestrator/active_period_emitter.js +5 -6
  135. package/dist/_esm5.processed/core/stream/orchestrator/are_streams_complete.js +1 -2
  136. package/dist/_esm5.processed/core/stream/orchestrator/index.d.ts +2 -2
  137. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +10 -8
  138. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +22 -21
  139. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.d.ts +6 -4
  140. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +11 -10
  141. package/dist/_esm5.processed/core/stream/period/index.d.ts +2 -2
  142. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +23 -7
  143. package/dist/_esm5.processed/core/stream/period/period_stream.js +38 -24
  144. package/dist/_esm5.processed/core/stream/reload_after_switch.d.ts +5 -4
  145. package/dist/_esm5.processed/core/stream/reload_after_switch.js +8 -7
  146. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.d.ts +4 -2
  147. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.js +10 -8
  148. package/dist/_esm5.processed/core/stream/representation/downloading_queue.d.ts +9 -9
  149. package/dist/_esm5.processed/core/stream/representation/downloading_queue.js +10 -12
  150. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.d.ts +1 -3
  151. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +6 -8
  152. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +3 -7
  153. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +7 -8
  154. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +1 -1
  155. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.d.ts +6 -9
  156. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +7 -8
  157. package/dist/_esm5.processed/core/stream/representation/index.d.ts +2 -2
  158. package/dist/_esm5.processed/core/stream/representation/push_init_segment.d.ts +4 -2
  159. package/dist/_esm5.processed/core/stream/representation/push_init_segment.js +3 -5
  160. package/dist/_esm5.processed/core/stream/representation/push_media_segment.d.ts +6 -4
  161. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -5
  162. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +9 -12
  163. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +30 -21
  164. package/dist/_esm5.processed/errors/error_message.js +1 -1
  165. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.d.ts +5 -3
  166. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.js +21 -8
  167. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.js +2 -3
  168. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.d.ts +2 -2
  169. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.js +4 -0
  170. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +1 -1
  171. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +2 -2
  172. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +17 -6
  173. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +1 -2
  174. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/index.js +1 -2
  175. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -1
  176. package/dist/_esm5.processed/features/initialize_features.js +47 -44
  177. package/dist/_esm5.processed/index.js +2 -2
  178. package/dist/_esm5.processed/manifest/index.d.ts +2 -2
  179. package/dist/_esm5.processed/manifest/index.js +2 -2
  180. package/dist/_esm5.processed/manifest/representation.js +1 -1
  181. package/dist/_esm5.processed/manifest/representation_index/static.js +1 -0
  182. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +24 -3
  183. package/dist/_esm5.processed/manifest/update_period_in_place.js +1 -1
  184. package/dist/_esm5.processed/manifest/{are_same_content.d.ts → utils.d.ts} +9 -7
  185. package/dist/_esm5.processed/manifest/{are_same_content.js → utils.js} +18 -1
  186. package/dist/_esm5.processed/minimal.js +2 -2
  187. package/dist/_esm5.processed/parsers/containers/isobmff/get_box.d.ts +18 -9
  188. package/dist/_esm5.processed/parsers/containers/isobmff/get_box.js +32 -9
  189. package/dist/_esm5.processed/parsers/containers/isobmff/read.d.ts +18 -5
  190. package/dist/_esm5.processed/parsers/containers/isobmff/read.js +28 -6
  191. package/dist/_esm5.processed/parsers/containers/isobmff/utils.js +52 -47
  192. package/dist/_esm5.processed/parsers/images/bif.js +1 -1
  193. package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +2 -2
  194. package/dist/_esm5.processed/parsers/manifest/dash/common/get_http_utc-timing_url.js +2 -2
  195. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +2 -1
  196. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +3 -2
  197. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.js +2 -1
  198. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +1 -0
  199. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +7 -9
  200. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +2 -1
  201. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +4 -2
  202. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +2 -1
  203. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +11 -5
  204. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.js +10 -9
  205. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/parse_s_element.js +3 -3
  206. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +6 -1
  207. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +5 -4
  208. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.d.ts +1 -1
  209. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.js +4 -4
  210. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +3 -1
  211. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +19 -18
  212. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +2 -1
  213. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +14 -8
  214. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +2 -2
  215. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +7 -8
  216. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +3 -1
  217. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +5 -10
  218. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +3 -1
  219. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +17 -8
  220. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.d.ts +7 -2
  221. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.js +22 -21
  222. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +10 -0
  223. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/BaseURL.js +9 -9
  224. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +24 -0
  225. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.js +7 -5
  226. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +12 -9
  227. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +5 -2
  228. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +8 -0
  229. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +11 -2
  230. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +7 -4
  231. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +11 -0
  232. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.js +7 -1
  233. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.js +5 -0
  234. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/MPD.js +5 -0
  235. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Period.js +13 -0
  236. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +23 -0
  237. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.js +5 -0
  238. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/XLink.js +6 -0
  239. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/root.js +6 -0
  240. package/dist/_esm5.processed/parsers/manifest/local/parse_local_manifest.js +1 -1
  241. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +4 -2
  242. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -1
  243. package/dist/_esm5.processed/parsers/manifest/smooth/get_codecs.js +1 -1
  244. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +3 -1
  245. package/dist/_esm5.processed/parsers/manifest/utils/check_manifest_ids.js +1 -1
  246. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +1 -1
  247. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +11 -3
  248. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.js +5 -5
  249. package/dist/_esm5.processed/parsers/manifest/utils/is_segment_still_available.js +3 -6
  250. package/dist/_esm5.processed/parsers/texttracks/sami/html.js +2 -2
  251. package/dist/_esm5.processed/parsers/texttracks/sami/native.js +2 -2
  252. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_font_size.js +13 -1
  253. package/dist/_esm5.processed/parsers/texttracks/ttml/html/generate_css_test_outline.js +4 -4
  254. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_default_style_elements.js +2 -2
  255. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_style_attribute.js +5 -5
  256. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +2 -2
  257. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
  258. package/dist/_esm5.processed/transports/dash/manifest_parser.js +89 -20
  259. package/dist/_esm5.processed/transports/dash/segment_loader.js +1 -1
  260. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
  261. package/dist/_esm5.processed/transports/local/segment_parser.d.ts +2 -2
  262. package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
  263. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
  264. package/dist/_esm5.processed/transports/smooth/extract_timings_infos.js +1 -1
  265. package/dist/_esm5.processed/transports/smooth/pipelines.js +2 -2
  266. package/dist/_esm5.processed/transports/smooth/segment_loader.js +3 -3
  267. package/dist/_esm5.processed/transports/types.d.ts +29 -15
  268. package/dist/_esm5.processed/transports/utils/byte_range.js +2 -2
  269. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
  270. package/dist/_esm5.processed/transports/utils/get_isobmff_timing_infos.js +6 -1
  271. package/dist/_esm5.processed/transports/utils/parse_text_track.js +6 -4
  272. package/dist/_esm5.processed/utils/assert.js +3 -3
  273. package/dist/_esm5.processed/utils/concat_map_latest.js +1 -2
  274. package/dist/_esm5.processed/utils/defer_subscriptions.js +1 -2
  275. package/dist/_esm5.processed/utils/filter_map.js +1 -2
  276. package/dist/_esm5.processed/utils/reference.d.ts +108 -0
  277. package/dist/_esm5.processed/utils/reference.js +137 -0
  278. package/dist/_esm5.processed/utils/request/fetch.d.ts +1 -1
  279. package/dist/_esm5.processed/utils/request/fetch.js +3 -3
  280. package/dist/_esm5.processed/utils/request/xhr.d.ts +1 -1
  281. package/dist/_esm5.processed/utils/request/xhr.js +1 -1
  282. package/dist/_esm5.processed/utils/rx-retry_with_backoff.js +1 -2
  283. package/dist/mpd-parser.wasm +0 -0
  284. package/dist/rx-player.d.ts +1 -15
  285. package/dist/rx-player.js +3666 -2470
  286. package/dist/rx-player.min.d.ts +1 -15
  287. package/dist/rx-player.min.js +1 -1
  288. package/jest.config.js +28 -1
  289. package/package.json +43 -43
  290. package/scripts/build/constants.d.ts +50 -0
  291. package/scripts/build/generate_build.js +1 -189
  292. package/scripts/doc-generator/construct_table_of_contents.js +31 -24
  293. package/scripts/doc-generator/convert_MD_to_HMTL.js +4 -8
  294. package/scripts/doc-generator/create_documentation.js +331 -0
  295. package/scripts/doc-generator/create_documentation_page.js +209 -0
  296. package/scripts/doc-generator/create_page.js +117 -35
  297. package/scripts/doc-generator/generate_header_html.js +148 -0
  298. package/scripts/doc-generator/generate_page_html.js +116 -0
  299. package/scripts/doc-generator/generate_page_list_html.js +93 -0
  300. package/scripts/doc-generator/generate_sidebar_html.js +88 -0
  301. package/scripts/doc-generator/get_search_data_for_content.js +137 -0
  302. package/scripts/doc-generator/index.js +14 -15
  303. package/scripts/doc-generator/parse_doc_configs.js +327 -0
  304. package/scripts/doc-generator/scripts/lunr.js +10 -0
  305. package/scripts/doc-generator/scripts/script.js +451 -0
  306. package/scripts/doc-generator/styles/style.css +712 -144
  307. package/scripts/doc-generator/utils.js +85 -0
  308. package/scripts/fast_demo_build.js +143 -0
  309. package/scripts/generate_documentation_list.js +6 -2
  310. package/scripts/generate_full_demo.js +26 -49
  311. package/scripts/start_demo_web_server.js +14 -4
  312. package/scripts/update-version +1 -1
  313. package/sonar-project.properties +2 -1
  314. package/src/compat/__tests__/add_text_track.test.ts +1 -0
  315. package/src/compat/__tests__/clear_element_src.test.ts +55 -28
  316. package/src/compat/__tests__/set_element_src.test.ts +2 -2
  317. package/src/compat/__tests__/when_loaded_metadata.test.ts +4 -5
  318. package/src/compat/__tests__/when_media_source_open.test.ts +4 -5
  319. package/src/compat/clear_element_src.ts +8 -6
  320. package/src/compat/eme/close_session.ts +3 -5
  321. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
  322. package/src/compat/eme/custom_media_keys/index.ts +6 -6
  323. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +6 -3
  324. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +1 -1
  325. package/src/compat/eme/generate_key_request.ts +1 -1
  326. package/src/compat/eme/load_session.ts +4 -6
  327. package/src/compat/event_listeners.ts +12 -21
  328. package/src/compat/on_height_width_change.ts +3 -5
  329. package/src/compat/set_element_src.ts +1 -1
  330. package/src/compat/when_loaded_metadata.ts +1 -1
  331. package/src/compat/when_media_source_open.ts +1 -1
  332. package/src/config.ts +4 -9
  333. package/src/core/abr/README.md +7 -7
  334. package/src/core/abr/abr_manager.ts +62 -21
  335. package/src/core/abr/bandwidth_estimator.ts +1 -1
  336. package/src/core/abr/buffer_based_chooser.ts +8 -6
  337. package/src/core/abr/get_buffer_levels.ts +3 -0
  338. package/src/core/abr/get_estimate_from_buffer_levels.ts +4 -4
  339. package/src/core/abr/guess_based_chooser.ts +308 -0
  340. package/src/core/abr/index.ts +7 -3
  341. package/src/core/abr/last_estimate_storage.ts +79 -0
  342. package/src/core/abr/network_analyzer.ts +74 -31
  343. package/src/core/abr/pending_requests_store.ts +76 -42
  344. package/src/core/abr/representation_estimator.ts +200 -125
  345. package/src/core/abr/representation_score_calculator.ts +33 -26
  346. package/src/core/abr/{__tests__ → utils/__tests__}/ewma.test.ts +0 -0
  347. package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_bitrate.test.ts +1 -1
  348. package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_width.test.ts +1 -1
  349. package/src/core/abr/{__tests__ → utils/__tests__}/select_optimal_representation.test.ts +1 -1
  350. package/src/core/abr/{ewma.ts → utils/ewma.ts} +0 -0
  351. package/src/core/abr/{filter_by_bitrate.ts → utils/filter_by_bitrate.ts} +2 -2
  352. package/src/core/abr/{filter_by_width.ts → utils/filter_by_width.ts} +3 -3
  353. package/src/core/abr/{select_optimal_representation.ts → utils/select_optimal_representation.ts} +2 -2
  354. package/src/core/api/README.md +4 -3
  355. package/src/core/api/__tests__/option_utils.test.ts +1 -0
  356. package/src/core/api/emit_seek_events.ts +21 -20
  357. package/src/core/api/index.ts +6 -2
  358. package/src/core/api/playback_observer.ts +768 -0
  359. package/src/core/api/public_api.ts +111 -111
  360. package/src/core/api/track_choice_manager.ts +6 -3
  361. package/src/core/eme/__tests__/__global__/get_license.test.ts +5 -3
  362. package/src/core/eme/__tests__/__global__/init_data.test.ts +11 -12
  363. package/src/core/eme/__tests__/__global__/media_key_system_access.test.ts +2 -1
  364. package/src/core/eme/__tests__/__global__/media_keys.test.ts +5 -8
  365. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +8 -6
  366. package/src/core/eme/__tests__/__global__/utils.ts +1 -0
  367. package/src/core/eme/__tests__/init_media_keys.test.ts +6 -65
  368. package/src/core/eme/attach_media_keys.ts +2 -1
  369. package/src/core/eme/check_key_statuses.ts +10 -8
  370. package/src/core/eme/clean_old_loaded_sessions.ts +2 -4
  371. package/src/core/eme/clear_eme_session.ts +6 -1
  372. package/src/core/eme/create_session.ts +3 -5
  373. package/src/core/eme/dispose_media_keys.ts +2 -2
  374. package/src/core/eme/eme_manager.ts +10 -12
  375. package/src/core/eme/find_key_system.ts +3 -5
  376. package/src/core/eme/get_media_keys.ts +4 -6
  377. package/src/core/eme/get_session.ts +2 -4
  378. package/src/core/eme/init_media_keys.ts +9 -9
  379. package/src/core/eme/session_events_listener.ts +14 -15
  380. package/src/core/eme/set_server_certificate.ts +9 -5
  381. package/src/core/eme/types.ts +15 -4
  382. package/src/core/eme/utils/close_session.ts +7 -7
  383. package/src/core/eme/utils/is_session_usable.ts +1 -1
  384. package/src/core/eme/utils/loaded_sessions_store.ts +2 -2
  385. package/src/core/eme/utils/persistent_sessions_store.ts +2 -2
  386. package/src/core/fetchers/index.ts +2 -2
  387. package/src/core/fetchers/manifest/manifest_fetcher.ts +1 -1
  388. package/src/core/fetchers/segment/__tests__/prioritizer.test.ts +3 -4
  389. package/src/core/fetchers/segment/index.ts +2 -2
  390. package/src/core/fetchers/segment/prioritized_segment_fetcher.ts +37 -45
  391. package/src/core/fetchers/segment/prioritizer.ts +82 -82
  392. package/src/core/fetchers/segment/segment_fetcher.ts +178 -80
  393. package/src/core/fetchers/segment/segment_fetcher_creator.ts +23 -31
  394. package/src/core/init/create_eme_manager.ts +1 -1
  395. package/src/core/init/create_media_source.ts +5 -7
  396. package/src/core/init/create_stream_playback_observer.ts +88 -0
  397. package/src/core/init/duration_updater.ts +20 -17
  398. package/src/core/init/emit_loaded_event.ts +11 -15
  399. package/src/core/init/end_of_stream.ts +2 -4
  400. package/src/core/init/get_initial_time.ts +0 -1
  401. package/src/core/init/initial_seek_and_play.ts +67 -51
  402. package/src/core/init/initialize_directfile.ts +26 -35
  403. package/src/core/init/initialize_media_source.ts +28 -28
  404. package/src/core/init/load_on_media_source.ts +51 -58
  405. package/src/core/init/manifest_update_scheduler.ts +11 -12
  406. package/src/core/init/stall_avoider.ts +64 -47
  407. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +24 -21
  408. package/src/core/init/throw_on_media_error.ts +1 -1
  409. package/src/core/init/types.ts +0 -24
  410. package/src/core/init/update_playback_rate.ts +15 -16
  411. package/src/core/segment_buffers/README.md +3 -3
  412. package/src/core/segment_buffers/garbage_collector.ts +15 -11
  413. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +10 -7
  414. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +14 -16
  415. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +1 -1
  416. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
  417. package/src/core/segment_buffers/implementations/utils/manual_time_ranges.ts +2 -2
  418. package/src/core/segment_buffers/inventory/buffered_history.ts +2 -2
  419. package/src/core/segment_buffers/inventory/segment_inventory.ts +1 -13
  420. package/src/core/stream/adaptation/adaptation_stream.ts +78 -56
  421. package/src/core/stream/adaptation/create_representation_estimator.ts +19 -45
  422. package/src/core/stream/adaptation/index.ts +2 -2
  423. package/src/core/stream/index.ts +2 -2
  424. package/src/core/stream/orchestrator/active_period_emitter.ts +6 -8
  425. package/src/core/stream/orchestrator/are_streams_complete.ts +2 -4
  426. package/src/core/stream/orchestrator/index.ts +2 -2
  427. package/src/core/stream/orchestrator/stream_orchestrator.ts +58 -49
  428. package/src/core/stream/period/create_empty_adaptation_stream.ts +14 -10
  429. package/src/core/stream/period/index.ts +2 -2
  430. package/src/core/stream/period/period_stream.ts +118 -75
  431. package/src/core/stream/reload_after_switch.ts +13 -10
  432. package/src/core/stream/representation/append_segment_to_buffer.ts +20 -16
  433. package/src/core/stream/representation/downloading_queue.ts +21 -24
  434. package/src/core/stream/representation/force_garbage_collection.ts +16 -23
  435. package/src/core/stream/representation/get_buffer_status.ts +9 -11
  436. package/src/core/stream/representation/get_needed_segments.ts +1 -1
  437. package/src/core/stream/representation/get_segment_priority.ts +8 -10
  438. package/src/core/stream/representation/index.ts +2 -2
  439. package/src/core/stream/representation/push_init_segment.ts +19 -16
  440. package/src/core/stream/representation/push_media_segment.ts +21 -17
  441. package/src/core/stream/representation/representation_stream.ts +50 -47
  442. package/src/experimental/features/__tests__/dash_wasm.test.ts +1 -0
  443. package/src/experimental/tools/VideoThumbnailLoader/create_request.ts +32 -17
  444. package/src/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.ts +6 -9
  445. package/src/experimental/tools/VideoThumbnailLoader/load_segments.ts +12 -6
  446. package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +4 -2
  447. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +2 -2
  448. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +21 -12
  449. package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +1 -1
  450. package/src/experimental/tools/createMetaplaylist/index.ts +1 -1
  451. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +4 -2
  452. package/src/features/__tests__/initialize_features.test.ts +191 -101
  453. package/src/features/initialize_features.ts +40 -37
  454. package/src/features/list/__tests__/bif_parser.test.ts +1 -0
  455. package/src/features/list/__tests__/dash.test.ts +1 -0
  456. package/src/features/list/__tests__/directfile.test.ts +1 -0
  457. package/src/features/list/__tests__/eme.test.ts +1 -0
  458. package/src/features/list/__tests__/html_sami_parser.test.ts +1 -0
  459. package/src/features/list/__tests__/html_srt_parser.test.ts +1 -0
  460. package/src/features/list/__tests__/html_text_buffer.test.ts +1 -0
  461. package/src/features/list/__tests__/html_ttml_parser.test.ts +1 -0
  462. package/src/features/list/__tests__/html_vtt_parser.test.ts +1 -0
  463. package/src/features/list/__tests__/image_buffer.test.ts +1 -0
  464. package/src/features/list/__tests__/native_sami_parser.test.ts +1 -0
  465. package/src/features/list/__tests__/native_srt_parser.test.ts +1 -0
  466. package/src/features/list/__tests__/native_text_buffer.test.ts +1 -0
  467. package/src/features/list/__tests__/native_ttml_parser.test.ts +1 -0
  468. package/src/features/list/__tests__/native_vtt_parser.test.ts +1 -0
  469. package/src/features/list/__tests__/smooth.test.ts +1 -0
  470. package/src/index.ts +2 -2
  471. package/src/manifest/__tests__/manifest.test.ts +1 -0
  472. package/src/manifest/index.ts +7 -1
  473. package/src/manifest/representation_index/__tests__/static.test.ts +1 -0
  474. package/src/manifest/representation_index/static.ts +1 -0
  475. package/src/manifest/representation_index/types.ts +25 -3
  476. package/src/manifest/{are_same_content.ts → utils.ts} +26 -9
  477. package/src/minimal.ts +3 -2
  478. package/src/parsers/containers/isobmff/get_box.ts +35 -8
  479. package/src/parsers/containers/isobmff/read.ts +32 -5
  480. package/src/parsers/containers/isobmff/utils.ts +52 -47
  481. package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +4 -4
  482. package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +4 -2
  483. package/src/parsers/manifest/dash/common/get_clock_offset.ts +3 -3
  484. package/src/parsers/manifest/dash/common/get_http_utc-timing_url.ts +15 -6
  485. package/src/parsers/manifest/dash/common/indexes/base.ts +5 -3
  486. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +1 -0
  487. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +9 -9
  488. package/src/parsers/manifest/dash/common/indexes/list.ts +6 -3
  489. package/src/parsers/manifest/dash/common/indexes/template.ts +13 -6
  490. package/src/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.ts +10 -9
  491. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +13 -5
  492. package/src/parsers/manifest/dash/common/indexes/tokens.ts +4 -4
  493. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +10 -4
  494. package/src/parsers/manifest/dash/common/parse_mpd.ts +21 -13
  495. package/src/parsers/manifest/dash/common/parse_periods.ts +7 -8
  496. package/src/parsers/manifest/dash/common/parse_representation_index.ts +12 -12
  497. package/src/parsers/manifest/dash/common/parse_representations.ts +23 -4
  498. package/src/parsers/manifest/dash/common/resolve_base_urls.ts +33 -24
  499. package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +12 -0
  500. package/src/parsers/manifest/dash/js-parser/node_parsers/BaseURL.ts +13 -9
  501. package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +28 -0
  502. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.ts +8 -5
  503. package/src/parsers/manifest/dash/js-parser/node_parsers/utils.ts +3 -0
  504. package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +5 -2
  505. package/src/parsers/manifest/dash/node_parser_types.ts +8 -0
  506. package/src/parsers/manifest/dash/parsers_types.ts +8 -2
  507. package/src/parsers/manifest/dash/wasm-parser/rs/lib.rs +1 -8
  508. package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +26 -5
  509. package/src/parsers/manifest/dash/wasm-parser/rs/processor/mod.rs +75 -521
  510. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +7 -4
  511. package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +13 -0
  512. package/src/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.ts +8 -1
  513. package/src/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.ts +6 -0
  514. package/src/parsers/manifest/dash/wasm-parser/ts/generators/MPD.ts +6 -0
  515. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Period.ts +14 -0
  516. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +26 -0
  517. package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.ts +6 -0
  518. package/src/parsers/manifest/dash/wasm-parser/ts/generators/XLink.ts +7 -0
  519. package/src/parsers/manifest/dash/wasm-parser/ts/generators/root.ts +7 -0
  520. package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +1 -1
  521. package/src/parsers/manifest/local/representation_index.ts +2 -0
  522. package/src/parsers/manifest/smooth/create_parser.ts +1 -1
  523. package/src/parsers/manifest/smooth/representation_index.ts +3 -1
  524. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +1 -1
  525. package/src/parsers/manifest/utils/index_helpers.ts +21 -11
  526. package/src/parsers/manifest/utils/is_segment_still_available.ts +4 -6
  527. package/src/parsers/texttracks/sami/html.ts +1 -1
  528. package/src/parsers/texttracks/sami/native.ts +1 -1
  529. package/src/parsers/texttracks/ttml/html/apply_font_size.ts +11 -1
  530. package/src/transports/dash/image_pipelines.ts +4 -4
  531. package/src/transports/dash/init_segment_loader.ts +1 -1
  532. package/src/transports/dash/manifest_parser.ts +99 -25
  533. package/src/transports/dash/segment_loader.ts +1 -1
  534. package/src/transports/dash/segment_parser.ts +4 -4
  535. package/src/transports/dash/text_parser.ts +8 -8
  536. package/src/transports/local/segment_loader.ts +2 -2
  537. package/src/transports/local/segment_parser.ts +4 -4
  538. package/src/transports/local/text_parser.ts +8 -8
  539. package/src/transports/metaplaylist/pipelines.ts +11 -11
  540. package/src/transports/smooth/extract_timings_infos.ts +1 -1
  541. package/src/transports/smooth/pipelines.ts +8 -8
  542. package/src/transports/smooth/segment_loader.ts +3 -3
  543. package/src/transports/types.ts +31 -17
  544. package/src/transports/utils/call_custom_manifest_loader.ts +1 -1
  545. package/src/transports/utils/get_isobmff_timing_infos.ts +6 -1
  546. package/src/transports/utils/parse_text_track.ts +4 -2
  547. package/src/typings/globals.d.ts +57 -40
  548. package/src/utils/__tests__/concat_map_latest.test.ts +7 -9
  549. package/src/utils/__tests__/defer_subscriptions.test.ts +4 -4
  550. package/src/utils/__tests__/event_emitter.test.ts +1 -1
  551. package/src/utils/__tests__/initialization_segment_cache.test.ts +7 -0
  552. package/src/utils/assert.ts +1 -1
  553. package/src/utils/concat_map_latest.ts +2 -4
  554. package/src/utils/defer_subscriptions.ts +1 -1
  555. package/src/utils/filter_map.ts +2 -4
  556. package/src/utils/reference.ts +234 -0
  557. package/src/utils/request/fetch.ts +3 -3
  558. package/src/utils/request/xhr.ts +2 -2
  559. package/src/utils/rx-retry_with_backoff.ts +2 -4
  560. package/tsconfig.json +4 -1
  561. package/tsconfig.modules.json +8 -3
  562. package/dist/_esm5.processed/core/abr/create_filters.d.ts +0 -27
  563. package/dist/_esm5.processed/core/abr/create_filters.js +0 -56
  564. package/dist/_esm5.processed/core/api/clock.d.ts +0 -157
  565. package/dist/_esm5.processed/core/api/clock.js +0 -363
  566. package/dist/_esm5.processed/core/init/create_stream_clock.d.ts +0 -34
  567. package/dist/_esm5.processed/core/init/create_stream_clock.js +0 -55
  568. package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.d.ts +0 -31
  569. package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.js +0 -37
  570. package/scripts/doc-generator/construct_html.js +0 -135
  571. package/scripts/doc-generator/construct_page_list.js +0 -120
  572. package/scripts/doc-generator/create_for_dir.js +0 -151
  573. package/scripts/doc-generator/get_files_to_convert.js +0 -71
  574. package/scripts/doc-generator/mkdir_parent.js +0 -21
  575. package/scripts/doc-generator/read_title_from_md.js +0 -22
  576. package/scripts/doc-generator/remove_toc_from_md.js +0 -20
  577. package/src/core/abr/create_filters.ts +0 -59
  578. package/src/core/api/clock.ts +0 -573
  579. package/src/core/init/create_stream_clock.ts +0 -93
  580. package/src/parsers/manifest/dash/common/extract_minimum_availability_time_offset.ts +0 -41
@@ -13,21 +13,20 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { combineLatest as observableCombineLatest, EMPTY, from as observableFrom, } from "rxjs";
17
- import { concatAll, ignoreElements, mergeMap, } from "rxjs/operators";
16
+ import { combineLatest as observableCombineLatest, concatAll, EMPTY, from as observableFrom, ignoreElements, mergeMap, } from "rxjs";
18
17
  import log from "../../log";
19
18
  import { getInnerAndOuterTimeRanges } from "../../utils/ranges";
20
19
  /**
21
20
  * Perform cleaning of the buffer according to the values set by the user
22
- * at each clock tick and each times the maxBufferBehind/maxBufferAhead values
23
- * change.
21
+ * each time `currentTime$` emits and each times the
22
+ * maxBufferBehind/maxBufferAhead values change.
24
23
  *
25
24
  * @param {Object} opt
26
25
  * @returns {Observable}
27
26
  */
28
27
  export default function BufferGarbageCollector(_a) {
29
- var segmentBuffer = _a.segmentBuffer, clock$ = _a.clock$, maxBufferBehind$ = _a.maxBufferBehind$, maxBufferAhead$ = _a.maxBufferAhead$;
30
- return observableCombineLatest([clock$, maxBufferBehind$, maxBufferAhead$]).pipe(mergeMap(function (_a) {
28
+ var segmentBuffer = _a.segmentBuffer, currentTime$ = _a.currentTime$, maxBufferBehind$ = _a.maxBufferBehind$, maxBufferAhead$ = _a.maxBufferAhead$;
29
+ return observableCombineLatest([currentTime$, maxBufferBehind$, maxBufferAhead$]).pipe(mergeMap(function (_a) {
31
30
  var currentTime = _a[0], maxBufferBehind = _a[1], maxBufferAhead = _a[2];
32
31
  return clearBuffer(segmentBuffer, currentTime, maxBufferBehind, maxBufferAhead);
33
32
  }));
@@ -107,6 +106,12 @@ function clearBuffer(segmentBuffer, position, maxBufferBehind, maxBufferAhead) {
107
106
  var clean$ = observableFrom(cleanedupRanges.map(function (range) {
108
107
  log.debug("GC: cleaning range from SegmentBuffer", range);
109
108
  return segmentBuffer.removeBuffer(range.start, range.end);
110
- })).pipe(concatAll(), ignoreElements());
109
+ })).pipe(concatAll(),
110
+ // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
111
+ // first type parameter as `any` instead of the perfectly fine `unknown`,
112
+ // leading to linter issues, as it forbids the usage of `any`.
113
+ // This is why we're disabling the eslint rule.
114
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
115
+ ignoreElements());
111
116
  return clean$;
112
117
  }
@@ -28,11 +28,11 @@ var __extends = (this && this.__extends) || (function () {
28
28
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
29
29
  };
30
30
  })();
31
- import { fromEvent, interval, Observable, Subject, } from "rxjs";
32
- import { takeUntil, tap, } from "rxjs/operators";
31
+ import { fromEvent, interval, Observable, Subject, takeUntil, tap, } from "rxjs";
33
32
  import { tryToChangeSourceBufferType, } from "../../../../compat";
34
33
  import config from "../../../../config";
35
34
  import log from "../../../../log";
35
+ import { getLoggableSegmentId } from "../../../../manifest";
36
36
  import areArraysOfNumbersEqual from "../../../../utils/are_arrays_of_numbers_equal";
37
37
  import assertUnreachable from "../../../../utils/assert_unreachable";
38
38
  import { toUint8Array } from "../../../../utils/byte_parsing";
@@ -108,7 +108,7 @@ var AudioVideoSegmentBuffer = /** @class */ (function (_super) {
108
108
  */
109
109
  AudioVideoSegmentBuffer.prototype.pushChunk = function (infos) {
110
110
  assertPushedDataIsBufferSource(infos);
111
- log.debug("AVSB: receiving order to push data to the SourceBuffer", this.bufferType, infos);
111
+ log.debug("AVSB: receiving order to push data to the SourceBuffer", this.bufferType, getLoggableSegmentId(infos.inventoryInfos));
112
112
  return this._addToQueue({ type: SegmentBufferOperation.Push,
113
113
  value: infos });
114
114
  };
@@ -133,7 +133,7 @@ var AudioVideoSegmentBuffer = /** @class */ (function (_super) {
133
133
  * @returns {Observable}
134
134
  */
135
135
  AudioVideoSegmentBuffer.prototype.endOfSegment = function (infos) {
136
- log.debug("AVSB: receiving order for validating end of segment", this.bufferType, infos.segment);
136
+ log.debug("AVSB: receiving order for validating end of segment", this.bufferType, getLoggableSegmentId(infos));
137
137
  return this._addToQueue({ type: SegmentBufferOperation.EndOfSegment,
138
138
  value: infos });
139
139
  };
@@ -192,7 +192,7 @@ var AudioVideoSegmentBuffer = /** @class */ (function (_super) {
192
192
  this._sourceBuffer.abort();
193
193
  }
194
194
  catch (e) {
195
- log.warn("AVSB: Failed to abort a " + this.bufferType + " SourceBuffer:", e);
195
+ log.warn("AVSB: Failed to abort a ".concat(this.bufferType, " SourceBuffer:"), e);
196
196
  }
197
197
  }
198
198
  };
@@ -312,7 +312,7 @@ var AudioVideoSegmentBuffer = /** @class */ (function (_super) {
312
312
  switch (this._pendingTask.type) {
313
313
  case SegmentBufferOperation.EndOfSegment:
314
314
  // nothing to do, we will just acknowledge the segment.
315
- log.debug("AVSB: Acknowledging complete segment", this._pendingTask.value);
315
+ log.debug("AVSB: Acknowledging complete segment", getLoggableSegmentId(this._pendingTask.value));
316
316
  this._flush();
317
317
  return;
318
318
  case SegmentBufferOperation.Push:
@@ -321,6 +321,7 @@ var AudioVideoSegmentBuffer = /** @class */ (function (_super) {
321
321
  this._flush();
322
322
  return;
323
323
  }
324
+ log.debug("AVSB: pushing segment", this.bufferType, getLoggableSegmentId(this._pendingTask.inventoryData));
324
325
  this._sourceBuffer.appendBuffer(segmentData);
325
326
  break;
326
327
  case SegmentBufferOperation.Remove:
@@ -434,7 +435,7 @@ export default AudioVideoSegmentBuffer;
434
435
  * @param {Object} pushedData
435
436
  */
436
437
  function assertPushedDataIsBufferSource(pushedData) {
437
- if (!false) {
438
+ if (0 /* CURRENT_ENV */ === 0 /* PRODUCTION */) {
438
439
  return;
439
440
  }
440
441
  var _a = pushedData.data, chunk = _a.chunk, initSegment = _a.initSegment;
@@ -28,8 +28,7 @@ var __extends = (this && this.__extends) || (function () {
28
28
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
29
29
  };
30
30
  })();
31
- import { concat as observableConcat, defer as observableDefer, interval as observableInterval, merge as observableMerge, of as observableOf, Subject, } from "rxjs";
32
- import { mapTo, startWith, switchMapTo, takeUntil, } from "rxjs/operators";
31
+ import { concat as observableConcat, defer as observableDefer, interval as observableInterval, map, merge as observableMerge, of as observableOf, startWith, Subject, switchMap, takeUntil, } from "rxjs";
33
32
  import { events, onHeightWidthChange, } from "../../../../../compat";
34
33
  import config from "../../../../../config";
35
34
  import log from "../../../../../log";
@@ -41,18 +40,18 @@ import updateProportionalElements from "./update_proportional_elements";
41
40
  var onEnded$ = events.onEnded$, onSeeked$ = events.onSeeked$, onSeeking$ = events.onSeeking$;
42
41
  var MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL = config.MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL, TEXT_TRACK_SIZE_CHECKS_INTERVAL = config.TEXT_TRACK_SIZE_CHECKS_INTERVAL;
43
42
  /**
44
- * Generate the clock at which TextTrack HTML Cues should be refreshed.
43
+ * Generate the interval at which TextTrack HTML Cues should be refreshed.
45
44
  * @param {HTMLMediaElement} videoElement
46
45
  * @returns {Observable}
47
46
  */
48
- function generateClock(videoElement) {
47
+ function generateRefreshInterval(videoElement) {
49
48
  var seeking$ = onSeeking$(videoElement);
50
49
  var seeked$ = onSeeked$(videoElement);
51
50
  var ended$ = onEnded$(videoElement);
52
51
  var manualRefresh$ = observableMerge(seeked$, ended$);
53
52
  var autoRefresh$ = observableInterval(MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL)
54
53
  .pipe(startWith(null));
55
- return manualRefresh$.pipe(startWith(null), switchMapTo(observableConcat(autoRefresh$.pipe(mapTo(true), takeUntil(seeking$)), observableOf(false))));
54
+ return manualRefresh$.pipe(startWith(null), switchMap(function () { return observableConcat(autoRefresh$.pipe(map(function () { return true; }), takeUntil(seeking$)), observableOf(false)); }));
56
55
  }
57
56
  /**
58
57
  * @param {Element} element
@@ -107,7 +106,7 @@ var HTMLTextSegmentBuffer = /** @class */ (function (_super) {
107
106
  _this._buffer = new TextTrackCuesStore();
108
107
  _this._currentCues = [];
109
108
  // update text tracks
110
- generateClock(_this._videoElement)
109
+ generateRefreshInterval(_this._videoElement)
111
110
  .pipe(takeUntil(_this._destroy$))
112
111
  .subscribe(function (shouldDisplay) {
113
112
  if (!shouldDisplay) {
@@ -338,7 +337,7 @@ export default HTMLTextSegmentBuffer;
338
337
  * @param {Object} chunk
339
338
  */
340
339
  function assertChunkIsTextTrackSegmentData(chunk) {
341
- if (!false) {
340
+ if (0 /* CURRENT_ENV */ === 0 /* PRODUCTION */) {
342
341
  return;
343
342
  }
344
343
  if (typeof chunk !== "object" ||
@@ -348,9 +347,9 @@ function assertChunkIsTextTrackSegmentData(chunk) {
348
347
  (chunk.language !== undefined &&
349
348
  typeof chunk.language !== "string") ||
350
349
  (chunk.start !== undefined &&
351
- typeof chunk.start !== "string") ||
350
+ typeof chunk.start !== "number") ||
352
351
  (chunk.end !== undefined &&
353
- typeof chunk.end !== "string")) {
352
+ typeof chunk.end !== "number")) {
354
353
  throw new Error("Invalid format given to a NativeTextSegmentBuffer");
355
354
  }
356
355
  }
@@ -363,7 +362,7 @@ function assertChunkIsTextTrackSegmentData(chunk) {
363
362
  * It doesn't correspond at all to real code that will be called. This is just
364
363
  * a hack to tell TypeScript to perform that check.
365
364
  */
366
- if (false) {
365
+ if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
367
366
  /* eslint-disable @typescript-eslint/no-unused-vars */
368
367
  /* eslint-disable @typescript-eslint/ban-ts-comment */
369
368
  // @ts-ignore
@@ -68,7 +68,7 @@ var TextTrackCuesStore = /** @class */ (function () {
68
68
  * @param {Number} to
69
69
  */
70
70
  TextTrackCuesStore.prototype.remove = function (from, _to) {
71
- if (false) {
71
+ if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
72
72
  assert(from >= 0);
73
73
  assert(_to >= 0);
74
74
  assert(_to > from);
@@ -230,7 +230,7 @@ export default NativeTextSegmentBuffer;
230
230
  * @param {Object} chunk
231
231
  */
232
232
  function assertChunkIsTextTrackSegmentData(chunk) {
233
- if (!false) {
233
+ if (0 /* CURRENT_ENV */ === 0 /* PRODUCTION */) {
234
234
  return;
235
235
  }
236
236
  if (typeof chunk !== "object" ||
@@ -240,9 +240,9 @@ function assertChunkIsTextTrackSegmentData(chunk) {
240
240
  (chunk.language !== undefined &&
241
241
  typeof chunk.language !== "string") ||
242
242
  (chunk.start !== undefined &&
243
- typeof chunk.start !== "string") ||
243
+ typeof chunk.start !== "number") ||
244
244
  (chunk.end !== undefined &&
245
- typeof chunk.end !== "string")) {
245
+ typeof chunk.end !== "number")) {
246
246
  throw new Error("Invalid format given to a NativeTextSegmentBuffer");
247
247
  }
248
248
  }
@@ -255,7 +255,7 @@ function assertChunkIsTextTrackSegmentData(chunk) {
255
255
  * It doesn't correspond at all to real code that will be called. This is just
256
256
  * a hack to tell TypeScript to perform that check.
257
257
  */
258
- if (false) {
258
+ if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
259
259
  /* eslint-disable @typescript-eslint/no-unused-vars */
260
260
  /* eslint-disable @typescript-eslint/ban-ts-comment */
261
261
  // @ts-ignore
@@ -26,7 +26,7 @@ var ManualTimeRanges = /** @class */ (function () {
26
26
  this.length = 0;
27
27
  }
28
28
  ManualTimeRanges.prototype.insert = function (start, end) {
29
- if (false) {
29
+ if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
30
30
  assert(start >= 0, "invalid start time");
31
31
  assert(end - start > 0, "invalid end time");
32
32
  }
@@ -34,7 +34,7 @@ var ManualTimeRanges = /** @class */ (function () {
34
34
  this.length = this._ranges.length;
35
35
  };
36
36
  ManualTimeRanges.prototype.remove = function (start, end) {
37
- if (false) {
37
+ if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
38
38
  assert(start >= 0, "invalid start time");
39
39
  assert(end - start > 0, "invalid end time");
40
40
  }
@@ -79,11 +79,11 @@ var BufferedHistory = /** @class */ (function () {
79
79
  }
80
80
  }
81
81
  if (firstKeptIndex > 0) {
82
- this._history.splice(firstKeptIndex);
82
+ this._history = this._history.splice(firstKeptIndex);
83
83
  }
84
84
  if (this._history.length > this._maxHistoryLength) {
85
85
  var toRemove = this._history.length - this._maxHistoryLength;
86
- this._history.splice(toRemove);
86
+ this._history = this._history.splice(toRemove);
87
87
  }
88
88
  };
89
89
  return BufferedHistory;
@@ -32,16 +32,7 @@ export interface IBufferedChunk {
32
32
  * synchronization for that chunk this value could be more or less precize.
33
33
  */
34
34
  bufferedStart: number | undefined;
35
- /**
36
- * Supposed end, in seconds, the chunk is expected to end at.
37
- *
38
- * If the current `chunk` is part of a "partially pushed" segment (see
39
- * `partiallyPushed`), the definition of this property is flexible in the way
40
- * that it can correspond either to the end of the chunk or to the end of the
41
- * whole segment the chunk is linked to.
42
- * As such, this property should not be relied on until the segment has been
43
- * fully-pushed.
44
- */
35
+ /** Supposed end, in seconds, the chunk is expected to end at. */
45
36
  end: number;
46
37
  /**
47
38
  * If `true` the `end` property is an estimate the `SegmentInventory` has
@@ -65,8 +56,6 @@ export interface IBufferedChunk {
65
56
  infos: IChunkContext;
66
57
  /**
67
58
  * If `true`, this chunk is only a partial chunk of a whole segment.
68
- * In this condition, the `start` and `end` properties may be ignored, as it
69
- * is unclear if they refer to the chunk or to the whole segment.
70
59
  *
71
60
  * Inversely, if `false`, this chunk is a whole segment whose inner chunks
72
61
  * have all been fully pushed.
@@ -92,7 +92,7 @@ var SegmentInventory = /** @class */ (function () {
92
92
  end: takeFirstSet(lastDeletedSegment.bufferedEnd, lastDeletedSegment.end),
93
93
  precizeEnd: lastDeletedSegment.precizeEnd,
94
94
  };
95
- log.debug("SI: " + numberOfSegmentToDelete + " segments GCed.", bufferType);
95
+ log.debug("SI: ".concat(numberOfSegmentToDelete, " segments GCed."), bufferType);
96
96
  inventory.splice(indexBefore, numberOfSegmentToDelete);
97
97
  inventoryIndex = indexBefore;
98
98
  }
@@ -150,7 +150,7 @@ var SegmentInventory = /** @class */ (function () {
150
150
  inventory.splice(inventoryIndex, inventory.length - inventoryIndex);
151
151
  }
152
152
  if (bufferType !== undefined && log.getLevel() === "DEBUG") {
153
- log.debug("SI: current " + bufferType + " inventory timeline:\n" +
153
+ log.debug("SI: current ".concat(bufferType, " inventory timeline:\n") +
154
154
  prettyPrintInventory(this._inventory));
155
155
  }
156
156
  };
@@ -765,17 +765,17 @@ function prettyPrintInventory(inventory) {
765
765
  currentLetter = encounteredPeriod[representationId];
766
766
  }
767
767
  if (lastChunk === null) {
768
- str += chunk.bufferedStart.toFixed(2) + "|" + currentLetter + "|";
768
+ str += "".concat(chunk.bufferedStart.toFixed(2), "|").concat(currentLetter, "|");
769
769
  }
770
770
  else if (lastLetter === currentLetter) {
771
771
  if (lastChunk.bufferedEnd + roundingError < chunk.bufferedStart) {
772
- str += lastChunk.bufferedEnd.toFixed(2) + " ~ " +
773
- (chunk.bufferedStart.toFixed(2) + "|" + currentLetter + "|");
772
+ str += "".concat(lastChunk.bufferedEnd.toFixed(2), " ~ ") +
773
+ "".concat(chunk.bufferedStart.toFixed(2), "|").concat(currentLetter, "|");
774
774
  }
775
775
  }
776
776
  else {
777
- str += lastChunk.bufferedEnd.toFixed(2) + " ~ " +
778
- (chunk.bufferedStart.toFixed(2) + "|" + currentLetter + "|");
777
+ str += "".concat(lastChunk.bufferedEnd.toFixed(2), " ~ ") +
778
+ "".concat(chunk.bufferedStart.toFixed(2), "|").concat(currentLetter, "|");
779
779
  }
780
780
  lastChunk = chunk;
781
781
  lastLetter = currentLetter;
@@ -786,9 +786,9 @@ function prettyPrintInventory(inventory) {
786
786
  }
787
787
  letters.forEach(function (letterInfo) {
788
788
  var _a;
789
- str += "\n[" + letterInfo.letter + "] " +
790
- ("P: " + letterInfo.periodId + " || R: " + letterInfo.representationId) +
791
- ("(" + ((_a = letterInfo.bitrate) !== null && _a !== void 0 ? _a : "unknown bitrate") + ")");
789
+ str += "\n[".concat(letterInfo.letter, "] ") +
790
+ "P: ".concat(letterInfo.periodId, " || R: ").concat(letterInfo.representationId) +
791
+ "(".concat((_a = letterInfo.bitrate) !== null && _a !== void 0 ? _a : "unknown bitrate", ")");
792
792
  });
793
793
  return str;
794
794
  }
@@ -160,7 +160,7 @@ var SegmentBuffersStore = /** @class */ (function () {
160
160
  SegmentBuffersStore.prototype.disableSegmentBuffer = function (bufferType) {
161
161
  var currentValue = this._initializedSegmentBuffers[bufferType];
162
162
  if (currentValue === null) {
163
- log.warn("SBS: The " + bufferType + " SegmentBuffer was already disabled.");
163
+ log.warn("SBS: The ".concat(bufferType, " SegmentBuffer was already disabled."));
164
164
  return;
165
165
  }
166
166
  if (currentValue !== undefined) {
@@ -22,15 +22,17 @@
22
22
  * ABRManager, and orchestrates a RepresentationStream, which will download and
23
23
  * push segments corresponding to a chosen Representation.
24
24
  */
25
- import { BehaviorSubject, Observable } from "rxjs";
25
+ import { Observable } from "rxjs";
26
26
  import Manifest, { Adaptation, Period } from "../../../manifest";
27
+ import { IReadOnlySharedReference } from "../../../utils/reference";
27
28
  import ABRManager from "../../abr";
29
+ import { IReadOnlyPlaybackObserver } from "../../api";
28
30
  import { SegmentFetcherCreator } from "../../fetchers";
29
31
  import { SegmentBuffer } from "../../segment_buffers";
30
- import { IRepresentationStreamClockTick } from "../representation";
32
+ import { IRepresentationStreamPlaybackObservation } from "../representation";
31
33
  import { IAdaptationStreamEvent } from "../types";
32
- /** `Clock tick` information needed by the AdaptationStream. */
33
- export interface IAdaptationStreamClockTick extends IRepresentationStreamClockTick {
34
+ /** Regular playback information needed by the AdaptationStream. */
35
+ export interface IAdaptationStreamPlaybackObservation extends IRepresentationStreamPlaybackObservation {
34
36
  /**
35
37
  * For the current SegmentBuffer, difference in seconds between the next position
36
38
  * where no segment data is available and the current position.
@@ -38,12 +40,15 @@ export interface IAdaptationStreamClockTick extends IRepresentationStreamClockTi
38
40
  bufferGap: number;
39
41
  /** `duration` property of the HTMLMediaElement on which the content plays. */
40
42
  duration: number;
41
- /** Allows to fetch the current position at any time. */
42
- getCurrentTime: () => number;
43
43
  /** If true, the player has been put on pause. */
44
44
  isPaused: boolean;
45
45
  /** Last "playback rate" asked by the user. */
46
46
  speed: number;
47
+ /**
48
+ * Only set for live contents.
49
+ * Difference between the live edge and the current position, in seconds.
50
+ */
51
+ liveGap: number | undefined;
47
52
  }
48
53
  /** Arguments given when creating a new `AdaptationStream`. */
49
54
  export interface IAdaptationStreamArguments {
@@ -52,11 +57,8 @@ export interface IAdaptationStreamArguments {
52
57
  * conditions like the current network bandwidth.
53
58
  */
54
59
  abrManager: ABRManager;
55
- /**
56
- * Regularly emit playback conditions.
57
- * The main AdaptationStream logic will be triggered on each `tick`.
58
- */
59
- clock$: Observable<IAdaptationStreamClockTick>;
60
+ /** Regularly emit playback conditions. */
61
+ playbackObserver: IReadOnlyPlaybackObserver<IAdaptationStreamPlaybackObservation>;
60
62
  /** Content you want to create this Stream for. */
61
63
  content: {
62
64
  manifest: Manifest;
@@ -73,7 +75,7 @@ export interface IAdaptationStreamArguments {
73
75
  * position in the current SegmentBuffer. When this amount has been reached
74
76
  * this AdaptationStream won't try to download new segments.
75
77
  */
76
- wantedBufferAhead$: BehaviorSubject<number>;
78
+ wantedBufferAhead: IReadOnlySharedReference<number>;
77
79
  }
78
80
  /**
79
81
  * Various specific stream "options" which tweak the behavior of the
@@ -130,4 +132,4 @@ export interface IAdaptationStreamOptions {
130
132
  * @param {Object} args
131
133
  * @returns {Observable}
132
134
  */
133
- export default function AdaptationStream({ abrManager, clock$, content, options, segmentBuffer, segmentFetcherCreator, wantedBufferAhead$, }: IAdaptationStreamArguments): Observable<IAdaptationStreamEvent>;
135
+ export default function AdaptationStream({ abrManager, playbackObserver, content, options, segmentBuffer, segmentFetcherCreator, wantedBufferAhead, }: IAdaptationStreamArguments): Observable<IAdaptationStreamEvent>;
@@ -22,12 +22,12 @@
22
22
  * ABRManager, and orchestrates a RepresentationStream, which will download and
23
23
  * push segments corresponding to a chosen Representation.
24
24
  */
25
- import { BehaviorSubject, concat as observableConcat, defer as observableDefer, EMPTY, merge as observableMerge, of as observableOf, } from "rxjs";
26
- import { catchError, distinctUntilChanged, exhaustMap, filter, map, mergeMap, share, take, tap, } from "rxjs/operators";
25
+ import { catchError, concat as observableConcat, defer as observableDefer, distinctUntilChanged, EMPTY, exhaustMap, filter, map, merge as observableMerge, mergeMap, of as observableOf, share, take, tap, } from "rxjs";
27
26
  import config from "../../../config";
28
27
  import { formatError } from "../../../errors";
29
28
  import log from "../../../log";
30
29
  import deferSubscriptions from "../../../utils/defer_subscriptions";
30
+ import { createSharedReference, } from "../../../utils/reference";
31
31
  import EVENTS from "../events_generators";
32
32
  import reloadAfterSwitch from "../reload_after_switch";
33
33
  import RepresentationStream from "../representation";
@@ -48,7 +48,7 @@ var DELTA_POSITION_AFTER_RELOAD = config.DELTA_POSITION_AFTER_RELOAD;
48
48
  * @returns {Observable}
49
49
  */
50
50
  export default function AdaptationStream(_a) {
51
- var abrManager = _a.abrManager, clock$ = _a.clock$, content = _a.content, options = _a.options, segmentBuffer = _a.segmentBuffer, segmentFetcherCreator = _a.segmentFetcherCreator, wantedBufferAhead$ = _a.wantedBufferAhead$;
51
+ var abrManager = _a.abrManager, playbackObserver = _a.playbackObserver, content = _a.content, options = _a.options, segmentBuffer = _a.segmentBuffer, segmentFetcherCreator = _a.segmentFetcherCreator, wantedBufferAhead = _a.wantedBufferAhead;
52
52
  var directManualBitrateSwitching = options.manualBitrateSwitchingMode === "direct";
53
53
  var manifest = content.manifest, period = content.period, adaptation = content.adaptation;
54
54
  /**
@@ -60,25 +60,39 @@ export default function AdaptationStream(_a) {
60
60
  * https://developers.google.com/web/updates/2017/10/quotaexceedederror
61
61
  */
62
62
  var bufferGoalRatioMap = {};
63
- var _b = createRepresentationEstimator(content, abrManager, clock$), estimator$ = _b.estimator$, requestFeedback$ = _b.requestFeedback$, streamFeedback$ = _b.streamFeedback$;
63
+ var _b = createRepresentationEstimator(content, abrManager, playbackObserver.observe(true)), estimator$ = _b.estimator$, abrFeedbacks$ = _b.abrFeedbacks$;
64
64
  /** Allows the `RepresentationStream` to easily fetch media segments. */
65
- var segmentFetcher = segmentFetcherCreator.createSegmentFetcher(adaptation.type, requestFeedback$);
65
+ var segmentFetcher = segmentFetcherCreator
66
+ .createSegmentFetcher(adaptation.type, {
67
+ onRequestBegin: function (value) {
68
+ abrFeedbacks$.next({ type: "requestBegin", value: value });
69
+ },
70
+ onRequestEnd: function (value) {
71
+ abrFeedbacks$.next({ type: "requestEnd", value: value });
72
+ },
73
+ onProgress: function (value) {
74
+ abrFeedbacks$.next({ type: "progress", value: value });
75
+ },
76
+ onMetrics: function (value) {
77
+ abrFeedbacks$.next({ type: "metrics", value: value });
78
+ },
79
+ });
66
80
  /**
67
- * Emits each time an estimate is made through the `abrEstimate$` Observable,
68
- * starting with the last one.
81
+ * Stores the last estimate emitted through the `abrEstimate$` Observable,
82
+ * starting with `null`.
69
83
  * This allows to easily rely on that value in inner Observables which might also
70
84
  * need the last already-considered value.
71
85
  */
72
- var lastEstimate$ = new BehaviorSubject(null);
86
+ var lastEstimate = createSharedReference(null);
73
87
  /** Emits abr estimates on Subscription. */
74
- var abrEstimate$ = estimator$.pipe(tap(function (estimate) { lastEstimate$.next(estimate); }), deferSubscriptions(), share());
88
+ var abrEstimate$ = estimator$.pipe(tap(function (estimate) { lastEstimate.setValue(estimate); }), deferSubscriptions(), share());
75
89
  /** Emit at each bitrate estimate done by the ABRManager. */
76
90
  var bitrateEstimate$ = abrEstimate$.pipe(filter(function (_a) {
77
91
  var bitrate = _a.bitrate;
78
92
  return bitrate != null;
79
93
  }), distinctUntilChanged(function (old, current) { return old.bitrate === current.bitrate; }), map(function (_a) {
80
94
  var bitrate = _a.bitrate;
81
- log.debug("Stream: new " + adaptation.type + " bitrate estimate", bitrate);
95
+ log.debug("Stream: new ".concat(adaptation.type, " bitrate estimate"), bitrate);
82
96
  return EVENTS.bitrateEstimationChange(adaptation.type, bitrate);
83
97
  }));
84
98
  /** Recursively create `RepresentationStream`s according to the last estimate. */
@@ -106,13 +120,13 @@ export default function AdaptationStream(_a) {
106
120
  if (directManualBitrateSwitching &&
107
121
  fromEstimate.manual &&
108
122
  !isFirstEstimate) {
109
- return reloadAfterSwitch(period, adaptation.type, clock$, DELTA_POSITION_AFTER_RELOAD.bitrateSwitch);
123
+ return reloadAfterSwitch(period, adaptation.type, playbackObserver, DELTA_POSITION_AFTER_RELOAD.bitrateSwitch);
110
124
  }
111
125
  /**
112
126
  * Emit when the current RepresentationStream should be terminated to make
113
127
  * place for a new one (e.g. when switching quality).
114
128
  */
115
- var terminateCurrentStream$ = lastEstimate$.pipe(filter(function (newEstimate) { return newEstimate === null ||
129
+ var terminateCurrentStream$ = lastEstimate.asObservable().pipe(filter(function (newEstimate) { return newEstimate === null ||
116
130
  newEstimate.representation.id !== representation.id ||
117
131
  (newEstimate.manual && !fromEstimate.manual); }), take(1), map(function (newEstimate) {
118
132
  if (newEstimate === null) {
@@ -141,21 +155,21 @@ export default function AdaptationStream(_a) {
141
155
  */
142
156
  var fastSwitchThreshold$ = !options.enableFastSwitching ?
143
157
  observableOf(0) : // Do not fast-switch anything
144
- lastEstimate$.pipe(map(function (estimate) { return estimate === null ? undefined :
158
+ lastEstimate.asObservable().pipe(map(function (estimate) { return estimate === null ? undefined :
145
159
  estimate.knownStableBitrate; }), distinctUntilChanged());
146
160
  var representationChange$ = observableOf(EVENTS.representationChange(adaptation.type, period, representation));
147
161
  return observableConcat(representationChange$, createRepresentationStream(representation, terminateCurrentStream$, fastSwitchThreshold$)).pipe(tap(function (evt) {
148
162
  if (evt.type === "representationChange" ||
149
163
  evt.type === "added-segment") {
150
- return streamFeedback$.next(evt);
164
+ return abrFeedbacks$.next(evt);
151
165
  }
152
166
  }), mergeMap(function (evt) {
153
167
  if (evt.type === "stream-terminating") {
154
- var lastEstimate = lastEstimate$.getValue();
155
- if (lastEstimate === null) {
168
+ var estimate = lastEstimate.getValue();
169
+ if (estimate === null) {
156
170
  return EMPTY;
157
171
  }
158
- return recursivelyCreateRepresentationStreams(lastEstimate, false);
172
+ return recursivelyCreateRepresentationStreams(estimate, false);
159
173
  }
160
174
  return observableOf(evt);
161
175
  }));
@@ -172,9 +186,9 @@ export default function AdaptationStream(_a) {
172
186
  var bufferGoalRatio = oldBufferGoalRatio != null ? oldBufferGoalRatio :
173
187
  1;
174
188
  bufferGoalRatioMap[representation.id] = bufferGoalRatio;
175
- var bufferGoal$ = wantedBufferAhead$.pipe(map(function (wba) { return wba * bufferGoalRatio; }));
176
- log.info("Stream: changing representation", adaptation.type, representation);
177
- return RepresentationStream({ clock$: clock$, content: { representation: representation, adaptation: adaptation, period: period, manifest: manifest }, segmentBuffer: segmentBuffer, segmentFetcher: segmentFetcher, terminate$: terminateCurrentStream$,
189
+ var bufferGoal$ = wantedBufferAhead.asObservable().pipe(map(function (wba) { return wba * bufferGoalRatio; }));
190
+ log.info("Stream: changing representation", adaptation.type, representation.id, representation.bitrate);
191
+ return RepresentationStream({ playbackObserver: playbackObserver, content: { representation: representation, adaptation: adaptation, period: period, manifest: manifest }, segmentBuffer: segmentBuffer, segmentFetcher: segmentFetcher, terminate$: terminateCurrentStream$,
178
192
  options: { bufferGoal$: bufferGoal$, drmSystemId: options.drmSystemId, fastSwitchThreshold$: fastSwitchThreshold$ } })
179
193
  .pipe(catchError(function (err) {
180
194
  var formattedError = formatError(err, {
@@ -182,10 +196,9 @@ export default function AdaptationStream(_a) {
182
196
  defaultReason: "Unknown `RepresentationStream` error",
183
197
  });
184
198
  if (formattedError.code === "BUFFER_FULL_ERROR") {
185
- var wantedBufferAhead = wantedBufferAhead$.getValue();
199
+ var wba = wantedBufferAhead.getValue();
186
200
  var lastBufferGoalRatio = bufferGoalRatio;
187
- if (lastBufferGoalRatio <= 0.25 ||
188
- wantedBufferAhead * lastBufferGoalRatio <= 2) {
201
+ if (lastBufferGoalRatio <= 0.25 || wba * lastBufferGoalRatio <= 2) {
189
202
  throw formattedError;
190
203
  }
191
204
  bufferGoalRatioMap[representation.id] = lastBufferGoalRatio - 0.25;
@@ -15,36 +15,28 @@
15
15
  */
16
16
  import { Observable, Subject } from "rxjs";
17
17
  import Manifest, { Adaptation } from "../../../manifest";
18
- import ABRManager, { IABREstimate, IABRManagerClockTick, IABRMetricsEvent, IABRRequestBeginEvent, IABRRequestEndEvent, IABRRequestProgressEvent } from "../../abr";
19
- import { IRepresentationChangeEvent, IStreamEventAddedSegment } from "../types";
18
+ import ABRManager, { IABREstimate, IABRManagerPlaybackObservation, IABRStreamEvents } from "../../abr";
20
19
  /**
21
20
  * Create an "estimator$" Observable which will emit which Representation (from
22
21
  * the given `Adaptation`) is the best fit (see `IABREstimate` type definition)
23
22
  * corresponding to the current network and playback conditions.
24
23
  *
25
- * This function also returns two subjects that should be used to add feedback
26
- * helping the estimator to make its choices:
24
+ * This function also returns a subject that should be used to add feedback
25
+ * helping the estimator to make its choices.
27
26
  *
28
- * - `requestFeedback$`: Subject through which information about new requests
29
- * and network metrics should be emitted.
30
- *
31
- * - `streamFeedback$`: Subject through which stream-related events should be
32
- * emitted.
33
- *
34
- * You can look at the types defined for both of those Subjects to have more
35
- * information on what data is expected. The idea is to provide as much data as
36
- * possible so the estimation is as adapted as possible.
27
+ * You can look at the types defined for this Subject to have more information
28
+ * on what data is expected. The idea is to provide as much data as possible so
29
+ * the estimation is as adapted as possible.
37
30
  *
38
31
  * @param {Object} content
39
32
  * @param {Object} abrManager
40
- * @param {Observable} clock$
33
+ * @param {Observable} observation$
41
34
  * @returns {Object}
42
35
  */
43
36
  export default function createRepresentationEstimator({ manifest, adaptation }: {
44
37
  manifest: Manifest;
45
38
  adaptation: Adaptation;
46
- }, abrManager: ABRManager, clock$: Observable<IABRManagerClockTick>): {
39
+ }, abrManager: ABRManager, observation$: Observable<IABRManagerPlaybackObservation>): {
47
40
  estimator$: Observable<IABREstimate>;
48
- streamFeedback$: Subject<IStreamEventAddedSegment<unknown> | IRepresentationChangeEvent>;
49
- requestFeedback$: Subject<IABRMetricsEvent | IABRRequestBeginEvent | IABRRequestProgressEvent | IABRRequestEndEvent>;
41
+ abrFeedbacks$: Subject<IABRStreamEvents>;
50
42
  };