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
@@ -1,573 +0,0 @@
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
-
17
- /**
18
- * This file defines a global clock for the RxPlayer.
19
- *
20
- * Each clock tick also pass information about the current state of the
21
- * media element to sub-parts of the player.
22
- */
23
-
24
- import {
25
- defer as observableDefer,
26
- fromEvent as observableFromEvent,
27
- interval as observableInterval,
28
- merge as observableMerge,
29
- Observable,
30
- } from "rxjs";
31
- import {
32
- map,
33
- mapTo,
34
- shareReplay,
35
- startWith,
36
- } from "rxjs/operators";
37
- import config from "../../config";
38
- import log from "../../log";
39
- import objectAssign from "../../utils/object_assign";
40
- import { getRange } from "../../utils/ranges";
41
-
42
- /** "Event" that triggered the clock tick. */
43
- export type IClockMediaEventType =
44
- /** First clock tick automatically emitted. */
45
- "init" | // set once on first emit
46
- /** Regularly emitted clock tick when no event happened in a long time. */
47
- "timeupdate" |
48
- /** On the HTML5 event with the same name */
49
- "canplay" |
50
- /** On the HTML5 event with the same name */
51
- "canplaythrough" | // HTML5 Event
52
- /** On the HTML5 event with the same name */
53
- "play" |
54
- /** On the HTML5 event with the same name */
55
- "seeking" |
56
- /** On the HTML5 event with the same name */
57
- "seeked" |
58
- /** On the HTML5 event with the same name */
59
- "stalled" |
60
- /** On the HTML5 event with the same name */
61
- "loadedmetadata" |
62
- /** On the HTML5 event with the same name */
63
- "ratechange" |
64
- /** An internal seek happens */
65
- "internal-seeking";
66
-
67
- /** Information recuperated on the media element on each clock tick. */
68
- interface IMediaInfos {
69
- /** Gap between `currentTime` and the next position with un-buffered data. */
70
- bufferGap : number;
71
- /** Value of `buffered` (buffered ranges) for the media element. */
72
- buffered : TimeRanges;
73
- /** The buffered range we are currently playing. */
74
- currentRange : { start : number;
75
- end : number; } |
76
- null;
77
- /** `currentTime` (position) set on the media element at the time of the tick. */
78
- position : number;
79
- /** Current `duration` set on the media element. */
80
- duration : number;
81
- /** Current `ended` set on the media element. */
82
- ended: boolean;
83
- /** Current `paused` set on the media element. */
84
- paused : boolean;
85
- /** Current `playbackRate` set on the media element. */
86
- playbackRate : number;
87
- /** Current `readyState` value on the media element. */
88
- readyState : number;
89
- /** Current `seeking` value on the mediaElement. */
90
- seeking : boolean;
91
- /** Event that triggered this clock tick. */
92
- event : IClockMediaEventType;
93
- }
94
-
95
- /**
96
- * Describes when the player is "rebuffering" and what event started that
97
- * status.
98
- * "Rebuffering" is a status where the player has not enough buffer ahead to
99
- * play reliably.
100
- * The RxPlayer should pause playback when the clock indicates the rebuffering
101
- * status.
102
- */
103
- export interface IRebufferingStatus {
104
- /** What started the player to rebuffer. */
105
- reason : "seeking" | // Building buffer after seeking
106
- "not-ready" | // Building buffer after low readyState
107
- "internal-seek" | // Building buffer after a seek happened inside the player
108
- "buffering"; // Other cases
109
- /** `performance.now` at the time the rebuffering happened. */
110
- timestamp : number;
111
- /**
112
- * Position, in seconds, at which data is awaited.
113
- * If `null` the player is rebuffering but not because it is awaiting future data.
114
- */
115
- position : number | null;
116
- }
117
-
118
- /**
119
- * Describes when the player is "frozen".
120
- * This status is reserved for when the player is stuck at the same position for
121
- * an unknown reason.
122
- */
123
- export interface IFreezingStatus {
124
- /** `performance.now` at the time the freezing started to be detected. */
125
- timestamp : number;
126
- }
127
-
128
- /** Information emitted on each clock tick. */
129
- export interface IClockTick extends IMediaInfos {
130
- /**
131
- * Set if the player is short on audio and/or video media data and is a such,
132
- * rebuffering.
133
- * `null` if not.
134
- */
135
- rebuffering : IRebufferingStatus | null;
136
- /**
137
- * Set if the player is frozen, that is, stuck in place for unknown reason.
138
- * Note that this reason can be a valid one, such as a necessary license not
139
- * being obtained yet.
140
- *
141
- * `null` if the player is not frozen.
142
- */
143
- freezing : IFreezingStatus | null;
144
- getCurrentTime : () => number;
145
- }
146
-
147
- /** Handle time relative information */
148
- export interface IClockHandler {
149
- clock$: Observable<IClockTick>;
150
- setCurrentTime: (time: number) => void;
151
- }
152
-
153
- const { SAMPLING_INTERVAL_MEDIASOURCE,
154
- SAMPLING_INTERVAL_LOW_LATENCY,
155
- SAMPLING_INTERVAL_NO_MEDIASOURCE,
156
- RESUME_GAP_AFTER_SEEKING,
157
- RESUME_GAP_AFTER_NOT_ENOUGH_DATA,
158
- RESUME_GAP_AFTER_BUFFERING,
159
- REBUFFERING_GAP,
160
- MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING } = config;
161
-
162
- /**
163
- * HTMLMediaElement Events for which timings are calculated and emitted.
164
- * @type {Array.<string>}
165
- */
166
- const SCANNED_MEDIA_ELEMENTS_EVENTS : IClockMediaEventType[] = [ "canplay",
167
- "play",
168
- "seeking",
169
- "seeked",
170
- "loadedmetadata",
171
- "ratechange" ];
172
-
173
- /**
174
- * Returns the amount of time in seconds the buffer should have ahead of the
175
- * current position before resuming playback. Based on the infos of the
176
- * rebuffering status.
177
- *
178
- * Waiting time differs between a rebuffering happening after a "seek" or one
179
- * happening after a buffer starvation occured.
180
- * @param {Object|null} rebufferingStatus
181
- * @param {Boolean} lowLatencyMode
182
- * @returns {Number}
183
- */
184
- function getRebufferingEndGap(
185
- rebufferingStatus : IRebufferingStatus,
186
- lowLatencyMode : boolean
187
- ) : number {
188
- if (rebufferingStatus === null) {
189
- return 0;
190
- }
191
- const suffix : "LOW_LATENCY" | "DEFAULT" = lowLatencyMode ? "LOW_LATENCY" :
192
- "DEFAULT";
193
-
194
- switch (rebufferingStatus.reason) {
195
- case "seeking":
196
- case "internal-seek":
197
- return RESUME_GAP_AFTER_SEEKING[suffix];
198
- case "not-ready":
199
- return RESUME_GAP_AFTER_NOT_ENOUGH_DATA[suffix];
200
- case "buffering":
201
- return RESUME_GAP_AFTER_BUFFERING[suffix];
202
- }
203
- }
204
-
205
- /**
206
- * @param {Object} currentRange
207
- * @param {Number} duration
208
- * @param {Boolean} lowLatencyMode
209
- * @returns {Boolean}
210
- */
211
- function hasLoadedUntilTheEnd(
212
- currentRange : { start : number; end : number }|null,
213
- duration : number,
214
- lowLatencyMode : boolean
215
- ) : boolean {
216
- const suffix : "LOW_LATENCY" | "DEFAULT" = lowLatencyMode ? "LOW_LATENCY" :
217
- "DEFAULT";
218
- return currentRange !== null &&
219
- (duration - currentRange.end) <= REBUFFERING_GAP[suffix];
220
- }
221
-
222
- /**
223
- * Generate a basic timings object from the media element and the eventName
224
- * which triggered the request.
225
- * @param {HTMLMediaElement} mediaElement
226
- * @param {string} event
227
- * @returns {Object}
228
- */
229
- function getMediaInfos(
230
- mediaElement : HTMLMediaElement,
231
- event : IClockMediaEventType
232
- ) : IMediaInfos {
233
- const { buffered,
234
- currentTime,
235
- duration,
236
- ended,
237
- paused,
238
- playbackRate,
239
- readyState,
240
- seeking } = mediaElement;
241
-
242
- const currentRange = getRange(buffered, currentTime);
243
- return { bufferGap: currentRange !== null ? currentRange.end - currentTime :
244
- // TODO null/0 would probably be
245
- // more appropriate
246
- Infinity,
247
- buffered,
248
- currentRange,
249
- position: currentTime,
250
- duration,
251
- ended,
252
- paused,
253
- playbackRate,
254
- readyState,
255
- seeking,
256
- event };
257
- }
258
-
259
- /**
260
- * Infer rebuffering status of the media based on:
261
- * - the return of the function getMediaInfos
262
- * - the previous timings object.
263
- *
264
- * @param {Object} prevTimings - Previous timings object. See function to know
265
- * the different properties needed.
266
- * @param {Object} currentTimings - Current timings object. This does not need
267
- * to have every single infos, see function to know which properties are needed.
268
- * @param {Object} options
269
- * @returns {Object|null}
270
- */
271
- function getRebufferingStatus(
272
- prevTimings : IClockTick,
273
- currentTimings : IMediaInfos,
274
- { withMediaSource, lowLatencyMode } : IClockOptions
275
- ) : IRebufferingStatus | null {
276
- const { event: currentEvt,
277
- position: currentTime,
278
- bufferGap,
279
- currentRange,
280
- duration,
281
- paused,
282
- readyState,
283
- ended } = currentTimings;
284
-
285
- const { rebuffering: prevRebuffering,
286
- event: prevEvt,
287
- position: prevTime } = prevTimings;
288
-
289
- const fullyLoaded = hasLoadedUntilTheEnd(currentRange, duration, lowLatencyMode);
290
-
291
- const canSwitchToRebuffering = (readyState >= 1 &&
292
- currentEvt !== "loadedmetadata" &&
293
- prevRebuffering === null &&
294
- !(fullyLoaded || ended));
295
-
296
- let rebufferEndPosition : number | null = null;
297
- let shouldRebuffer : boolean | undefined;
298
- let shouldStopRebuffer : boolean | undefined;
299
-
300
- const rebufferGap = lowLatencyMode ? REBUFFERING_GAP.LOW_LATENCY :
301
- REBUFFERING_GAP.DEFAULT;
302
-
303
- if (withMediaSource) {
304
- if (canSwitchToRebuffering) {
305
- if (bufferGap <= rebufferGap) {
306
- shouldRebuffer = true;
307
- rebufferEndPosition = currentTime + bufferGap;
308
- } else if (bufferGap === Infinity) {
309
- shouldRebuffer = true;
310
- rebufferEndPosition = currentTime;
311
- }
312
- } else if (prevRebuffering !== null) {
313
- const resumeGap = getRebufferingEndGap(prevRebuffering, lowLatencyMode);
314
- if (shouldRebuffer !== true && prevRebuffering !== null && readyState > 1 &&
315
- (fullyLoaded || ended || (bufferGap < Infinity && bufferGap > resumeGap)))
316
- {
317
- shouldStopRebuffer = true;
318
- } else if (bufferGap === Infinity || bufferGap <= resumeGap) {
319
- rebufferEndPosition = bufferGap === Infinity ? currentTime :
320
- currentTime + bufferGap;
321
- }
322
- }
323
- }
324
-
325
- // when using a direct file, the media will stall and unstall on its
326
- // own, so we only try to detect when the media timestamp has not changed
327
- // between two consecutive timeupdates
328
- else {
329
- if (canSwitchToRebuffering &&
330
- (!paused && currentEvt === "timeupdate" &&
331
- prevEvt === "timeupdate" && currentTime === prevTime ||
332
- currentEvt === "seeking" && bufferGap === Infinity)
333
- ) {
334
- shouldRebuffer = true;
335
- } else if (prevRebuffering !== null &&
336
- (currentEvt !== "seeking" && currentTime !== prevTime ||
337
- currentEvt === "canplay" ||
338
- bufferGap < Infinity &&
339
- (bufferGap > getRebufferingEndGap(prevRebuffering, lowLatencyMode) ||
340
- fullyLoaded || ended))
341
- ) {
342
- shouldStopRebuffer = true;
343
- }
344
- }
345
-
346
- if (shouldStopRebuffer === true) {
347
- return null;
348
- } else if (shouldRebuffer === true || prevRebuffering !== null) {
349
- let reason : "seeking" | "not-ready" | "buffering" | "internal-seek";
350
- if (currentEvt === "seeking" ||
351
- prevRebuffering !== null && prevRebuffering.reason === "seeking") {
352
- reason = "seeking";
353
- } else if (currentTimings.seeking &&
354
- ((currentEvt === "internal-seeking") ||
355
- (prevRebuffering !== null && prevRebuffering.reason === "internal-seek"))) {
356
- reason = "internal-seek";
357
- } else if (currentTimings.seeking) {
358
- reason = "seeking";
359
- } else if (readyState === 1) {
360
- reason = "not-ready";
361
- } else {
362
- reason = "buffering";
363
- }
364
- if (prevRebuffering !== null && prevRebuffering.reason === reason) {
365
- return { reason: prevRebuffering.reason,
366
- timestamp: prevRebuffering.timestamp,
367
- position: rebufferEndPosition };
368
- }
369
- return { reason,
370
- timestamp: performance.now(),
371
- position: rebufferEndPosition };
372
- }
373
- return null;
374
- }
375
-
376
- /**
377
- * Detect if the current media can be considered as "freezing" (i.e. not
378
- * advancing for unknown reasons).
379
- *
380
- * Returns a corresponding `IFreezingStatus` object if that's the case and
381
- * `null` if not.
382
- * @param {Object} prevTimings
383
- * @param {Object} currentTimings
384
- * @returns {Object|null}
385
- */
386
- function getFreezingStatus(
387
- prevTimings : IClockTick,
388
- currentTimings : IMediaInfos
389
- ) : IFreezingStatus | null {
390
- if (prevTimings.freezing) {
391
- if (currentTimings.ended ||
392
- currentTimings.paused ||
393
- currentTimings.readyState === 0 ||
394
- currentTimings.playbackRate === 0 ||
395
- prevTimings.position !== currentTimings.position)
396
- {
397
- return null; // Quit freezing status
398
- }
399
- return prevTimings.freezing; // Stay in it
400
- }
401
-
402
- return currentTimings.event === "timeupdate" &&
403
- currentTimings.bufferGap > MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING &&
404
- !currentTimings.ended &&
405
- !currentTimings.paused &&
406
- currentTimings.readyState >= 1 &&
407
- currentTimings.playbackRate !== 0 &&
408
- currentTimings.position === prevTimings.position ?
409
- { timestamp: performance.now() } :
410
- null;
411
- }
412
-
413
- export interface IClockOptions {
414
- withMediaSource : boolean;
415
- lowLatencyMode : boolean;
416
- }
417
-
418
- /**
419
- * Timings observable.
420
- *
421
- * This Observable samples snapshots of player's current state:
422
- * * time position
423
- * * playback rate
424
- * * current buffered range
425
- * * gap with current buffered range ending
426
- * * media duration
427
- *
428
- * In addition to sampling, this Observable also reacts to "seeking" and "play"
429
- * events.
430
- *
431
- * Observable is shared for performance reason: reduces the number of event
432
- * listeners and intervals/timeouts but also limit access to the media element
433
- * properties and gap calculations.
434
- *
435
- * The sampling is manual instead of based on "timeupdate" to reduce the
436
- * number of events.
437
- * @param {HTMLMediaElement} mediaElement
438
- * @param {Object} options
439
- * @returns {Observable}
440
- */
441
- function createClock(
442
- mediaElement : HTMLMediaElement,
443
- options : IClockOptions
444
- ) : IClockHandler {
445
- // Allow us to identify seek performed internally by the player.
446
- let internalSeekingComingCounter = 0;
447
- function setCurrentTime(time: number) {
448
- mediaElement.currentTime = time;
449
- internalSeekingComingCounter += 1;
450
- }
451
- const clock$ = observableDefer(() : Observable<IClockTick> => {
452
- let lastTimings : IClockTick = objectAssign(
453
- getMediaInfos(mediaElement, "init"),
454
- { rebuffering: null,
455
- freezing: null,
456
- getCurrentTime: () => mediaElement.currentTime });
457
-
458
- function getCurrentClockTick(event : IClockMediaEventType) : IClockTick {
459
- let tmpEvt: IClockMediaEventType = event;
460
- if (tmpEvt === "seeking" && internalSeekingComingCounter > 0) {
461
- tmpEvt = "internal-seeking";
462
- internalSeekingComingCounter -= 1;
463
- }
464
- const mediaTimings = getMediaInfos(mediaElement, tmpEvt);
465
- const rebufferingStatus = getRebufferingStatus(lastTimings, mediaTimings, options);
466
- const freezingStatus = getFreezingStatus(lastTimings, mediaTimings);
467
- const timings = objectAssign({},
468
- { rebuffering: rebufferingStatus,
469
- freezing: freezingStatus,
470
- getCurrentTime: () => mediaElement.currentTime },
471
- mediaTimings);
472
- log.debug("API: current media element state", timings);
473
- return timings;
474
- }
475
-
476
- const eventObs : Array< Observable< IClockMediaEventType > > =
477
- SCANNED_MEDIA_ELEMENTS_EVENTS.map((eventName) =>
478
- observableFromEvent(mediaElement, eventName)
479
- .pipe(mapTo(eventName)));
480
-
481
- const interval = options.lowLatencyMode ? SAMPLING_INTERVAL_LOW_LATENCY :
482
- options.withMediaSource ? SAMPLING_INTERVAL_MEDIASOURCE :
483
- SAMPLING_INTERVAL_NO_MEDIASOURCE;
484
-
485
- const interval$ : Observable<"timeupdate"> =
486
- observableInterval(interval)
487
- .pipe(mapTo("timeupdate"));
488
-
489
- return observableMerge(interval$, ...eventObs)
490
- .pipe(
491
- map((event : IClockMediaEventType) => {
492
- lastTimings = getCurrentClockTick(event);
493
- if (log.getLevel() === "DEBUG") {
494
- log.debug("API: current playback timeline:\n" +
495
- prettyPrintBuffered(lastTimings.buffered,
496
- lastTimings.position),
497
- `\n${event}`);
498
- }
499
- return lastTimings;
500
- }),
501
-
502
- startWith(lastTimings));
503
- }).pipe(
504
- // Always emit the last tick when already subscribed
505
- shareReplay({ bufferSize: 1, refCount: true }));
506
-
507
- return { clock$, setCurrentTime };
508
- }
509
-
510
- /**
511
- * Pretty print a TimeRanges Object, to see the current content of it in a
512
- * one-liner string.
513
- *
514
- * @example
515
- * This function is called by giving it directly the TimeRanges, such as:
516
- * ```js
517
- * prettyPrintBuffered(document.getElementsByTagName("video")[0].buffered);
518
- * ```
519
- *
520
- * Let's consider this possible return:
521
- *
522
- * ```
523
- * 0.00|==29.95==|29.95 ~30.05~ 60.00|==29.86==|89.86
524
- * ^14
525
- * ```
526
- * This means that our video element has 29.95 seconds of buffer between 0 and
527
- * 29.95 seconds.
528
- * Then 30.05 seconds where no buffer is found.
529
- * Then 29.86 seconds of buffer between 60.00 and 89.86 seconds.
530
- *
531
- * A caret on the second line indicates the current time we're at.
532
- * The number coming after it is the current time.
533
- * @param {TimeRanges} buffered
534
- * @param {number} currentTime
535
- * @returns {string}
536
- */
537
- function prettyPrintBuffered(
538
- buffered : TimeRanges,
539
- currentTime : number
540
- ) : string {
541
- let str = "";
542
- let currentTimeStr = "";
543
-
544
- for (let i = 0; i < buffered.length; i++) {
545
- const start = buffered.start(i);
546
- const end = buffered.end(i);
547
- const fixedStart = start.toFixed(2);
548
- const fixedEnd = end.toFixed(2);
549
- const fixedDuration = (end - start).toFixed(2);
550
- const newIntervalStr = `${fixedStart}|==${fixedDuration}==|${fixedEnd}`;
551
- str += newIntervalStr;
552
- if (currentTimeStr.length === 0 && end > currentTime) {
553
- const padBefore = str.length - Math.floor(newIntervalStr.length / 2);
554
- currentTimeStr = " ".repeat(padBefore) + `^${currentTime}`;
555
- }
556
- if (i < buffered.length - 1) {
557
- const nextStart = buffered.start(i + 1);
558
- const fixedDiff = (nextStart - end).toFixed(2);
559
- const holeStr = ` ~${fixedDiff}~ `;
560
- str += holeStr;
561
- if (currentTimeStr.length === 0 && currentTime < nextStart) {
562
- const padBefore = str.length - Math.floor(holeStr.length / 2);
563
- currentTimeStr = " ".repeat(padBefore) + `^${currentTime}`;
564
- }
565
- }
566
- }
567
- if (currentTimeStr.length === 0) {
568
- currentTimeStr = " ".repeat(str.length) + `^${currentTime}`;
569
- }
570
- return str + "\n" + currentTimeStr;
571
- }
572
-
573
- export default createClock;
@@ -1,93 +0,0 @@
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
-
17
- import {
18
- combineLatest as observableCombineLatest,
19
- merge as observableMerge,
20
- Observable,
21
- } from "rxjs";
22
- import {
23
- ignoreElements,
24
- map,
25
- tap,
26
- } from "rxjs/operators";
27
- import Manifest from "../../manifest";
28
- import { IStreamOrchestratorClockTick } from "../stream";
29
- import { IInitClockTick } from "./types";
30
-
31
- export interface IStreamClockArguments {
32
- autoPlay : boolean; // If true, the player will auto-play when initialPlay$ emits
33
- initialPlay$ : Observable<unknown>; // The initial play has been done
34
- initialSeek$ : Observable<unknown>; // The initial seek has been done
35
- manifest : Manifest;
36
- speed$ : Observable<number>; // The last speed requested by the user
37
- startTime : number; // The time the player will seek when initialSeek$ emits
38
- }
39
-
40
- /**
41
- * Create clock Observable for the `Stream` part of the code.
42
- * @param {Observable} initClock$
43
- * @param {Object} streamClockArgument
44
- * @returns {Observable}
45
- */
46
- export default function createStreamClock(
47
- initClock$ : Observable<IInitClockTick>,
48
- { autoPlay,
49
- initialPlay$,
50
- initialSeek$,
51
- manifest,
52
- speed$,
53
- startTime } : IStreamClockArguments
54
- ) : Observable<IStreamOrchestratorClockTick> {
55
- let initialPlayPerformed = false;
56
- let initialSeekPerformed = false;
57
-
58
- const updateIsPaused$ = initialPlay$.pipe(
59
- tap(() => { initialPlayPerformed = true; }),
60
- ignoreElements());
61
-
62
- const updateTimeOffset$ = initialSeek$.pipe(
63
- tap(() => { initialSeekPerformed = true; }),
64
- ignoreElements());
65
-
66
- const clock$ : Observable<IStreamOrchestratorClockTick> =
67
- observableCombineLatest([initClock$, speed$])
68
- .pipe(map(([tick, speed]) => {
69
- const { isLive } = manifest;
70
- return {
71
- position: tick.position,
72
- getCurrentTime: tick.getCurrentTime,
73
- duration: tick.duration,
74
- isPaused: initialPlayPerformed ? tick.paused :
75
- !autoPlay,
76
- liveGap: isLive ? manifest.getMaximumPosition() - tick.position :
77
- Infinity,
78
- readyState: tick.readyState,
79
- speed,
80
-
81
- // wantedTimeOffset is an offset to add to the timing's current time to have
82
- // the "real" wanted position.
83
- // For now, this is seen when the media element has not yet seeked to its
84
- // initial position, the currentTime will most probably be 0 where the
85
- // effective starting position will be _startTime_.
86
- // Thus we initially set a wantedTimeOffset equal to startTime.
87
- wantedTimeOffset: initialSeekPerformed ? 0 :
88
- startTime - tick.position,
89
- };
90
- }));
91
-
92
- return observableMerge(updateIsPaused$, updateTimeOffset$, clock$);
93
- }
@@ -1,41 +0,0 @@
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
-
17
- import { IBaseUrlIntermediateRepresentation } from "../node_parser_types";
18
-
19
- /**
20
- * From 0 to N baseURL elements takes the minimum availabilityTimeOffset
21
- * possible.
22
- *
23
- * `0` if no baseURL was given (which means `no delay added`: coherent with how
24
- * this value is used).
25
- *
26
- * Taking the minimum time allow to simplify its processing:
27
- * Instead of having multiple URL each with a different pool of available
28
- * segment at a given instant, let's always consider every URLs by aligning with
29
- * the one with the most segment.
30
- *
31
- * @param {Array.<Object>} baseURLs
32
- */
33
- export default function extractMinimumAvailabilityTimeOffset(
34
- baseURLs : IBaseUrlIntermediateRepresentation[]
35
- ) : number {
36
- return baseURLs.length === 0 ?
37
- 0 :
38
- baseURLs.reduce((acc, baseURL) => {
39
- return Math.min(baseURL.attributes.availabilityTimeOffset ?? 0, acc);
40
- }, Infinity);
41
- }