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
@@ -15,38 +15,14 @@
15
15
  */
16
16
 
17
17
  import log from "../../log";
18
+ import Manifest, {
19
+ Adaptation,
20
+ ISegment,
21
+ Period,
22
+ Representation,
23
+ } from "../../manifest";
18
24
  import objectValues from "../../utils/object_values";
19
25
 
20
- export interface IProgressEventValue {
21
- duration : number; // current duration for the request, in ms
22
- id: string|number; // unique ID for the request
23
- size : number; // current downloaded size, in bytes
24
- timestamp : number; // timestamp of the progress event since unix epoch, in ms
25
- totalSize : number; // total size to download, in bytes
26
- }
27
-
28
- export interface IBeginRequestValue {
29
- id: string|number;
30
- time: number;
31
- duration: number;
32
- requestTimestamp: number;
33
- }
34
-
35
- export interface IRequestInfo {
36
- duration : number; // duration of the corresponding chunk, in seconds
37
- progress: IProgressEventValue[]; // progress events for this request
38
- requestTimestamp: number; // unix timestamp at which the request began, in ms
39
- time: number; // time at which the corresponding segment begins, in seconds
40
- }
41
-
42
- export interface IProgressEventValue {
43
- duration : number; // current duration for the request, in ms
44
- id: string|number; // unique ID for the request
45
- size : number; // current downloaded size, in bytes
46
- timestamp : number; // timestamp of the progress event since unix epoch, in ms
47
- totalSize : number; // total size to download, in bytes
48
- }
49
-
50
26
  /**
51
27
  * Store information about pending requests, like information about:
52
28
  * - for which segments they are
@@ -65,22 +41,21 @@ export default class PendingRequestsStore {
65
41
  * @param {string} id
66
42
  * @param {Object} payload
67
43
  */
68
- public add(payload : IBeginRequestValue) : void {
69
- const { id, time, duration, requestTimestamp } = payload;
70
- this._currentRequests[id] = { time,
71
- duration,
72
- requestTimestamp,
73
- progress: [] };
44
+ public add(payload : IPendingRequestStoreBegin) : void {
45
+ const { id, requestTimestamp, content } = payload;
46
+ this._currentRequests[id] = { requestTimestamp,
47
+ progress: [],
48
+ content };
74
49
  }
75
50
 
76
51
  /**
77
52
  * Notify of the progress of a currently pending request.
78
53
  * @param {Object} progress
79
54
  */
80
- public addProgress(progress : IProgressEventValue) : void {
55
+ public addProgress(progress : IPendingRequestStoreProgress) : void {
81
56
  const request = this._currentRequests[progress.id];
82
57
  if (request == null) {
83
- if (__DEV__) {
58
+ if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
84
59
  throw new Error("ABR: progress for a request not added");
85
60
  }
86
61
  log.warn("ABR: progress for a request not added");
@@ -95,9 +70,11 @@ export default class PendingRequestsStore {
95
70
  */
96
71
  public remove(id : string) : void {
97
72
  if (this._currentRequests[id] == null) {
98
- if (__DEV__) {
99
- throw new Error("ABR: can't remove unknown request");
100
- }
73
+ // TODO This breaks github actions.
74
+ // Find why
75
+ // if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
76
+ // throw new Error("ABR: can't remove unknown request");
77
+ // }
101
78
  log.warn("ABR: can't remove unknown request");
102
79
  }
103
80
  delete this._currentRequests[id];
@@ -111,6 +88,63 @@ export default class PendingRequestsStore {
111
88
  public getRequests() : IRequestInfo[] {
112
89
  return objectValues(this._currentRequests)
113
90
  .filter((x) : x is IRequestInfo => x != null)
114
- .sort((reqA, reqB) => reqA.time - reqB.time);
91
+ .sort((reqA, reqB) => reqA.content.segment.time - reqB.content.segment.time);
115
92
  }
116
93
  }
94
+
95
+ /**
96
+ * Payload needed to add progress information for a request to the
97
+ * PendingRequestsStore.
98
+ */
99
+ export interface IPendingRequestStoreProgress {
100
+ /** Amount of time since the request has started, in seconds. */
101
+ duration : number;
102
+ /**
103
+ * Same `id` value used to identify that request at the time the corresponding
104
+ * `IABRRequestBeginEventValue` was sent.
105
+ */
106
+ id: string;
107
+ /** Current downloaded size, in bytes. */
108
+ size : number;
109
+ /** Value of `performance.now` at the time this progression report was available. */
110
+ timestamp : number;
111
+ /**
112
+ * Total size of the segment to download (including already-loaded data),
113
+ * in bytes.
114
+ */
115
+ totalSize : number;
116
+ }
117
+
118
+ /** Payload needed to add a request to the PendingRequestsStore. */
119
+ export interface IPendingRequestStoreBegin {
120
+ /**
121
+ * String identifying this request.
122
+ *
123
+ * Only one request communicated to the current `RepresentationEstimator`
124
+ * should have this `id` at the same time.
125
+ */
126
+ id: string;
127
+ /** Value of `performance.now` at the time the request began. */
128
+ requestTimestamp: number;
129
+ /** Context associated to the segment. */
130
+ content: IRequestInfoContent;
131
+ }
132
+
133
+ /** Information linked to a segment request, stored in the PendingRequestsStore. */
134
+ export interface IRequestInfo {
135
+ /** Information on the current progress made by this request. */
136
+ progress: IPendingRequestStoreProgress[];
137
+ /** `Performance.now()` corresponding to the time at which the request began. */
138
+ requestTimestamp: number;
139
+ /** Context associated to the segment. */
140
+ content: IRequestInfoContent;
141
+ }
142
+
143
+ /** Content linked to a segment request. */
144
+ export interface IRequestInfoContent {
145
+ manifest : Manifest;
146
+ period : Period;
147
+ adaptation : Adaptation;
148
+ representation : Representation;
149
+ segment : ISegment;
150
+ }
@@ -17,19 +17,17 @@
17
17
  import {
18
18
  combineLatest as observableCombineLatest,
19
19
  defer as observableDefer,
20
- merge as observableMerge,
21
- Observable,
22
- of as observableOf,
23
- } from "rxjs";
24
- import {
25
20
  filter,
26
21
  ignoreElements,
27
22
  map,
23
+ merge as observableMerge,
24
+ Observable,
25
+ of as observableOf,
28
26
  startWith,
29
27
  switchMap,
30
28
  tap,
31
29
  withLatestFrom,
32
- } from "rxjs/operators";
30
+ } from "rxjs";
33
31
  import log from "../../log";
34
32
  import {
35
33
  Adaptation,
@@ -39,12 +37,25 @@ import {
39
37
  import { getLeftSizeOfRange } from "../../utils/ranges";
40
38
  import BandwidthEstimator from "./bandwidth_estimator";
41
39
  import BufferBasedChooser from "./buffer_based_chooser";
42
- import filterByBitrate from "./filter_by_bitrate";
43
- import filterByWidth from "./filter_by_width";
40
+ import GuessBasedChooser from "./guess_based_chooser";
41
+ import LastEstimateStorage, {
42
+ ABRAlgorithmType,
43
+ } from "./last_estimate_storage";
44
44
  import NetworkAnalyzer from "./network_analyzer";
45
- import PendingRequestsStore from "./pending_requests_store";
45
+ import PendingRequestsStore, {
46
+ IPendingRequestStoreBegin,
47
+ IPendingRequestStoreProgress,
48
+ } from "./pending_requests_store";
46
49
  import RepresentationScoreCalculator from "./representation_score_calculator";
47
- import selectOptimalRepresentation from "./select_optimal_representation";
50
+ import filterByBitrate from "./utils/filter_by_bitrate";
51
+ import filterByWidth from "./utils/filter_by_width";
52
+ import selectOptimalRepresentation from "./utils/select_optimal_representation";
53
+
54
+ // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
55
+ // first type parameter as `any` instead of the perfectly fine `unknown`,
56
+ // leading to linter issues, as it forbids the usage of `any`.
57
+ // This is why we're disabling the eslint rule.
58
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
48
59
 
49
60
  /**
50
61
  * Adaptive BitRate estimate object.
@@ -111,14 +122,17 @@ export interface IABREstimate {
111
122
  knownStableBitrate?: number;
112
123
  }
113
124
 
114
- /** Properties the `RepresentationEstimator` will need at each "clock tick". */
115
- export interface IRepresentationEstimatorClockTick {
125
+ /** Media properties the `RepresentationEstimator` will need to keep track of. */
126
+ export interface IRepresentationEstimatorPlaybackObservation {
116
127
  /**
117
128
  * For the concerned media buffer, difference in seconds between the next
118
129
  * position where no segment data is available and the current position.
119
130
  */
120
131
  bufferGap : number;
121
- /** The position, in seconds, the media element was in at the time of the tick. */
132
+ /**
133
+ * The position, in seconds, the media element was in at the time of the
134
+ * observation.
135
+ */
122
136
  position : number;
123
137
  /**
124
138
  * Last "playback rate" set by the user. This is the ideal "playback rate" at
@@ -127,14 +141,22 @@ export interface IRepresentationEstimatorClockTick {
127
141
  speed : number;
128
142
  /** `duration` property of the HTMLMediaElement on which the content plays. */
129
143
  duration : number;
144
+ /**
145
+ * For live contents only, difference between the maximum playable position
146
+ * and the current position.
147
+ * `undefined` for non-live contents.
148
+ */
149
+ liveGap : number | undefined;
130
150
  }
131
151
 
132
152
  /** Content of the `IABRMetricsEvent` event's payload. */
133
- interface IABRMetricsEventValue {
153
+ export interface IABRMetricsEventValue {
134
154
  /** Time the request took to perform the request, in milliseconds. */
135
- duration: number;
155
+ requestDuration: number;
136
156
  /** Amount of bytes downloaded with this request. */
137
157
  size: number;
158
+ /** Duration of the loaded segment, in seconds. */
159
+ segmentDuration: number | undefined;
138
160
  /** Context about the segment downloaded. */
139
161
  content: { representation: Representation;
140
162
  adaptation: Adaptation;
@@ -173,24 +195,7 @@ export interface IABRRepresentationChangeEvent {
173
195
  */
174
196
  export interface IABRRequestBeginEvent {
175
197
  type: "requestBegin";
176
- value: {
177
- /**
178
- * String identifying this request.
179
- *
180
- * Only one request communicated to the current `RepresentationEstimator`
181
- * should have this `id` at the same time.
182
- */
183
- id: string;
184
- /** Presentation time at which the corresponding segment begins, in seconds. */
185
- time: number;
186
- /**
187
- * Difference between the presentation end time and start time of the
188
- * corresponding segment, in seconds.
189
- */
190
- duration: number;
191
- /** Value of `performance.now` at the time the request began. */
192
- requestTimestamp: number;
193
- };
198
+ value: IABRRequestBeginEventValue;
194
199
  }
195
200
 
196
201
  /**
@@ -201,24 +206,7 @@ export interface IABRRequestBeginEvent {
201
206
  */
202
207
  export interface IABRRequestProgressEvent {
203
208
  type: "progress";
204
- value: {
205
- /** Amount of time since the request has started, in seconds. */
206
- duration : number;
207
- /**
208
- * Same `id` value used to identify that request at the time the corresponding
209
- * `IABRRequestBeginEvent` event was sent.
210
- */
211
- id: string;
212
- /** Current downloaded size, in bytes. */
213
- size : number;
214
- /** Value of `performance.now` at the time this progression report was available. */
215
- timestamp : number;
216
- /**
217
- * Total size of the segment to download (including already-loaded data),
218
- * in bytes.
219
- */
220
- totalSize : number;
221
- };
209
+ value: IABRRequestProgressEventValue;
222
210
  }
223
211
 
224
212
  /**
@@ -229,13 +217,22 @@ export interface IABRRequestProgressEvent {
229
217
  */
230
218
  export interface IABRRequestEndEvent {
231
219
  type: "requestEnd";
232
- value: {
233
- /**
234
- * Same `id` value used to identify that request at the time the corresponding
235
- * `IABRRequestBeginEvent` event was sent.
236
- */
237
- id: string;
238
- };
220
+ value: IABRRequestEndEventValue;
221
+ }
222
+
223
+ /** Value associated with a `IABRRequestBeginEvent`. */
224
+ export type IABRRequestBeginEventValue = IPendingRequestStoreBegin;
225
+
226
+ /** Value associated with a `IABRRequestProgressEvent`. */
227
+ export type IABRRequestProgressEventValue = IPendingRequestStoreProgress;
228
+
229
+ /** Value associated with a `IABRRequestEndEvent`. */
230
+ export interface IABRRequestEndEventValue {
231
+ /**
232
+ * Same `id` value used to identify that request at the time the corresponding
233
+ * `IABRRequestBeginEvent` event was sent.
234
+ */
235
+ id: string;
239
236
  }
240
237
 
241
238
  /** Object allowing to filter some Representations out based on different attributes. */
@@ -297,7 +294,7 @@ export interface IRepresentationEstimatorArguments {
297
294
  /** Events indicating current playback and network conditions. */
298
295
  streamEvents$ : Observable<IABRStreamEvents>;
299
296
  /** Observable emitting regularly the current playback situation. */
300
- clock$ : Observable<IRepresentationEstimatorClockTick>;
297
+ observation$ : Observable<IRepresentationEstimatorPlaybackObservation>;
301
298
  /** Observable allows to filter out Representation in our estimations. */
302
299
  filters$ : Observable<IABRFiltersObject>;
303
300
  /**
@@ -372,17 +369,17 @@ function getFilteredRepresentations(
372
369
  representations : Representation[],
373
370
  filters : IABRFiltersObject
374
371
  ) : Representation[] {
375
- let _representations = representations;
372
+ let filteredReps = representations;
376
373
 
377
374
  if (filters.bitrate != null) {
378
- _representations = filterByBitrate(_representations, filters.bitrate);
375
+ filteredReps = filterByBitrate(filteredReps, filters.bitrate);
379
376
  }
380
377
 
381
378
  if (filters.width != null) {
382
- _representations = filterByWidth(_representations, filters.width);
379
+ filteredReps = filterByWidth(filteredReps, filters.width);
383
380
  }
384
381
 
385
- return _representations;
382
+ return filteredReps;
386
383
  }
387
384
 
388
385
  /**
@@ -399,7 +396,7 @@ function getFilteredRepresentations(
399
396
  */
400
397
  export default function RepresentationEstimator({
401
398
  bandwidthEstimator,
402
- clock$,
399
+ observation$,
403
400
  filters$,
404
401
  initialBitrate,
405
402
  lowLatencyMode,
@@ -420,18 +417,21 @@ export default function RepresentationEstimator({
420
417
  * @param {Object} value
421
418
  */
422
419
  function onMetric(value : IABRMetricsEventValue) : void {
423
- const { duration, size, content } = value;
420
+ const { requestDuration, segmentDuration, size, content } = value;
424
421
 
425
422
  // calculate bandwidth
426
- bandwidthEstimator.addSample(duration, size);
427
-
428
- // calculate "maintainability score"
429
- const { segment } = content;
430
- const requestDuration = duration / 1000;
431
- const segmentDuration = segment.duration;
432
-
433
- const { representation } = content;
434
- scoreCalculator.addSample(representation, requestDuration, segmentDuration);
423
+ bandwidthEstimator.addSample(requestDuration, size);
424
+
425
+ if (!content.segment.isInit) {
426
+ // calculate "maintainability score"
427
+ const { segment, representation } = content;
428
+ if (segmentDuration === undefined && !segment.complete) {
429
+ // We cannot know the real duration of the segment
430
+ return;
431
+ }
432
+ const segDur = segmentDuration ?? segment.duration;
433
+ scoreCalculator.addSample(representation, requestDuration / 1000, segDur);
434
+ }
435
435
  }
436
436
 
437
437
  const metrics$ = streamEvents$.pipe(
@@ -490,108 +490,183 @@ export default function RepresentationEstimator({
490
490
  }
491
491
 
492
492
  // -- AUTO mode --
493
- let lastEstimatedBitrate : number | undefined;
494
- let forceBandwidthMode = true;
493
+
494
+ /** Store the previous estimate made here. */
495
+ const prevEstimate = new LastEstimateStorage();
496
+
497
+ let allowBufferBasedEstimates = false;
498
+ const guessBasedChooser = new GuessBasedChooser(scoreCalculator, prevEstimate);
495
499
 
496
500
  // Emit each time a buffer-based estimation should be actualized (each
497
501
  // time a segment is added).
498
- const bufferBasedClock$ = streamEvents$.pipe(
502
+ const bufferBasedobservation$ = streamEvents$.pipe(
499
503
  filter((e) : e is IABRAddedSegmentEvent => e.type === "added-segment"),
500
- withLatestFrom(clock$),
504
+ withLatestFrom(observation$),
501
505
  map(([{ value: evtValue }, { speed, position } ]) => {
502
506
  const timeRanges = evtValue.buffered;
503
507
  const bufferGap = getLeftSizeOfRange(timeRanges, position);
504
508
  const { representation } = evtValue.content;
505
- const currentScore = scoreCalculator.getEstimate(representation);
509
+ const scoreData = scoreCalculator.getEstimate(representation);
510
+ const currentScore = scoreData?.[0];
506
511
  const currentBitrate = representation.bitrate;
507
512
  return { bufferGap, currentBitrate, currentScore, speed };
508
513
  })
509
514
  );
510
515
 
511
516
  const bitrates = representations.map(r => r.bitrate);
512
- const bufferBasedEstimation$ = BufferBasedChooser(bufferBasedClock$, bitrates)
517
+ const bufferBasedEstimation$ = BufferBasedChooser(bufferBasedobservation$, bitrates)
513
518
  .pipe(startWith(undefined));
514
519
 
515
- return observableCombineLatest([ clock$,
520
+ return observableCombineLatest([ observation$,
516
521
  minAutoBitrate$,
517
522
  maxAutoBitrate$,
518
523
  filters$,
519
524
  bufferBasedEstimation$ ]
520
525
  ).pipe(
521
526
  withLatestFrom(currentRepresentation$),
522
- map(([ [ clock, minAutoBitrate, maxAutoBitrate, filters, bufferBasedBitrate ],
527
+ map(([ [ observation,
528
+ minAutoBitrate,
529
+ maxAutoBitrate,
530
+ filters,
531
+ bufferBasedBitrate ],
523
532
  currentRepresentation ]
524
533
  ) : IABREstimate => {
525
- const _representations = getFilteredRepresentations(representations,
526
- filters);
534
+ const { bufferGap, liveGap } = observation;
535
+
536
+ const filteredReps = getFilteredRepresentations(representations,
537
+ filters);
527
538
  const requests = requestsStore.getRequests();
528
539
  const { bandwidthEstimate, bitrateChosen } = networkAnalyzer
529
- .getBandwidthEstimate(clock,
540
+ .getBandwidthEstimate(observation,
530
541
  bandwidthEstimator,
531
542
  currentRepresentation,
532
543
  requests,
533
- lastEstimatedBitrate);
534
-
535
- lastEstimatedBitrate = bandwidthEstimate;
544
+ prevEstimate.bandwidth);
536
545
 
537
546
  const stableRepresentation = scoreCalculator.getLastStableRepresentation();
538
- const knownStableBitrate = stableRepresentation == null ?
547
+ const knownStableBitrate = stableRepresentation === null ?
539
548
  undefined :
540
- stableRepresentation.bitrate / (clock.speed > 0 ? clock.speed : 1);
541
-
542
- const { bufferGap } = clock;
543
- if (!forceBandwidthMode && bufferGap <= 5) {
544
- forceBandwidthMode = true;
545
- } else if (forceBandwidthMode && isFinite(bufferGap) && bufferGap > 10) {
546
- forceBandwidthMode = false;
549
+ stableRepresentation.bitrate / (observation.speed > 0 ? observation.speed :
550
+ 1);
551
+
552
+ if (allowBufferBasedEstimates && bufferGap <= 5) {
553
+ allowBufferBasedEstimates = false;
554
+ } else if (!allowBufferBasedEstimates &&
555
+ isFinite(bufferGap) &&
556
+ bufferGap > 10)
557
+ {
558
+ allowBufferBasedEstimates = true;
547
559
  }
548
560
 
549
- const chosenRepFromBandwidth = selectOptimalRepresentation(_representations,
561
+ /**
562
+ * Representation chosen when considering only [pessimist] bandwidth
563
+ * calculation.
564
+ * This is a safe enough choice but might be lower than what the user
565
+ * could actually profit from.
566
+ */
567
+ const chosenRepFromBandwidth = selectOptimalRepresentation(filteredReps,
550
568
  bitrateChosen,
551
569
  minAutoBitrate,
552
570
  maxAutoBitrate);
553
- if (forceBandwidthMode) {
554
- log.debug("ABR: Choosing representation with bandwidth estimation.",
555
- chosenRepFromBandwidth);
571
+
572
+ let currentBestBitrate = chosenRepFromBandwidth.bitrate;
573
+
574
+ /**
575
+ * Representation chosen when considering the current buffer size.
576
+ * If defined, takes precedence over `chosenRepFromBandwidth`.
577
+ *
578
+ * This is a very safe choice, yet it is very slow and might not be
579
+ * adapted to cases where a buffer cannot be build, such as live contents.
580
+ *
581
+ * `null` if this buffer size mode is not enabled or if we don't have a
582
+ * choice from it yet.
583
+ */
584
+ let chosenRepFromBufferSize : Representation | null = null;
585
+ if (allowBufferBasedEstimates &&
586
+ bufferBasedBitrate !== undefined &&
587
+ bufferBasedBitrate > currentBestBitrate)
588
+ {
589
+
590
+ chosenRepFromBufferSize = selectOptimalRepresentation(filteredReps,
591
+ bufferBasedBitrate,
592
+ minAutoBitrate,
593
+ maxAutoBitrate);
594
+ currentBestBitrate = chosenRepFromBufferSize.bitrate;
595
+ }
596
+
597
+ /**
598
+ * Representation chosen by the more adventurous `GuessBasedChooser`,
599
+ * which iterates through Representations one by one until finding one
600
+ * that cannot be "maintained".
601
+ *
602
+ * If defined, takes precedence over both `chosenRepFromBandwidth` and
603
+ * `chosenRepFromBufferSize`.
604
+ *
605
+ * This is the riskiest choice (in terms of rebuffering chances) but is
606
+ * only enabled when no other solution is adapted (for now, this just
607
+ * applies for low-latency contents when playing close to the live
608
+ * edge).
609
+ *
610
+ * `null` if not enabled or if there's currently no guess.
611
+ */
612
+ let chosenRepFromGuessMode : Representation | null = null;
613
+ if (lowLatencyMode &&
614
+ currentRepresentation !== null &&
615
+ liveGap !== undefined &&
616
+ liveGap < 40)
617
+ {
618
+ chosenRepFromGuessMode = guessBasedChooser.getGuess(representations,
619
+ observation,
620
+ currentRepresentation,
621
+ currentBestBitrate,
622
+ requests);
623
+ }
624
+
625
+ if (chosenRepFromGuessMode !== null &&
626
+ chosenRepFromGuessMode.bitrate > currentBestBitrate) {
627
+ log.debug("ABR: Choosing representation with guess-based estimation.",
628
+ chosenRepFromGuessMode.bitrate,
629
+ chosenRepFromGuessMode.id);
630
+ prevEstimate.update(chosenRepFromGuessMode,
631
+ bandwidthEstimate,
632
+ ABRAlgorithmType.GuessBased);
556
633
  return { bitrate: bandwidthEstimate,
557
- representation: chosenRepFromBandwidth,
558
- urgent: networkAnalyzer.isUrgent(chosenRepFromBandwidth.bitrate,
634
+ representation: chosenRepFromGuessMode,
635
+ urgent: currentRepresentation === null ||
636
+ chosenRepFromGuessMode.bitrate < currentRepresentation.bitrate,
637
+ manual: false,
638
+ knownStableBitrate };
639
+ } else if (chosenRepFromBufferSize !== null) {
640
+ log.debug("ABR: Choosing representation with buffer-based estimation.",
641
+ chosenRepFromBufferSize.bitrate,
642
+ chosenRepFromBufferSize.id);
643
+ prevEstimate.update(chosenRepFromBufferSize,
644
+ bandwidthEstimate,
645
+ ABRAlgorithmType.BufferBased);
646
+ return { bitrate: bandwidthEstimate,
647
+ representation: chosenRepFromBufferSize,
648
+ urgent: networkAnalyzer.isUrgent(chosenRepFromBufferSize.bitrate,
559
649
  currentRepresentation,
560
650
  requests,
561
- clock),
651
+ observation),
562
652
  manual: false,
563
653
  knownStableBitrate };
564
- }
565
- if (bufferBasedBitrate == null ||
566
- chosenRepFromBandwidth.bitrate >= bufferBasedBitrate)
567
- {
654
+ } else {
568
655
  log.debug("ABR: Choosing representation with bandwidth estimation.",
569
- chosenRepFromBandwidth);
656
+ chosenRepFromBandwidth.bitrate,
657
+ chosenRepFromBandwidth.id);
658
+ prevEstimate.update(chosenRepFromBandwidth,
659
+ bandwidthEstimate,
660
+ ABRAlgorithmType.BandwidthBased);
570
661
  return { bitrate: bandwidthEstimate,
571
662
  representation: chosenRepFromBandwidth,
572
663
  urgent: networkAnalyzer.isUrgent(chosenRepFromBandwidth.bitrate,
573
664
  currentRepresentation,
574
665
  requests,
575
- clock),
666
+ observation),
576
667
  manual: false,
577
668
  knownStableBitrate };
578
669
  }
579
- const chosenRepresentation = selectOptimalRepresentation(_representations,
580
- bufferBasedBitrate,
581
- minAutoBitrate,
582
- maxAutoBitrate);
583
- if (bufferBasedBitrate <= maxAutoBitrate) {
584
- log.debug("ABR: Choosing representation with buffer based bitrate ceiling.",
585
- chosenRepresentation);
586
- }
587
- return { bitrate: bandwidthEstimate,
588
- representation: chosenRepresentation,
589
- urgent: networkAnalyzer.isUrgent(bufferBasedBitrate,
590
- currentRepresentation,
591
- requests,
592
- clock),
593
- manual: false,
594
- knownStableBitrate };
595
670
  })
596
671
  );
597
672
  }));