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
@@ -44,12 +44,12 @@ import {
44
44
  import getWebKitMediaKeysCallbacks from "./webkit_media_keys";
45
45
  import { WebKitMediaKeysConstructor } from "./webkit_media_keys_constructor";
46
46
 
47
- let requestMediaKeySystemAccess : null |
48
- ((keyType : string,
49
- config : MediaKeySystemConfiguration[])
50
- => Observable<MediaKeySystemAccess |
51
- CustomMediaKeySystemAccess>)
52
- = null;
47
+ /** Generic implementation of the navigator.requestMediaKeySystemAccess API. */
48
+ type ICompatRequestMediaKeySystemAccessFn =
49
+ (keyType : string, config : MediaKeySystemConfiguration[]) =>
50
+ Observable<MediaKeySystemAccess | CustomMediaKeySystemAccess>;
51
+
52
+ let requestMediaKeySystemAccess : null | ICompatRequestMediaKeySystemAccessFn = null;
53
53
 
54
54
  let _setMediaKeys :
55
55
  ((elt: HTMLMediaElement, mediaKeys: MediaKeys | ICustomMediaKeys | null) => void) =
@@ -17,8 +17,8 @@
17
17
  import {
18
18
  merge as observableMerge,
19
19
  Subject,
20
+ takeUntil,
20
21
  } from "rxjs";
21
- import { takeUntil } from "rxjs/operators";
22
22
  import { base64ToBytes } from "../../../utils/base64";
23
23
  import EventEmitter from "../../../utils/event_emitter";
24
24
  import PPromise from "../../../utils/promise";
@@ -94,12 +94,15 @@ class OldWebkitMediaKeySession
94
94
  const licenseTypedArray =
95
95
  license instanceof ArrayBuffer ? new Uint8Array(license) :
96
96
  license;
97
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
98
- const json = JSON.parse(utf8ToStr(licenseTypedArray));
99
97
  /* eslint-disable @typescript-eslint/no-unsafe-member-access */
98
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
99
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
100
+ const json = JSON.parse(utf8ToStr(licenseTypedArray));
100
101
  const key = base64ToBytes(json.keys[0].k);
101
102
  const kid = base64ToBytes(json.keys[0].kid);
102
103
  /* eslint-enable @typescript-eslint/no-unsafe-member-access */
104
+ /* eslint-enable @typescript-eslint/no-unsafe-argument */
105
+ /* eslint-enable @typescript-eslint/no-unsafe-assignment */
103
106
  resolve(this._vid.webkitAddKey(this._key, key, kid, /* sessionId */ ""));
104
107
  } else {
105
108
  resolve(this._vid.webkitAddKey(this._key, license, null, /* sessionId */ ""));
@@ -17,8 +17,8 @@
17
17
  import {
18
18
  merge as observableMerge,
19
19
  Subject,
20
+ takeUntil,
20
21
  } from "rxjs";
21
- import { takeUntil } from "rxjs/operators";
22
22
  import EventEmitter from "../../../utils/event_emitter";
23
23
  import PPromise from "../../../utils/promise";
24
24
  import { ICompatHTMLMediaElement } from "../../browser_compatibility_types";
@@ -15,10 +15,10 @@
15
15
  */
16
16
 
17
17
  import {
18
+ catchError,
18
19
  defer as observableDefer,
19
20
  Observable,
20
21
  } from "rxjs";
21
- import { catchError } from "rxjs/operators";
22
22
  import log from "../../log";
23
23
  import { getNextBoxOffsets } from "../../parsers/containers/isobmff";
24
24
  import {
@@ -16,16 +16,14 @@
16
16
 
17
17
  import {
18
18
  defer as observableDefer,
19
+ map,
20
+ mergeMap,
19
21
  Observable,
20
22
  of as observableOf,
21
23
  race as observableRace,
24
+ take,
22
25
  timer as observableTimer,
23
26
  } from "rxjs";
24
- import {
25
- mapTo,
26
- mergeMap,
27
- take,
28
- } from "rxjs/operators";
29
27
  import log from "../../log";
30
28
  import castToObservable from "../../utils/cast_to_observable";
31
29
  import tryCatch from "../../utils/rx-try_catch";
@@ -68,6 +66,6 @@ export default function loadSession(
68
66
  return observableRace(
69
67
  observableTimer(EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES),
70
68
  onKeyStatusesChange$(session)
71
- ).pipe(take(1), mapTo(isLoaded));
69
+ ).pipe(take(1), map(() => isLoaded));
72
70
  }));
73
71
  }
@@ -20,24 +20,21 @@
20
20
  */
21
21
 
22
22
  import {
23
+ NEVER,
24
+ Observable,
23
25
  combineLatest as observableCombineLatest,
24
26
  defer as observableDefer,
27
+ delay,
28
+ distinctUntilChanged,
25
29
  fromEvent as observableFromEvent,
26
30
  interval as observableInterval,
31
+ map,
27
32
  merge as observableMerge,
28
- NEVER,
29
- Observable,
30
33
  of as observableOf,
31
- } from "rxjs";
32
- import {
33
- delay,
34
- distinctUntilChanged,
35
- map,
36
- mapTo,
37
34
  startWith,
38
35
  switchMap,
39
36
  throttleTime,
40
- } from "rxjs/operators";
37
+ } from "rxjs";
41
38
  import config from "../config";
42
39
  import log from "../log";
43
40
  import { IEventEmitter } from "../utils/event_emitter";
@@ -137,7 +134,7 @@ function compatibleListener<T extends Event>(
137
134
  if (isNonEmptyString(mem)) {
138
135
  return observableFromEvent(element, mem) as Observable<T>;
139
136
  } else {
140
- if (__DEV__) {
137
+ if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
141
138
  log.warn(`compat: element ${element.tagName}` +
142
139
  " does not support any of these events: " +
143
140
  prefixedEvents.join(", "));
@@ -188,20 +185,13 @@ function visibilityChange() : Observable<boolean> {
188
185
  });
189
186
  }
190
187
 
191
- /**
192
- * @returns {Observable}
193
- */
194
- function videoSizeChange() : Observable<unknown> {
195
- return observableFromEvent(window, "resize");
196
- }
197
-
198
188
  /**
199
189
  * Emit `true` if the page is considered active.
200
190
  * `false` when considered inactive.
201
191
  * Emit the original value on subscription.
202
192
  * @returns {Observable}
203
193
  */
204
- function isActive() : Observable<boolean> {
194
+ function isPageActive() : Observable<boolean> {
205
195
  return visibilityChange().pipe(
206
196
  switchMap((x) => {
207
197
  if (!x) {
@@ -271,7 +261,7 @@ function onPictureInPictureEvent$(
271
261
  }).pictureInPictureWindow ?? null,
272
262
  }))),
273
263
  observableFromEvent(mediaElement, "leavepictureinpicture")
274
- .pipe(mapTo({ isEnabled: false, pipWindow: null }))
264
+ .pipe(map(() => ({ isEnabled: false, pipWindow: null })))
275
265
  ).pipe(startWith(initialState));
276
266
  });
277
267
  }
@@ -301,6 +291,7 @@ function isVideoVisible(
301
291
  * Get video width from HTML video element, or video estimated dimensions
302
292
  * when Picture-in-Picture is activated.
303
293
  * @param {HTMLMediaElement} mediaElement
294
+ * @param {Observable} pip$
304
295
  * @returns {Observable}
305
296
  */
306
297
  function videoWidth$(
@@ -310,7 +301,7 @@ function videoWidth$(
310
301
  return observableCombineLatest([
311
302
  pip$,
312
303
  observableInterval(20000).pipe(startWith(null)),
313
- videoSizeChange().pipe(throttleTime(500), startWith(null)),
304
+ observableFromEvent(window, "resize").pipe(throttleTime(500), startWith(null)),
314
305
  ]).pipe(
315
306
  switchMap(([ pip ]) : Observable<number> => {
316
307
  if (!pip.isEnabled) {
@@ -451,7 +442,7 @@ const onKeyError$ = compatibleListener(["keyerror", "error"]);
451
442
  const onKeyStatusesChange$ = compatibleListener(["keystatuseschange"]);
452
443
 
453
444
  export {
454
- isActive,
445
+ isPageActive,
455
446
  isVideoVisible,
456
447
  videoWidth$,
457
448
  onPlayPause$,
@@ -16,15 +16,13 @@
16
16
 
17
17
  import {
18
18
  defer as observableDefer,
19
+ distinctUntilChanged,
19
20
  interval as observableInterval,
21
+ map,
20
22
  Observable,
21
23
  Observer,
22
- } from "rxjs";
23
- import {
24
- distinctUntilChanged,
25
- map,
26
24
  startWith,
27
- } from "rxjs/operators";
25
+ } from "rxjs";
28
26
  import log from "../log";
29
27
  import isNode from "./is_node";
30
28
 
@@ -35,7 +35,7 @@ export default function setElementSrc$(
35
35
  url : string
36
36
  ) : Observable<void> {
37
37
  return new Observable((observer : Observer<void>) => {
38
- log.info("Setting URL to Element", url, mediaElement);
38
+ log.info("Setting URL to HTMLMediaElement", url);
39
39
 
40
40
  mediaElement.src = url;
41
41
 
@@ -17,8 +17,8 @@
17
17
  import {
18
18
  Observable,
19
19
  of as observableOf,
20
+ take,
20
21
  } from "rxjs";
21
- import { take } from "rxjs/operators";
22
22
  import { READY_STATES } from "./browser_compatibility_types";
23
23
  import { onLoadedMetadata$ } from "./event_listeners";
24
24
 
@@ -17,8 +17,8 @@
17
17
  import {
18
18
  Observable,
19
19
  of as observableOf,
20
+ take,
20
21
  } from "rxjs";
21
- import { take } from "rxjs/operators";
22
22
  import { onSourceOpen$ } from "./event_listeners";
23
23
 
24
24
  /**
package/src/config.ts CHANGED
@@ -323,7 +323,7 @@ export default {
323
323
  */
324
324
  DEFAULT_LIVE_GAP: {
325
325
  DEFAULT: 10,
326
- LOW_LATENCY: 3,
326
+ LOW_LATENCY: 3.5,
327
327
  },
328
328
 
329
329
  /**
@@ -457,17 +457,12 @@ export default {
457
457
  },
458
458
 
459
459
  /**
460
- * Minimum interval at which timeupdate events will be "constructed". This
460
+ * Minimum interval at which playback information samples will be taken. This
461
461
  * variable is for the "regular" mediasource strategy (that is, not for the
462
462
  * directfile API.
463
463
  *
464
- * Those events are the base of various important mechanisms in the player:
465
- * - set the clock used to regularly check which segments should be loaded
466
- * - set the clock for the ABR strategy.
467
- * - used to trigger positionUpdate events.
468
- *
469
- * This common logic is for performance reasons, as we call multiple browser's
470
- * APIs which are useful for most of these.
464
+ * At each of these interval, various different modules in the RxPlayer will
465
+ * run based on the information communicated.
471
466
  *
472
467
  * Keep in mind this is the minimum interval. This logic will also be
473
468
  * triggered when various events of the media element are received.
@@ -20,13 +20,13 @@ be the most adapted, that is the quality which:
20
20
  be not as pleasant to watch)
21
21
 
22
22
  In order to estimate the quality that maximizes the playback experience, the ABR
23
- relies on two "estimators":
24
- 1. The bandwidth estimator picks a quality from network conditions.
25
- 2. The buffer based chooser relies on buffering conditions to make its
26
- choices.
23
+ relies on multiple algorithms:
24
+ 1. One which picks a quality from network conditions.
25
+ 2. Another relies on buffering conditions to make its choices.
26
+ 3. A third, only used in very rare conditions, "guess" the right quality by
27
+ progressively raising the quality until an un-maintainable one is found.
27
28
 
28
-
29
- ## Bandwidth estimator #########################################################
29
+ ## Bandwidth-based algorithm ###################################################
30
30
 
31
31
  ```
32
32
  Long
@@ -85,7 +85,7 @@ The quality's bitrate ceiling relies on it to return the chosen quality.
85
85
 
86
86
 
87
87
 
88
- ## Buffer based estimator ######################################################
88
+ ## Buffer-based algorithm ######################################################
89
89
 
90
90
  ```
91
91
  Qualities
@@ -15,22 +15,26 @@
15
15
  */
16
16
 
17
17
  import {
18
+ combineLatest as observableCombineLatest,
19
+ map,
18
20
  Observable,
19
21
  of as observableOf,
20
22
  } from "rxjs";
21
23
  import log from "../../log";
22
24
  import { Representation } from "../../manifest";
25
+ import objectAssign from "../../utils/object_assign";
26
+ import { ISharedReference } from "../../utils/reference";
23
27
  import takeFirstSet from "../../utils/take_first_set";
24
28
  import { IBufferType } from "../segment_buffers";
25
29
  import BandwidthEstimator from "./bandwidth_estimator";
26
- import createFilters from "./create_filters";
27
30
  import RepresentationEstimator, {
28
31
  IABREstimate,
32
+ IABRFiltersObject,
29
33
  IABRStreamEvents,
30
- IRepresentationEstimatorClockTick,
34
+ IRepresentationEstimatorPlaybackObservation,
31
35
  } from "./representation_estimator";
32
36
 
33
- export type IABRManagerClockTick = IRepresentationEstimatorClockTick;
37
+ export type IABRManagerPlaybackObservation = IRepresentationEstimatorPlaybackObservation;
34
38
 
35
39
  // Options for every RepresentationEstimator
36
40
  interface IRepresentationEstimatorsThrottlers {
@@ -48,15 +52,16 @@ export interface IABRManagerArguments {
48
52
  lowLatencyMode: boolean; // Some settings can depend on wether you're playing a
49
53
  // low-latency content. Set it to `true` if you're playing
50
54
  // such content.
51
- minAutoBitrates: Partial<Record<IBufferType, // Minimum bitrate chosen
52
- Observable<number>>>; // when in auto mode, per
53
- // type (0 by default)
54
- maxAutoBitrates: Partial<Record<IBufferType, // Maximum bitrate chosen
55
- Observable<number>>>; // when in auto mode, per
56
- // type (Infinity by default)
57
- manualBitrates: Partial<Record<IBufferType, // Manual bitrate set for
58
- Observable<number>>>; // a given type (-1 for
59
- // auto mode)
55
+
56
+ /** Minimum bitrate chosen when in auto mode, per type (0 by default) */
57
+ minAutoBitrates: Partial<Record<IBufferType, ISharedReference<number>>>;
58
+
59
+ /** Maximum bitrate chosen when in auto mode, per type (0 by default) */
60
+ maxAutoBitrates: Partial<Record<IBufferType, ISharedReference<number>>>;
61
+
62
+ /** Manually forced bitrate set for a given type (`-1` for auto mode */
63
+ manualBitrates: Partial<Record<IBufferType, ISharedReference<number>>>;
64
+
60
65
  throttlers: IRepresentationEstimatorsThrottlers; // Throttle from external events
61
66
  }
62
67
 
@@ -70,9 +75,9 @@ export interface IABRManagerArguments {
70
75
  export default class ABRManager {
71
76
  private _bandwidthEstimators : Partial<Record<IBufferType, BandwidthEstimator>>;
72
77
  private _initialBitrates : Partial<Record<IBufferType, number>>;
73
- private _manualBitrates : Partial<Record<IBufferType, Observable<number>>>;
74
- private _minAutoBitrates : Partial<Record<IBufferType, Observable<number>>>;
75
- private _maxAutoBitrates : Partial<Record<IBufferType, Observable<number>>>;
78
+ private _manualBitrates : Partial<Record<IBufferType, ISharedReference<number>>>;
79
+ private _minAutoBitrates : Partial<Record<IBufferType, ISharedReference<number>>>;
80
+ private _maxAutoBitrates : Partial<Record<IBufferType, ISharedReference<number>>>;
76
81
  private _throttlers : IRepresentationEstimatorsThrottlers;
77
82
  private _lowLatencyMode : boolean;
78
83
 
@@ -95,24 +100,25 @@ export default class ABRManager {
95
100
  * state).
96
101
  * @param {string} type
97
102
  * @param {Array.<Representation>} representations
98
- * @param {Observable<Object>} clock$
103
+ * @param {Observable<Object>} observation$
99
104
  * @param {Observable<Object>} streamEvents$
100
105
  * @returns {Observable}
101
106
  */
102
107
  public get$(
103
108
  type : IBufferType,
104
109
  representations : Representation[],
105
- clock$ : Observable<IABRManagerClockTick>,
110
+ observation$ : Observable<IABRManagerPlaybackObservation>,
106
111
  streamEvents$ : Observable<IABRStreamEvents>
107
112
  ) : Observable<IABREstimate> {
108
113
  const bandwidthEstimator = this._getBandwidthEstimator(type);
109
114
  const manualBitrate$ =
110
- takeFirstSet<Observable<number>>(this._manualBitrates[type], observableOf(-1));
115
+ takeFirstSet<Observable<number>>(this._manualBitrates[type]?.asObservable(),
116
+ observableOf(-1));
111
117
  const minAutoBitrate$ =
112
- takeFirstSet<Observable<number>>(this._minAutoBitrates[type],
118
+ takeFirstSet<Observable<number>>(this._minAutoBitrates[type]?.asObservable(),
113
119
  observableOf(0));
114
120
  const maxAutoBitrate$ =
115
- takeFirstSet<Observable<number>>(this._maxAutoBitrates[type],
121
+ takeFirstSet<Observable<number>>(this._maxAutoBitrates[type]?.asObservable(),
116
122
  observableOf(Infinity));
117
123
  const initialBitrate = takeFirstSet<number>(this._initialBitrates[type], 0);
118
124
  const filters$ = createFilters(this._throttlers.limitWidth[type],
@@ -120,7 +126,7 @@ export default class ABRManager {
120
126
  this._throttlers.throttle[type]);
121
127
  return RepresentationEstimator({ bandwidthEstimator,
122
128
  streamEvents$,
123
- clock$,
129
+ observation$,
124
130
  filters$,
125
131
  initialBitrate,
126
132
  manualBitrate$,
@@ -145,3 +151,38 @@ export default class ABRManager {
145
151
  return originalBandwidthEstimator;
146
152
  }
147
153
  }
154
+
155
+ /**
156
+ * Create Observable that merge several throttling Observables into one.
157
+ * @param {Observable} limitWidth$ - Emit the width at which the chosen
158
+ * Representation should be limited.
159
+ * @param {Observable} throttleBitrate$ - Emit the maximum bitrate authorized.
160
+ * @param {Observable} throttle$ - Also emit the maximum bitrate authorized.
161
+ * Here for legacy reasons.
162
+ * @returns {Observable}
163
+ */
164
+ function createFilters(
165
+ limitWidth$? : Observable<number>,
166
+ throttleBitrate$? : Observable<number>,
167
+ throttle$? : Observable<number>
168
+ ) : Observable<IABRFiltersObject> {
169
+ const deviceEventsArray : Array<Observable<IABRFiltersObject>> = [];
170
+
171
+ if (limitWidth$ != null) {
172
+ deviceEventsArray.push(limitWidth$.pipe(map(width => ({ width }))));
173
+ }
174
+ if (throttle$ != null) {
175
+ deviceEventsArray.push(throttle$.pipe(map(bitrate => ({ bitrate }))));
176
+ }
177
+ if (throttleBitrate$ != null) {
178
+ deviceEventsArray.push(throttleBitrate$.pipe(map(bitrate => ({ bitrate }))));
179
+ }
180
+
181
+ // Emit restrictions on the pools of available representations to choose
182
+ // from.
183
+ return deviceEventsArray.length > 0 ?
184
+ observableCombineLatest(deviceEventsArray)
185
+ .pipe(map((args : IABRFiltersObject[]) =>
186
+ objectAssign({}, ...args) as IABRFiltersObject)) :
187
+ observableOf({});
188
+ }
@@ -15,7 +15,7 @@
15
15
  */
16
16
 
17
17
  import config from "../../config";
18
- import EWMA from "./ewma";
18
+ import EWMA from "./utils/ewma";
19
19
 
20
20
  const { ABR_MINIMUM_TOTAL_BYTES,
21
21
  ABR_MINIMUM_CHUNK_SIZE,
@@ -14,12 +14,14 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { Observable } from "rxjs";
18
- import { map } from "rxjs/operators";
17
+ import {
18
+ map,
19
+ Observable,
20
+ } from "rxjs";
19
21
  import log from "../../log";
20
22
  import getBufferLevels from "./get_buffer_levels";
21
23
  import getEstimateFromBufferLevels, {
22
- IBufferBasedChooserClockTick,
24
+ IBufferBasedChooserPlaybackObservation,
23
25
  } from "./get_estimate_from_buffer_levels";
24
26
 
25
27
  /**
@@ -38,13 +40,13 @@ import getEstimateFromBufferLevels, {
38
40
  * @returns {Observable}
39
41
  */
40
42
  export default function BufferBasedChooser(
41
- update$ : Observable<IBufferBasedChooserClockTick>,
43
+ update$ : Observable<IBufferBasedChooserPlaybackObservation>,
42
44
  bitrates: number[]
43
45
  ) : Observable<number|undefined> {
44
46
  const levelsMap = getBufferLevels(bitrates);
45
47
  log.debug("ABR: Steps for buffer based chooser.",
46
48
  levelsMap.map((l, i) => ({ bufferLevel: l, bitrate: bitrates[i] })));
47
- return update$.pipe(map((clockTick) => {
48
- return getEstimateFromBufferLevels(clockTick, bitrates, levelsMap);
49
+ return update$.pipe(map((playbackObservation) => {
50
+ return getEstimateFromBufferLevels(playbackObservation, bitrates, levelsMap);
49
51
  }));
50
52
  }
@@ -40,6 +40,9 @@ export default function getBufferLevels(bitrates : number[]) : number[] {
40
40
  return 0;
41
41
  }
42
42
  const boundedIndex = Math.min(Math.max(1, index), bitrates.length - 1);
43
+ if (bitrates[boundedIndex] === bitrates[boundedIndex - 1]) {
44
+ return minBufferLevelForBitrate(index - 1);
45
+ }
43
46
  return Vp * (gp + (bitrates[boundedIndex] * utilities[boundedIndex - 1] -
44
47
  bitrates[boundedIndex - 1] * utilities[boundedIndex]) / (bitrates[boundedIndex] -
45
48
  bitrates[boundedIndex - 1])) + 4;
@@ -17,7 +17,7 @@
17
17
  import log from "../../log";
18
18
  import arrayFindIndex from "../../utils/array_find_index";
19
19
 
20
- export interface IBufferBasedChooserClockTick {
20
+ export interface IBufferBasedChooserPlaybackObservation {
21
21
  bufferGap : number; // Difference in seconds between the current position and
22
22
  // the next non-buffered position
23
23
  currentBitrate? : number; // The bitrate of the currently downloaded segments, in bps
@@ -28,17 +28,17 @@ export interface IBufferBasedChooserClockTick {
28
28
 
29
29
  /**
30
30
  * From the buffer gap, choose a representation.
31
- * @param {Object} clockTick
31
+ * @param {Object} playbackObservation
32
32
  * @param {Array.<Number>} bitrates
33
33
  * @param {Array.<Number>} bufferLevels
34
34
  * @returns {Object|undefined}
35
35
  */
36
36
  export default function getEstimateFromBufferLevels(
37
- clockTick : IBufferBasedChooserClockTick,
37
+ playbackObservation : IBufferBasedChooserPlaybackObservation,
38
38
  bitrates : number[],
39
39
  bufferLevels : number[]
40
40
  ) : number|undefined {
41
- const { bufferGap, currentBitrate, currentScore, speed } = clockTick;
41
+ const { bufferGap, currentBitrate, currentScore, speed } = playbackObservation;
42
42
  if (currentBitrate == null) {
43
43
  return bitrates[0];
44
44
  }