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
@@ -18,17 +18,15 @@ import {
18
18
  concat as observableConcat,
19
19
  defer as observableDefer,
20
20
  interval as observableInterval,
21
+ map,
21
22
  merge as observableMerge,
22
23
  Observable,
23
24
  of as observableOf,
24
- Subject,
25
- } from "rxjs";
26
- import {
27
- mapTo,
28
25
  startWith,
29
- switchMapTo,
26
+ Subject,
27
+ switchMap,
30
28
  takeUntil,
31
- } from "rxjs/operators";
29
+ } from "rxjs";
32
30
  import {
33
31
  events,
34
32
  onHeightWidthChange,
@@ -54,11 +52,11 @@ const { MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL,
54
52
  TEXT_TRACK_SIZE_CHECKS_INTERVAL } = config;
55
53
 
56
54
  /**
57
- * Generate the clock at which TextTrack HTML Cues should be refreshed.
55
+ * Generate the interval at which TextTrack HTML Cues should be refreshed.
58
56
  * @param {HTMLMediaElement} videoElement
59
57
  * @returns {Observable}
60
58
  */
61
- function generateClock(videoElement : HTMLMediaElement) : Observable<boolean> {
59
+ function generateRefreshInterval(videoElement : HTMLMediaElement) : Observable<boolean> {
62
60
  const seeking$ = onSeeking$(videoElement);
63
61
  const seeked$ = onSeeked$(videoElement);
64
62
  const ended$ = onEnded$(videoElement);
@@ -69,9 +67,9 @@ function generateClock(videoElement : HTMLMediaElement) : Observable<boolean> {
69
67
 
70
68
  return manualRefresh$.pipe(
71
69
  startWith(null),
72
- switchMapTo(observableConcat(autoRefresh$.pipe(mapTo(true),
73
- takeUntil(seeking$)),
74
- observableOf(false))));
70
+ switchMap(() => observableConcat(autoRefresh$.pipe(map(() => true),
71
+ takeUntil(seeking$)),
72
+ observableOf(false))));
75
73
  }
76
74
 
77
75
  /**
@@ -177,7 +175,7 @@ export default class HTMLTextSegmentBuffer extends SegmentBuffer {
177
175
  this._currentCues = [];
178
176
 
179
177
  // update text tracks
180
- generateClock(this._videoElement)
178
+ generateRefreshInterval(this._videoElement)
181
179
  .pipe(takeUntil(this._destroy$))
182
180
  .subscribe((shouldDisplay) => {
183
181
  if (!shouldDisplay) {
@@ -463,7 +461,7 @@ export interface INativeTextTracksBufferSegmentData {
463
461
  function assertChunkIsTextTrackSegmentData(
464
462
  chunk : unknown
465
463
  ) : asserts chunk is INativeTextTracksBufferSegmentData {
466
- if (!__DEV__) {
464
+ if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.PRODUCTION as number) {
467
465
  return;
468
466
  }
469
467
  if (
@@ -477,11 +475,11 @@ function assertChunkIsTextTrackSegmentData(
477
475
  ) ||
478
476
  (
479
477
  (chunk as INativeTextTracksBufferSegmentData).start !== undefined &&
480
- typeof (chunk as INativeTextTracksBufferSegmentData).start !== "string"
478
+ typeof (chunk as INativeTextTracksBufferSegmentData).start !== "number"
481
479
  ) ||
482
480
  (
483
481
  (chunk as INativeTextTracksBufferSegmentData).end !== undefined &&
484
- typeof (chunk as INativeTextTracksBufferSegmentData).end !== "string"
482
+ typeof (chunk as INativeTextTracksBufferSegmentData).end !== "number"
485
483
  )
486
484
  ) {
487
485
  throw new Error("Invalid format given to a NativeTextSegmentBuffer");
@@ -497,7 +495,7 @@ function assertChunkIsTextTrackSegmentData(
497
495
  * It doesn't correspond at all to real code that will be called. This is just
498
496
  * a hack to tell TypeScript to perform that check.
499
497
  */
500
- if (__DEV__) {
498
+ if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
501
499
  /* eslint-disable @typescript-eslint/no-unused-vars */
502
500
  /* eslint-disable @typescript-eslint/ban-ts-comment */
503
501
  // @ts-ignore
@@ -84,7 +84,7 @@ export default class TextTrackCuesStore {
84
84
  * @param {Number} to
85
85
  */
86
86
  remove(from : number, _to : number) : void {
87
- if (__DEV__) {
87
+ if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
88
88
  assert(from >= 0);
89
89
  assert(_to >= 0);
90
90
  assert(_to > from);
@@ -284,7 +284,7 @@ export interface INativeTextTracksBufferSegmentData {
284
284
  function assertChunkIsTextTrackSegmentData(
285
285
  chunk : unknown
286
286
  ) : asserts chunk is INativeTextTracksBufferSegmentData {
287
- if (!__DEV__) {
287
+ if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.PRODUCTION as number) {
288
288
  return;
289
289
  }
290
290
  if (
@@ -298,11 +298,11 @@ function assertChunkIsTextTrackSegmentData(
298
298
  ) ||
299
299
  (
300
300
  (chunk as INativeTextTracksBufferSegmentData).start !== undefined &&
301
- typeof (chunk as INativeTextTracksBufferSegmentData).start !== "string"
301
+ typeof (chunk as INativeTextTracksBufferSegmentData).start !== "number"
302
302
  ) ||
303
303
  (
304
304
  (chunk as INativeTextTracksBufferSegmentData).end !== undefined &&
305
- typeof (chunk as INativeTextTracksBufferSegmentData).end !== "string"
305
+ typeof (chunk as INativeTextTracksBufferSegmentData).end !== "number"
306
306
  )
307
307
  ) {
308
308
  throw new Error("Invalid format given to a NativeTextSegmentBuffer");
@@ -318,7 +318,7 @@ function assertChunkIsTextTrackSegmentData(
318
318
  * It doesn't correspond at all to real code that will be called. This is just
319
319
  * a hack to tell TypeScript to perform that check.
320
320
  */
321
- if (__DEV__) {
321
+ if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
322
322
  /* eslint-disable @typescript-eslint/no-unused-vars */
323
323
  /* eslint-disable @typescript-eslint/ban-ts-comment */
324
324
  // @ts-ignore
@@ -39,7 +39,7 @@ export default class ManualTimeRanges implements TimeRanges {
39
39
  }
40
40
 
41
41
  insert(start : number, end : number) : void {
42
- if (__DEV__) {
42
+ if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
43
43
  assert(start >= 0, "invalid start time");
44
44
  assert(end - start > 0, "invalid end time");
45
45
  }
@@ -48,7 +48,7 @@ export default class ManualTimeRanges implements TimeRanges {
48
48
  }
49
49
 
50
50
  remove(start : number, end : number) : void {
51
- if (__DEV__) {
51
+ if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
52
52
  assert(start >= 0, "invalid start time");
53
53
  assert(end - start > 0, "invalid end time");
54
54
  }
@@ -116,12 +116,12 @@ export default class BufferedHistory {
116
116
  }
117
117
  }
118
118
  if (firstKeptIndex > 0) {
119
- this._history.splice(firstKeptIndex);
119
+ this._history = this._history.splice(firstKeptIndex);
120
120
  }
121
121
 
122
122
  if (this._history.length > this._maxHistoryLength) {
123
123
  const toRemove = this._history.length - this._maxHistoryLength;
124
- this._history.splice(toRemove);
124
+ this._history = this._history.splice(toRemove);
125
125
  }
126
126
  }
127
127
  }
@@ -51,16 +51,7 @@ export interface IBufferedChunk {
51
51
  * synchronization for that chunk this value could be more or less precize.
52
52
  */
53
53
  bufferedStart : number|undefined;
54
- /**
55
- * Supposed end, in seconds, the chunk is expected to end at.
56
- *
57
- * If the current `chunk` is part of a "partially pushed" segment (see
58
- * `partiallyPushed`), the definition of this property is flexible in the way
59
- * that it can correspond either to the end of the chunk or to the end of the
60
- * whole segment the chunk is linked to.
61
- * As such, this property should not be relied on until the segment has been
62
- * fully-pushed.
63
- */
54
+ /** Supposed end, in seconds, the chunk is expected to end at. */
64
55
  end : number;
65
56
  /**
66
57
  * If `true` the `end` property is an estimate the `SegmentInventory` has
@@ -84,8 +75,6 @@ export interface IBufferedChunk {
84
75
  infos : IChunkContext;
85
76
  /**
86
77
  * If `true`, this chunk is only a partial chunk of a whole segment.
87
- * In this condition, the `start` and `end` properties may be ignored, as it
88
- * is unclear if they refer to the chunk or to the whole segment.
89
78
  *
90
79
  * Inversely, if `false`, this chunk is a whole segment whose inner chunks
91
80
  * have all been fully pushed.
@@ -692,7 +681,6 @@ export default class SegmentInventory {
692
681
  }
693
682
  const inventory = this._inventory;
694
683
 
695
-
696
684
  const resSegments : IBufferedChunk[] = [];
697
685
 
698
686
  for (let i = 0; i < inventory.length; i++) {
@@ -25,25 +25,22 @@
25
25
  */
26
26
 
27
27
  import {
28
- BehaviorSubject,
28
+ catchError,
29
29
  concat as observableConcat,
30
30
  defer as observableDefer,
31
- EMPTY,
32
- merge as observableMerge,
33
- Observable,
34
- of as observableOf,
35
- } from "rxjs";
36
- import {
37
- catchError,
38
31
  distinctUntilChanged,
32
+ EMPTY,
39
33
  exhaustMap,
40
34
  filter,
41
35
  map,
36
+ merge as observableMerge,
42
37
  mergeMap,
38
+ Observable,
39
+ of as observableOf,
43
40
  share,
44
41
  take,
45
42
  tap,
46
- } from "rxjs/operators";
43
+ } from "rxjs";
47
44
  import config from "../../../config";
48
45
  import { formatError } from "../../../errors";
49
46
  import log from "../../../log";
@@ -53,15 +50,24 @@ import Manifest, {
53
50
  Representation,
54
51
  } from "../../../manifest";
55
52
  import deferSubscriptions from "../../../utils/defer_subscriptions";
53
+ import {
54
+ createSharedReference,
55
+ IReadOnlySharedReference,
56
+ } from "../../../utils/reference";
56
57
  import ABRManager, {
57
58
  IABREstimate,
59
+ IABRMetricsEventValue,
60
+ IABRRequestBeginEventValue,
61
+ IABRRequestEndEventValue,
62
+ IABRRequestProgressEventValue,
58
63
  } from "../../abr";
64
+ import { IReadOnlyPlaybackObserver } from "../../api";
59
65
  import { SegmentFetcherCreator } from "../../fetchers";
60
66
  import { SegmentBuffer } from "../../segment_buffers";
61
67
  import EVENTS from "../events_generators";
62
68
  import reloadAfterSwitch from "../reload_after_switch";
63
69
  import RepresentationStream, {
64
- IRepresentationStreamClockTick,
70
+ IRepresentationStreamPlaybackObservation,
65
71
  ITerminationOrder,
66
72
  } from "../representation";
67
73
  import {
@@ -72,22 +78,26 @@ import createRepresentationEstimator from "./create_representation_estimator";
72
78
 
73
79
  const { DELTA_POSITION_AFTER_RELOAD } = config;
74
80
 
75
- /** `Clock tick` information needed by the AdaptationStream. */
76
- export interface IAdaptationStreamClockTick extends IRepresentationStreamClockTick {
77
- /**
78
- * For the current SegmentBuffer, difference in seconds between the next position
79
- * where no segment data is available and the current position.
80
- */
81
- bufferGap : number;
82
- /** `duration` property of the HTMLMediaElement on which the content plays. */
83
- duration : number;
84
- /** Allows to fetch the current position at any time. */
85
- getCurrentTime : () => number;
86
- /** If true, the player has been put on pause. */
87
- isPaused: boolean;
88
- /** Last "playback rate" asked by the user. */
89
- speed : number;
90
- }
81
+ /** Regular playback information needed by the AdaptationStream. */
82
+ export interface IAdaptationStreamPlaybackObservation extends
83
+ IRepresentationStreamPlaybackObservation {
84
+ /**
85
+ * For the current SegmentBuffer, difference in seconds between the next position
86
+ * where no segment data is available and the current position.
87
+ */
88
+ bufferGap : number;
89
+ /** `duration` property of the HTMLMediaElement on which the content plays. */
90
+ duration : number;
91
+ /** If true, the player has been put on pause. */
92
+ isPaused: boolean;
93
+ /** Last "playback rate" asked by the user. */
94
+ speed : number;
95
+ /**
96
+ * Only set for live contents.
97
+ * Difference between the live edge and the current position, in seconds.
98
+ */
99
+ liveGap : number | undefined;
100
+ }
91
101
 
92
102
  /** Arguments given when creating a new `AdaptationStream`. */
93
103
  export interface IAdaptationStreamArguments {
@@ -96,11 +106,8 @@ export interface IAdaptationStreamArguments {
96
106
  * conditions like the current network bandwidth.
97
107
  */
98
108
  abrManager : ABRManager;
99
- /**
100
- * Regularly emit playback conditions.
101
- * The main AdaptationStream logic will be triggered on each `tick`.
102
- */
103
- clock$ : Observable<IAdaptationStreamClockTick>;
109
+ /** Regularly emit playback conditions. */
110
+ playbackObserver : IReadOnlyPlaybackObserver<IAdaptationStreamPlaybackObservation>;
104
111
  /** Content you want to create this Stream for. */
105
112
  content : { manifest : Manifest;
106
113
  period : Period;
@@ -115,7 +122,7 @@ export interface IAdaptationStreamArguments {
115
122
  * position in the current SegmentBuffer. When this amount has been reached
116
123
  * this AdaptationStream won't try to download new segments.
117
124
  */
118
- wantedBufferAhead$ : BehaviorSubject<number>;
125
+ wantedBufferAhead : IReadOnlySharedReference<number>;
119
126
  }
120
127
 
121
128
  /**
@@ -176,12 +183,12 @@ export interface IAdaptationStreamOptions {
176
183
  */
177
184
  export default function AdaptationStream({
178
185
  abrManager,
179
- clock$,
186
+ playbackObserver,
180
187
  content,
181
188
  options,
182
189
  segmentBuffer,
183
190
  segmentFetcherCreator,
184
- wantedBufferAhead$,
191
+ wantedBufferAhead,
185
192
  } : IAdaptationStreamArguments) : Observable<IAdaptationStreamEvent> {
186
193
  const directManualBitrateSwitching = options.manualBitrateSwitchingMode === "direct";
187
194
  const { manifest, period, adaptation } = content;
@@ -196,24 +203,38 @@ export default function AdaptationStream({
196
203
  */
197
204
  const bufferGoalRatioMap: Partial<Record<string, number>> = {};
198
205
 
199
- const { estimator$, requestFeedback$, streamFeedback$ } =
200
- createRepresentationEstimator(content, abrManager, clock$);
206
+ const { estimator$, abrFeedbacks$ } =
207
+ createRepresentationEstimator(content, abrManager, playbackObserver.observe(true));
201
208
 
202
209
  /** Allows the `RepresentationStream` to easily fetch media segments. */
203
- const segmentFetcher = segmentFetcherCreator.createSegmentFetcher(adaptation.type,
204
- requestFeedback$);
210
+ const segmentFetcher = segmentFetcherCreator
211
+ .createSegmentFetcher(adaptation.type,
212
+ {
213
+ onRequestBegin(value : IABRRequestBeginEventValue) {
214
+ abrFeedbacks$.next({ type: "requestBegin", value });
215
+ },
216
+ onRequestEnd(value : IABRRequestEndEventValue) {
217
+ abrFeedbacks$.next({ type: "requestEnd", value });
218
+ },
219
+ onProgress(value : IABRRequestProgressEventValue) {
220
+ abrFeedbacks$.next({ type: "progress", value });
221
+ },
222
+ onMetrics(value : IABRMetricsEventValue) {
223
+ abrFeedbacks$.next({ type: "metrics", value });
224
+ },
225
+ });
205
226
 
206
227
  /**
207
- * Emits each time an estimate is made through the `abrEstimate$` Observable,
208
- * starting with the last one.
228
+ * Stores the last estimate emitted through the `abrEstimate$` Observable,
229
+ * starting with `null`.
209
230
  * This allows to easily rely on that value in inner Observables which might also
210
231
  * need the last already-considered value.
211
232
  */
212
- const lastEstimate$ = new BehaviorSubject<IABREstimate | null>(null);
233
+ const lastEstimate = createSharedReference<IABREstimate | null>(null);
213
234
 
214
235
  /** Emits abr estimates on Subscription. */
215
236
  const abrEstimate$ = estimator$.pipe(
216
- tap((estimate) => { lastEstimate$.next(estimate); }),
237
+ tap((estimate) => { lastEstimate.setValue(estimate); }),
217
238
  deferSubscriptions(),
218
239
  share());
219
240
 
@@ -261,7 +282,7 @@ export default function AdaptationStream({
261
282
  {
262
283
  return reloadAfterSwitch(period,
263
284
  adaptation.type,
264
- clock$,
285
+ playbackObserver,
265
286
  DELTA_POSITION_AFTER_RELOAD.bitrateSwitch);
266
287
  }
267
288
 
@@ -269,7 +290,7 @@ export default function AdaptationStream({
269
290
  * Emit when the current RepresentationStream should be terminated to make
270
291
  * place for a new one (e.g. when switching quality).
271
292
  */
272
- const terminateCurrentStream$ = lastEstimate$.pipe(
293
+ const terminateCurrentStream$ = lastEstimate.asObservable().pipe(
273
294
  filter((newEstimate) => newEstimate === null ||
274
295
  newEstimate.representation.id !== representation.id ||
275
296
  (newEstimate.manual && !fromEstimate.manual)),
@@ -301,7 +322,7 @@ export default function AdaptationStream({
301
322
  */
302
323
  const fastSwitchThreshold$ = !options.enableFastSwitching ?
303
324
  observableOf(0) : // Do not fast-switch anything
304
- lastEstimate$.pipe(
325
+ lastEstimate.asObservable().pipe(
305
326
  map((estimate) => estimate === null ? undefined :
306
327
  estimate.knownStableBitrate),
307
328
  distinctUntilChanged());
@@ -319,16 +340,16 @@ export default function AdaptationStream({
319
340
  if (evt.type === "representationChange" ||
320
341
  evt.type === "added-segment")
321
342
  {
322
- return streamFeedback$.next(evt);
343
+ return abrFeedbacks$.next(evt);
323
344
  }
324
345
  }),
325
346
  mergeMap((evt) => {
326
347
  if (evt.type === "stream-terminating") {
327
- const lastEstimate = lastEstimate$.getValue();
328
- if (lastEstimate === null) {
348
+ const estimate = lastEstimate.getValue();
349
+ if (estimate === null) {
329
350
  return EMPTY;
330
351
  }
331
- return recursivelyCreateRepresentationStreams(lastEstimate, false);
352
+ return recursivelyCreateRepresentationStreams(estimate, false);
332
353
  }
333
354
  return observableOf(evt);
334
355
  }));
@@ -351,12 +372,15 @@ export default function AdaptationStream({
351
372
  1;
352
373
  bufferGoalRatioMap[representation.id] = bufferGoalRatio;
353
374
 
354
- const bufferGoal$ = wantedBufferAhead$.pipe(
375
+ const bufferGoal$ = wantedBufferAhead.asObservable().pipe(
355
376
  map((wba) => wba * bufferGoalRatio)
356
377
  );
357
378
 
358
- log.info("Stream: changing representation", adaptation.type, representation);
359
- return RepresentationStream({ clock$,
379
+ log.info("Stream: changing representation",
380
+ adaptation.type,
381
+ representation.id,
382
+ representation.bitrate);
383
+ return RepresentationStream({ playbackObserver,
360
384
  content: { representation,
361
385
  adaptation,
362
386
  period,
@@ -373,11 +397,9 @@ export default function AdaptationStream({
373
397
  defaultReason: "Unknown `RepresentationStream` error",
374
398
  });
375
399
  if (formattedError.code === "BUFFER_FULL_ERROR") {
376
- const wantedBufferAhead = wantedBufferAhead$.getValue();
400
+ const wba = wantedBufferAhead.getValue();
377
401
  const lastBufferGoalRatio = bufferGoalRatio;
378
- if (lastBufferGoalRatio <= 0.25 ||
379
- wantedBufferAhead * lastBufferGoalRatio <= 2)
380
- {
402
+ if (lastBufferGoalRatio <= 0.25 || wba * lastBufferGoalRatio <= 2) {
381
403
  throw formattedError;
382
404
  }
383
405
  bufferGoalRatioMap[representation.id] = lastBufferGoalRatio - 0.25;
@@ -15,16 +15,14 @@
15
15
  */
16
16
 
17
17
  import {
18
- merge as observableMerge,
19
18
  Observable,
20
- of as observableOf,
21
19
  Subject,
22
- } from "rxjs";
23
- import {
24
20
  distinctUntilChanged,
25
21
  map,
22
+ merge as observableMerge,
23
+ of as observableOf,
26
24
  switchMap,
27
- } from "rxjs/operators";
25
+ } from "rxjs";
28
26
  import { MediaError } from "../../../errors";
29
27
  import Manifest, {
30
28
  Adaptation,
@@ -33,61 +31,36 @@ import Manifest, {
33
31
  import { fromEvent } from "../../../utils/event_emitter";
34
32
  import ABRManager, {
35
33
  IABREstimate,
36
- IABRManagerClockTick,
37
- IABRMetricsEvent,
38
- IABRRequestBeginEvent,
39
- IABRRequestEndEvent,
40
- IABRRequestProgressEvent,
34
+ IABRManagerPlaybackObservation,
35
+ IABRStreamEvents,
41
36
  } from "../../abr";
42
- import {
43
- IRepresentationChangeEvent,
44
- IStreamEventAddedSegment,
45
- } from "../types";
46
37
 
47
38
  /**
48
39
  * Create an "estimator$" Observable which will emit which Representation (from
49
40
  * the given `Adaptation`) is the best fit (see `IABREstimate` type definition)
50
41
  * corresponding to the current network and playback conditions.
51
42
  *
52
- * This function also returns two subjects that should be used to add feedback
53
- * helping the estimator to make its choices:
54
- *
55
- * - `requestFeedback$`: Subject through which information about new requests
56
- * and network metrics should be emitted.
43
+ * This function also returns a subject that should be used to add feedback
44
+ * helping the estimator to make its choices.
57
45
  *
58
- * - `streamFeedback$`: Subject through which stream-related events should be
59
- * emitted.
60
- *
61
- * You can look at the types defined for both of those Subjects to have more
62
- * information on what data is expected. The idea is to provide as much data as
63
- * possible so the estimation is as adapted as possible.
46
+ * You can look at the types defined for this Subject to have more information
47
+ * on what data is expected. The idea is to provide as much data as possible so
48
+ * the estimation is as adapted as possible.
64
49
  *
65
50
  * @param {Object} content
66
51
  * @param {Object} abrManager
67
- * @param {Observable} clock$
52
+ * @param {Observable} observation$
68
53
  * @returns {Object}
69
54
  */
70
55
  export default function createRepresentationEstimator(
71
56
  { manifest, adaptation } : { manifest : Manifest;
72
57
  adaptation : Adaptation; },
73
58
  abrManager : ABRManager,
74
- clock$ : Observable<IABRManagerClockTick>
59
+ observation$ : Observable<IABRManagerPlaybackObservation>
75
60
  ) : { estimator$ : Observable<IABREstimate>;
76
- streamFeedback$ : Subject<IStreamEventAddedSegment<unknown> |
77
- IRepresentationChangeEvent>;
78
- requestFeedback$ : Subject<IABRMetricsEvent |
79
- IABRRequestBeginEvent |
80
- IABRRequestProgressEvent |
81
- IABRRequestEndEvent>; }
61
+ abrFeedbacks$ : Subject<IABRStreamEvents>; }
82
62
  {
83
- const streamFeedback$ = new Subject<IStreamEventAddedSegment<unknown> |
84
- IRepresentationChangeEvent>();
85
- const requestFeedback$ = new Subject<IABRMetricsEvent |
86
- IABRRequestBeginEvent |
87
- IABRRequestProgressEvent |
88
- IABRRequestEndEvent>();
89
- const abrEvents$ = observableMerge(streamFeedback$, requestFeedback$);
90
-
63
+ const abrFeedbacks$ = new Subject<IABRStreamEvents>();
91
64
  const estimator$ = observableMerge(
92
65
  // subscribe "first" (hack as it is a merge here) to event
93
66
  fromEvent(manifest, "decipherabilityUpdate"),
@@ -117,9 +90,10 @@ export default function createRepresentationEstimator(
117
90
  return true;
118
91
  }),
119
92
  switchMap((playableRepresentations) =>
120
- abrManager.get$(adaptation.type, playableRepresentations, clock$, abrEvents$)));
93
+ abrManager.get$(adaptation.type,
94
+ playableRepresentations,
95
+ observation$,
96
+ abrFeedbacks$)));
121
97
 
122
- return { estimator$,
123
- streamFeedback$,
124
- requestFeedback$ };
98
+ return { estimator$, abrFeedbacks$ };
125
99
  }
@@ -16,13 +16,13 @@
16
16
 
17
17
  import AdaptationStream, {
18
18
  IAdaptationStreamArguments,
19
- IAdaptationStreamClockTick,
19
+ IAdaptationStreamPlaybackObservation,
20
20
  IAdaptationStreamOptions,
21
21
  } from "./adaptation_stream";
22
22
 
23
23
  export default AdaptationStream;
24
24
  export {
25
25
  IAdaptationStreamArguments,
26
- IAdaptationStreamClockTick,
26
+ IAdaptationStreamPlaybackObservation,
27
27
  IAdaptationStreamOptions,
28
28
  };
@@ -15,13 +15,13 @@
15
15
  */
16
16
 
17
17
  import StreamOrchestrator, {
18
- IStreamOrchestratorClockTick,
19
18
  IStreamOrchestratorOptions,
19
+ IStreamOrchestratorPlaybackObservation,
20
20
  } from "./orchestrator";
21
21
  export * from "./types";
22
22
 
23
23
  export default StreamOrchestrator;
24
24
  export {
25
- IStreamOrchestratorClockTick,
25
+ IStreamOrchestratorPlaybackObservation,
26
26
  IStreamOrchestratorOptions,
27
27
  };
@@ -14,16 +14,14 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import {
18
- merge as observableMerge,
19
- Observable,
20
- } from "rxjs";
21
17
  import {
22
18
  distinctUntilChanged,
23
19
  filter,
24
20
  map,
21
+ merge as observableMerge,
22
+ Observable,
25
23
  scan,
26
- } from "rxjs/operators";
24
+ } from "rxjs";
27
25
  import { Period } from "../../../manifest";
28
26
  import { IBufferType } from "../../segment_buffers";
29
27
  import { IStreamOrchestratorEvent } from "../types";
@@ -111,12 +109,12 @@ export default function ActivePeriodEmitter(
111
109
  case "representationChange": {
112
110
  const { period, type } = evt.value;
113
111
  const currentInfos = acc[period.id];
114
- if (currentInfos !== undefined && !currentInfos.buffers.has(type)) {
115
- currentInfos.buffers.add(type);
116
- } else {
112
+ if (currentInfos === undefined) {
117
113
  const bufferSet = new Set<IBufferType>();
118
114
  bufferSet.add(type);
119
115
  acc[period.id] = { period, buffers: bufferSet };
116
+ } else if (!currentInfos.buffers.has(type)) {
117
+ currentInfos.buffers.add(type);
120
118
  }
121
119
  }
122
120
  break;
@@ -16,14 +16,12 @@
16
16
 
17
17
  import {
18
18
  combineLatest as observableCombineLatest,
19
- Observable,
20
- } from "rxjs";
21
- import {
22
19
  distinctUntilChanged,
23
20
  filter,
24
21
  map,
22
+ Observable,
25
23
  startWith,
26
- } from "rxjs/operators";
24
+ } from "rxjs";
27
25
  import { IStreamOrchestratorEvent } from "../types";
28
26
 
29
27
  /**