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,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { merge as observableMerge, of as observableOf, Subject, } from "rxjs";
17
- import { distinctUntilChanged, map, switchMap, } from "rxjs/operators";
16
+ import { Subject, distinctUntilChanged, map, merge as observableMerge, of as observableOf, switchMap, } from "rxjs";
18
17
  import { MediaError } from "../../../errors";
19
18
  import { fromEvent } from "../../../utils/event_emitter";
20
19
  /**
@@ -22,29 +21,21 @@ import { fromEvent } from "../../../utils/event_emitter";
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
- export default function createRepresentationEstimator(_a, abrManager, clock$) {
36
+ export default function createRepresentationEstimator(_a, abrManager, observation$) {
44
37
  var manifest = _a.manifest, adaptation = _a.adaptation;
45
- var streamFeedback$ = new Subject();
46
- var requestFeedback$ = new Subject();
47
- var abrEvents$ = observableMerge(streamFeedback$, requestFeedback$);
38
+ var abrFeedbacks$ = new Subject();
48
39
  var estimator$ = observableMerge(
49
40
  // subscribe "first" (hack as it is a merge here) to event
50
41
  fromEvent(manifest, "decipherabilityUpdate"),
@@ -69,7 +60,7 @@ export default function createRepresentationEstimator(_a, abrManager, clock$) {
69
60
  }
70
61
  return true;
71
62
  }), switchMap(function (playableRepresentations) {
72
- return abrManager.get$(adaptation.type, playableRepresentations, clock$, abrEvents$);
63
+ return abrManager.get$(adaptation.type, playableRepresentations, observation$, abrFeedbacks$);
73
64
  }));
74
- return { estimator$: estimator$, streamFeedback$: streamFeedback$, requestFeedback$: requestFeedback$ };
65
+ return { estimator$: estimator$, abrFeedbacks$: abrFeedbacks$ };
75
66
  }
@@ -13,6 +13,6 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import AdaptationStream, { IAdaptationStreamArguments, IAdaptationStreamClockTick, IAdaptationStreamOptions } from "./adaptation_stream";
16
+ import AdaptationStream, { IAdaptationStreamArguments, IAdaptationStreamPlaybackObservation, IAdaptationStreamOptions } from "./adaptation_stream";
17
17
  export default AdaptationStream;
18
- export { IAdaptationStreamArguments, IAdaptationStreamClockTick, IAdaptationStreamOptions, };
18
+ export { IAdaptationStreamArguments, IAdaptationStreamPlaybackObservation, IAdaptationStreamOptions, };
@@ -13,7 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import StreamOrchestrator, { IStreamOrchestratorClockTick, IStreamOrchestratorOptions } from "./orchestrator";
16
+ import StreamOrchestrator, { IStreamOrchestratorOptions, IStreamOrchestratorPlaybackObservation } from "./orchestrator";
17
17
  export * from "./types";
18
18
  export default StreamOrchestrator;
19
- export { IStreamOrchestratorClockTick, IStreamOrchestratorOptions, };
19
+ export { IStreamOrchestratorPlaybackObservation, IStreamOrchestratorOptions, };
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { merge as observableMerge, } from "rxjs";
17
- import { distinctUntilChanged, filter, map, scan, } from "rxjs/operators";
16
+ import { distinctUntilChanged, filter, map, merge as observableMerge, scan, } from "rxjs";
18
17
  /**
19
18
  * Emit the active Period each times it changes.
20
19
  *
@@ -94,14 +93,14 @@ export default function ActivePeriodEmitter(buffers$) {
94
93
  {
95
94
  var _b = evt.value, period = _b.period, type = _b.type;
96
95
  var currentInfos = acc[period.id];
97
- if (currentInfos !== undefined && !currentInfos.buffers.has(type)) {
98
- currentInfos.buffers.add(type);
99
- }
100
- else {
96
+ if (currentInfos === undefined) {
101
97
  var bufferSet = new Set();
102
98
  bufferSet.add(type);
103
99
  acc[period.id] = { period: period, buffers: bufferSet };
104
100
  }
101
+ else if (!currentInfos.buffers.has(type)) {
102
+ currentInfos.buffers.add(type);
103
+ }
105
104
  }
106
105
  break;
107
106
  }
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { combineLatest as observableCombineLatest, } from "rxjs";
17
- import { distinctUntilChanged, filter, map, startWith, } from "rxjs/operators";
16
+ import { combineLatest as observableCombineLatest, distinctUntilChanged, filter, map, startWith, } from "rxjs";
18
17
  /**
19
18
  * Returns an Observable which emits ``true`` when all PeriodStreams given are
20
19
  * _complete_.
@@ -13,6 +13,6 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import StreamOrchestrator, { IStreamOrchestratorClockTick, IStreamOrchestratorOptions } from "./stream_orchestrator";
16
+ import StreamOrchestrator, { IStreamOrchestratorOptions, IStreamOrchestratorPlaybackObservation } from "./stream_orchestrator";
17
17
  export default StreamOrchestrator;
18
- export { IStreamOrchestratorClockTick, IStreamOrchestratorOptions, };
18
+ export { IStreamOrchestratorOptions, IStreamOrchestratorPlaybackObservation, };
@@ -13,19 +13,21 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { BehaviorSubject, Observable } from "rxjs";
16
+ import { Observable } from "rxjs";
17
17
  import Manifest, { Period } from "../../../manifest";
18
+ import { IReadOnlySharedReference } from "../../../utils/reference";
18
19
  import ABRManager from "../../abr";
20
+ import type { IReadOnlyPlaybackObserver } from "../../api";
19
21
  import { SegmentFetcherCreator } from "../../fetchers";
20
22
  import SegmentBuffersStore from "../../segment_buffers";
21
- import { IPeriodStreamClockTick, IPeriodStreamOptions } from "../period";
23
+ import { IPeriodStreamPlaybackObservation, IPeriodStreamOptions } from "../period";
22
24
  import { IStreamOrchestratorEvent } from "../types";
23
- export declare type IStreamOrchestratorClockTick = IPeriodStreamClockTick;
25
+ export declare type IStreamOrchestratorPlaybackObservation = IPeriodStreamPlaybackObservation;
24
26
  /** Options tweaking the behavior of the StreamOrchestrator. */
25
27
  export declare type IStreamOrchestratorOptions = IPeriodStreamOptions & {
26
- wantedBufferAhead$: BehaviorSubject<number>;
27
- maxBufferAhead$: Observable<number>;
28
- maxBufferBehind$: Observable<number>;
28
+ wantedBufferAhead: IReadOnlySharedReference<number>;
29
+ maxBufferAhead: IReadOnlySharedReference<number>;
30
+ maxBufferBehind: IReadOnlySharedReference<number>;
29
31
  };
30
32
  /**
31
33
  * Create and manage the various Stream Observables needed for the content to
@@ -43,7 +45,7 @@ export declare type IStreamOrchestratorOptions = IPeriodStreamOptions & {
43
45
  * - Emit various events to notify of its health and issues
44
46
  *
45
47
  * @param {Object} content
46
- * @param {Observable} clock$ - Emit position information
48
+ * @param {Observable} playbackObserver - Emit position information
47
49
  * @param {Object} abrManager - Emit bitrate estimates and best Representation
48
50
  * to play.
49
51
  * @param {Object} segmentBuffersStore - Will be used to lazily create
@@ -55,4 +57,4 @@ export declare type IStreamOrchestratorOptions = IPeriodStreamOptions & {
55
57
  export default function StreamOrchestrator(content: {
56
58
  manifest: Manifest;
57
59
  initialPeriod: Period;
58
- }, clock$: Observable<IStreamOrchestratorClockTick>, abrManager: ABRManager, segmentBuffersStore: SegmentBuffersStore, segmentFetcherCreator: SegmentFetcherCreator, options: IStreamOrchestratorOptions): Observable<IStreamOrchestratorEvent>;
60
+ }, playbackObserver: IReadOnlyPlaybackObserver<IStreamOrchestratorPlaybackObservation>, abrManager: ABRManager, segmentBuffersStore: SegmentBuffersStore, segmentFetcherCreator: SegmentFetcherCreator, options: IStreamOrchestratorOptions): Observable<IStreamOrchestratorEvent>;
@@ -22,8 +22,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
22
22
  }
23
23
  return to.concat(ar || Array.prototype.slice.call(from));
24
24
  };
25
- import { combineLatest, concat as observableConcat, defer as observableDefer, EMPTY, merge as observableMerge, of as observableOf, Subject, } from "rxjs";
26
- import { distinctUntilChanged, exhaustMap, filter, ignoreElements, map, mergeMap, share, startWith, take, takeUntil, tap, } from "rxjs/operators";
25
+ import { combineLatest, concat as observableConcat, defer as observableDefer, distinctUntilChanged, EMPTY, exhaustMap, filter, ignoreElements, map, merge as observableMerge, mergeMap, of as observableOf, share, startWith, Subject, take, takeUntil, tap, } from "rxjs";
27
26
  import config from "../../../config";
28
27
  import { MediaError } from "../../../errors";
29
28
  import log from "../../../log";
@@ -55,7 +54,7 @@ var MAXIMUM_MAX_BUFFER_AHEAD = config.MAXIMUM_MAX_BUFFER_AHEAD, MAXIMUM_MAX_BUFF
55
54
  * - Emit various events to notify of its health and issues
56
55
  *
57
56
  * @param {Object} content
58
- * @param {Observable} clock$ - Emit position information
57
+ * @param {Observable} playbackObserver - Emit position information
59
58
  * @param {Object} abrManager - Emit bitrate estimates and best Representation
60
59
  * to play.
61
60
  * @param {Object} segmentBuffersStore - Will be used to lazily create
@@ -64,9 +63,9 @@ var MAXIMUM_MAX_BUFFER_AHEAD = config.MAXIMUM_MAX_BUFFER_AHEAD, MAXIMUM_MAX_BUFF
64
63
  * @param {Object} options
65
64
  * @returns {Observable}
66
65
  */
67
- export default function StreamOrchestrator(content, clock$, abrManager, segmentBuffersStore, segmentFetcherCreator, options) {
66
+ export default function StreamOrchestrator(content, playbackObserver, abrManager, segmentBuffersStore, segmentFetcherCreator, options) {
68
67
  var manifest = content.manifest, initialPeriod = content.initialPeriod;
69
- var maxBufferAhead$ = options.maxBufferAhead$, maxBufferBehind$ = options.maxBufferBehind$, wantedBufferAhead$ = options.wantedBufferAhead$;
68
+ var maxBufferAhead = options.maxBufferAhead, maxBufferBehind = options.maxBufferBehind, wantedBufferAhead = options.wantedBufferAhead;
70
69
  // Keep track of a unique BufferGarbageCollector created per
71
70
  // SegmentBuffer.
72
71
  var garbageCollectors = new WeakMapMemory(function (segmentBuffer) {
@@ -79,14 +78,15 @@ export default function StreamOrchestrator(content, clock$, abrManager, segmentB
79
78
  Infinity;
80
79
  return BufferGarbageCollector({
81
80
  segmentBuffer: segmentBuffer,
82
- clock$: clock$.pipe(map(function (tick) { return tick.position + tick.wantedTimeOffset; })),
83
- maxBufferBehind$: maxBufferBehind$.pipe(map(function (val) { return Math.min(val, defaultMaxBehind); })),
84
- maxBufferAhead$: maxBufferAhead$.pipe(map(function (val) { return Math.min(val, defaultMaxAhead); })),
81
+ currentTime$: playbackObserver.observe(true)
82
+ .pipe(map(function (o) { return o.position + o.wantedTimeOffset; })),
83
+ maxBufferBehind$: maxBufferBehind.asObservable().pipe(map(function (val) { return Math.min(val, defaultMaxBehind); })),
84
+ maxBufferAhead$: maxBufferAhead.asObservable().pipe(map(function (val) { return Math.min(val, defaultMaxAhead); })),
85
85
  });
86
86
  });
87
87
  // trigger warnings when the wanted time is before or after the manifest's
88
88
  // segments
89
- var outOfManifest$ = clock$.pipe(filterMap(function (_a) {
89
+ var outOfManifest$ = playbackObserver.observe(true).pipe(filterMap(function (_a) {
90
90
  var position = _a.position, wantedTimeOffset = _a.wantedTimeOffset;
91
91
  var offsetedPosition = wantedTimeOffset + position;
92
92
  if (offsetedPosition < manifest.getMinimumPosition()) {
@@ -109,7 +109,7 @@ export default function StreamOrchestrator(content, clock$, abrManager, segmentB
109
109
  });
110
110
  // Emits the activePeriodChanged events every time the active Period changes.
111
111
  var activePeriodChanged$ = ActivePeriodEmitter(streamsArray).pipe(filter(function (period) { return period !== null; }), map(function (period) {
112
- log.info("Stream: New active period", period);
112
+ log.info("Stream: New active period", period.start);
113
113
  return EVENTS.activePeriodChanged(period);
114
114
  }));
115
115
  var isLastPeriodKnown$ = fromEvent(manifest, "manifestUpdate").pipe(map(function () { return manifest.isLastPeriodKnown; }), startWith(manifest.isLastPeriodKnown), distinctUntilChanged());
@@ -129,8 +129,8 @@ export default function StreamOrchestrator(content, clock$, abrManager, segmentB
129
129
  * Manage creation and removal of Streams for every Periods for a given type.
130
130
  *
131
131
  * Works by creating consecutive Streams through the
132
- * `manageConsecutivePeriodStreams` function, and restarting it when the clock
133
- * goes out of the bounds of these Streams.
132
+ * `manageConsecutivePeriodStreams` function, and restarting it when the
133
+ * current position goes out of the bounds of these Streams.
134
134
  * @param {string} bufferType - e.g. "audio" or "video"
135
135
  * @param {Period} basePeriod - Initial Period downloaded.
136
136
  * @returns {Observable}
@@ -194,7 +194,7 @@ export default function StreamOrchestrator(content, clock$, abrManager, segmentB
194
194
  }
195
195
  // Restart the current Stream when the wanted time is in another period
196
196
  // than the ones already considered
197
- var restartStreamsWhenOutOfBounds$ = clock$.pipe(filterMap(function (_a) {
197
+ var restartStreamsWhenOutOfBounds$ = playbackObserver.observe(true).pipe(filterMap(function (_a) {
198
198
  var _b;
199
199
  var position = _a.position, wantedTimeOffset = _a.wantedTimeOffset;
200
200
  var time = wantedTimeOffset + position;
@@ -241,9 +241,10 @@ export default function StreamOrchestrator(content, clock$, abrManager, segmentB
241
241
  return observableConcat.apply(void 0, __spreadArray(__spreadArray([], rangesToClean.map(function (_a) {
242
242
  var start = _a.start, end = _a.end;
243
243
  return segmentBuffer.removeBuffer(start, end).pipe(ignoreElements());
244
- }), false), [clock$.pipe(take(1), mergeMap(function (lastTick) {
245
- return observableConcat(observableOf(EVENTS.needsDecipherabilityFlush(lastTick.position, !lastTick.isPaused, lastTick.duration)), observableDefer(function () {
246
- var lastPosition = lastTick.position + lastTick.wantedTimeOffset;
244
+ }), false), [playbackObserver.observe(true).pipe(take(1), mergeMap(function (observation) {
245
+ return observableConcat(observableOf(EVENTS.needsDecipherabilityFlush(observation.position, !observation.isPaused, observation.duration)), observableDefer(function () {
246
+ var lastPosition = observation.position +
247
+ observation.wantedTimeOffset;
247
248
  var newInitialPeriod = manifest.getPeriodForTime(lastPosition);
248
249
  if (newInitialPeriod == null) {
249
250
  throw new MediaError("MEDIA_TIME_NOT_FOUND", "The wanted position is not found in the Manifest.");
@@ -266,7 +267,7 @@ export default function StreamOrchestrator(content, clock$, abrManager, segmentB
266
267
  * coming after it (from the last chronological one to the first).
267
268
  *
268
269
  * To clean-up PeriodStreams, each one of them are also automatically
269
- * destroyed once the clock announces a time superior or equal to the end of
270
+ * destroyed once the current position is superior or equal to the end of
270
271
  * the concerned Period.
271
272
  *
272
273
  * A "periodStreamReady" event is sent each times a new PeriodStream is
@@ -282,14 +283,14 @@ export default function StreamOrchestrator(content, clock$, abrManager, segmentB
282
283
  * @returns {Observable}
283
284
  */
284
285
  function manageConsecutivePeriodStreams(bufferType, basePeriod, destroy$) {
285
- log.info("SO: Creating new Stream for", bufferType, basePeriod);
286
+ log.info("SO: Creating new Stream for", bufferType, basePeriod.start);
286
287
  // Emits the Period of the next Period Stream when it can be created.
287
288
  var createNextPeriodStream$ = new Subject();
288
289
  // Emits when the Streams for the next Periods should be destroyed, if
289
290
  // created.
290
291
  var destroyNextStreams$ = new Subject();
291
292
  // Emits when the current position goes over the end of the current Stream.
292
- var endOfCurrentStream$ = clock$
293
+ var endOfCurrentStream$ = playbackObserver.observe(true)
293
294
  .pipe(filter(function (_a) {
294
295
  var position = _a.position, wantedTimeOffset = _a.wantedTimeOffset;
295
296
  return basePeriod.end != null &&
@@ -314,7 +315,7 @@ export default function StreamOrchestrator(content, clock$, abrManager, segmentB
314
315
  );
315
316
  // Will emit when the current Stream should be destroyed.
316
317
  var killCurrentStream$ = observableMerge(endOfCurrentStream$, destroyAll$);
317
- var periodStream$ = PeriodStream({ abrManager: abrManager, bufferType: bufferType, clock$: clock$, content: { manifest: manifest, period: basePeriod }, garbageCollectors: garbageCollectors, segmentFetcherCreator: segmentFetcherCreator, segmentBuffersStore: segmentBuffersStore, options: options, wantedBufferAhead$: wantedBufferAhead$ }).pipe(mergeMap(function (evt) {
318
+ var periodStream$ = PeriodStream({ abrManager: abrManager, bufferType: bufferType, content: { manifest: manifest, period: basePeriod }, garbageCollectors: garbageCollectors, segmentFetcherCreator: segmentFetcherCreator, segmentBuffersStore: segmentBuffersStore, options: options, playbackObserver: playbackObserver, wantedBufferAhead: wantedBufferAhead }).pipe(mergeMap(function (evt) {
318
319
  if (evt.type === "stream-status") {
319
320
  if (evt.value.hasFinishedLoading) {
320
321
  var nextPeriod = manifest.getPeriodAfter(basePeriod);
@@ -334,7 +335,7 @@ export default function StreamOrchestrator(content, clock$, abrManager, segmentB
334
335
  // Stream for the current Period.
335
336
  var currentStream$ = observableConcat(periodStream$.pipe(takeUntil(killCurrentStream$)), observableOf(EVENTS.periodStreamCleared(bufferType, basePeriod))
336
337
  .pipe(tap(function () {
337
- log.info("SO: Destroying Stream for", bufferType, basePeriod);
338
+ log.info("SO: Destroying Stream for", bufferType, basePeriod.start);
338
339
  })));
339
340
  return observableMerge(currentStream$, nextPeriodStream$, destroyAll$.pipe(ignoreElements()));
340
341
  }
@@ -15,6 +15,8 @@
15
15
  */
16
16
  import { Observable } from "rxjs";
17
17
  import { Period } from "../../../manifest";
18
+ import { IReadOnlySharedReference } from "../../../utils/reference";
19
+ import { IReadOnlyPlaybackObserver } from "../../api";
18
20
  import { IBufferType } from "../../segment_buffers";
19
21
  import { IStreamStatusEvent } from "../types";
20
22
  /**
@@ -22,14 +24,14 @@ import { IStreamStatusEvent } from "../types";
22
24
  *
23
25
  * This observable will never download any segment and just emit a "full"
24
26
  * event when reaching the end.
25
- * @param {Observable} streamClock$
26
- * @param {Observable} wantedBufferAhead$
27
+ * @param {Observable} playbackObserver
28
+ * @param {Object} wantedBufferAhead
27
29
  * @param {string} bufferType
28
30
  * @param {Object} content
29
31
  * @returns {Observable}
30
32
  */
31
- export default function createEmptyAdaptationStream(streamClock$: Observable<{
33
+ export default function createEmptyAdaptationStream(playbackObserver: IReadOnlyPlaybackObserver<{
32
34
  position: number;
33
- }>, wantedBufferAhead$: Observable<number>, bufferType: IBufferType, content: {
35
+ }>, wantedBufferAhead: IReadOnlySharedReference<number>, bufferType: IBufferType, content: {
34
36
  period: Period;
35
37
  }): Observable<IStreamStatusEvent>;
@@ -13,32 +13,33 @@
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, of as observableOf, } from "rxjs";
17
- import { mergeMap } from "rxjs/operators";
16
+ import { combineLatest as observableCombineLatest, mergeMap, of as observableOf, } from "rxjs";
18
17
  import log from "../../../log";
19
18
  /**
20
19
  * Create empty AdaptationStream Observable, linked to a Period.
21
20
  *
22
21
  * This observable will never download any segment and just emit a "full"
23
22
  * event when reaching the end.
24
- * @param {Observable} streamClock$
25
- * @param {Observable} wantedBufferAhead$
23
+ * @param {Observable} playbackObserver
24
+ * @param {Object} wantedBufferAhead
26
25
  * @param {string} bufferType
27
26
  * @param {Object} content
28
27
  * @returns {Observable}
29
28
  */
30
- export default function createEmptyAdaptationStream(streamClock$, wantedBufferAhead$, bufferType, content) {
29
+ export default function createEmptyAdaptationStream(playbackObserver, wantedBufferAhead, bufferType, content) {
31
30
  var period = content.period;
32
31
  var hasFinishedLoading = false;
33
- return observableCombineLatest([streamClock$, wantedBufferAhead$]).pipe(mergeMap(function (_a) {
34
- var clockTick = _a[0], wantedBufferAhead = _a[1];
35
- var position = clockTick.position;
36
- if (period.end !== undefined && position + wantedBufferAhead >= period.end) {
32
+ var wantedBufferAhead$ = wantedBufferAhead.asObservable();
33
+ var observation$ = playbackObserver.observe(true);
34
+ return observableCombineLatest([observation$, wantedBufferAhead$]).pipe(mergeMap(function (_a) {
35
+ var observation = _a[0], wba = _a[1];
36
+ var position = observation.position;
37
+ if (period.end !== undefined && position + wba >= period.end) {
37
38
  log.debug("Stream: full \"empty\" AdaptationStream", bufferType);
38
39
  hasFinishedLoading = true;
39
40
  }
40
41
  return observableOf({ type: "stream-status",
41
- value: { period: period, bufferType: bufferType, position: clockTick.position,
42
+ value: { period: period, bufferType: bufferType, position: observation.position,
42
43
  imminentDiscontinuity: null, hasFinishedLoading: hasFinishedLoading, neededSegments: [],
43
44
  shouldRefreshManifest: false } });
44
45
  }));
@@ -13,6 +13,6 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import PeriodStream, { IPeriodStreamArguments, IPeriodStreamClockTick, IPeriodStreamOptions } from "./period_stream";
16
+ import PeriodStream, { IPeriodStreamArguments, IPeriodStreamOptions, IPeriodStreamPlaybackObservation } from "./period_stream";
17
17
  export default PeriodStream;
18
- export { IPeriodStreamArguments, IPeriodStreamClockTick, IPeriodStreamOptions, };
18
+ export { IPeriodStreamArguments, IPeriodStreamOptions, IPeriodStreamPlaybackObservation, };
@@ -13,28 +13,43 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { BehaviorSubject, Observable } from "rxjs";
16
+ import { Observable } from "rxjs";
17
17
  import Manifest, { Period } from "../../../manifest";
18
+ import { IReadOnlySharedReference } from "../../../utils/reference";
18
19
  import WeakMapMemory from "../../../utils/weak_map_memory";
19
20
  import ABRManager from "../../abr";
21
+ import { IReadOnlyPlaybackObserver } from "../../api";
20
22
  import { SegmentFetcherCreator } from "../../fetchers";
21
23
  import SegmentBuffersStore, { IBufferType, ITextTrackSegmentBufferOptions, SegmentBuffer } from "../../segment_buffers";
22
24
  import { IAdaptationStreamOptions } from "../adaptation";
23
25
  import { IPeriodStreamEvent } from "../types";
24
- export interface IPeriodStreamClockTick {
26
+ /** Playback observation required by the `PeriodStream`. */
27
+ export interface IPeriodStreamPlaybackObservation {
28
+ /** The position we are in the video in seconds at the time of the observation. */
25
29
  position: number;
26
- getCurrentTime: () => number;
30
+ /** `duration` property of the HTMLMediaElement. */
27
31
  duration: number;
32
+ /** If `true`, the player is currently paused. */
28
33
  isPaused: boolean;
29
- liveGap?: number;
34
+ /** `readyState` property of the HTMLMediaElement. */
30
35
  readyState: number;
36
+ /** Target playback rate at which we want to play the content. */
31
37
  speed: number;
38
+ /**
39
+ * Offset, in seconds to add to `position` to obtain the starting position at
40
+ * which we actually want to download segments for.
41
+ */
32
42
  wantedTimeOffset: number;
43
+ /**
44
+ * Only set for live contents.
45
+ * Difference between the live edge and the current position, in seconds.
46
+ */
47
+ liveGap: number | undefined;
33
48
  }
49
+ /** Arguments required by the `PeriodStream`. */
34
50
  export interface IPeriodStreamArguments {
35
51
  abrManager: ABRManager;
36
52
  bufferType: IBufferType;
37
- clock$: Observable<IPeriodStreamClockTick>;
38
53
  content: {
39
54
  manifest: Manifest;
40
55
  period: Period;
@@ -42,8 +57,9 @@ export interface IPeriodStreamArguments {
42
57
  garbageCollectors: WeakMapMemory<SegmentBuffer, Observable<never>>;
43
58
  segmentFetcherCreator: SegmentFetcherCreator;
44
59
  segmentBuffersStore: SegmentBuffersStore;
60
+ playbackObserver: IReadOnlyPlaybackObserver<IPeriodStreamPlaybackObservation>;
45
61
  options: IPeriodStreamOptions;
46
- wantedBufferAhead$: BehaviorSubject<number>;
62
+ wantedBufferAhead: IReadOnlySharedReference<number>;
47
63
  }
48
64
  /** Options tweaking the behavior of the PeriodStream. */
49
65
  export declare type IPeriodStreamOptions = IAdaptationStreamOptions & {
@@ -73,4 +89,4 @@ export declare type IPeriodStreamOptions = IAdaptationStreamOptions & {
73
89
  * @param {Object} args
74
90
  * @returns {Observable}
75
91
  */
76
- export default function PeriodStream({ abrManager, bufferType, clock$, content, garbageCollectors, segmentFetcherCreator, segmentBuffersStore, options, wantedBufferAhead$, }: IPeriodStreamArguments): Observable<IPeriodStreamEvent>;
92
+ export default function PeriodStream({ abrManager, bufferType, content, garbageCollectors, playbackObserver, segmentFetcherCreator, segmentBuffersStore, options, wantedBufferAhead, }: IPeriodStreamArguments): Observable<IPeriodStreamEvent>;
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { concat as observableConcat, EMPTY, merge as observableMerge, of as observableOf, ReplaySubject, } from "rxjs";
17
- import { catchError, ignoreElements, map, mapTo, mergeMap, startWith, switchMap, take, } from "rxjs/operators";
16
+ import { catchError, concat as observableConcat, defer as observableDefer, EMPTY, ignoreElements, map, merge as observableMerge, mergeMap, of as observableOf, ReplaySubject, startWith, switchMap, } from "rxjs";
18
17
  import config from "../../../config";
19
18
  import { formatError } from "../../../errors";
20
19
  import log from "../../../log";
@@ -38,7 +37,7 @@ var DELTA_POSITION_AFTER_RELOAD = config.DELTA_POSITION_AFTER_RELOAD;
38
37
  * @returns {Observable}
39
38
  */
40
39
  export default function PeriodStream(_a) {
41
- var abrManager = _a.abrManager, bufferType = _a.bufferType, clock$ = _a.clock$, content = _a.content, garbageCollectors = _a.garbageCollectors, segmentFetcherCreator = _a.segmentFetcherCreator, segmentBuffersStore = _a.segmentBuffersStore, options = _a.options, wantedBufferAhead$ = _a.wantedBufferAhead$;
40
+ var abrManager = _a.abrManager, bufferType = _a.bufferType, content = _a.content, garbageCollectors = _a.garbageCollectors, playbackObserver = _a.playbackObserver, segmentFetcherCreator = _a.segmentFetcherCreator, segmentBuffersStore = _a.segmentBuffersStore, options = _a.options, wantedBufferAhead = _a.wantedBufferAhead;
42
41
  var period = content.period;
43
42
  // Emits the chosen Adaptation for the current type.
44
43
  // `null` when no Adaptation is chosen (e.g. no subtitles)
@@ -56,13 +55,13 @@ export default function PeriodStream(_a) {
56
55
  bufferType === "video" ? DELTA_POSITION_AFTER_RELOAD.trackSwitch.video :
57
56
  DELTA_POSITION_AFTER_RELOAD.trackSwitch.other;
58
57
  if (adaptation === null) { // Current type is disabled for that Period
59
- log.info("Stream: Set no " + bufferType + " Adaptation", period);
58
+ log.info("Stream: Set no ".concat(bufferType, " Adaptation. P:"), period.start);
60
59
  var segmentBufferStatus = segmentBuffersStore.getStatus(bufferType);
61
60
  var cleanBuffer$ = void 0;
62
61
  if (segmentBufferStatus.type === "initialized") {
63
- log.info("Stream: Clearing previous " + bufferType + " SegmentBuffer");
62
+ log.info("Stream: Clearing previous ".concat(bufferType, " SegmentBuffer"));
64
63
  if (SegmentBuffersStore.isNative(bufferType)) {
65
- return reloadAfterSwitch(period, bufferType, clock$, 0);
64
+ return reloadAfterSwitch(period, bufferType, playbackObserver, 0);
66
65
  }
67
66
  cleanBuffer$ = segmentBufferStatus.value
68
67
  .removeBuffer(period.start, period.end == null ? Infinity :
@@ -74,20 +73,20 @@ export default function PeriodStream(_a) {
74
73
  }
75
74
  cleanBuffer$ = observableOf(null);
76
75
  }
77
- return observableConcat(cleanBuffer$.pipe(mapTo(EVENTS.adaptationChange(bufferType, null, period))), createEmptyStream(clock$, wantedBufferAhead$, bufferType, { period: period }));
76
+ return observableConcat(cleanBuffer$.pipe(map(function () { return EVENTS.adaptationChange(bufferType, null, period); })), createEmptyStream(playbackObserver, wantedBufferAhead, bufferType, { period: period }));
78
77
  }
79
78
  if (SegmentBuffersStore.isNative(bufferType) &&
80
79
  segmentBuffersStore.getStatus(bufferType).type === "disabled") {
81
- return reloadAfterSwitch(period, bufferType, clock$, relativePosAfterSwitch);
80
+ return reloadAfterSwitch(period, bufferType, playbackObserver, relativePosAfterSwitch);
82
81
  }
83
- log.info("Stream: Updating " + bufferType + " adaptation", adaptation, period);
84
- var newStream$ = clock$.pipe(take(1), mergeMap(function (tick) {
82
+ log.info("Stream: Updating ".concat(bufferType, " adaptation"), "A: ".concat(adaptation.id), "P: ".concat(period.start));
83
+ var newStream$ = observableDefer(function () {
84
+ var readyState = playbackObserver.getReadyState();
85
85
  var segmentBuffer = createOrReuseSegmentBuffer(segmentBuffersStore, bufferType, adaptation, options);
86
- var playbackInfos = { currentTime: tick.getCurrentTime(),
87
- readyState: tick.readyState };
86
+ var playbackInfos = { currentTime: playbackObserver.getCurrentTime(), readyState: readyState };
88
87
  var strategy = getAdaptationSwitchStrategy(segmentBuffer, period, adaptation, playbackInfos, options);
89
88
  if (strategy.type === "needs-reload") {
90
- return reloadAfterSwitch(period, bufferType, clock$, relativePosAfterSwitch);
89
+ return reloadAfterSwitch(period, bufferType, playbackObserver, relativePosAfterSwitch);
91
90
  }
92
91
  var needsBufferFlush$ = strategy.type === "flush-buffer"
93
92
  ? observableOf(EVENTS.needsBufferFlush())
@@ -96,13 +95,19 @@ export default function PeriodStream(_a) {
96
95
  observableConcat.apply(void 0, strategy.value.map(function (_a) {
97
96
  var start = _a.start, end = _a.end;
98
97
  return segmentBuffer.removeBuffer(start, end);
99
- })).pipe(ignoreElements()) : EMPTY;
98
+ })
99
+ // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
100
+ // first type parameter as `any` instead of the perfectly fine `unknown`,
101
+ // leading to linter issues, as it forbids the usage of `any`.
102
+ // This is why we're disabling the eslint rule.
103
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
104
+ ).pipe(ignoreElements()) : EMPTY;
100
105
  var bufferGarbageCollector$ = garbageCollectors.get(segmentBuffer);
101
106
  var adaptationStream$ = createAdaptationStream(adaptation, segmentBuffer);
102
107
  return segmentBuffersStore.waitForUsableBuffers().pipe(mergeMap(function () {
103
108
  return observableConcat(cleanBuffer$, needsBufferFlush$, observableMerge(adaptationStream$, bufferGarbageCollector$));
104
109
  }));
105
- }));
110
+ });
106
111
  return observableConcat(observableOf(EVENTS.adaptationChange(bufferType, adaptation, period)), newStream$);
107
112
  }), startWith(EVENTS.periodStreamReady(bufferType, period, adaptation$)));
108
113
  /**
@@ -112,25 +117,21 @@ export default function PeriodStream(_a) {
112
117
  */
113
118
  function createAdaptationStream(adaptation, segmentBuffer) {
114
119
  var manifest = content.manifest;
115
- var adaptationStreamClock$ = clock$.pipe(map(function (tick) {
116
- var buffered = segmentBuffer.getBufferedRanges();
117
- return objectAssign({}, tick, { bufferGap: getLeftSizeOfRange(buffered, tick.position) });
118
- }));
119
- return AdaptationStream({ abrManager: abrManager, clock$: adaptationStreamClock$,
120
- content: { manifest: manifest, period: period, adaptation: adaptation }, options: options, segmentBuffer: segmentBuffer, segmentFetcherCreator: segmentFetcherCreator, wantedBufferAhead$: wantedBufferAhead$ }).pipe(catchError(function (error) {
120
+ var adaptationPlaybackObserver = createAdaptationStreamPlaybackObserver(playbackObserver, segmentBuffer);
121
+ return AdaptationStream({ abrManager: abrManager, content: { manifest: manifest, period: period, adaptation: adaptation }, options: options, playbackObserver: adaptationPlaybackObserver, segmentBuffer: segmentBuffer, segmentFetcherCreator: segmentFetcherCreator, wantedBufferAhead: wantedBufferAhead }).pipe(catchError(function (error) {
121
122
  // Stream linked to a non-native media buffer should not impact the
122
123
  // stability of the player. ie: if a text buffer sends an error, we want
123
124
  // to continue playing without any subtitles
124
125
  if (!SegmentBuffersStore.isNative(bufferType)) {
125
- log.error("Stream: " + bufferType + " Stream crashed. Aborting it.", error);
126
+ log.error("Stream: ".concat(bufferType, " Stream crashed. Aborting it."), error);
126
127
  segmentBuffersStore.disposeSegmentBuffer(bufferType);
127
128
  var formattedError = formatError(error, {
128
129
  defaultCode: "NONE",
129
130
  defaultReason: "Unknown `AdaptationStream` error",
130
131
  });
131
- return observableConcat(observableOf(EVENTS.warning(formattedError)), createEmptyStream(clock$, wantedBufferAhead$, bufferType, { period: period }));
132
+ return observableConcat(observableOf(EVENTS.warning(formattedError)), createEmptyStream(playbackObserver, wantedBufferAhead, bufferType, { period: period }));
132
133
  }
133
- log.error("Stream: " + bufferType + " Stream crashed. Stopping playback.", error);
134
+ log.error("Stream: ".concat(bufferType, " Stream crashed. Stopping playback."), error);
134
135
  throw error;
135
136
  }));
136
137
  }
@@ -165,3 +166,16 @@ function getFirstDeclaredMimeType(adaptation) {
165
166
  }
166
167
  return representations[0].getMimeTypeString();
167
168
  }
169
+ /**
170
+ * Create AdaptationStream's version of a playback observer.
171
+ * @param {Object} initialPlaybackObserver
172
+ * @param {Object} segmentBuffer
173
+ * @returns {Object}
174
+ */
175
+ function createAdaptationStreamPlaybackObserver(initialPlaybackObserver, segmentBuffer) {
176
+ return initialPlaybackObserver.deriveReadOnlyObserver(function (observation$) { return observation$.pipe(map(mapObservation)); }, mapObservation);
177
+ function mapObservation(baseObservation) {
178
+ var buffered = segmentBuffer.getBufferedRanges();
179
+ return objectAssign({}, baseObservation, { bufferGap: getLeftSizeOfRange(buffered, baseObservation.position) });
180
+ }
181
+ }
@@ -15,10 +15,12 @@
15
15
  */
16
16
  import { Observable } from "rxjs";
17
17
  import { Period } from "../../manifest";
18
+ import { IReadOnlyPlaybackObserver } from "../api";
18
19
  import { IBufferType } from "../segment_buffers";
19
20
  import { IWaitingMediaSourceReloadInternalEvent } from "./types";
20
21
  /**
21
- * Regularly ask to reload the MediaSource on each `clock$` tick.
22
+ * Regularly ask to reload the MediaSource on each playback observation
23
+ * performed by the playback observer.
22
24
  *
23
25
  * If and only if the Period currently played corresponds to `Period`, applies
24
26
  * an offset to the reloaded position corresponding to `deltaPos`.
@@ -28,7 +30,7 @@ import { IWaitingMediaSourceReloadInternalEvent } from "./types";
28
30
  *
29
31
  * @param {Object} period - The Period linked to the Adaptation or
30
32
  * Representation that you want to switch to.
31
- * @param {Observable} clock$ - Observable emitting playback conditions.
33
+ * @param {Observable} playbackObserver - emit playback conditions.
32
34
  * Has to emit last playback conditions immediately on subscribe.
33
35
  * @param {number} deltaPos - If the concerned Period is playing at the time
34
36
  * this function is called, we will add this value, in seconds, to the current
@@ -37,8 +39,7 @@ import { IWaitingMediaSourceReloadInternalEvent } from "./types";
37
39
  * a switch.
38
40
  * @returns {Observable}
39
41
  */
40
- export default function reloadAfterSwitch(period: Period, bufferType: IBufferType, clock$: Observable<{
41
- getCurrentTime: () => number;
42
+ export default function reloadAfterSwitch(period: Period, bufferType: IBufferType, playbackObserver: IReadOnlyPlaybackObserver<{
42
43
  position: number;
43
44
  isPaused: boolean;
44
45
  }>, deltaPos: number): Observable<IWaitingMediaSourceReloadInternalEvent>;