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
package/README.md CHANGED
@@ -1,19 +1,22 @@
1
1
  <p align="center">
2
- <img src="./doc/assets/logo.png" />
2
+ <img src="./doc/static/img/logo.png" />
3
3
  <br /><br />
4
- <a href="https://canalplus.github.io/rx-player/doc/pages/api/index.html">📖 <b>API documentation</b></a>
4
+ <a href="https://developers.canal-plus.com/rx-player/doc/api/Overview.html">📖 <b>API documentation</b></a>
5
5
  -
6
6
  <a href="https://developers.canal-plus.com/rx-player/">⏯ <b>Demo</b></a>
7
7
  -
8
- <a href="https://canalplus.github.io/rx-player/doc/pages/tutorials/index.html">🎓 <b>Tutorials</b></a>
8
+ <a href="https://developers.canal-plus.com/rx-player/doc/Getting_Started/Welcome.html">🎓 <b>Getting Started</b></a>
9
9
  -
10
10
  <a href="./CONTRIBUTING.md">🔧 <b>Contributing</b></a>
11
11
  <br /><br />
12
12
  <a href="https://github.com/canalplus/rx-player/releases">
13
13
  <img src="https://img.shields.io/badge/dynamic/json.svg?label=Latest%20release&url=https://api.github.com/repos/canalplus/rx-player/releases/latest&query=$.tag_name&colorB=blue" />
14
14
  </a>
15
- <a href="https://travis-ci.org/canalplus/rx-player">
16
- <img src="https://travis-ci.org/canalplus/rx-player.svg?branch=master" />
15
+ <a href="https://github.com/canalplus/rx-player/actions/workflows/checks.yml">
16
+ <img src="https://github.com/canalplus/rx-player/actions/workflows/checks.yml/badge.svg" />
17
+ </a>
18
+ <a href="https://sonarcloud.io/summary/new_code?id=rx-player">
19
+ <img src="https://sonarcloud.io/api/project_badges/measure?project=rx-player&metric=alert_status" />
17
20
  </a>
18
21
  <a href="https://gitter.im/canalplus/rx-player">
19
22
  <img src="https://img.shields.io/gitter/room/canalplus/rx-player.svg" />
@@ -119,13 +122,11 @@ player.loadVideo({
119
122
  });
120
123
  ```
121
124
 
122
- We've also written [short
123
- tutorials](https://canalplus.github.io/rx-player/doc/pages/tutorials/index.html)
124
- to help you familiarize with the RxPlayer API:
125
- - [Quick start into the API](https://canalplus.github.io/rx-player/doc/pages/tutorials/quick_start.html).
126
- - [Playing contents with DRMs](https://canalplus.github.io/rx-player/doc/pages/tutorials/contents_with_DRM.html).
127
- - [Selecting a track](https://developers.canal-plus.com/rx-player/doc/pages/tutorials/track_selection.html)
128
- - [Listening to events contained in the content](https://canalplus.github.io/rx-player/doc/pages/tutorials/stream_events.html)
125
+ We've also written short tutorials to help you familiarize with the RxPlayer API:
126
+ - [Quick start into the API](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Tutorials/Quick_Start.html).
127
+ - [Playing contents with DRMs](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Tutorials/Content_with_DRM.html).
128
+ - [Selecting a track](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Tutorials/Selecting_a_Track.html)
129
+ - [Listening to events contained in the content](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Tutorials/EventStream_Handling.html)
129
130
 
130
131
  To be able to play with the player without needing to perform any setup we also
131
132
  created multiple live-editable demos:
@@ -138,7 +139,7 @@ created multiple live-editable demos:
138
139
  To reduce the size of the final code, you might also want to import a minimal
139
140
  version of the player and only import the features you need. This is documented
140
141
  [here
141
- ](https://canalplus.github.io/rx-player/doc/pages/api/minimal_player.html):
142
+ ](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Minimal_Player.html):
142
143
 
143
144
  For example, to play encrypted DASH contents, you could just write:
144
145
  ```js
@@ -153,13 +154,13 @@ RxPlayer.addFeatures([DASH, EME]);
153
154
  ## API #########################################################################
154
155
 
155
156
  We documented the API in every little details in [the API
156
- documentation](https://canalplus.github.io/rx-player/doc/pages/api/index.html).
157
+ documentation](https://developers.canal-plus.com/rx-player/doc/api/Overview.html).
157
158
 
158
159
  You can also refer to the documentation of our previous versions
159
160
  [here](https://developers.canal-plus.com/rx-player/documentation_pages_by_version.html)
160
161
 
161
162
  These documentation pages are automatically generated from the content of the
162
- [doc/api](./doc/api/index.md) directory in this repository.
163
+ [doc/api](./doc/api/Overview.md) directory in this repository.
163
164
 
164
165
 
165
166
 
@@ -251,9 +252,9 @@ Now, more than 6 years later, the RxPlayer continues to evolve at the same fast
251
252
  pace to include a lot of features and improvements you may not find in other
252
253
  media players.
253
254
  You can look at our
254
- [API documentation](https://canalplus.github.io/rx-player/doc/pages/api/index.html),
255
- [tutorials](https://canalplus.github.io/rx-player/doc/pages/tutorials/index.html)
256
- and our [demo page](https://canalplus.github.io/rx-player/doc/pages/api/index.html)
255
+ [API documentation](https://developers.canal-plus.com/rx-player/doc/api/Overview.html),
256
+ [tutorials](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Tutorials/Quick_Start.html)
257
+ and our [demo page](https://developers.canal-plus.com/rx-player/)
257
258
  (an RxPlayer instance is available in the console through the global `player`
258
259
  variable there) to see if it matches your need.
259
260
 
package/VERSION CHANGED
@@ -1 +1 @@
1
- 3.26.1
1
+ 3.26.2
@@ -14,18 +14,20 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import log from "../log";
17
- import { isFirefox } from "./browser_detection";
17
+ import isNullOrUndefined from "../utils/is_null_or_undefined";
18
18
  /**
19
19
  * Clear element's src attribute.
20
20
  * @param {HTMLMediaElement} element
21
21
  */
22
22
  export default function clearElementSrc(element) {
23
- // On Firefox, we also have to make sure the textTracks elements are both
24
- // disabled and removed from the DOM.
23
+ // On some browsers, we first have to make sure the textTracks elements are
24
+ // both disabled and removed from the DOM.
25
25
  // If we do not do that, we may be left with displayed text tracks on the
26
- // screen
27
- if (isFirefox) {
28
- var textTracks = element.textTracks;
26
+ // screen, even if the track elements are properly removed, due to browser
27
+ // issues.
28
+ // Bug seen on Firefox (I forgot which version) and Chrome 96.
29
+ var textTracks = element.textTracks;
30
+ if (!isNullOrUndefined(textTracks)) {
29
31
  for (var i = 0; i < textTracks.length; i++) {
30
32
  textTracks[i].mode = "disabled";
31
33
  }
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { of as observableOf, race as observableRace, timer as observableTimer, } from "rxjs";
17
- import { catchError, map, mergeMap, } from "rxjs/operators";
16
+ import { catchError, map, mergeMap, of as observableOf, race as observableRace, timer as observableTimer, } from "rxjs";
18
17
  import castToObservable from "../../utils/cast_to_observable";
19
18
  /**
20
19
  * Close session and returns and observable that emits when
@@ -28,8 +28,7 @@ var __extends = (this && this.__extends) || (function () {
28
28
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
29
29
  };
30
30
  })();
31
- import { merge as observableMerge, Subject, } from "rxjs";
32
- import { takeUntil } from "rxjs/operators";
31
+ import { merge as observableMerge, Subject, takeUntil, } from "rxjs";
33
32
  import EventEmitter from "../../../utils/event_emitter";
34
33
  import PPromise from "../../../utils/promise";
35
34
  import * as events from "../../event_listeners";
@@ -16,7 +16,9 @@
16
16
  import { Observable } from "rxjs";
17
17
  import CustomMediaKeySystemAccess from "./../custom_key_system_access";
18
18
  import { ICustomMediaKeys, ICustomMediaKeySession } from "./types";
19
- declare let requestMediaKeySystemAccess: null | ((keyType: string, config: MediaKeySystemConfiguration[]) => Observable<MediaKeySystemAccess | CustomMediaKeySystemAccess>);
19
+ /** Generic implementation of the navigator.requestMediaKeySystemAccess API. */
20
+ declare type ICompatRequestMediaKeySystemAccessFn = (keyType: string, config: MediaKeySystemConfiguration[]) => Observable<MediaKeySystemAccess | CustomMediaKeySystemAccess>;
21
+ declare let requestMediaKeySystemAccess: null | ICompatRequestMediaKeySystemAccessFn;
20
22
  /**
21
23
  * Set the given MediaKeys on the given HTMLMediaElement.
22
24
  * Emits null when done then complete.
@@ -28,8 +28,7 @@ var __extends = (this && this.__extends) || (function () {
28
28
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
29
29
  };
30
30
  })();
31
- import { merge as observableMerge, Subject, } from "rxjs";
32
- import { takeUntil } from "rxjs/operators";
31
+ import { merge as observableMerge, Subject, takeUntil, } from "rxjs";
33
32
  import { base64ToBytes } from "../../../utils/base64";
34
33
  import EventEmitter from "../../../utils/event_emitter";
35
34
  import PPromise from "../../../utils/promise";
@@ -67,12 +66,15 @@ var OldWebkitMediaKeySession = /** @class */ (function (_super) {
67
66
  if (_this._key.indexOf("clearkey") >= 0) {
68
67
  var licenseTypedArray = license instanceof ArrayBuffer ? new Uint8Array(license) :
69
68
  license;
70
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
71
- var json = JSON.parse(utf8ToStr(licenseTypedArray));
72
69
  /* eslint-disable @typescript-eslint/no-unsafe-member-access */
70
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
71
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
72
+ var json = JSON.parse(utf8ToStr(licenseTypedArray));
73
73
  var key = base64ToBytes(json.keys[0].k);
74
74
  var kid = base64ToBytes(json.keys[0].kid);
75
75
  /* eslint-enable @typescript-eslint/no-unsafe-member-access */
76
+ /* eslint-enable @typescript-eslint/no-unsafe-argument */
77
+ /* eslint-enable @typescript-eslint/no-unsafe-assignment */
76
78
  resolve(_this._vid.webkitAddKey(_this._key, key, kid, /* sessionId */ ""));
77
79
  }
78
80
  else {
@@ -28,8 +28,7 @@ var __extends = (this && this.__extends) || (function () {
28
28
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
29
29
  };
30
30
  })();
31
- import { merge as observableMerge, Subject, } from "rxjs";
32
- import { takeUntil } from "rxjs/operators";
31
+ import { merge as observableMerge, Subject, takeUntil, } from "rxjs";
33
32
  import EventEmitter from "../../../utils/event_emitter";
34
33
  import PPromise from "../../../utils/promise";
35
34
  import * as events from "../../event_listeners";
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { defer as observableDefer, } from "rxjs";
17
- import { catchError } from "rxjs/operators";
16
+ import { catchError, defer as observableDefer, } from "rxjs";
18
17
  import log from "../../log";
19
18
  import { getNextBoxOffsets } from "../../parsers/containers/isobmff";
20
19
  import { be4toi, concat, } from "../../utils/byte_parsing";
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { defer as observableDefer, of as observableOf, race as observableRace, timer as observableTimer, } from "rxjs";
17
- import { mapTo, mergeMap, take, } from "rxjs/operators";
16
+ import { defer as observableDefer, map, mergeMap, of as observableOf, race as observableRace, take, timer as observableTimer, } from "rxjs";
18
17
  import log from "../../log";
19
18
  import castToObservable from "../../utils/cast_to_observable";
20
19
  import tryCatch from "../../utils/rx-try_catch";
@@ -46,6 +45,6 @@ export default function loadSession(session, sessionId) {
46
45
  // Chromium/Chrome versions where the `keyStatuses` property from a loaded
47
46
  // MediaKeySession would not be populated directly as the load answer but
48
47
  // asynchronously after.
49
- return observableRace(observableTimer(EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES), onKeyStatusesChange$(session)).pipe(take(1), mapTo(isLoaded));
48
+ return observableRace(observableTimer(EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES), onKeyStatusesChange$(session)).pipe(take(1), map(function () { return isLoaded; }));
50
49
  }));
51
50
  }
@@ -31,7 +31,7 @@ export declare type IEventTargetLike = HTMLElement | IEventEmitterLike | IEventE
31
31
  * Emit the original value on subscription.
32
32
  * @returns {Observable}
33
33
  */
34
- declare function isActive(): Observable<boolean>;
34
+ declare function isPageActive(): Observable<boolean>;
35
35
  export interface IPictureInPictureEvent {
36
36
  isEnabled: boolean;
37
37
  pipWindow: ICompatPictureInPictureWindow | null;
@@ -53,6 +53,7 @@ declare function isVideoVisible(pip$: Observable<IPictureInPictureEvent>): Obser
53
53
  * Get video width from HTML video element, or video estimated dimensions
54
54
  * when Picture-in-Picture is activated.
55
55
  * @param {HTMLMediaElement} mediaElement
56
+ * @param {Observable} pip$
56
57
  * @returns {Observable}
57
58
  */
58
59
  declare function videoWidth$(mediaElement: HTMLMediaElement, pip$: Observable<IPictureInPictureEvent>): Observable<number>;
@@ -146,4 +147,4 @@ declare const onKeyError$: (element: IEventTargetLike) => Observable<Event>;
146
147
  * @returns {Observable}
147
148
  */
148
149
  declare const onKeyStatusesChange$: (element: IEventTargetLike) => Observable<Event>;
149
- export { isActive, isVideoVisible, videoWidth$, onPlayPause$, onTextTrackChanges$, onLoadedMetadata$, onSeeking$, onSeeked$, onEnded$, onTimeUpdate$, onFullscreenChange$, onSourceOpen$, onSourceClose$, onSourceEnded$, onUpdate$, onRemoveSourceBuffers$, onEncrypted$, onKeyMessage$, onKeyAdded$, onKeyError$, onKeyStatusesChange$, onPictureInPictureEvent$, };
150
+ export { isPageActive, isVideoVisible, videoWidth$, onPlayPause$, onTextTrackChanges$, onLoadedMetadata$, onSeeking$, onSeeked$, onEnded$, onTimeUpdate$, onFullscreenChange$, onSourceOpen$, onSourceClose$, onSourceEnded$, onUpdate$, onRemoveSourceBuffers$, onEncrypted$, onKeyMessage$, onKeyAdded$, onKeyError$, onKeyStatusesChange$, onPictureInPictureEvent$, };
@@ -17,8 +17,7 @@
17
17
  * This file provides browser-agnostic event listeners under the form of
18
18
  * RxJS Observables
19
19
  */
20
- import { combineLatest as observableCombineLatest, defer as observableDefer, fromEvent as observableFromEvent, interval as observableInterval, merge as observableMerge, NEVER, of as observableOf, } from "rxjs";
21
- import { delay, distinctUntilChanged, map, mapTo, startWith, switchMap, throttleTime, } from "rxjs/operators";
20
+ import { NEVER, combineLatest as observableCombineLatest, defer as observableDefer, delay, distinctUntilChanged, fromEvent as observableFromEvent, interval as observableInterval, map, merge as observableMerge, of as observableOf, startWith, switchMap, throttleTime, } from "rxjs";
22
21
  import config from "../config";
23
22
  import log from "../log";
24
23
  import isNonEmptyString from "../utils/is_non_empty_string";
@@ -88,8 +87,8 @@ function compatibleListener(eventNames, prefixes) {
88
87
  return observableFromEvent(element, mem);
89
88
  }
90
89
  else {
91
- if (false) {
92
- log.warn("compat: element " + element.tagName +
90
+ if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
91
+ log.warn("compat: element ".concat(element.tagName) +
93
92
  " does not support any of these events: " +
94
93
  prefixedEvents.join(", "));
95
94
  }
@@ -134,19 +133,13 @@ function visibilityChange() {
134
133
  .pipe(map(function () { return !(document[hidden]); }), startWith(!isHidden), distinctUntilChanged());
135
134
  });
136
135
  }
137
- /**
138
- * @returns {Observable}
139
- */
140
- function videoSizeChange() {
141
- return observableFromEvent(window, "resize");
142
- }
143
136
  /**
144
137
  * Emit `true` if the page is considered active.
145
138
  * `false` when considered inactive.
146
139
  * Emit the original value on subscription.
147
140
  * @returns {Observable}
148
141
  */
149
- function isActive() {
142
+ function isPageActive() {
150
143
  return visibilityChange().pipe(switchMap(function (x) {
151
144
  if (!x) {
152
145
  return observableOf(x).pipe(delay(INACTIVITY_DELAY));
@@ -192,7 +185,7 @@ function onPictureInPictureEvent$(elt) {
192
185
  pipWindow: (_a = evt.pictureInPictureWindow) !== null && _a !== void 0 ? _a : null,
193
186
  });
194
187
  })), observableFromEvent(mediaElement, "leavepictureinpicture")
195
- .pipe(mapTo({ isEnabled: false, pipWindow: null }))).pipe(startWith(initialState));
188
+ .pipe(map(function () { return ({ isEnabled: false, pipWindow: null }); }))).pipe(startWith(initialState));
196
189
  });
197
190
  }
198
191
  /**
@@ -215,13 +208,14 @@ function isVideoVisible(pip$) {
215
208
  * Get video width from HTML video element, or video estimated dimensions
216
209
  * when Picture-in-Picture is activated.
217
210
  * @param {HTMLMediaElement} mediaElement
211
+ * @param {Observable} pip$
218
212
  * @returns {Observable}
219
213
  */
220
214
  function videoWidth$(mediaElement, pip$) {
221
215
  return observableCombineLatest([
222
216
  pip$,
223
217
  observableInterval(20000).pipe(startWith(null)),
224
- videoSizeChange().pipe(throttleTime(500), startWith(null)),
218
+ observableFromEvent(window, "resize").pipe(throttleTime(500), startWith(null)),
225
219
  ]).pipe(switchMap(function (_a) {
226
220
  var pip = _a[0];
227
221
  if (!pip.isEnabled) {
@@ -334,4 +328,4 @@ var onKeyError$ = compatibleListener(["keyerror", "error"]);
334
328
  * @returns {Observable}
335
329
  */
336
330
  var onKeyStatusesChange$ = compatibleListener(["keystatuseschange"]);
337
- export { isActive, isVideoVisible, videoWidth$, onPlayPause$, onTextTrackChanges$, onLoadedMetadata$, onSeeking$, onSeeked$, onEnded$, onTimeUpdate$, onFullscreenChange$, onSourceOpen$, onSourceClose$, onSourceEnded$, onUpdate$, onRemoveSourceBuffers$, onEncrypted$, onKeyMessage$, onKeyAdded$, onKeyError$, onKeyStatusesChange$, onPictureInPictureEvent$, };
331
+ export { isPageActive, isVideoVisible, videoWidth$, onPlayPause$, onTextTrackChanges$, onLoadedMetadata$, onSeeking$, onSeeked$, onEnded$, onTimeUpdate$, onFullscreenChange$, onSourceOpen$, onSourceClose$, onSourceEnded$, onUpdate$, onRemoveSourceBuffers$, onEncrypted$, onKeyMessage$, onKeyAdded$, onKeyError$, onKeyStatusesChange$, onPictureInPictureEvent$, };
@@ -28,7 +28,7 @@ export default function makeCue(startTime, endTime, payload) {
28
28
  if (startTime >= endTime) {
29
29
  // IE/Edge will throw in this case.
30
30
  // See issue #501
31
- log.warn("Compat: Invalid cue times: " + startTime + " - " + endTime);
31
+ log.warn("Compat: Invalid cue times: ".concat(startTime, " - ").concat(endTime));
32
32
  return null;
33
33
  }
34
34
  if (isNullOrUndefined(window.VTTCue)) {
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { defer as observableDefer, interval as observableInterval, Observable, } from "rxjs";
17
- import { distinctUntilChanged, map, startWith, } from "rxjs/operators";
16
+ import { defer as observableDefer, distinctUntilChanged, interval as observableInterval, map, Observable, startWith, } from "rxjs";
18
17
  import log from "../log";
19
18
  import isNode from "./is_node";
20
19
  /* eslint-disable @typescript-eslint/no-unsafe-member-access */
@@ -27,7 +27,7 @@ import clearElementSrc from "./clear_element_src";
27
27
  */
28
28
  export default function setElementSrc$(mediaElement, url) {
29
29
  return new Observable(function (observer) {
30
- log.info("Setting URL to Element", url, mediaElement);
30
+ log.info("Setting URL to HTMLMediaElement", url);
31
31
  mediaElement.src = url;
32
32
  observer.next(undefined);
33
33
  return function () {
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { of as observableOf, } from "rxjs";
17
- import { take } from "rxjs/operators";
16
+ import { of as observableOf, take, } from "rxjs";
18
17
  import { READY_STATES } from "./browser_compatibility_types";
19
18
  import { onLoadedMetadata$ } from "./event_listeners";
20
19
  /**
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { of as observableOf, } from "rxjs";
17
- import { take } from "rxjs/operators";
16
+ import { of as observableOf, take, } from "rxjs";
18
17
  import { onSourceOpen$ } from "./event_listeners";
19
18
  /**
20
19
  * Wait for the MediaSource's sourceopen event and emit. Emit immediatelly if
@@ -385,17 +385,12 @@ declare const _default: {
385
385
  LOW_LATENCY: number;
386
386
  };
387
387
  /**
388
- * Minimum interval at which timeupdate events will be "constructed". This
388
+ * Minimum interval at which playback information samples will be taken. This
389
389
  * variable is for the "regular" mediasource strategy (that is, not for the
390
390
  * directfile API.
391
391
  *
392
- * Those events are the base of various important mechanisms in the player:
393
- * - set the clock used to regularly check which segments should be loaded
394
- * - set the clock for the ABR strategy.
395
- * - used to trigger positionUpdate events.
396
- *
397
- * This common logic is for performance reasons, as we call multiple browser's
398
- * APIs which are useful for most of these.
392
+ * At each of these interval, various different modules in the RxPlayer will
393
+ * run based on the information communicated.
399
394
  *
400
395
  * Keep in mind this is the minimum interval. This logic will also be
401
396
  * triggered when various events of the media element are received.
@@ -295,7 +295,7 @@ export default {
295
295
  */
296
296
  DEFAULT_LIVE_GAP: {
297
297
  DEFAULT: 10,
298
- LOW_LATENCY: 3,
298
+ LOW_LATENCY: 3.5,
299
299
  },
300
300
  /**
301
301
  * Maximum time, in seconds, the player should automatically skip when stalled
@@ -418,17 +418,12 @@ export default {
418
418
  LOW_LATENCY: 1000,
419
419
  },
420
420
  /**
421
- * Minimum interval at which timeupdate events will be "constructed". This
421
+ * Minimum interval at which playback information samples will be taken. This
422
422
  * variable is for the "regular" mediasource strategy (that is, not for the
423
423
  * directfile API.
424
424
  *
425
- * Those events are the base of various important mechanisms in the player:
426
- * - set the clock used to regularly check which segments should be loaded
427
- * - set the clock for the ABR strategy.
428
- * - used to trigger positionUpdate events.
429
- *
430
- * This common logic is for performance reasons, as we call multiple browser's
431
- * APIs which are useful for most of these.
425
+ * At each of these interval, various different modules in the RxPlayer will
426
+ * run based on the information communicated.
432
427
  *
433
428
  * Keep in mind this is the minimum interval. This logic will also be
434
429
  * triggered when various events of the media element are received.
@@ -15,9 +15,10 @@
15
15
  */
16
16
  import { Observable } from "rxjs";
17
17
  import { Representation } from "../../manifest";
18
+ import { ISharedReference } from "../../utils/reference";
18
19
  import { IBufferType } from "../segment_buffers";
19
- import { IABREstimate, IABRStreamEvents, IRepresentationEstimatorClockTick } from "./representation_estimator";
20
- export declare type IABRManagerClockTick = IRepresentationEstimatorClockTick;
20
+ import { IABREstimate, IABRStreamEvents, IRepresentationEstimatorPlaybackObservation } from "./representation_estimator";
21
+ export declare type IABRManagerPlaybackObservation = IRepresentationEstimatorPlaybackObservation;
21
22
  interface IRepresentationEstimatorsThrottlers {
22
23
  limitWidth: Partial<Record<IBufferType, Observable<number>>>;
23
24
  throttle: Partial<Record<IBufferType, Observable<number>>>;
@@ -27,12 +28,12 @@ export interface IABRManagerArguments {
27
28
  initialBitrates: Partial<Record<IBufferType, // Initial bitrate chosen, per
28
29
  number>>;
29
30
  lowLatencyMode: boolean;
30
- minAutoBitrates: Partial<Record<IBufferType, // Minimum bitrate chosen
31
- Observable<number>>>;
32
- maxAutoBitrates: Partial<Record<IBufferType, // Maximum bitrate chosen
33
- Observable<number>>>;
34
- manualBitrates: Partial<Record<IBufferType, // Manual bitrate set for
35
- Observable<number>>>;
31
+ /** Minimum bitrate chosen when in auto mode, per type (0 by default) */
32
+ minAutoBitrates: Partial<Record<IBufferType, ISharedReference<number>>>;
33
+ /** Maximum bitrate chosen when in auto mode, per type (0 by default) */
34
+ maxAutoBitrates: Partial<Record<IBufferType, ISharedReference<number>>>;
35
+ /** Manually forced bitrate set for a given type (`-1` for auto mode */
36
+ manualBitrates: Partial<Record<IBufferType, ISharedReference<number>>>;
36
37
  throttlers: IRepresentationEstimatorsThrottlers;
37
38
  }
38
39
  /**
@@ -60,11 +61,11 @@ export default class ABRManager {
60
61
  * state).
61
62
  * @param {string} type
62
63
  * @param {Array.<Representation>} representations
63
- * @param {Observable<Object>} clock$
64
+ * @param {Observable<Object>} observation$
64
65
  * @param {Observable<Object>} streamEvents$
65
66
  * @returns {Observable}
66
67
  */
67
- get$(type: IBufferType, representations: Representation[], clock$: Observable<IABRManagerClockTick>, streamEvents$: Observable<IABRStreamEvents>): Observable<IABREstimate>;
68
+ get$(type: IBufferType, representations: Representation[], observation$: Observable<IABRManagerPlaybackObservation>, streamEvents$: Observable<IABRStreamEvents>): Observable<IABREstimate>;
68
69
  /**
69
70
  * @param {string} bufferType
70
71
  * @returns {Object}
@@ -13,11 +13,20 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { of as observableOf, } from "rxjs";
16
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
17
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
18
+ if (ar || !(i in from)) {
19
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
20
+ ar[i] = from[i];
21
+ }
22
+ }
23
+ return to.concat(ar || Array.prototype.slice.call(from));
24
+ };
25
+ import { combineLatest as observableCombineLatest, map, of as observableOf, } from "rxjs";
17
26
  import log from "../../log";
27
+ import objectAssign from "../../utils/object_assign";
18
28
  import takeFirstSet from "../../utils/take_first_set";
19
29
  import BandwidthEstimator from "./bandwidth_estimator";
20
- import createFilters from "./create_filters";
21
30
  import RepresentationEstimator from "./representation_estimator";
22
31
  /**
23
32
  * Adaptive BitRate Manager.
@@ -45,18 +54,19 @@ var ABRManager = /** @class */ (function () {
45
54
  * state).
46
55
  * @param {string} type
47
56
  * @param {Array.<Representation>} representations
48
- * @param {Observable<Object>} clock$
57
+ * @param {Observable<Object>} observation$
49
58
  * @param {Observable<Object>} streamEvents$
50
59
  * @returns {Observable}
51
60
  */
52
- ABRManager.prototype.get$ = function (type, representations, clock$, streamEvents$) {
61
+ ABRManager.prototype.get$ = function (type, representations, observation$, streamEvents$) {
62
+ var _a, _b, _c;
53
63
  var bandwidthEstimator = this._getBandwidthEstimator(type);
54
- var manualBitrate$ = takeFirstSet(this._manualBitrates[type], observableOf(-1));
55
- var minAutoBitrate$ = takeFirstSet(this._minAutoBitrates[type], observableOf(0));
56
- var maxAutoBitrate$ = takeFirstSet(this._maxAutoBitrates[type], observableOf(Infinity));
64
+ var manualBitrate$ = takeFirstSet((_a = this._manualBitrates[type]) === null || _a === void 0 ? void 0 : _a.asObservable(), observableOf(-1));
65
+ var minAutoBitrate$ = takeFirstSet((_b = this._minAutoBitrates[type]) === null || _b === void 0 ? void 0 : _b.asObservable(), observableOf(0));
66
+ var maxAutoBitrate$ = takeFirstSet((_c = this._maxAutoBitrates[type]) === null || _c === void 0 ? void 0 : _c.asObservable(), observableOf(Infinity));
57
67
  var initialBitrate = takeFirstSet(this._initialBitrates[type], 0);
58
68
  var filters$ = createFilters(this._throttlers.limitWidth[type], this._throttlers.throttleBitrate[type], this._throttlers.throttle[type]);
59
- return RepresentationEstimator({ bandwidthEstimator: bandwidthEstimator, streamEvents$: streamEvents$, clock$: clock$, filters$: filters$, initialBitrate: initialBitrate, manualBitrate$: manualBitrate$, minAutoBitrate$: minAutoBitrate$, maxAutoBitrate$: maxAutoBitrate$, representations: representations, lowLatencyMode: this._lowLatencyMode });
69
+ return RepresentationEstimator({ bandwidthEstimator: bandwidthEstimator, streamEvents$: streamEvents$, observation$: observation$, filters$: filters$, initialBitrate: initialBitrate, manualBitrate$: manualBitrate$, minAutoBitrate$: minAutoBitrate$, maxAutoBitrate$: maxAutoBitrate$, representations: representations, lowLatencyMode: this._lowLatencyMode });
60
70
  };
61
71
  /**
62
72
  * @param {string} bufferType
@@ -75,3 +85,32 @@ var ABRManager = /** @class */ (function () {
75
85
  return ABRManager;
76
86
  }());
77
87
  export default ABRManager;
88
+ /**
89
+ * Create Observable that merge several throttling Observables into one.
90
+ * @param {Observable} limitWidth$ - Emit the width at which the chosen
91
+ * Representation should be limited.
92
+ * @param {Observable} throttleBitrate$ - Emit the maximum bitrate authorized.
93
+ * @param {Observable} throttle$ - Also emit the maximum bitrate authorized.
94
+ * Here for legacy reasons.
95
+ * @returns {Observable}
96
+ */
97
+ function createFilters(limitWidth$, throttleBitrate$, throttle$) {
98
+ var deviceEventsArray = [];
99
+ if (limitWidth$ != null) {
100
+ deviceEventsArray.push(limitWidth$.pipe(map(function (width) { return ({ width: width }); })));
101
+ }
102
+ if (throttle$ != null) {
103
+ deviceEventsArray.push(throttle$.pipe(map(function (bitrate) { return ({ bitrate: bitrate }); })));
104
+ }
105
+ if (throttleBitrate$ != null) {
106
+ deviceEventsArray.push(throttleBitrate$.pipe(map(function (bitrate) { return ({ bitrate: bitrate }); })));
107
+ }
108
+ // Emit restrictions on the pools of available representations to choose
109
+ // from.
110
+ return deviceEventsArray.length > 0 ?
111
+ observableCombineLatest(deviceEventsArray)
112
+ .pipe(map(function (args) {
113
+ return objectAssign.apply(void 0, __spreadArray([{}], args, false));
114
+ })) :
115
+ observableOf({});
116
+ }
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import config from "../../config";
17
- import EWMA from "./ewma";
17
+ import EWMA from "./utils/ewma";
18
18
  var ABR_MINIMUM_TOTAL_BYTES = config.ABR_MINIMUM_TOTAL_BYTES, ABR_MINIMUM_CHUNK_SIZE = config.ABR_MINIMUM_CHUNK_SIZE, ABR_FAST_EMA = config.ABR_FAST_EMA, ABR_SLOW_EMA = config.ABR_SLOW_EMA;
19
19
  /**
20
20
  * Calculate a mean bandwidth based on the bytes downloaded and the amount
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { Observable } from "rxjs";
17
- import { IBufferBasedChooserClockTick } from "./get_estimate_from_buffer_levels";
17
+ import { IBufferBasedChooserPlaybackObservation } from "./get_estimate_from_buffer_levels";
18
18
  /**
19
19
  * Choose a bitrate based on the currently available buffer.
20
20
  *
@@ -30,4 +30,4 @@ import { IBufferBasedChooserClockTick } from "./get_estimate_from_buffer_levels"
30
30
  * @param {Array.<number>} bitrates
31
31
  * @returns {Observable}
32
32
  */
33
- export default function BufferBasedChooser(update$: Observable<IBufferBasedChooserClockTick>, bitrates: number[]): Observable<number | undefined>;
33
+ export default function BufferBasedChooser(update$: Observable<IBufferBasedChooserPlaybackObservation>, bitrates: number[]): Observable<number | undefined>;
@@ -13,7 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { map } from "rxjs/operators";
16
+ import { map, } from "rxjs";
17
17
  import log from "../../log";
18
18
  import getBufferLevels from "./get_buffer_levels";
19
19
  import getEstimateFromBufferLevels from "./get_estimate_from_buffer_levels";
@@ -35,7 +35,7 @@ import getEstimateFromBufferLevels from "./get_estimate_from_buffer_levels";
35
35
  export default function BufferBasedChooser(update$, bitrates) {
36
36
  var levelsMap = getBufferLevels(bitrates);
37
37
  log.debug("ABR: Steps for buffer based chooser.", levelsMap.map(function (l, i) { return ({ bufferLevel: l, bitrate: bitrates[i] }); }));
38
- return update$.pipe(map(function (clockTick) {
39
- return getEstimateFromBufferLevels(clockTick, bitrates, levelsMap);
38
+ return update$.pipe(map(function (playbackObservation) {
39
+ return getEstimateFromBufferLevels(playbackObservation, bitrates, levelsMap);
40
40
  }));
41
41
  }
@@ -37,6 +37,9 @@ export default function getBufferLevels(bitrates) {
37
37
  return 0;
38
38
  }
39
39
  var boundedIndex = Math.min(Math.max(1, index), bitrates.length - 1);
40
+ if (bitrates[boundedIndex] === bitrates[boundedIndex - 1]) {
41
+ return minBufferLevelForBitrate(index - 1);
42
+ }
40
43
  return Vp * (gp + (bitrates[boundedIndex] * utilities[boundedIndex - 1] -
41
44
  bitrates[boundedIndex - 1] * utilities[boundedIndex]) / (bitrates[boundedIndex] -
42
45
  bitrates[boundedIndex - 1])) + 4;