rx-player 3.26.1 → 3.26.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (580) hide show
  1. package/.github/workflows/checks.yml +99 -0
  2. package/.github/workflows/sonarcloud_analysis.yml +20 -0
  3. package/CHANGELOG.md +99 -71
  4. package/README.md +19 -18
  5. package/VERSION +1 -1
  6. package/dist/_esm5.processed/compat/clear_element_src.js +8 -6
  7. package/dist/_esm5.processed/compat/eme/close_session.js +1 -2
  8. package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +1 -2
  9. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -1
  10. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +6 -4
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +1 -2
  12. package/dist/_esm5.processed/compat/eme/generate_key_request.js +1 -2
  13. package/dist/_esm5.processed/compat/eme/load_session.js +2 -3
  14. package/dist/_esm5.processed/compat/event_listeners.d.ts +3 -2
  15. package/dist/_esm5.processed/compat/event_listeners.js +8 -14
  16. package/dist/_esm5.processed/compat/make_vtt_cue.js +1 -1
  17. package/dist/_esm5.processed/compat/on_height_width_change.js +1 -2
  18. package/dist/_esm5.processed/compat/set_element_src.js +1 -1
  19. package/dist/_esm5.processed/compat/when_loaded_metadata.js +1 -2
  20. package/dist/_esm5.processed/compat/when_media_source_open.js +1 -2
  21. package/dist/_esm5.processed/config.d.ts +3 -8
  22. package/dist/_esm5.processed/config.js +4 -9
  23. package/dist/_esm5.processed/core/abr/abr_manager.d.ts +11 -10
  24. package/dist/_esm5.processed/core/abr/abr_manager.js +47 -8
  25. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +1 -1
  26. package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +2 -2
  27. package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +3 -3
  28. package/dist/_esm5.processed/core/abr/get_buffer_levels.js +3 -0
  29. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +3 -3
  30. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +3 -3
  31. package/dist/_esm5.processed/core/abr/guess_based_chooser.d.ts +95 -0
  32. package/dist/_esm5.processed/core/abr/guess_based_chooser.js +242 -0
  33. package/dist/_esm5.processed/core/abr/index.d.ts +3 -3
  34. package/dist/_esm5.processed/core/abr/last_estimate_storage.d.ts +61 -0
  35. package/dist/_esm5.processed/core/abr/last_estimate_storage.js +37 -0
  36. package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +25 -7
  37. package/dist/_esm5.processed/core/abr/network_analyzer.js +68 -31
  38. package/dist/_esm5.processed/core/abr/pending_requests_store.d.ts +56 -28
  39. package/dist/_esm5.processed/core/abr/pending_requests_store.js +9 -7
  40. package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +34 -51
  41. package/dist/_esm5.processed/core/abr/representation_estimator.js +111 -52
  42. package/dist/_esm5.processed/core/abr/representation_score_calculator.d.ts +5 -8
  43. package/dist/_esm5.processed/core/abr/representation_score_calculator.js +20 -23
  44. package/dist/_esm5.processed/core/abr/{ewma.d.ts → utils/ewma.d.ts} +0 -0
  45. package/dist/_esm5.processed/core/abr/{ewma.js → utils/ewma.js} +0 -0
  46. package/dist/_esm5.processed/core/abr/{filter_by_bitrate.d.ts → utils/filter_by_bitrate.d.ts} +1 -1
  47. package/dist/_esm5.processed/core/abr/{filter_by_bitrate.js → utils/filter_by_bitrate.js} +1 -1
  48. package/dist/_esm5.processed/core/abr/{filter_by_width.d.ts → utils/filter_by_width.d.ts} +1 -1
  49. package/dist/_esm5.processed/core/abr/{filter_by_width.js → utils/filter_by_width.js} +2 -2
  50. package/dist/_esm5.processed/core/abr/{select_optimal_representation.d.ts → utils/select_optimal_representation.d.ts} +1 -1
  51. package/dist/_esm5.processed/core/abr/{select_optimal_representation.js → utils/select_optimal_representation.js} +1 -1
  52. package/dist/_esm5.processed/core/api/emit_seek_events.d.ts +4 -4
  53. package/dist/_esm5.processed/core/api/emit_seek_events.js +12 -10
  54. package/dist/_esm5.processed/core/api/index.d.ts +3 -1
  55. package/dist/_esm5.processed/core/api/index.js +2 -0
  56. package/dist/_esm5.processed/core/api/option_utils.js +4 -4
  57. package/dist/_esm5.processed/core/api/playback_observer.d.ts +280 -0
  58. package/dist/_esm5.processed/core/api/playback_observer.js +461 -0
  59. package/dist/_esm5.processed/core/api/public_api.d.ts +8 -7
  60. package/dist/_esm5.processed/core/api/public_api.js +98 -94
  61. package/dist/_esm5.processed/core/api/track_choice_manager.js +3 -3
  62. package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.js +1 -0
  63. package/dist/_esm5.processed/core/eme/attach_media_keys.js +1 -2
  64. package/dist/_esm5.processed/core/eme/check_key_statuses.js +4 -5
  65. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js +1 -2
  66. package/dist/_esm5.processed/core/eme/clear_eme_session.js +6 -2
  67. package/dist/_esm5.processed/core/eme/create_session.js +1 -2
  68. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +2 -3
  69. package/dist/_esm5.processed/core/eme/eme_manager.js +4 -5
  70. package/dist/_esm5.processed/core/eme/find_key_system.js +4 -5
  71. package/dist/_esm5.processed/core/eme/get_media_keys.js +2 -3
  72. package/dist/_esm5.processed/core/eme/get_session.js +1 -2
  73. package/dist/_esm5.processed/core/eme/init_media_keys.js +5 -5
  74. package/dist/_esm5.processed/core/eme/session_events_listener.js +6 -7
  75. package/dist/_esm5.processed/core/eme/set_server_certificate.js +8 -3
  76. package/dist/_esm5.processed/core/eme/types.d.ts +12 -4
  77. package/dist/_esm5.processed/core/eme/utils/close_session.js +2 -3
  78. package/dist/_esm5.processed/core/eme/utils/is_session_usable.js +1 -1
  79. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +3 -4
  80. package/dist/_esm5.processed/core/eme/utils/persistent_sessions_store.js +3 -3
  81. package/dist/_esm5.processed/core/fetchers/index.d.ts +2 -2
  82. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +2 -2
  83. package/dist/_esm5.processed/core/fetchers/segment/index.d.ts +2 -2
  84. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.d.ts +12 -29
  85. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.js +3 -7
  86. package/dist/_esm5.processed/core/fetchers/segment/prioritizer.d.ts +53 -53
  87. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +42 -11
  88. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +118 -46
  89. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +21 -20
  90. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +9 -8
  91. package/dist/_esm5.processed/core/init/create_eme_manager.js +1 -2
  92. package/dist/_esm5.processed/core/init/create_media_source.js +3 -4
  93. package/dist/_esm5.processed/core/init/create_stream_playback_observer.d.ts +39 -0
  94. package/dist/_esm5.processed/core/init/create_stream_playback_observer.js +50 -0
  95. package/dist/_esm5.processed/core/init/duration_updater.js +16 -7
  96. package/dist/_esm5.processed/core/init/emit_loaded_event.d.ts +4 -3
  97. package/dist/_esm5.processed/core/init/emit_loaded_event.js +8 -8
  98. package/dist/_esm5.processed/core/init/end_of_stream.js +1 -2
  99. package/dist/_esm5.processed/core/init/get_initial_time.js +2 -3
  100. package/dist/_esm5.processed/core/init/initial_seek_and_play.d.ts +32 -31
  101. package/dist/_esm5.processed/core/init/initial_seek_and_play.js +25 -32
  102. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +6 -5
  103. package/dist/_esm5.processed/core/init/initialize_directfile.js +16 -12
  104. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +10 -10
  105. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -12
  106. package/dist/_esm5.processed/core/init/load_on_media_source.d.ts +8 -11
  107. package/dist/_esm5.processed/core/init/load_on_media_source.js +16 -19
  108. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +8 -7
  109. package/dist/_esm5.processed/core/init/stall_avoider.d.ts +4 -6
  110. package/dist/_esm5.processed/core/init/stall_avoider.js +56 -42
  111. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.d.ts +2 -2
  112. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +20 -15
  113. package/dist/_esm5.processed/core/init/throw_on_media_error.js +1 -2
  114. package/dist/_esm5.processed/core/init/types.d.ts +0 -20
  115. package/dist/_esm5.processed/core/init/update_playback_rate.d.ts +5 -4
  116. package/dist/_esm5.processed/core/init/update_playback_rate.js +10 -11
  117. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.d.ts +4 -4
  118. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.js +12 -7
  119. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +8 -7
  120. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +9 -10
  121. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +1 -1
  122. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +4 -4
  123. package/dist/_esm5.processed/core/segment_buffers/implementations/utils/manual_time_ranges.js +2 -2
  124. package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.js +2 -2
  125. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +1 -12
  126. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +10 -10
  127. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +1 -1
  128. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +15 -13
  129. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +36 -23
  130. package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.d.ts +9 -17
  131. package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.js +11 -20
  132. package/dist/_esm5.processed/core/stream/adaptation/index.d.ts +2 -2
  133. package/dist/_esm5.processed/core/stream/index.d.ts +2 -2
  134. package/dist/_esm5.processed/core/stream/orchestrator/active_period_emitter.js +5 -6
  135. package/dist/_esm5.processed/core/stream/orchestrator/are_streams_complete.js +1 -2
  136. package/dist/_esm5.processed/core/stream/orchestrator/index.d.ts +2 -2
  137. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +10 -8
  138. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +22 -21
  139. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.d.ts +6 -4
  140. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +11 -10
  141. package/dist/_esm5.processed/core/stream/period/index.d.ts +2 -2
  142. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +23 -7
  143. package/dist/_esm5.processed/core/stream/period/period_stream.js +38 -24
  144. package/dist/_esm5.processed/core/stream/reload_after_switch.d.ts +5 -4
  145. package/dist/_esm5.processed/core/stream/reload_after_switch.js +8 -7
  146. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.d.ts +4 -2
  147. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.js +10 -8
  148. package/dist/_esm5.processed/core/stream/representation/downloading_queue.d.ts +9 -9
  149. package/dist/_esm5.processed/core/stream/representation/downloading_queue.js +10 -12
  150. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.d.ts +1 -3
  151. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +6 -8
  152. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +3 -7
  153. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +7 -8
  154. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +1 -1
  155. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.d.ts +6 -9
  156. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +7 -8
  157. package/dist/_esm5.processed/core/stream/representation/index.d.ts +2 -2
  158. package/dist/_esm5.processed/core/stream/representation/push_init_segment.d.ts +4 -2
  159. package/dist/_esm5.processed/core/stream/representation/push_init_segment.js +3 -5
  160. package/dist/_esm5.processed/core/stream/representation/push_media_segment.d.ts +6 -4
  161. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -5
  162. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +9 -12
  163. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +30 -21
  164. package/dist/_esm5.processed/errors/error_message.js +1 -1
  165. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.d.ts +5 -3
  166. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.js +21 -8
  167. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.js +2 -3
  168. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.d.ts +2 -2
  169. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.js +4 -0
  170. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +1 -1
  171. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +2 -2
  172. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +17 -6
  173. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +1 -2
  174. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/index.js +1 -2
  175. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -1
  176. package/dist/_esm5.processed/features/initialize_features.js +47 -44
  177. package/dist/_esm5.processed/index.js +2 -2
  178. package/dist/_esm5.processed/manifest/index.d.ts +2 -2
  179. package/dist/_esm5.processed/manifest/index.js +2 -2
  180. package/dist/_esm5.processed/manifest/representation.js +1 -1
  181. package/dist/_esm5.processed/manifest/representation_index/static.js +1 -0
  182. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +24 -3
  183. package/dist/_esm5.processed/manifest/update_period_in_place.js +1 -1
  184. package/dist/_esm5.processed/manifest/{are_same_content.d.ts → utils.d.ts} +9 -7
  185. package/dist/_esm5.processed/manifest/{are_same_content.js → utils.js} +18 -1
  186. package/dist/_esm5.processed/minimal.js +2 -2
  187. package/dist/_esm5.processed/parsers/containers/isobmff/get_box.d.ts +18 -9
  188. package/dist/_esm5.processed/parsers/containers/isobmff/get_box.js +32 -9
  189. package/dist/_esm5.processed/parsers/containers/isobmff/read.d.ts +18 -5
  190. package/dist/_esm5.processed/parsers/containers/isobmff/read.js +28 -6
  191. package/dist/_esm5.processed/parsers/containers/isobmff/utils.js +52 -47
  192. package/dist/_esm5.processed/parsers/images/bif.js +1 -1
  193. package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +2 -2
  194. package/dist/_esm5.processed/parsers/manifest/dash/common/get_http_utc-timing_url.js +2 -2
  195. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +2 -1
  196. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +3 -2
  197. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.js +2 -1
  198. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +1 -0
  199. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +7 -9
  200. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +2 -1
  201. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +4 -2
  202. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +2 -1
  203. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +11 -5
  204. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.js +10 -9
  205. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/parse_s_element.js +3 -3
  206. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +6 -1
  207. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +5 -4
  208. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.d.ts +1 -1
  209. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.js +4 -4
  210. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +3 -1
  211. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +19 -18
  212. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +2 -1
  213. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +14 -8
  214. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +2 -2
  215. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +7 -8
  216. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +3 -1
  217. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +5 -10
  218. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +3 -1
  219. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +17 -8
  220. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.d.ts +7 -2
  221. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.js +22 -21
  222. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +10 -0
  223. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/BaseURL.js +9 -9
  224. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +24 -0
  225. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.js +7 -5
  226. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +12 -9
  227. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +5 -2
  228. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +8 -0
  229. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +11 -2
  230. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +7 -4
  231. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +11 -0
  232. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.js +7 -1
  233. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.js +5 -0
  234. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/MPD.js +5 -0
  235. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Period.js +13 -0
  236. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +23 -0
  237. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.js +5 -0
  238. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/XLink.js +6 -0
  239. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/root.js +6 -0
  240. package/dist/_esm5.processed/parsers/manifest/local/parse_local_manifest.js +1 -1
  241. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +4 -2
  242. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -1
  243. package/dist/_esm5.processed/parsers/manifest/smooth/get_codecs.js +1 -1
  244. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +3 -1
  245. package/dist/_esm5.processed/parsers/manifest/utils/check_manifest_ids.js +1 -1
  246. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +1 -1
  247. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +11 -3
  248. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.js +5 -5
  249. package/dist/_esm5.processed/parsers/manifest/utils/is_segment_still_available.js +3 -6
  250. package/dist/_esm5.processed/parsers/texttracks/sami/html.js +2 -2
  251. package/dist/_esm5.processed/parsers/texttracks/sami/native.js +2 -2
  252. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_font_size.js +13 -1
  253. package/dist/_esm5.processed/parsers/texttracks/ttml/html/generate_css_test_outline.js +4 -4
  254. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_default_style_elements.js +2 -2
  255. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_style_attribute.js +5 -5
  256. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +2 -2
  257. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
  258. package/dist/_esm5.processed/transports/dash/manifest_parser.js +89 -20
  259. package/dist/_esm5.processed/transports/dash/segment_loader.js +1 -1
  260. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
  261. package/dist/_esm5.processed/transports/local/segment_parser.d.ts +2 -2
  262. package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
  263. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
  264. package/dist/_esm5.processed/transports/smooth/extract_timings_infos.js +1 -1
  265. package/dist/_esm5.processed/transports/smooth/pipelines.js +2 -2
  266. package/dist/_esm5.processed/transports/smooth/segment_loader.js +3 -3
  267. package/dist/_esm5.processed/transports/types.d.ts +29 -15
  268. package/dist/_esm5.processed/transports/utils/byte_range.js +2 -2
  269. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
  270. package/dist/_esm5.processed/transports/utils/get_isobmff_timing_infos.js +6 -1
  271. package/dist/_esm5.processed/transports/utils/parse_text_track.js +6 -4
  272. package/dist/_esm5.processed/utils/assert.js +3 -3
  273. package/dist/_esm5.processed/utils/concat_map_latest.js +1 -2
  274. package/dist/_esm5.processed/utils/defer_subscriptions.js +1 -2
  275. package/dist/_esm5.processed/utils/filter_map.js +1 -2
  276. package/dist/_esm5.processed/utils/reference.d.ts +108 -0
  277. package/dist/_esm5.processed/utils/reference.js +137 -0
  278. package/dist/_esm5.processed/utils/request/fetch.d.ts +1 -1
  279. package/dist/_esm5.processed/utils/request/fetch.js +3 -3
  280. package/dist/_esm5.processed/utils/request/xhr.d.ts +1 -1
  281. package/dist/_esm5.processed/utils/request/xhr.js +1 -1
  282. package/dist/_esm5.processed/utils/rx-retry_with_backoff.js +1 -2
  283. package/dist/mpd-parser.wasm +0 -0
  284. package/dist/rx-player.d.ts +1 -15
  285. package/dist/rx-player.js +3666 -2470
  286. package/dist/rx-player.min.d.ts +1 -15
  287. package/dist/rx-player.min.js +1 -1
  288. package/jest.config.js +28 -1
  289. package/package.json +43 -43
  290. package/scripts/build/constants.d.ts +50 -0
  291. package/scripts/build/generate_build.js +1 -189
  292. package/scripts/doc-generator/construct_table_of_contents.js +31 -24
  293. package/scripts/doc-generator/convert_MD_to_HMTL.js +4 -8
  294. package/scripts/doc-generator/create_documentation.js +331 -0
  295. package/scripts/doc-generator/create_documentation_page.js +209 -0
  296. package/scripts/doc-generator/create_page.js +117 -35
  297. package/scripts/doc-generator/generate_header_html.js +148 -0
  298. package/scripts/doc-generator/generate_page_html.js +116 -0
  299. package/scripts/doc-generator/generate_page_list_html.js +93 -0
  300. package/scripts/doc-generator/generate_sidebar_html.js +88 -0
  301. package/scripts/doc-generator/get_search_data_for_content.js +137 -0
  302. package/scripts/doc-generator/index.js +14 -15
  303. package/scripts/doc-generator/parse_doc_configs.js +327 -0
  304. package/scripts/doc-generator/scripts/lunr.js +10 -0
  305. package/scripts/doc-generator/scripts/script.js +451 -0
  306. package/scripts/doc-generator/styles/style.css +712 -144
  307. package/scripts/doc-generator/utils.js +85 -0
  308. package/scripts/fast_demo_build.js +143 -0
  309. package/scripts/generate_documentation_list.js +6 -2
  310. package/scripts/generate_full_demo.js +26 -49
  311. package/scripts/start_demo_web_server.js +14 -4
  312. package/scripts/update-version +1 -1
  313. package/sonar-project.properties +2 -1
  314. package/src/compat/__tests__/add_text_track.test.ts +1 -0
  315. package/src/compat/__tests__/clear_element_src.test.ts +55 -28
  316. package/src/compat/__tests__/set_element_src.test.ts +2 -2
  317. package/src/compat/__tests__/when_loaded_metadata.test.ts +4 -5
  318. package/src/compat/__tests__/when_media_source_open.test.ts +4 -5
  319. package/src/compat/clear_element_src.ts +8 -6
  320. package/src/compat/eme/close_session.ts +3 -5
  321. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
  322. package/src/compat/eme/custom_media_keys/index.ts +6 -6
  323. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +6 -3
  324. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +1 -1
  325. package/src/compat/eme/generate_key_request.ts +1 -1
  326. package/src/compat/eme/load_session.ts +4 -6
  327. package/src/compat/event_listeners.ts +12 -21
  328. package/src/compat/on_height_width_change.ts +3 -5
  329. package/src/compat/set_element_src.ts +1 -1
  330. package/src/compat/when_loaded_metadata.ts +1 -1
  331. package/src/compat/when_media_source_open.ts +1 -1
  332. package/src/config.ts +4 -9
  333. package/src/core/abr/README.md +7 -7
  334. package/src/core/abr/abr_manager.ts +62 -21
  335. package/src/core/abr/bandwidth_estimator.ts +1 -1
  336. package/src/core/abr/buffer_based_chooser.ts +8 -6
  337. package/src/core/abr/get_buffer_levels.ts +3 -0
  338. package/src/core/abr/get_estimate_from_buffer_levels.ts +4 -4
  339. package/src/core/abr/guess_based_chooser.ts +308 -0
  340. package/src/core/abr/index.ts +7 -3
  341. package/src/core/abr/last_estimate_storage.ts +79 -0
  342. package/src/core/abr/network_analyzer.ts +74 -31
  343. package/src/core/abr/pending_requests_store.ts +76 -42
  344. package/src/core/abr/representation_estimator.ts +200 -125
  345. package/src/core/abr/representation_score_calculator.ts +33 -26
  346. package/src/core/abr/{__tests__ → utils/__tests__}/ewma.test.ts +0 -0
  347. package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_bitrate.test.ts +1 -1
  348. package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_width.test.ts +1 -1
  349. package/src/core/abr/{__tests__ → utils/__tests__}/select_optimal_representation.test.ts +1 -1
  350. package/src/core/abr/{ewma.ts → utils/ewma.ts} +0 -0
  351. package/src/core/abr/{filter_by_bitrate.ts → utils/filter_by_bitrate.ts} +2 -2
  352. package/src/core/abr/{filter_by_width.ts → utils/filter_by_width.ts} +3 -3
  353. package/src/core/abr/{select_optimal_representation.ts → utils/select_optimal_representation.ts} +2 -2
  354. package/src/core/api/README.md +4 -3
  355. package/src/core/api/__tests__/option_utils.test.ts +1 -0
  356. package/src/core/api/emit_seek_events.ts +21 -20
  357. package/src/core/api/index.ts +6 -2
  358. package/src/core/api/playback_observer.ts +768 -0
  359. package/src/core/api/public_api.ts +111 -111
  360. package/src/core/api/track_choice_manager.ts +6 -3
  361. package/src/core/eme/__tests__/__global__/get_license.test.ts +5 -3
  362. package/src/core/eme/__tests__/__global__/init_data.test.ts +11 -12
  363. package/src/core/eme/__tests__/__global__/media_key_system_access.test.ts +2 -1
  364. package/src/core/eme/__tests__/__global__/media_keys.test.ts +5 -8
  365. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +8 -6
  366. package/src/core/eme/__tests__/__global__/utils.ts +1 -0
  367. package/src/core/eme/__tests__/init_media_keys.test.ts +6 -65
  368. package/src/core/eme/attach_media_keys.ts +2 -1
  369. package/src/core/eme/check_key_statuses.ts +10 -8
  370. package/src/core/eme/clean_old_loaded_sessions.ts +2 -4
  371. package/src/core/eme/clear_eme_session.ts +6 -1
  372. package/src/core/eme/create_session.ts +3 -5
  373. package/src/core/eme/dispose_media_keys.ts +2 -2
  374. package/src/core/eme/eme_manager.ts +10 -12
  375. package/src/core/eme/find_key_system.ts +3 -5
  376. package/src/core/eme/get_media_keys.ts +4 -6
  377. package/src/core/eme/get_session.ts +2 -4
  378. package/src/core/eme/init_media_keys.ts +9 -9
  379. package/src/core/eme/session_events_listener.ts +14 -15
  380. package/src/core/eme/set_server_certificate.ts +9 -5
  381. package/src/core/eme/types.ts +15 -4
  382. package/src/core/eme/utils/close_session.ts +7 -7
  383. package/src/core/eme/utils/is_session_usable.ts +1 -1
  384. package/src/core/eme/utils/loaded_sessions_store.ts +2 -2
  385. package/src/core/eme/utils/persistent_sessions_store.ts +2 -2
  386. package/src/core/fetchers/index.ts +2 -2
  387. package/src/core/fetchers/manifest/manifest_fetcher.ts +1 -1
  388. package/src/core/fetchers/segment/__tests__/prioritizer.test.ts +3 -4
  389. package/src/core/fetchers/segment/index.ts +2 -2
  390. package/src/core/fetchers/segment/prioritized_segment_fetcher.ts +37 -45
  391. package/src/core/fetchers/segment/prioritizer.ts +82 -82
  392. package/src/core/fetchers/segment/segment_fetcher.ts +178 -80
  393. package/src/core/fetchers/segment/segment_fetcher_creator.ts +23 -31
  394. package/src/core/init/create_eme_manager.ts +1 -1
  395. package/src/core/init/create_media_source.ts +5 -7
  396. package/src/core/init/create_stream_playback_observer.ts +88 -0
  397. package/src/core/init/duration_updater.ts +20 -17
  398. package/src/core/init/emit_loaded_event.ts +11 -15
  399. package/src/core/init/end_of_stream.ts +2 -4
  400. package/src/core/init/get_initial_time.ts +0 -1
  401. package/src/core/init/initial_seek_and_play.ts +67 -51
  402. package/src/core/init/initialize_directfile.ts +26 -35
  403. package/src/core/init/initialize_media_source.ts +28 -28
  404. package/src/core/init/load_on_media_source.ts +51 -58
  405. package/src/core/init/manifest_update_scheduler.ts +11 -12
  406. package/src/core/init/stall_avoider.ts +64 -47
  407. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +24 -21
  408. package/src/core/init/throw_on_media_error.ts +1 -1
  409. package/src/core/init/types.ts +0 -24
  410. package/src/core/init/update_playback_rate.ts +15 -16
  411. package/src/core/segment_buffers/README.md +3 -3
  412. package/src/core/segment_buffers/garbage_collector.ts +15 -11
  413. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +10 -7
  414. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +14 -16
  415. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +1 -1
  416. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
  417. package/src/core/segment_buffers/implementations/utils/manual_time_ranges.ts +2 -2
  418. package/src/core/segment_buffers/inventory/buffered_history.ts +2 -2
  419. package/src/core/segment_buffers/inventory/segment_inventory.ts +1 -13
  420. package/src/core/stream/adaptation/adaptation_stream.ts +78 -56
  421. package/src/core/stream/adaptation/create_representation_estimator.ts +19 -45
  422. package/src/core/stream/adaptation/index.ts +2 -2
  423. package/src/core/stream/index.ts +2 -2
  424. package/src/core/stream/orchestrator/active_period_emitter.ts +6 -8
  425. package/src/core/stream/orchestrator/are_streams_complete.ts +2 -4
  426. package/src/core/stream/orchestrator/index.ts +2 -2
  427. package/src/core/stream/orchestrator/stream_orchestrator.ts +58 -49
  428. package/src/core/stream/period/create_empty_adaptation_stream.ts +14 -10
  429. package/src/core/stream/period/index.ts +2 -2
  430. package/src/core/stream/period/period_stream.ts +118 -75
  431. package/src/core/stream/reload_after_switch.ts +13 -10
  432. package/src/core/stream/representation/append_segment_to_buffer.ts +20 -16
  433. package/src/core/stream/representation/downloading_queue.ts +21 -24
  434. package/src/core/stream/representation/force_garbage_collection.ts +16 -23
  435. package/src/core/stream/representation/get_buffer_status.ts +9 -11
  436. package/src/core/stream/representation/get_needed_segments.ts +1 -1
  437. package/src/core/stream/representation/get_segment_priority.ts +8 -10
  438. package/src/core/stream/representation/index.ts +2 -2
  439. package/src/core/stream/representation/push_init_segment.ts +19 -16
  440. package/src/core/stream/representation/push_media_segment.ts +21 -17
  441. package/src/core/stream/representation/representation_stream.ts +50 -47
  442. package/src/experimental/features/__tests__/dash_wasm.test.ts +1 -0
  443. package/src/experimental/tools/VideoThumbnailLoader/create_request.ts +32 -17
  444. package/src/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.ts +6 -9
  445. package/src/experimental/tools/VideoThumbnailLoader/load_segments.ts +12 -6
  446. package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +4 -2
  447. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +2 -2
  448. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +21 -12
  449. package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +1 -1
  450. package/src/experimental/tools/createMetaplaylist/index.ts +1 -1
  451. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +4 -2
  452. package/src/features/__tests__/initialize_features.test.ts +191 -101
  453. package/src/features/initialize_features.ts +40 -37
  454. package/src/features/list/__tests__/bif_parser.test.ts +1 -0
  455. package/src/features/list/__tests__/dash.test.ts +1 -0
  456. package/src/features/list/__tests__/directfile.test.ts +1 -0
  457. package/src/features/list/__tests__/eme.test.ts +1 -0
  458. package/src/features/list/__tests__/html_sami_parser.test.ts +1 -0
  459. package/src/features/list/__tests__/html_srt_parser.test.ts +1 -0
  460. package/src/features/list/__tests__/html_text_buffer.test.ts +1 -0
  461. package/src/features/list/__tests__/html_ttml_parser.test.ts +1 -0
  462. package/src/features/list/__tests__/html_vtt_parser.test.ts +1 -0
  463. package/src/features/list/__tests__/image_buffer.test.ts +1 -0
  464. package/src/features/list/__tests__/native_sami_parser.test.ts +1 -0
  465. package/src/features/list/__tests__/native_srt_parser.test.ts +1 -0
  466. package/src/features/list/__tests__/native_text_buffer.test.ts +1 -0
  467. package/src/features/list/__tests__/native_ttml_parser.test.ts +1 -0
  468. package/src/features/list/__tests__/native_vtt_parser.test.ts +1 -0
  469. package/src/features/list/__tests__/smooth.test.ts +1 -0
  470. package/src/index.ts +2 -2
  471. package/src/manifest/__tests__/manifest.test.ts +1 -0
  472. package/src/manifest/index.ts +7 -1
  473. package/src/manifest/representation_index/__tests__/static.test.ts +1 -0
  474. package/src/manifest/representation_index/static.ts +1 -0
  475. package/src/manifest/representation_index/types.ts +25 -3
  476. package/src/manifest/{are_same_content.ts → utils.ts} +26 -9
  477. package/src/minimal.ts +3 -2
  478. package/src/parsers/containers/isobmff/get_box.ts +35 -8
  479. package/src/parsers/containers/isobmff/read.ts +32 -5
  480. package/src/parsers/containers/isobmff/utils.ts +52 -47
  481. package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +4 -4
  482. package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +4 -2
  483. package/src/parsers/manifest/dash/common/get_clock_offset.ts +3 -3
  484. package/src/parsers/manifest/dash/common/get_http_utc-timing_url.ts +15 -6
  485. package/src/parsers/manifest/dash/common/indexes/base.ts +5 -3
  486. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +1 -0
  487. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +9 -9
  488. package/src/parsers/manifest/dash/common/indexes/list.ts +6 -3
  489. package/src/parsers/manifest/dash/common/indexes/template.ts +13 -6
  490. package/src/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.ts +10 -9
  491. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +13 -5
  492. package/src/parsers/manifest/dash/common/indexes/tokens.ts +4 -4
  493. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +10 -4
  494. package/src/parsers/manifest/dash/common/parse_mpd.ts +21 -13
  495. package/src/parsers/manifest/dash/common/parse_periods.ts +7 -8
  496. package/src/parsers/manifest/dash/common/parse_representation_index.ts +12 -12
  497. package/src/parsers/manifest/dash/common/parse_representations.ts +23 -4
  498. package/src/parsers/manifest/dash/common/resolve_base_urls.ts +33 -24
  499. package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +12 -0
  500. package/src/parsers/manifest/dash/js-parser/node_parsers/BaseURL.ts +13 -9
  501. package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +28 -0
  502. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.ts +8 -5
  503. package/src/parsers/manifest/dash/js-parser/node_parsers/utils.ts +3 -0
  504. package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +5 -2
  505. package/src/parsers/manifest/dash/node_parser_types.ts +8 -0
  506. package/src/parsers/manifest/dash/parsers_types.ts +8 -2
  507. package/src/parsers/manifest/dash/wasm-parser/rs/lib.rs +1 -8
  508. package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +26 -5
  509. package/src/parsers/manifest/dash/wasm-parser/rs/processor/mod.rs +75 -521
  510. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +7 -4
  511. package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +13 -0
  512. package/src/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.ts +8 -1
  513. package/src/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.ts +6 -0
  514. package/src/parsers/manifest/dash/wasm-parser/ts/generators/MPD.ts +6 -0
  515. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Period.ts +14 -0
  516. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +26 -0
  517. package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.ts +6 -0
  518. package/src/parsers/manifest/dash/wasm-parser/ts/generators/XLink.ts +7 -0
  519. package/src/parsers/manifest/dash/wasm-parser/ts/generators/root.ts +7 -0
  520. package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +1 -1
  521. package/src/parsers/manifest/local/representation_index.ts +2 -0
  522. package/src/parsers/manifest/smooth/create_parser.ts +1 -1
  523. package/src/parsers/manifest/smooth/representation_index.ts +3 -1
  524. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +1 -1
  525. package/src/parsers/manifest/utils/index_helpers.ts +21 -11
  526. package/src/parsers/manifest/utils/is_segment_still_available.ts +4 -6
  527. package/src/parsers/texttracks/sami/html.ts +1 -1
  528. package/src/parsers/texttracks/sami/native.ts +1 -1
  529. package/src/parsers/texttracks/ttml/html/apply_font_size.ts +11 -1
  530. package/src/transports/dash/image_pipelines.ts +4 -4
  531. package/src/transports/dash/init_segment_loader.ts +1 -1
  532. package/src/transports/dash/manifest_parser.ts +99 -25
  533. package/src/transports/dash/segment_loader.ts +1 -1
  534. package/src/transports/dash/segment_parser.ts +4 -4
  535. package/src/transports/dash/text_parser.ts +8 -8
  536. package/src/transports/local/segment_loader.ts +2 -2
  537. package/src/transports/local/segment_parser.ts +4 -4
  538. package/src/transports/local/text_parser.ts +8 -8
  539. package/src/transports/metaplaylist/pipelines.ts +11 -11
  540. package/src/transports/smooth/extract_timings_infos.ts +1 -1
  541. package/src/transports/smooth/pipelines.ts +8 -8
  542. package/src/transports/smooth/segment_loader.ts +3 -3
  543. package/src/transports/types.ts +31 -17
  544. package/src/transports/utils/call_custom_manifest_loader.ts +1 -1
  545. package/src/transports/utils/get_isobmff_timing_infos.ts +6 -1
  546. package/src/transports/utils/parse_text_track.ts +4 -2
  547. package/src/typings/globals.d.ts +57 -40
  548. package/src/utils/__tests__/concat_map_latest.test.ts +7 -9
  549. package/src/utils/__tests__/defer_subscriptions.test.ts +4 -4
  550. package/src/utils/__tests__/event_emitter.test.ts +1 -1
  551. package/src/utils/__tests__/initialization_segment_cache.test.ts +7 -0
  552. package/src/utils/assert.ts +1 -1
  553. package/src/utils/concat_map_latest.ts +2 -4
  554. package/src/utils/defer_subscriptions.ts +1 -1
  555. package/src/utils/filter_map.ts +2 -4
  556. package/src/utils/reference.ts +234 -0
  557. package/src/utils/request/fetch.ts +3 -3
  558. package/src/utils/request/xhr.ts +2 -2
  559. package/src/utils/rx-retry_with_backoff.ts +2 -4
  560. package/tsconfig.json +4 -1
  561. package/tsconfig.modules.json +8 -3
  562. package/dist/_esm5.processed/core/abr/create_filters.d.ts +0 -27
  563. package/dist/_esm5.processed/core/abr/create_filters.js +0 -56
  564. package/dist/_esm5.processed/core/api/clock.d.ts +0 -157
  565. package/dist/_esm5.processed/core/api/clock.js +0 -363
  566. package/dist/_esm5.processed/core/init/create_stream_clock.d.ts +0 -34
  567. package/dist/_esm5.processed/core/init/create_stream_clock.js +0 -55
  568. package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.d.ts +0 -31
  569. package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.js +0 -37
  570. package/scripts/doc-generator/construct_html.js +0 -135
  571. package/scripts/doc-generator/construct_page_list.js +0 -120
  572. package/scripts/doc-generator/create_for_dir.js +0 -151
  573. package/scripts/doc-generator/get_files_to_convert.js +0 -71
  574. package/scripts/doc-generator/mkdir_parent.js +0 -21
  575. package/scripts/doc-generator/read_title_from_md.js +0 -22
  576. package/scripts/doc-generator/remove_toc_from_md.js +0 -20
  577. package/src/core/abr/create_filters.ts +0 -59
  578. package/src/core/api/clock.ts +0 -573
  579. package/src/core/init/create_stream_clock.ts +0 -93
  580. package/src/parsers/manifest/dash/common/extract_minimum_availability_time_offset.ts +0 -41
@@ -13,24 +13,28 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { Observable, Subject } from "rxjs";
16
+ import { Observable } from "rxjs";
17
17
  import { ICustomError } from "../../../errors";
18
18
  import Manifest, { Adaptation, ISegment, Period, Representation } from "../../../manifest";
19
- import { ISegmentParserParsedInitSegment, ISegmentParserParsedSegment, ISegmentPipeline } from "../../../transports";
20
- import { IABRMetricsEvent, IABRRequestBeginEvent, IABRRequestEndEvent, IABRRequestProgressEvent } from "../../abr";
19
+ import { ISegmentParserParsedInitChunk, ISegmentParserParsedMediaChunk, ISegmentPipeline } from "../../../transports";
20
+ import { IABRMetricsEventValue, IABRRequestBeginEventValue, IABRRequestEndEventValue, IABRRequestProgressEventValue } from "../../abr";
21
21
  import { IBufferType } from "../../segment_buffers";
22
22
  /**
23
- * Create a function which will fetch and parse segments.
23
+ * Create an `ISegmentFetcher` object which will allow to easily fetch and parse
24
+ * segments.
25
+ * An `ISegmentFetcher` also implements a retry mechanism, based on the given
26
+ * `options` argument, which may retry a segment request when it fails.
27
+ *
24
28
  * @param {string} bufferType
25
29
  * @param {Object} transport
26
- * @param {Subject} requests$
30
+ * @param {Object} callbacks
27
31
  * @param {Object} options
28
32
  * @returns {Function}
29
33
  */
30
- export default function createSegmentFetcher<LoadedFormat, TSegmentDataType>(bufferType: IBufferType, pipeline: ISegmentPipeline<LoadedFormat, TSegmentDataType>, requests$: Subject<IABRMetricsEvent | IABRRequestBeginEvent | IABRRequestProgressEvent | IABRRequestEndEvent>, options: ISegmentFetcherOptions): ISegmentFetcher<TSegmentDataType>;
34
+ export default function createSegmentFetcher<TLoadedFormat, TSegmentDataType>(bufferType: IBufferType, pipeline: ISegmentPipeline<TLoadedFormat, TSegmentDataType>, callbacks: ISegmentFetcherCreatorCallbacks, options: ISegmentFetcherOptions): ISegmentFetcher<TSegmentDataType>;
31
35
  export declare type ISegmentFetcher<TSegmentDataType> = (content: ISegmentLoaderContent) => Observable<ISegmentFetcherEvent<TSegmentDataType>>;
32
36
  /** Event sent by the SegmentFetcher when fetching a segment. */
33
- export declare type ISegmentFetcherEvent<TSegmentDataType> = ISegmentFetcherChunkCompleteEvent | ISegmentFetcherChunkEvent<TSegmentDataType> | ISegmentFetcherWarning;
37
+ export declare type ISegmentFetcherEvent<TSegmentDataType> = ISegmentFetcherChunkEvent<TSegmentDataType> | ISegmentFetcherChunkCompleteEvent | ISegmentFetcherRetry;
34
38
  /**
35
39
  * Event sent when a new "chunk" of the segment is available.
36
40
  * A segment can contain n chunk(s) for n >= 0.
@@ -49,7 +53,7 @@ export interface ISegmentFetcherChunkEvent<TSegmentDataType> {
49
53
  * @param {number} initTimescale
50
54
  * @returns {Object}
51
55
  */
52
- parse(initTimescale?: number): ISegmentParserParsedInitSegment<TSegmentDataType> | ISegmentParserParsedSegment<TSegmentDataType>;
56
+ parse(initTimescale?: number): ISegmentParserParsedInitChunk<TSegmentDataType> | ISegmentParserParsedMediaChunk<TSegmentDataType>;
53
57
  }
54
58
  /**
55
59
  * Event sent when all "chunk" of the segments have been communicated through
@@ -66,11 +70,38 @@ export interface ISegmentLoaderContent {
66
70
  representation: Representation;
67
71
  segment: ISegment;
68
72
  }
69
- /** An Error happened while loading (usually a request error). */
70
- export interface ISegmentFetcherWarning {
71
- type: "warning";
73
+ /**
74
+ * An Error happened while loading which led to a retry.
75
+ * The request is retried from scratch.
76
+ */
77
+ export interface ISegmentFetcherRetry {
78
+ type: "retry";
72
79
  value: ICustomError;
73
80
  }
81
+ /**
82
+ * Callbacks that can be bound when creating an `ISegmentFetcher`.
83
+ * Those allows to be notified of an `ISegmentFetcher` various lifecycles and of
84
+ * network information.
85
+ */
86
+ export interface ISegmentFetcherCreatorCallbacks {
87
+ /** Called when a segment request begins. */
88
+ onRequestBegin?: (arg: IABRRequestBeginEventValue) => void;
89
+ /** Called when progress information is available on a pending segment request. */
90
+ onProgress?: (arg: IABRRequestProgressEventValue) => void;
91
+ /**
92
+ * Called when a segment request ends (either because it completed, it failed
93
+ * or was canceled).
94
+ */
95
+ onRequestEnd?: (arg: IABRRequestEndEventValue) => void;
96
+ /**
97
+ * Called when network metrics linked to a segment request are available,
98
+ * once the request has terminated.
99
+ * This callback may be called before or after the corresponding
100
+ * `onRequestEnd` callback, you should not rely on the order between the two.
101
+ */
102
+ onMetrics?: (arg: IABRMetricsEventValue) => void;
103
+ }
104
+ /** Options allowing to configure an `ISegmentFetcher`'s behavior. */
74
105
  export interface ISegmentFetcherOptions {
75
106
  /**
76
107
  * Initial delay to wait if a request fails before making a new request, in
@@ -13,12 +13,15 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { Observable, } from "rxjs";
16
+ import { Observable } from "rxjs";
17
17
  import config from "../../../config";
18
- import { formatError } from "../../../errors";
18
+ import { formatError, } from "../../../errors";
19
+ import log from "../../../log";
20
+ import { getLoggableSegmentId, } from "../../../manifest";
19
21
  import arrayIncludes from "../../../utils/array_includes";
20
22
  import idGenerator from "../../../utils/id_generator";
21
23
  import InitializationSegmentCache from "../../../utils/initialization_segment_cache";
24
+ import isNullOrUndefined from "../../../utils/is_null_or_undefined";
22
25
  import objectAssign from "../../../utils/object_assign";
23
26
  import TaskCanceller from "../../../utils/task_canceller";
24
27
  import errorSelector from "../utils/error_selector";
@@ -26,14 +29,18 @@ import { tryURLsWithBackoff } from "../utils/try_urls_with_backoff";
26
29
  var DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR = config.DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR, DEFAULT_MAX_REQUESTS_RETRY_ON_OFFLINE = config.DEFAULT_MAX_REQUESTS_RETRY_ON_OFFLINE, INITIAL_BACKOFF_DELAY_BASE = config.INITIAL_BACKOFF_DELAY_BASE, MAX_BACKOFF_DELAY_BASE = config.MAX_BACKOFF_DELAY_BASE;
27
30
  var generateRequestID = idGenerator();
28
31
  /**
29
- * Create a function which will fetch and parse segments.
32
+ * Create an `ISegmentFetcher` object which will allow to easily fetch and parse
33
+ * segments.
34
+ * An `ISegmentFetcher` also implements a retry mechanism, based on the given
35
+ * `options` argument, which may retry a segment request when it fails.
36
+ *
30
37
  * @param {string} bufferType
31
38
  * @param {Object} transport
32
- * @param {Subject} requests$
39
+ * @param {Object} callbacks
33
40
  * @param {Object} options
34
41
  * @returns {Function}
35
42
  */
36
- export default function createSegmentFetcher(bufferType, pipeline, requests$, options) {
43
+ export default function createSegmentFetcher(bufferType, pipeline, callbacks, options) {
37
44
  /**
38
45
  * Cache audio and video initialization segments.
39
46
  * This allows to avoid doing too many requests for what are usually very
@@ -46,11 +53,13 @@ export default function createSegmentFetcher(bufferType, pipeline, requests$, op
46
53
  /**
47
54
  * Fetch a specific segment.
48
55
  *
49
- * This function returns an Observable which will fetch the segment on
56
+ * This function returns an Observable which will fetch segments on
50
57
  * subscription.
58
+ * If the corresponding request fails, it may retry it based on the given
59
+ * options.
60
+ *
51
61
  * This Observable will emit various events during that request lifecycle and
52
62
  * throw if the segment request(s) (including potential retries) fail.
53
- *
54
63
  * The Observable will automatically complete once no events are left to be
55
64
  * sent.
56
65
  * @param {Object} content
@@ -58,25 +67,38 @@ export default function createSegmentFetcher(bufferType, pipeline, requests$, op
58
67
  */
59
68
  return function fetchSegment(content) {
60
69
  var segment = content.segment;
70
+ // used by logs
71
+ var segmentIdString = getLoggableSegmentId(content);
61
72
  return new Observable(function (obs) {
62
- var _a;
63
- // Retrieve from cache if it exists
64
- var cached = cache !== undefined ? cache.get(content) :
65
- null;
66
- if (cached !== null) {
67
- obs.next({ type: "chunk",
68
- parse: generateParserFunction(cached, false) });
69
- obs.next({ type: "chunk-complete" });
70
- obs.complete();
71
- return undefined;
72
- }
73
- var id = generateRequestID();
74
- requests$.next({ type: "requestBegin",
75
- value: { duration: segment.duration,
76
- time: segment.time,
77
- requestTimestamp: performance.now(), id: id } });
73
+ var _a, _b;
74
+ var requestId = generateRequestID();
78
75
  var canceller = new TaskCanceller();
79
- var hasRequestEnded = false;
76
+ /**
77
+ * If the request succeeded, set to the corresponding
78
+ * `IChunkCompleteInformation` object.
79
+ * If the request failed or was cancelled, set to `null`.
80
+ *
81
+ * Stays to `undefined` when the request is still pending.
82
+ */
83
+ var requestInfo;
84
+ /**
85
+ * Array containing one entry per loaded chunk, in chronological order.
86
+ * The boolean indicates if the chunk has been parsed at least once.
87
+ *
88
+ * This is used to know when all loaded chunks have been parsed, which
89
+ * can be useful to e.g. construct metrics about the loaded segment.
90
+ */
91
+ var parsedChunks = [];
92
+ /**
93
+ * Addition of the duration of each encountered and parsed chunks.
94
+ * Allows to have an idea of the real duration of the full segment once
95
+ * all chunks have been parsed.
96
+ *
97
+ * `undefined` if at least one of the parsed chunks has unknown duration.
98
+ */
99
+ var segmentDurationAcc = 0;
100
+ /** Set to `true` once network metrics have been sent. */
101
+ var metricsSent = false;
80
102
  var loaderCallbacks = {
81
103
  /**
82
104
  * Callback called when the segment loader has progress information on
@@ -84,12 +106,13 @@ export default function createSegmentFetcher(bufferType, pipeline, requests$, op
84
106
  * @param {Object} info
85
107
  */
86
108
  onProgress: function (info) {
109
+ var _a;
87
110
  if (info.totalSize !== undefined && info.size < info.totalSize) {
88
- requests$.next({ type: "progress",
89
- value: { duration: info.duration,
90
- size: info.size,
91
- totalSize: info.totalSize,
92
- timestamp: performance.now(), id: id } });
111
+ (_a = callbacks.onProgress) === null || _a === void 0 ? void 0 : _a.call(callbacks, { duration: info.duration,
112
+ size: info.size,
113
+ totalSize: info.totalSize,
114
+ timestamp: performance.now(),
115
+ id: requestId });
93
116
  }
94
117
  },
95
118
  /**
@@ -103,8 +126,24 @@ export default function createSegmentFetcher(bufferType, pipeline, requests$, op
103
126
  parse: generateParserFunction(chunkData, true) });
104
127
  },
105
128
  };
106
- tryURLsWithBackoff((_a = segment.mediaURLs) !== null && _a !== void 0 ? _a : [null], callLoaderWithUrl, objectAssign({ onRetry: onRetry }, options), canceller.signal)
129
+ // Retrieve from cache if it exists
130
+ var cached = cache !== undefined ? cache.get(content) :
131
+ null;
132
+ if (cached !== null) {
133
+ log.debug("SF: Found wanted segment in cache", segmentIdString);
134
+ obs.next({ type: "chunk",
135
+ parse: generateParserFunction(cached, false) });
136
+ obs.next({ type: "chunk-complete" });
137
+ obs.complete();
138
+ return undefined;
139
+ }
140
+ log.debug("SF: Beginning request", segmentIdString);
141
+ (_a = callbacks.onRequestBegin) === null || _a === void 0 ? void 0 : _a.call(callbacks, { requestTimestamp: performance.now(),
142
+ id: requestId, content: content });
143
+ tryURLsWithBackoff((_b = segment.mediaURLs) !== null && _b !== void 0 ? _b : [null], callLoaderWithUrl, objectAssign({ onRetry: onRetry }, options), canceller.signal)
107
144
  .then(function (res) {
145
+ var _a;
146
+ log.debug("SF: Segment request ended with success", segmentIdString);
108
147
  if (res.resultType === "segment-loaded") {
109
148
  var loadedData = res.resultData.responseData;
110
149
  if (cache !== undefined) {
@@ -117,38 +156,39 @@ export default function createSegmentFetcher(bufferType, pipeline, requests$, op
117
156
  obs.next({ type: "chunk",
118
157
  parse: generateParserFunction(res.resultData, false) });
119
158
  }
120
- hasRequestEnded = true;
159
+ log.debug("SF: Segment request ended with success", segmentIdString);
121
160
  obs.next({ type: "chunk-complete" });
122
- if ((res.resultType === "segment-loaded" ||
123
- res.resultType === "chunk-complete") &&
124
- res.resultData.size !== undefined &&
125
- res.resultData.duration !== undefined) {
126
- requests$.next({ type: "metrics",
127
- value: { size: res.resultData.size,
128
- duration: res.resultData.duration, content: content } });
161
+ if (res.resultType !== "segment-created") {
162
+ requestInfo = res.resultData;
163
+ sendNetworkMetricsIfAvailable();
129
164
  }
130
165
  if (!canceller.isUsed) {
131
166
  // The current Observable could have been canceled as a result of one
132
167
  // of the previous `next` calls. In that case, we don't want to send
133
168
  // a "requestEnd" again as it has already been sent on cancellation.
134
169
  //
135
- // Note that we only perform this check for `"requestEnd"` on
170
+ // Note that we only perform this check for `onRequestEnd` on
136
171
  // purpose. Observable's events should have been ignored by RxJS if
137
172
  // the Observable has already been canceled and we don't care if
138
173
  // `"metrics"` is sent there.
139
- requests$.next({ type: "requestEnd", value: { id: id } });
174
+ (_a = callbacks.onRequestEnd) === null || _a === void 0 ? void 0 : _a.call(callbacks, { id: requestId });
140
175
  }
141
176
  obs.complete();
142
177
  })
143
178
  .catch(function (err) {
144
- hasRequestEnded = true;
179
+ log.debug("SF: Segment request failed", segmentIdString);
180
+ requestInfo = null;
145
181
  obs.error(errorSelector(err));
146
182
  });
147
183
  return function () {
148
- if (!hasRequestEnded) {
149
- canceller.cancel();
150
- requests$.next({ type: "requestEnd", value: { id: id } });
184
+ var _a;
185
+ if (requestInfo !== undefined) {
186
+ return; // Request already terminated
151
187
  }
188
+ log.debug("SF: Segment request cancelled", segmentIdString);
189
+ requestInfo = null;
190
+ canceller.cancel();
191
+ (_a = callbacks.onRequestEnd) === null || _a === void 0 ? void 0 : _a.call(callbacks, { id: requestId });
152
192
  };
153
193
  /**
154
194
  * Call a segment loader for the given URL with the right arguments.
@@ -166,10 +206,23 @@ export default function createSegmentFetcher(bufferType, pipeline, requests$, op
166
206
  * @returns {Function}
167
207
  */
168
208
  function generateParserFunction(data, isChunked) {
209
+ parsedChunks.push(false);
210
+ var parsedChunkId = parsedChunks.length - 1;
169
211
  return function parse(initTimescale) {
170
212
  var loaded = { data: data, isChunked: isChunked };
171
213
  try {
172
- return parseSegment(loaded, content, initTimescale);
214
+ var parsed = parseSegment(loaded, content, initTimescale);
215
+ if (!parsedChunks[parsedChunkId]) {
216
+ segmentDurationAcc = segmentDurationAcc !== undefined &&
217
+ parsed.segmentType === "media" &&
218
+ parsed.chunkInfos !== null &&
219
+ parsed.chunkInfos.duration !== undefined ?
220
+ segmentDurationAcc + parsed.chunkInfos.duration :
221
+ undefined;
222
+ parsedChunks[parsedChunkId] = true;
223
+ sendNetworkMetricsIfAvailable();
224
+ }
225
+ return parsed;
173
226
  }
174
227
  catch (error) {
175
228
  throw formatError(error, { defaultCode: "PIPELINE_PARSE_ERROR",
@@ -182,9 +235,28 @@ export default function createSegmentFetcher(bufferType, pipeline, requests$, op
182
235
  * @param {*} err
183
236
  */
184
237
  function onRetry(err) {
185
- obs.next({ type: "warning",
238
+ obs.next({ type: "retry",
186
239
  value: errorSelector(err) });
187
240
  }
241
+ /**
242
+ * Send netork metrics if they haven't yet been sent and if all data to
243
+ * define them is available.
244
+ */
245
+ function sendNetworkMetricsIfAvailable() {
246
+ var _a;
247
+ if (metricsSent) {
248
+ return;
249
+ }
250
+ if (!isNullOrUndefined(requestInfo) &&
251
+ requestInfo.size !== undefined &&
252
+ requestInfo.requestDuration !== undefined &&
253
+ parsedChunks.length > 0 &&
254
+ parsedChunks.every(function (isParsed) { return isParsed; })) {
255
+ metricsSent = true;
256
+ (_a = callbacks.onMetrics) === null || _a === void 0 ? void 0 : _a.call(callbacks, { size: requestInfo.size,
257
+ requestDuration: requestInfo.requestDuration, content: content, segmentDuration: segmentDurationAcc });
258
+ }
259
+ }
188
260
  });
189
261
  };
190
262
  }
@@ -13,23 +13,10 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { Subject } from "rxjs";
17
16
  import { ITransportPipelines } from "../../../transports";
18
- import { IABRMetricsEvent, IABRRequestBeginEvent, IABRRequestEndEvent, IABRRequestProgressEvent } from "../../abr";
19
17
  import { IBufferType } from "../../segment_buffers";
20
18
  import { IPrioritizedSegmentFetcher } from "./prioritized_segment_fetcher";
21
- /** Options used by the `SegmentFetcherCreator`. */
22
- export interface ISegmentFetcherCreatorBackoffOptions {
23
- /**
24
- * Whether the content is played in a low-latency mode.
25
- * This has an impact on default backoff delays.
26
- */
27
- lowLatencyMode: boolean;
28
- /** Maximum number of time a request on error will be retried. */
29
- maxRetryRegular: number | undefined;
30
- /** Maximum number of time a request be retried when the user is offline. */
31
- maxRetryOffline: number | undefined;
32
- }
19
+ import { ISegmentFetcherCreatorCallbacks } from "./segment_fetcher";
33
20
  /**
34
21
  * Interact with the transport pipelines to download segments with the right
35
22
  * priority.
@@ -38,12 +25,15 @@ export interface ISegmentFetcherCreatorBackoffOptions {
38
25
  *
39
26
  * @example
40
27
  * ```js
41
- * const creator = new SegmentFetcherCreator(transport);
28
+ * const creator = new SegmentFetcherCreator(transport, {
29
+ * lowLatencyMode: false,
30
+ * maxRetryRegular: Infinity,
31
+ * maxRetryOffline: Infinity,
32
+ * });
42
33
  *
43
34
  * // 2 - create a new fetcher with its backoff options
44
35
  * const fetcher = creator.createSegmentFetcher("audio", {
45
- * maxRetryRegular: Infinity,
46
- * maxRetryOffline: Infinity,
36
+ * // ... (lifecycle callbacks if wanted)
47
37
  * });
48
38
  *
49
39
  * // 3 - load a segment with a given priority
@@ -85,9 +75,20 @@ export default class SegmentFetcherCreator {
85
75
  * Create a segment fetcher, allowing to easily perform segment requests.
86
76
  * @param {string} bufferType - The type of buffer concerned (e.g. "audio",
87
77
  * "video", etc.)
88
- * @param {Subject} requests$ - Subject through which request-related events
89
- * (such as those needed by the ABRManager) will be sent.
78
+ * @param {Object} callbacks
90
79
  * @returns {Object}
91
80
  */
92
- createSegmentFetcher(bufferType: IBufferType, requests$: Subject<IABRRequestBeginEvent | IABRRequestProgressEvent | IABRRequestEndEvent | IABRMetricsEvent>): IPrioritizedSegmentFetcher<unknown>;
81
+ createSegmentFetcher(bufferType: IBufferType, callbacks: ISegmentFetcherCreatorCallbacks): IPrioritizedSegmentFetcher<unknown>;
82
+ }
83
+ /** Options used by the `SegmentFetcherCreator`. */
84
+ export interface ISegmentFetcherCreatorBackoffOptions {
85
+ /**
86
+ * Whether the content is played in a low-latency mode.
87
+ * This has an impact on default backoff delays.
88
+ */
89
+ lowLatencyMode: boolean;
90
+ /** Maximum number of time a request on error will be retried. */
91
+ maxRetryRegular: number | undefined;
92
+ /** Maximum number of time a request be retried when the user is offline. */
93
+ maxRetryOffline: number | undefined;
93
94
  }
@@ -26,12 +26,15 @@ var MIN_CANCELABLE_PRIORITY = config.MIN_CANCELABLE_PRIORITY, MAX_HIGH_PRIORITY_
26
26
  *
27
27
  * @example
28
28
  * ```js
29
- * const creator = new SegmentFetcherCreator(transport);
29
+ * const creator = new SegmentFetcherCreator(transport, {
30
+ * lowLatencyMode: false,
31
+ * maxRetryRegular: Infinity,
32
+ * maxRetryOffline: Infinity,
33
+ * });
30
34
  *
31
35
  * // 2 - create a new fetcher with its backoff options
32
36
  * const fetcher = creator.createSegmentFetcher("audio", {
33
- * maxRetryRegular: Infinity,
34
- * maxRetryOffline: Infinity,
37
+ * // ... (lifecycle callbacks if wanted)
35
38
  * });
36
39
  *
37
40
  * // 3 - load a segment with a given priority
@@ -61,16 +64,14 @@ var SegmentFetcherCreator = /** @class */ (function () {
61
64
  * Create a segment fetcher, allowing to easily perform segment requests.
62
65
  * @param {string} bufferType - The type of buffer concerned (e.g. "audio",
63
66
  * "video", etc.)
64
- * @param {Subject} requests$ - Subject through which request-related events
65
- * (such as those needed by the ABRManager) will be sent.
67
+ * @param {Object} callbacks
66
68
  * @returns {Object}
67
69
  */
68
- SegmentFetcherCreator.prototype.createSegmentFetcher = function (bufferType, requests$) {
70
+ SegmentFetcherCreator.prototype.createSegmentFetcher = function (bufferType, callbacks) {
69
71
  var backoffOptions = getSegmentFetcherOptions(bufferType, this._backoffOptions);
70
72
  var pipelines = this._transport[bufferType];
71
73
  // Types are very complicated here as they are per-type of buffer.
72
- // This is the reason why `any` is used instead.
73
- var segmentFetcher = createSegmentFetcher(bufferType, pipelines, requests$, backoffOptions);
74
+ var segmentFetcher = createSegmentFetcher(bufferType, pipelines, callbacks, backoffOptions);
74
75
  return applyPrioritizerToSegmentFetcher(this._prioritizer, segmentFetcher);
75
76
  };
76
77
  return SegmentFetcherCreator;
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { merge as observableMerge, of as observableOf, } from "rxjs";
17
- import { map } from "rxjs/operators";
16
+ import { map, merge as observableMerge, of as observableOf, } from "rxjs";
18
17
  import { events, hasEMEAPIs, } from "../../compat/";
19
18
  import { EncryptedMediaError } from "../../errors";
20
19
  import features from "../../features";
@@ -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 { Observable, } from "rxjs";
17
- import { mapTo, mergeMap, take, } from "rxjs/operators";
16
+ import { map, mergeMap, Observable, take, } from "rxjs";
18
17
  import { clearElementSrc, events, MediaSource_, } from "../../compat";
19
18
  import { MediaError } from "../../errors";
20
19
  import log from "../../log";
@@ -36,7 +35,7 @@ function resetMediaSource(mediaElement, mediaSource, mediaSourceURL) {
36
35
  var sourceBuffer = sourceBuffers[i];
37
36
  try {
38
37
  if (readyState === "open") {
39
- log.info("Init: Removing SourceBuffer from mediaSource", sourceBuffer);
38
+ log.info("Init: Removing SourceBuffer from mediaSource");
40
39
  sourceBuffer.abort();
41
40
  }
42
41
  mediaSource.removeSourceBuffer(sourceBuffer);
@@ -103,6 +102,6 @@ function createMediaSource(mediaElement) {
103
102
  */
104
103
  export default function openMediaSource(mediaElement) {
105
104
  return createMediaSource(mediaElement).pipe(mergeMap(function (mediaSource) {
106
- return onSourceOpen$(mediaSource).pipe(take(1), mapTo(mediaSource));
105
+ return onSourceOpen$(mediaSource).pipe(take(1), map(function () { return mediaSource; }));
107
106
  }));
108
107
  }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Copyright 2015 CANAL+ Group
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import Manifest from "../../manifest";
17
+ import { IReadOnlySharedReference } from "../../utils/reference";
18
+ import { IReadOnlyPlaybackObserver, PlaybackObserver } from "../api";
19
+ import { IStreamOrchestratorPlaybackObservation } from "../stream";
20
+ /** Arguments needed to create the Stream's version of the PlaybackObserver. */
21
+ export interface IStreamPlaybackObserverArguments {
22
+ /** If true, the player will auto-play when `initialPlayPerformed` becomes `true`. */
23
+ autoPlay: boolean;
24
+ /** Becomes `true` after the initial play has been taken care of. */
25
+ initialPlayPerformed: IReadOnlySharedReference<boolean>;
26
+ /** Becomes `true` after the initial seek has been taken care of. */
27
+ initialSeekPerformed: IReadOnlySharedReference<boolean>;
28
+ /** The last speed requested by the user. */
29
+ speed: IReadOnlySharedReference<number>;
30
+ /** The time the player will seek when `initialSeekPerformed` becomes `true`. */
31
+ startTime: number;
32
+ }
33
+ /**
34
+ * Create PlaybackObserver for the `Stream` part of the code.
35
+ * @param {Object} playbackObserver
36
+ * @param {Object} args
37
+ * @returns {Observable}
38
+ */
39
+ export default function createStreamPlaybackObserver(manifest: Manifest, playbackObserver: PlaybackObserver, { autoPlay, initialPlayPerformed, initialSeekPerformed, speed, startTime }: IStreamPlaybackObserverArguments): IReadOnlyPlaybackObserver<IStreamOrchestratorPlaybackObservation>;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Copyright 2015 CANAL+ Group
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { combineLatest as observableCombineLatest, map, } from "rxjs";
17
+ /**
18
+ * Create PlaybackObserver for the `Stream` part of the code.
19
+ * @param {Object} playbackObserver
20
+ * @param {Object} args
21
+ * @returns {Observable}
22
+ */
23
+ export default function createStreamPlaybackObserver(manifest, playbackObserver, _a) {
24
+ var autoPlay = _a.autoPlay, initialPlayPerformed = _a.initialPlayPerformed, initialSeekPerformed = _a.initialSeekPerformed, speed = _a.speed, startTime = _a.startTime;
25
+ return playbackObserver.deriveReadOnlyObserver(function mapObservable(observation$) {
26
+ return observableCombineLatest([observation$, speed.asObservable()]).pipe(map(function (_a) {
27
+ var observation = _a[0], lastSpeed = _a[1];
28
+ return {
29
+ liveGap: manifest.isLive ?
30
+ manifest.getMaximumPosition() - observation.position :
31
+ undefined,
32
+ position: observation.position,
33
+ duration: observation.duration,
34
+ isPaused: initialPlayPerformed.getValue() ? observation.paused :
35
+ !autoPlay,
36
+ readyState: observation.readyState,
37
+ speed: lastSpeed,
38
+ // wantedTimeOffset is an offset to add to the timing's current time to have
39
+ // the "real" wanted position.
40
+ // For now, this is seen when the media element has not yet seeked to its
41
+ // initial position, the currentTime will most probably be 0 where the
42
+ // effective starting position will be _startTime_.
43
+ // Thus we initially set a wantedTimeOffset equal to startTime.
44
+ wantedTimeOffset: initialSeekPerformed.getValue() ?
45
+ 0 :
46
+ startTime - observation.position,
47
+ };
48
+ }));
49
+ });
50
+ }
@@ -13,8 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { combineLatest as observableCombineLatest, defer as observableDefer, EMPTY, fromEvent as observableFromEvent, interval as observableInterval, merge as observableMerge, of as observableOf, } from "rxjs";
17
- import { catchError, distinctUntilChanged, filter, ignoreElements, map, mapTo, mergeMap, startWith, switchMap, take, tap, } from "rxjs/operators";
16
+ import { catchError, combineLatest as observableCombineLatest, defer as observableDefer, distinctUntilChanged, EMPTY, filter, fromEvent as observableFromEvent, ignoreElements, interval as observableInterval, map, merge as observableMerge, mergeMap, of as observableOf, startWith, switchMap, take, tap, } from "rxjs";
18
17
  import { onSourceOpen$, onSourceClose$, onSourceEnded$, } from "../../compat/event_listeners";
19
18
  import log from "../../log";
20
19
  import { fromEvent } from "../../utils/event_emitter";
@@ -43,7 +42,13 @@ export default function DurationUpdater(manifest, mediaSource) {
43
42
  lastDurationUpdate = durationUpdate;
44
43
  }
45
44
  }));
46
- }), ignoreElements());
45
+ }),
46
+ // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
47
+ // first type parameter as `any` instead of the perfectly fine `unknown`,
48
+ // leading to linter issues, as it forbids the usage of `any`.
49
+ // This is why we're disabling the eslint rule.
50
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
51
+ ignoreElements());
47
52
  });
48
53
  }
49
54
  /**
@@ -109,13 +114,16 @@ function whenSourceBuffersEndedUpdates$(sourceBuffers) {
109
114
  return observableOf(undefined);
110
115
  }
111
116
  var sourceBufferUpdatingStatuses = [];
112
- for (var i = 0; i < sourceBuffers.length; i++) {
117
+ var _loop_1 = function (i) {
113
118
  var sourceBuffer = sourceBuffers[i];
114
- sourceBufferUpdatingStatuses.push(observableMerge(observableFromEvent(sourceBuffer, "updatestart").pipe(mapTo(true)), observableFromEvent(sourceBuffer, "update").pipe(mapTo(false)), observableInterval(500).pipe(mapTo(sourceBuffer.updating))).pipe(startWith(sourceBuffer.updating), distinctUntilChanged()));
119
+ sourceBufferUpdatingStatuses.push(observableMerge(observableFromEvent(sourceBuffer, "updatestart").pipe(map(function () { return true; })), observableFromEvent(sourceBuffer, "update").pipe(map(function () { return false; })), observableInterval(500).pipe(map(function () { return sourceBuffer.updating; }))).pipe(startWith(sourceBuffer.updating), distinctUntilChanged()));
120
+ };
121
+ for (var i = 0; i < sourceBuffers.length; i++) {
122
+ _loop_1(i);
115
123
  }
116
124
  return observableCombineLatest(sourceBufferUpdatingStatuses).pipe(filter(function (areUpdating) {
117
125
  return areUpdating.every(function (isUpdating) { return !isUpdating; });
118
- }), mapTo(undefined));
126
+ }), map(function () { return undefined; }));
119
127
  }
120
128
  /**
121
129
  * Emit a boolean that tells if the media source is opened or not.
@@ -123,5 +131,6 @@ function whenSourceBuffersEndedUpdates$(sourceBuffers) {
123
131
  * @returns {Object}
124
132
  */
125
133
  function isMediaSourceOpened$(mediaSource) {
126
- return observableMerge(onSourceOpen$(mediaSource).pipe(mapTo(true)), onSourceEnded$(mediaSource).pipe(mapTo(false)), onSourceClose$(mediaSource).pipe(mapTo(false))).pipe(startWith(mediaSource.readyState === "open"), distinctUntilChanged());
134
+ return observableMerge(onSourceOpen$(mediaSource).pipe(map(function () { return true; })), onSourceEnded$(mediaSource).pipe(map(function () { return false; })), onSourceClose$(mediaSource).pipe(map(function () { return false; }))).pipe(startWith(mediaSource.readyState === "open"), distinctUntilChanged());
127
135
  }
136
+ /* eslint-enable @typescript-eslint/no-unsafe-argument */