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,10 +13,11 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { map } from "rxjs/operators";
16
+ import { map, } from "rxjs";
17
17
  import EVENTS from "./events_generators";
18
18
  /**
19
- * Regularly ask to reload the MediaSource on each `clock$` tick.
19
+ * Regularly ask to reload the MediaSource on each playback observation
20
+ * performed by the playback observer.
20
21
  *
21
22
  * If and only if the Period currently played corresponds to `Period`, applies
22
23
  * an offset to the reloaded position corresponding to `deltaPos`.
@@ -26,7 +27,7 @@ import EVENTS from "./events_generators";
26
27
  *
27
28
  * @param {Object} period - The Period linked to the Adaptation or
28
29
  * Representation that you want to switch to.
29
- * @param {Observable} clock$ - Observable emitting playback conditions.
30
+ * @param {Observable} playbackObserver - emit playback conditions.
30
31
  * Has to emit last playback conditions immediately on subscribe.
31
32
  * @param {number} deltaPos - If the concerned Period is playing at the time
32
33
  * this function is called, we will add this value, in seconds, to the current
@@ -35,13 +36,13 @@ import EVENTS from "./events_generators";
35
36
  * a switch.
36
37
  * @returns {Observable}
37
38
  */
38
- export default function reloadAfterSwitch(period, bufferType, clock$, deltaPos) {
39
- return clock$.pipe(map(function (tick) {
39
+ export default function reloadAfterSwitch(period, bufferType, playbackObserver, deltaPos) {
40
+ return playbackObserver.observe(true).pipe(map(function (observation) {
40
41
  var _a;
41
- var currentTime = tick.getCurrentTime();
42
+ var currentTime = playbackObserver.getCurrentTime();
42
43
  var pos = currentTime + deltaPos;
43
44
  // Bind to Period start and end
44
45
  var reloadAt = Math.min(Math.max(period.start, pos), (_a = period.end) !== null && _a !== void 0 ? _a : Infinity);
45
- return EVENTS.waitingMediaSourceReload(bufferType, period, reloadAt, !tick.isPaused);
46
+ return EVENTS.waitingMediaSourceReload(bufferType, period, reloadAt, !observation.isPaused);
46
47
  }));
47
48
  }
@@ -17,17 +17,19 @@
17
17
  * This file allows any Stream to push data to a SegmentBuffer.
18
18
  */
19
19
  import { Observable } from "rxjs";
20
+ import { IReadOnlyPlaybackObserver } from "../../api";
20
21
  import { IPushChunkInfos, SegmentBuffer } from "../../segment_buffers";
21
22
  /**
22
23
  * Append a segment to the given segmentBuffer.
23
24
  * If it leads to a QuotaExceededError, try to run our custom range
24
25
  * _garbage collector_ then retry.
25
26
  *
26
- * @param {Observable} clock$
27
+ * @param {Observable} playbackObserver
27
28
  * @param {Object} segmentBuffer
28
29
  * @param {Object} dataInfos
29
30
  * @returns {Observable}
30
31
  */
31
- export default function appendSegmentToBuffer<T>(clock$: Observable<{
32
+ export default function appendSegmentToBuffer<T>(playbackObserver: IReadOnlyPlaybackObserver<{
32
33
  position: number;
34
+ wantedTimeOffset: number;
33
35
  }>, segmentBuffer: SegmentBuffer, dataInfos: IPushChunkInfos<T>): Observable<unknown>;
@@ -16,8 +16,7 @@
16
16
  /**
17
17
  * This file allows any Stream to push data to a SegmentBuffer.
18
18
  */
19
- import { concat as observableConcat, } from "rxjs";
20
- import { catchError, ignoreElements, } from "rxjs/operators";
19
+ import { catchError, concat as observableConcat, mergeMap, ignoreElements, } from "rxjs";
21
20
  import { MediaError } from "../../../errors";
22
21
  import forceGarbageCollection from "./force_garbage_collection";
23
22
  /**
@@ -25,12 +24,12 @@ import forceGarbageCollection from "./force_garbage_collection";
25
24
  * If it leads to a QuotaExceededError, try to run our custom range
26
25
  * _garbage collector_ then retry.
27
26
  *
28
- * @param {Observable} clock$
27
+ * @param {Observable} playbackObserver
29
28
  * @param {Object} segmentBuffer
30
29
  * @param {Object} dataInfos
31
30
  * @returns {Observable}
32
31
  */
33
- export default function appendSegmentToBuffer(clock$, segmentBuffer, dataInfos) {
32
+ export default function appendSegmentToBuffer(playbackObserver, segmentBuffer, dataInfos) {
34
33
  var append$ = segmentBuffer.pushChunk(dataInfos);
35
34
  return append$.pipe(catchError(function (appendError) {
36
35
  if (!(appendError instanceof Error) || appendError.name !== "QuotaExceededError") {
@@ -39,10 +38,13 @@ export default function appendSegmentToBuffer(clock$, segmentBuffer, dataInfos)
39
38
  "An unknown error happened when pushing content";
40
39
  throw new MediaError("BUFFER_APPEND_ERROR", reason);
41
40
  }
42
- return observableConcat(forceGarbageCollection(clock$, segmentBuffer).pipe(ignoreElements()), append$).pipe(catchError(function (forcedGCError) {
43
- var reason = forcedGCError instanceof Error ? forcedGCError.toString() :
44
- "Could not clean the buffer";
45
- throw new MediaError("BUFFER_FULL_ERROR", reason);
41
+ return playbackObserver.observe(true).pipe(mergeMap(function (observation) {
42
+ var currentPos = observation.position + observation.wantedTimeOffset;
43
+ return observableConcat(forceGarbageCollection(currentPos, segmentBuffer).pipe(ignoreElements()), append$).pipe(catchError(function (forcedGCError) {
44
+ var reason = forcedGCError instanceof Error ? forcedGCError.toString() :
45
+ "Could not clean the buffer";
46
+ throw new MediaError("BUFFER_FULL_ERROR", reason);
47
+ }));
46
48
  }));
47
49
  }));
48
50
  }
@@ -13,10 +13,11 @@
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 { ICustomError } from "../../../errors";
18
18
  import Manifest, { Adaptation, ISegment, Period, Representation } from "../../../manifest";
19
- import { ISegmentParserParsedInitSegment, ISegmentParserParsedSegment } from "../../../transports";
19
+ import { ISegmentParserParsedInitChunk, ISegmentParserParsedMediaChunk } from "../../../transports";
20
+ import { IReadOnlySharedReference } from "../../../utils/reference";
20
21
  import { IPrioritizedSegmentFetcher } from "../../fetchers";
21
22
  import { IQueuedSegment } from "../types";
22
23
  /**
@@ -38,7 +39,7 @@ export default class DownloadingQueue<T> {
38
39
  * Segments whose request are still pending are still in that queue. Segments
39
40
  * are only removed from it once their request has succeeded.
40
41
  */
41
- private _downloadQueue$;
42
+ private _downloadQueue;
42
43
  /**
43
44
  * Pending request for the initialization segment.
44
45
  * `null` if no request is pending for it.
@@ -65,8 +66,7 @@ export default class DownloadingQueue<T> {
65
66
  *
66
67
  * @param {Object} content - The context of the Representation you want to
67
68
  * load segments for.
68
- * @param {BehaviorSubject} downloadQueue$ - Emit the queue of segments you
69
- * want to load.
69
+ * @param {Object} downloadQueue - Queue of segments you want to load.
70
70
  * @param {Object} segmentFetcher - Interface to facilitate the download of
71
71
  * segments.
72
72
  * @param {boolean} hasInitSegment - Declare that an initialization segment
@@ -82,7 +82,7 @@ export default class DownloadingQueue<T> {
82
82
  * that it should not wait for an initialization segment before parsing a
83
83
  * media segment.
84
84
  */
85
- constructor(content: IDownloadingQueueContext, downloadQueue$: BehaviorSubject<IDownloadQueueItem>, segmentFetcher: IPrioritizedSegmentFetcher<T>, hasInitSegment: boolean);
85
+ constructor(content: IDownloadingQueueContext, downloadQueue: IReadOnlySharedReference<IDownloadQueueItem>, segmentFetcher: IPrioritizedSegmentFetcher<T>, hasInitSegment: boolean);
86
86
  /**
87
87
  * Returns the initialization segment currently being requested.
88
88
  * Returns `null` if no initialization segment request is pending.
@@ -128,7 +128,7 @@ export declare type IDownloadingQueueEvent<T> = IParsedInitSegmentEvent<T> | IPa
128
128
  * In that case, an `IParsedInitSegmentEvent` will always be sent before any
129
129
  * `IParsedSegmentEvent` event is sent.
130
130
  */
131
- export declare type IParsedInitSegmentEvent<T> = ISegmentParserParsedInitSegment<T> & {
131
+ export declare type IParsedInitSegmentEvent<T> = ISegmentParserParsedInitChunk<T> & {
132
132
  segment: ISegment;
133
133
  type: "parsed-init";
134
134
  };
@@ -147,7 +147,7 @@ export declare type IParsedInitSegmentEvent<T> = ISegmentParserParsedInitSegment
147
147
  * You will know that all `IParsedSegmentEvent` have been loaded for a given
148
148
  * segment once you received the `IEndOfSegmentEvent` for that segment.
149
149
  */
150
- export declare type IParsedSegmentEvent<T> = ISegmentParserParsedSegment<T> & {
150
+ export declare type IParsedSegmentEvent<T> = ISegmentParserParsedMediaChunk<T> & {
151
151
  segment: ISegment;
152
152
  type: "parsed-media";
153
153
  };
@@ -178,7 +178,7 @@ export interface IEndOfQueueEvent {
178
178
  value: null;
179
179
  }
180
180
  /**
181
- * Structure of the object that has to be emitted through the `downloadQueue$`
181
+ * Structure of the object that has to be emitted through the `downloadQueue`
182
182
  * Observable, to signal which segments are currently needed.
183
183
  */
184
184
  export interface IDownloadQueueItem {
@@ -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, defer as observableDefer, of as observableOf, merge as observableMerge, EMPTY, ReplaySubject, } from "rxjs";
17
- import { filter, finalize, map, mergeMap, share, switchMap, take, } from "rxjs/operators";
16
+ import { concat as observableConcat, defer as observableDefer, EMPTY, filter, finalize, map, merge as observableMerge, mergeMap, of as observableOf, ReplaySubject, share, switchMap, take, } from "rxjs";
18
17
  import log from "../../../log";
19
18
  import assert from "../../../utils/assert";
20
19
  import assertUnreachable from "../../../utils/assert_unreachable";
@@ -29,8 +28,7 @@ var DownloadingQueue = /** @class */ (function () {
29
28
  *
30
29
  * @param {Object} content - The context of the Representation you want to
31
30
  * load segments for.
32
- * @param {BehaviorSubject} downloadQueue$ - Emit the queue of segments you
33
- * want to load.
31
+ * @param {Object} downloadQueue - Queue of segments you want to load.
34
32
  * @param {Object} segmentFetcher - Interface to facilitate the download of
35
33
  * segments.
36
34
  * @param {boolean} hasInitSegment - Declare that an initialization segment
@@ -46,10 +44,10 @@ var DownloadingQueue = /** @class */ (function () {
46
44
  * that it should not wait for an initialization segment before parsing a
47
45
  * media segment.
48
46
  */
49
- function DownloadingQueue(content, downloadQueue$, segmentFetcher, hasInitSegment) {
47
+ function DownloadingQueue(content, downloadQueue, segmentFetcher, hasInitSegment) {
50
48
  this._content = content;
51
49
  this._currentObs$ = null;
52
- this._downloadQueue$ = downloadQueue$;
50
+ this._downloadQueue = downloadQueue;
53
51
  this._initSegmentRequest = null;
54
52
  this._mediaSegmentRequest = null;
55
53
  this._segmentFetcher = segmentFetcher;
@@ -90,7 +88,7 @@ var DownloadingQueue = /** @class */ (function () {
90
88
  return this._currentObs$;
91
89
  }
92
90
  var obs = observableDefer(function () {
93
- var mediaQueue$ = _this._downloadQueue$.pipe(filter(function (_a) {
91
+ var mediaQueue$ = _this._downloadQueue.asObservable().pipe(filter(function (_a) {
94
92
  var segmentQueue = _a.segmentQueue;
95
93
  // First, the first elements of the segmentQueue might be already
96
94
  // loaded but awaiting the initialization segment to be parsed.
@@ -122,7 +120,7 @@ var DownloadingQueue = /** @class */ (function () {
122
120
  return segmentQueue.length > 0 ? _this._requestMediaSegments() :
123
121
  EMPTY;
124
122
  }));
125
- var initSegmentPush$ = _this._downloadQueue$.pipe(filter(function (next) {
123
+ var initSegmentPush$ = _this._downloadQueue.asObservable().pipe(filter(function (next) {
126
124
  var initSegmentRequest = _this._initSegmentRequest;
127
125
  if (next.initSegment !== null && initSegmentRequest !== null) {
128
126
  if (next.initSegment.priority !== initSegmentRequest.priority) {
@@ -150,7 +148,7 @@ var DownloadingQueue = /** @class */ (function () {
150
148
  */
151
149
  DownloadingQueue.prototype._requestMediaSegments = function () {
152
150
  var _this = this;
153
- var segmentQueue = this._downloadQueue$.getValue().segmentQueue;
151
+ var segmentQueue = this._downloadQueue.getValue().segmentQueue;
154
152
  var currentNeededSegment = segmentQueue[0];
155
153
  var recursivelyRequestSegments = function (startingSegment) {
156
154
  if (startingSegment === undefined) {
@@ -164,7 +162,7 @@ var DownloadingQueue = /** @class */ (function () {
164
162
  return request$
165
163
  .pipe(mergeMap(function (evt) {
166
164
  switch (evt.type) {
167
- case "warning":
165
+ case "retry":
168
166
  return observableOf({ type: "retry",
169
167
  value: { segment: segment, error: evt.value } });
170
168
  case "interrupted":
@@ -172,7 +170,7 @@ var DownloadingQueue = /** @class */ (function () {
172
170
  return EMPTY;
173
171
  case "ended":
174
172
  _this._mediaSegmentRequest = null;
175
- var lastQueue = _this._downloadQueue$.getValue().segmentQueue;
173
+ var lastQueue = _this._downloadQueue.getValue().segmentQueue;
176
174
  if (lastQueue.length === 0) {
177
175
  return observableOf({ type: "end-of-queue",
178
176
  value: null });
@@ -222,7 +220,7 @@ var DownloadingQueue = /** @class */ (function () {
222
220
  return request$
223
221
  .pipe(mergeMap(function (evt) {
224
222
  switch (evt.type) {
225
- case "warning":
223
+ case "retry":
226
224
  return observableOf({ type: "retry",
227
225
  value: { segment: segment, error: evt.value } });
228
226
  case "interrupted":
@@ -25,6 +25,4 @@ import { SegmentBuffer } from "../../segment_buffers";
25
25
  * @param {Object} bufferingQueue
26
26
  * @returns {Observable}
27
27
  */
28
- export default function forceGarbageCollection(timings$: Observable<{
29
- position: number;
30
- }>, bufferingQueue: SegmentBuffer): Observable<unknown>;
28
+ export default function forceGarbageCollection(currentPosition: number, bufferingQueue: SegmentBuffer): Observable<unknown>;
@@ -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 { from as observableFrom, } from "rxjs";
17
- import { concatAll, mergeMap, take, } from "rxjs/operators";
16
+ import { concatAll, defer as observableDefer, from as observableFrom, } from "rxjs";
18
17
  import config from "../../../config";
19
18
  import log from "../../../log";
20
19
  import { getInnerAndOuterTimeRanges } from "../../../utils/ranges";
@@ -30,22 +29,21 @@ var GC_GAP_BEEFY = config.BUFFER_GC_GAPS.BEEFY;
30
29
  * @param {Object} bufferingQueue
31
30
  * @returns {Observable}
32
31
  */
33
- export default function forceGarbageCollection(timings$, bufferingQueue) {
34
- // wait for next timing event
35
- return timings$.pipe(take(1), mergeMap(function (timing) {
32
+ export default function forceGarbageCollection(currentPosition, bufferingQueue) {
33
+ return observableDefer(function () {
36
34
  log.warn("Stream: Running garbage collector");
37
35
  var buffered = bufferingQueue.getBufferedRanges();
38
- var cleanedupRanges = selectGCedRanges(timing.position, buffered, GC_GAP_CALM);
36
+ var cleanedupRanges = selectGCedRanges(currentPosition, buffered, GC_GAP_CALM);
39
37
  // more aggressive GC if we could not find any range to clean
40
38
  if (cleanedupRanges.length === 0) {
41
- cleanedupRanges = selectGCedRanges(timing.position, buffered, GC_GAP_BEEFY);
39
+ cleanedupRanges = selectGCedRanges(currentPosition, buffered, GC_GAP_BEEFY);
42
40
  }
43
41
  log.debug("Stream: GC cleaning", cleanedupRanges);
44
42
  return observableFrom(cleanedupRanges.map(function (_a) {
45
43
  var start = _a.start, end = _a.end;
46
44
  return bufferingQueue.removeBuffer(start, end);
47
45
  })).pipe(concatAll());
48
- }));
46
+ });
49
47
  }
50
48
  /**
51
49
  * Buffer garbage collector algorithm.
@@ -14,6 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import Manifest, { Adaptation, Period, Representation } from "../../../manifest";
17
+ import { IReadOnlyPlaybackObserver } from "../../api";
17
18
  import { SegmentBuffer } from "../../segment_buffers";
18
19
  import { IBufferDiscontinuity, IQueuedSegment } from "../types";
19
20
  /** Analysis of the current buffer's status. */
@@ -50,7 +51,7 @@ export interface IBufferStatus {
50
51
  * be filled by any segment, even in the future.
51
52
  *
52
53
  * @param {Object} content
53
- * @param {Object} tick
54
+ * @param {Object} playbackInfo
54
55
  * @param {number|undefined} fastSwitchThreshold
55
56
  * @param {number} bufferGoal
56
57
  * @param {Object} segmentBuffer
@@ -61,9 +62,4 @@ export default function getBufferStatus(content: {
61
62
  manifest: Manifest;
62
63
  period: Period;
63
64
  representation: Representation;
64
- }, tick: {
65
- position: number;
66
- wantedTimeOffset: number;
67
- liveGap?: number;
68
- getCurrentTime(): number;
69
- }, fastSwitchThreshold: number | undefined, bufferGoal: number, segmentBuffer: SegmentBuffer): IBufferStatus;
65
+ }, wantedStartPosition: number, playbackObserver: IReadOnlyPlaybackObserver<unknown>, fastSwitchThreshold: number | undefined, bufferGoal: number, segmentBuffer: SegmentBuffer): IBufferStatus;
@@ -27,17 +27,16 @@ var MINIMUM_SEGMENT_SIZE = config.MINIMUM_SEGMENT_SIZE;
27
27
  * be filled by any segment, even in the future.
28
28
  *
29
29
  * @param {Object} content
30
- * @param {Object} tick
30
+ * @param {Object} playbackInfo
31
31
  * @param {number|undefined} fastSwitchThreshold
32
32
  * @param {number} bufferGoal
33
33
  * @param {Object} segmentBuffer
34
34
  * @returns {Object}
35
35
  */
36
- export default function getBufferStatus(content, tick, fastSwitchThreshold, bufferGoal, segmentBuffer) {
36
+ export default function getBufferStatus(content, wantedStartPosition, playbackObserver, fastSwitchThreshold, bufferGoal, segmentBuffer) {
37
37
  var _a;
38
38
  var period = content.period, representation = content.representation;
39
39
  segmentBuffer.synchronizeInventory();
40
- var wantedStartPosition = tick.position + tick.wantedTimeOffset;
41
40
  var wantedEndPosition = wantedStartPosition + bufferGoal;
42
41
  var neededRange = { start: Math.max(wantedStartPosition, period.start),
43
42
  end: Math.min(wantedEndPosition, (_a = period.end) !== null && _a !== void 0 ? _a : Infinity) };
@@ -53,11 +52,12 @@ export default function getBufferStatus(content, tick, fastSwitchThreshold, buff
53
52
  /** Data on every segments buffered around `neededRange`. */
54
53
  var bufferedSegments = getPlayableBufferedSegments({ start: Math.max(neededRange.start - 0.5, 0),
55
54
  end: neededRange.end + 0.5 }, segmentBuffer.getInventory());
55
+ var currentPlaybackTime = playbackObserver.getCurrentTime();
56
56
  /** Callback allowing to retrieve a segment's history in the buffer. */
57
57
  var getBufferedHistory = segmentBuffer.getSegmentHistory.bind(segmentBuffer);
58
58
  /** List of segments we will need to download. */
59
- var neededSegments = getNeededSegments({ content: content, bufferedSegments: bufferedSegments, currentPlaybackTime: tick.getCurrentTime(), fastSwitchThreshold: fastSwitchThreshold, getBufferedHistory: getBufferedHistory, neededRange: neededRange, segmentsBeingPushed: segmentsBeingPushed })
60
- .map(function (segment) { return ({ priority: getSegmentPriority(segment.time, tick), segment: segment }); });
59
+ var neededSegments = getNeededSegments({ content: content, bufferedSegments: bufferedSegments, currentPlaybackTime: currentPlaybackTime, fastSwitchThreshold: fastSwitchThreshold, getBufferedHistory: getBufferedHistory, neededRange: neededRange, segmentsBeingPushed: segmentsBeingPushed })
60
+ .map(function (segment) { return ({ priority: getSegmentPriority(segment.time, wantedStartPosition), segment: segment }); });
61
61
  /**
62
62
  * `true` if the current `RepresentationStream` has loaded all the
63
63
  * needed segments for this Representation until the end of the Period.
@@ -141,10 +141,9 @@ function getPlayableBufferedSegments(neededRange, segmentInventory) {
141
141
  var inventorySegment = eltInventory.infos.segment;
142
142
  var eltInventoryStart = inventorySegment.time /
143
143
  inventorySegment.timescale;
144
- var eltInventoryEnd = inventorySegment.duration == null ?
144
+ var eltInventoryEnd = !inventorySegment.complete ?
145
145
  eltInventory.end :
146
- eltInventoryStart + inventorySegment.duration /
147
- inventorySegment.timescale;
146
+ eltInventoryStart + inventorySegment.duration / inventorySegment.timescale;
148
147
  if ((eltInventoryEnd > minEnd && eltInventoryStart < maxStart) ||
149
148
  (eltInventory.end > minEnd && eltInventory.start < maxStart)) {
150
149
  overlappingChunks.unshift(eltInventory);
@@ -80,7 +80,7 @@ export default function getNeededSegments(_a) {
80
80
  if (segment.isInit) {
81
81
  return true; // never skip initialization segments
82
82
  }
83
- if (duration < MINIMUM_SEGMENT_SIZE) {
83
+ if (segment.complete && duration < MINIMUM_SEGMENT_SIZE) {
84
84
  return false; // too small, don't download
85
85
  }
86
86
  // Check if the same segment from another Representation is not already
@@ -14,18 +14,15 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  /**
17
- * Calculate the priority number for a given time, in function of the distance
18
- * with the current time.
17
+ * Calculate the priority number for a given segment start time, in function of
18
+ * the distance with the wanted starting timestamp.
19
19
  *
20
20
  * The lower is this number, the higher should be the priority of the request.
21
21
  *
22
- * Note that a `timeWanted` given behind the current time will always have the
22
+ * Note that a `segmentTime` given behind the current time will always have the
23
23
  * highest priority.
24
- * @param {number} timeWanted
25
- * @param {Object} clockTick
24
+ * @param {number} segmentTime
25
+ * @param {Object} wantedStartTimestamp
26
26
  * @returns {number}
27
27
  */
28
- export default function getSegmentPriority(timeWanted: number, clockTick: {
29
- position: number;
30
- wantedTimeOffset: number;
31
- }): number;
28
+ export default function getSegmentPriority(segmentTime: number, wantedStartTimestamp: number): number;
@@ -16,20 +16,19 @@
16
16
  import config from "../../../config";
17
17
  var SEGMENT_PRIORITIES_STEPS = config.SEGMENT_PRIORITIES_STEPS;
18
18
  /**
19
- * Calculate the priority number for a given time, in function of the distance
20
- * with the current time.
19
+ * Calculate the priority number for a given segment start time, in function of
20
+ * the distance with the wanted starting timestamp.
21
21
  *
22
22
  * The lower is this number, the higher should be the priority of the request.
23
23
  *
24
- * Note that a `timeWanted` given behind the current time will always have the
24
+ * Note that a `segmentTime` given behind the current time will always have the
25
25
  * highest priority.
26
- * @param {number} timeWanted
27
- * @param {Object} clockTick
26
+ * @param {number} segmentTime
27
+ * @param {Object} wantedStartTimestamp
28
28
  * @returns {number}
29
29
  */
30
- export default function getSegmentPriority(timeWanted, clockTick) {
31
- var currentTime = clockTick.position + clockTick.wantedTimeOffset;
32
- var distance = timeWanted - currentTime;
30
+ export default function getSegmentPriority(segmentTime, wantedStartTimestamp) {
31
+ var distance = segmentTime - wantedStartTimestamp;
33
32
  for (var priority = 0; priority < SEGMENT_PRIORITIES_STEPS.length; priority++) {
34
33
  if (distance < SEGMENT_PRIORITIES_STEPS[priority]) {
35
34
  return priority;
@@ -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 RepresentationStream, { IRepresentationStreamArguments, IRepresentationStreamClockTick, ITerminationOrder } from "./representation_stream";
16
+ import RepresentationStream, { IRepresentationStreamArguments, IRepresentationStreamPlaybackObservation, ITerminationOrder } from "./representation_stream";
17
17
  export default RepresentationStream;
18
- export { IRepresentationStreamArguments, IRepresentationStreamClockTick, ITerminationOrder, };
18
+ export { IRepresentationStreamArguments, IRepresentationStreamPlaybackObservation, ITerminationOrder, };
@@ -15,6 +15,7 @@
15
15
  */
16
16
  import { Observable } from "rxjs";
17
17
  import Manifest, { Adaptation, ISegment, Period, Representation } from "../../../manifest";
18
+ import { IReadOnlyPlaybackObserver } from "../../api";
18
19
  import { SegmentBuffer } from "../../segment_buffers";
19
20
  import { IStreamEventAddedSegment } from "../types";
20
21
  /**
@@ -25,9 +26,10 @@ import { IStreamEventAddedSegment } from "../types";
25
26
  * @param {Object} args
26
27
  * @returns {Observable}
27
28
  */
28
- export default function pushInitSegment<T>({ clock$, content, segment, segmentData, segmentBuffer }: {
29
- clock$: Observable<{
29
+ export default function pushInitSegment<T>({ playbackObserver, content, segment, segmentData, segmentBuffer }: {
30
+ playbackObserver: IReadOnlyPlaybackObserver<{
30
31
  position: number;
32
+ wantedTimeOffset: number;
31
33
  }>;
32
34
  content: {
33
35
  adaptation: Adaptation;
@@ -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 { defer as observableDefer, EMPTY, } from "rxjs";
17
- import { map } from "rxjs/operators";
16
+ import { defer as observableDefer, EMPTY, map, } from "rxjs";
18
17
  import EVENTS from "../events_generators";
19
18
  import appendSegmentToBuffer from "./append_segment_to_buffer";
20
19
  /**
@@ -26,7 +25,7 @@ import appendSegmentToBuffer from "./append_segment_to_buffer";
26
25
  * @returns {Observable}
27
26
  */
28
27
  export default function pushInitSegment(_a) {
29
- var clock$ = _a.clock$, content = _a.content, segment = _a.segment, segmentData = _a.segmentData, segmentBuffer = _a.segmentBuffer;
28
+ var playbackObserver = _a.playbackObserver, content = _a.content, segment = _a.segment, segmentData = _a.segmentData, segmentBuffer = _a.segmentBuffer;
30
29
  return observableDefer(function () {
31
30
  if (segmentData === null) {
32
31
  return EMPTY;
@@ -36,8 +35,7 @@ export default function pushInitSegment(_a) {
36
35
  chunk: null,
37
36
  timestampOffset: 0,
38
37
  appendWindow: [undefined, undefined], codec: codec };
39
- return appendSegmentToBuffer(clock$, segmentBuffer, { data: data, inventoryInfos: null })
40
- .pipe(map(function () {
38
+ return appendSegmentToBuffer(playbackObserver, segmentBuffer, { data: data, inventoryInfos: null }).pipe(map(function () {
41
39
  var buffered = segmentBuffer.getBufferedRanges();
42
40
  return EVENTS.addedSegment(content, segment, buffered, segmentData);
43
41
  }));
@@ -15,7 +15,8 @@
15
15
  */
16
16
  import { Observable } from "rxjs";
17
17
  import Manifest, { Adaptation, ISegment, Period, Representation } from "../../../manifest";
18
- import { ISegmentParserParsedSegment } from "../../../transports";
18
+ import { ISegmentParserParsedMediaChunk } from "../../../transports";
19
+ import { IReadOnlyPlaybackObserver } from "../../api";
19
20
  import { SegmentBuffer } from "../../segment_buffers";
20
21
  import { IStreamEventAddedSegment } from "../types";
21
22
  /**
@@ -26,9 +27,10 @@ import { IStreamEventAddedSegment } from "../types";
26
27
  * @param {Object} args
27
28
  * @returns {Observable}
28
29
  */
29
- export default function pushMediaSegment<T>({ clock$, content, initSegmentData, parsedSegment, segment, segmentBuffer }: {
30
- clock$: Observable<{
30
+ export default function pushMediaSegment<T>({ playbackObserver, content, initSegmentData, parsedSegment, segment, segmentBuffer }: {
31
+ playbackObserver: IReadOnlyPlaybackObserver<{
31
32
  position: number;
33
+ wantedTimeOffset: number;
32
34
  }>;
33
35
  content: {
34
36
  adaptation: Adaptation;
@@ -37,7 +39,7 @@ export default function pushMediaSegment<T>({ clock$, content, initSegmentData,
37
39
  representation: Representation;
38
40
  };
39
41
  initSegmentData: T | null;
40
- parsedSegment: ISegmentParserParsedSegment<T>;
42
+ parsedSegment: ISegmentParserParsedMediaChunk<T>;
41
43
  segment: ISegment;
42
44
  segmentBuffer: SegmentBuffer;
43
45
  }): Observable<IStreamEventAddedSegment<T>>;
@@ -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 { defer as observableDefer, EMPTY, } from "rxjs";
17
- import { map } from "rxjs/operators";
16
+ import { defer as observableDefer, EMPTY, map, } from "rxjs";
18
17
  import config from "../../../config";
19
18
  import objectAssign from "../../../utils/object_assign";
20
19
  import EVENTS from "../events_generators";
@@ -29,7 +28,7 @@ var APPEND_WINDOW_SECURITIES = config.APPEND_WINDOW_SECURITIES;
29
28
  * @returns {Observable}
30
29
  */
31
30
  export default function pushMediaSegment(_a) {
32
- var clock$ = _a.clock$, content = _a.content, initSegmentData = _a.initSegmentData, parsedSegment = _a.parsedSegment, segment = _a.segment, segmentBuffer = _a.segmentBuffer;
31
+ var playbackObserver = _a.playbackObserver, content = _a.content, initSegmentData = _a.initSegmentData, parsedSegment = _a.parsedSegment, segment = _a.segment, segmentBuffer = _a.segmentBuffer;
33
32
  return observableDefer(function () {
34
33
  var _a, _b;
35
34
  if (parsedSegment.chunkData === null) {
@@ -63,8 +62,7 @@ export default function pushMediaSegment(_a) {
63
62
  }
64
63
  var inventoryInfos = objectAssign({ segment: segment, start: estimatedStart,
65
64
  end: estimatedEnd }, content);
66
- return appendSegmentToBuffer(clock$, segmentBuffer, { data: data, inventoryInfos: inventoryInfos })
67
- .pipe(map(function () {
65
+ return appendSegmentToBuffer(playbackObserver, segmentBuffer, { data: data, inventoryInfos: inventoryInfos }).pipe(map(function () {
68
66
  var buffered = segmentBuffer.getBufferedRanges();
69
67
  return EVENTS.addedSegment(content, segment, buffered, chunkData);
70
68
  }));
@@ -15,18 +15,17 @@
15
15
  */
16
16
  import { Observable } from "rxjs";
17
17
  import Manifest, { Adaptation, Period, Representation } from "../../../manifest";
18
+ import { IReadOnlyPlaybackObserver } from "../../api";
18
19
  import { IPrioritizedSegmentFetcher } from "../../fetchers";
19
20
  import { SegmentBuffer } from "../../segment_buffers";
20
21
  import { IRepresentationStreamEvent } from "../types";
21
- /** Object emitted by the Stream's clock$ at each tick. */
22
- export interface IRepresentationStreamClockTick {
23
- /** The position, in seconds, the media element was in at the time of the tick. */
24
- position: number;
22
+ /** Object that should be emitted by the given `IReadOnlyPlaybackObserver`. */
23
+ export interface IRepresentationStreamPlaybackObservation {
25
24
  /**
26
- * Gap between the current position and the edge of a live content.
27
- * Not set for non-live contents.
25
+ * The position, in seconds, the media element was in at the time of the
26
+ * playback observation.
28
27
  */
29
- liveGap?: number;
28
+ position: number;
30
29
  /**
31
30
  * Offset in seconds to add to the time to obtain the position we
32
31
  * actually want to download from.
@@ -35,8 +34,6 @@ export interface IRepresentationStreamClockTick {
35
34
  * starting position different from `0`.
36
35
  */
37
36
  wantedTimeOffset: number;
38
- /** Fetch the precize position currently in the HTMLMediaElement. */
39
- getCurrentTime(): number;
40
37
  }
41
38
  /** Item emitted by the `terminate$` Observable given to a RepresentationStream. */
42
39
  export interface ITerminationOrder {
@@ -44,8 +41,6 @@ export interface ITerminationOrder {
44
41
  }
45
42
  /** Arguments to give to the RepresentationStream. */
46
43
  export interface IRepresentationStreamArguments<TSegmentDataType> {
47
- /** Periodically emits the current playback conditions. */
48
- clock$: Observable<IRepresentationStreamClockTick>;
49
44
  /** The context of the Representation you want to load. */
50
45
  content: {
51
46
  adaptation: Adaptation;
@@ -68,6 +63,8 @@ export interface IRepresentationStreamArguments<TSegmentDataType> {
68
63
  * Observable once the corresponding segments have been pushed).
69
64
  */
70
65
  terminate$: Observable<ITerminationOrder>;
66
+ /** Periodically emits the current playback conditions. */
67
+ playbackObserver: IReadOnlyPlaybackObserver<IRepresentationStreamPlaybackObservation>;
71
68
  /** Supplementary arguments which configure the RepresentationStream's behavior. */
72
69
  options: IRepresentationStreamOptions;
73
70
  }
@@ -125,4 +122,4 @@ export interface IRepresentationStreamOptions {
125
122
  * @param {Object} args
126
123
  * @returns {Observable}
127
124
  */
128
- export default function RepresentationStream<TSegmentDataType>({ clock$, content, segmentBuffer, segmentFetcher, terminate$, options, }: IRepresentationStreamArguments<TSegmentDataType>): Observable<IRepresentationStreamEvent>;
125
+ export default function RepresentationStream<TSegmentDataType>({ content, options, playbackObserver, segmentBuffer, segmentFetcher, terminate$, }: IRepresentationStreamArguments<TSegmentDataType>): Observable<IRepresentationStreamEvent>;