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
@@ -52,7 +52,8 @@ function getWantedRepeatIndex(
52
52
  * @returns {Array.<Object>}
53
53
  */
54
54
  export default function getSegmentsFromTimeline(
55
- index : { mediaURLs : string[] | null;
55
+ index : { availabilityTimeComplete? : boolean;
56
+ mediaURLs : string[] | null;
56
57
  startNumber? : number;
57
58
  timeline : IIndexSegment[];
58
59
  timescale : number;
@@ -66,9 +67,7 @@ export default function getSegmentsFromTimeline(
66
67
  const scaledTo = toIndexTime(from + durationWanted, index);
67
68
  const { timeline, timescale, mediaURLs, startNumber } = index;
68
69
 
69
- let currentNumber = startNumber != null ? startNumber :
70
- undefined;
71
-
70
+ let currentNumber = startNumber ?? 1;
72
71
  const segments : ISegment[] = [];
73
72
 
74
73
  const timelineLength = timeline.length;
@@ -85,11 +84,13 @@ export default function getSegmentsFromTimeline(
85
84
  maxEncounteredDuration = Math.max(maxEncounteredDuration, duration);
86
85
 
87
86
  const repeat = calculateRepeat(timelineItem, timeline[i + 1], maximumTime);
87
+ const complete = index.availabilityTimeComplete !== false ||
88
+ i !== timelineLength - 1 &&
89
+ repeat !== 0;
88
90
  let segmentNumberInCurrentRange = getWantedRepeatIndex(start, duration, scaledUp);
89
91
  let segmentTime = start + segmentNumberInCurrentRange * duration;
90
92
  while (segmentTime < scaledTo && segmentNumberInCurrentRange <= repeat) {
91
- const segmentNumber = currentNumber != null ?
92
- currentNumber + segmentNumberInCurrentRange : undefined;
93
+ const segmentNumber = currentNumber + segmentNumberInCurrentRange;
93
94
 
94
95
  const detokenizedURLs = mediaURLs === null ?
95
96
  null :
@@ -106,6 +107,7 @@ export default function getSegmentsFromTimeline(
106
107
  mediaURLs: detokenizedURLs,
107
108
  number: segmentNumber,
108
109
  timestampOffset: -(index.indexTimeOffset / timescale),
110
+ complete,
109
111
  privateInfos: { isEMSGWhitelisted } };
110
112
  segments.push(segment);
111
113
 
@@ -119,9 +121,7 @@ export default function getSegmentsFromTimeline(
119
121
  return segments;
120
122
  }
121
123
 
122
- if (currentNumber != null) {
123
- currentNumber += repeat + 1;
124
- }
124
+ currentNumber += repeat + 1;
125
125
  }
126
126
 
127
127
  return segments;
@@ -21,6 +21,7 @@ import {
21
21
  } from "../../../../../manifest";
22
22
  import { IEMSG } from "../../../../containers/isobmff";
23
23
  import { getTimescaledRange } from "../../../utils/index_helpers";
24
+ import { IResolvedBaseUrl } from "../resolve_base_urls";
24
25
  import getInitSegment from "./get_init_segment";
25
26
  import { createIndexURLs } from "./tokens";
26
27
 
@@ -106,7 +107,7 @@ export interface IListIndexContextArgument {
106
107
  /** Start of the period concerned by this RepresentationIndex, in seconds. */
107
108
  periodStart : number;
108
109
  /** Base URL for the Representation concerned. */
109
- representationBaseURLs : string[];
110
+ representationBaseURLs : IResolvedBaseUrl[];
110
111
  /** ID of the Representation concerned. */
111
112
  representationId? : string;
112
113
  /** Bitrate of the Representation concerned. */
@@ -145,8 +146,9 @@ export default class ListRepresentationIndex implements IRepresentationIndex {
145
146
  const timescale = index.timescale ?? 1;
146
147
  const indexTimeOffset = presentationTimeOffset - periodStart * timescale;
147
148
 
149
+ const urlSources : string[] = representationBaseURLs.map(b => b.url);
148
150
  const list = index.list.map((lItem) => ({
149
- mediaURLs: createIndexURLs(representationBaseURLs,
151
+ mediaURLs: createIndexURLs(urlSources,
150
152
  lItem.media,
151
153
  representationId,
152
154
  representationBitrate),
@@ -158,7 +160,7 @@ export default class ListRepresentationIndex implements IRepresentationIndex {
158
160
  indexRange: index.indexRange,
159
161
  initialization: index.initialization == null ?
160
162
  undefined :
161
- { mediaURLs: createIndexURLs(representationBaseURLs,
163
+ { mediaURLs: createIndexURLs(urlSources,
162
164
  index.initialization.media,
163
165
  representationId,
164
166
  representationBitrate),
@@ -207,6 +209,7 @@ export default class ListRepresentationIndex implements IRepresentationIndex {
207
209
  end: time + durationInSeconds,
208
210
  mediaURLs,
209
211
  timestampOffset: -(index.indexTimeOffset / timescale),
212
+ complete: true,
210
213
  privateInfos: { isEMSGWhitelisted:
211
214
  this._isEMSGWhitelisted } };
212
215
  segments.push(segment);
@@ -21,6 +21,7 @@ import {
21
21
  } from "../../../../../manifest";
22
22
  import { IEMSG } from "../../../../containers/isobmff";
23
23
  import ManifestBoundsCalculator from "../manifest_bounds_calculator";
24
+ import { IResolvedBaseUrl } from "../resolve_base_urls";
24
25
  import getInitSegment from "./get_init_segment";
25
26
  import isPeriodFulfilled from "./is_period_fulfilled";
26
27
  import {
@@ -122,7 +123,7 @@ export interface ITemplateIndexContextArgument {
122
123
  /** Whether the corresponding Manifest can be updated and changed. */
123
124
  isDynamic : boolean;
124
125
  /** Base URL for the Representation concerned. */
125
- representationBaseURLs : string[];
126
+ representationBaseURLs : IResolvedBaseUrl[];
126
127
  /** ID of the Representation concerned. */
127
128
  representationId? : string;
128
129
  /** Bitrate of the Representation concerned. */
@@ -177,7 +178,12 @@ export default class TemplateRepresentationIndex implements IRepresentationIndex
177
178
  isEMSGWhitelisted } = context;
178
179
  const timescale = index.timescale ?? 1;
179
180
 
180
- this._availabilityTimeOffset = availabilityTimeOffset;
181
+ const minBaseUrlAto = representationBaseURLs.length === 0 ?
182
+ 0 :
183
+ representationBaseURLs.reduce((acc, rbu) => {
184
+ return Math.min(acc, rbu.availabilityTimeOffset);
185
+ }, Infinity);
186
+ this._availabilityTimeOffset = availabilityTimeOffset + minBaseUrlAto;
181
187
 
182
188
  this._manifestBoundsCalculator = manifestBoundsCalculator;
183
189
  this._aggressiveMode = aggressiveMode;
@@ -192,18 +198,19 @@ export default class TemplateRepresentationIndex implements IRepresentationIndex
192
198
  throw new Error("Invalid SegmentTemplate: no duration");
193
199
  }
194
200
 
201
+ const urlSources : string[] = representationBaseURLs.map(b => b.url);
195
202
  this._index = { duration: index.duration,
196
203
  timescale,
197
204
  indexRange: index.indexRange,
198
205
  indexTimeOffset,
199
206
  initialization: index.initialization == null ?
200
207
  undefined :
201
- { mediaURLs: createIndexURLs(representationBaseURLs,
208
+ { mediaURLs: createIndexURLs(urlSources,
202
209
  index.initialization.media,
203
210
  representationId,
204
211
  representationBitrate),
205
212
  range: index.initialization.range },
206
- mediaURLs: createIndexURLs(representationBaseURLs,
213
+ mediaURLs: createIndexURLs(urlSources,
207
214
  index.media,
208
215
  representationId,
209
216
  representationBitrate),
@@ -257,8 +264,7 @@ export default class TemplateRepresentationIndex implements IRepresentationIndex
257
264
  const segments : ISegment[] = [];
258
265
 
259
266
  // number corresponding to the Period's start
260
- const numberOffset = startNumber == null ? 1 :
261
- startNumber;
267
+ const numberOffset = startNumber ?? 1;
262
268
 
263
269
  // calcul initial time from Period start, where the first segment would have
264
270
  // the `0` number
@@ -293,6 +299,7 @@ export default class TemplateRepresentationIndex implements IRepresentationIndex
293
299
  scaledDuration: realDuration / timescale,
294
300
  mediaURLs: detokenizedURLs,
295
301
  timestampOffset: -(index.indexTimeOffset / timescale),
302
+ complete: true,
296
303
  privateInfos: {
297
304
  isEMSGWhitelisted: this._isEMSGWhitelisted,
298
305
  } };
@@ -15,6 +15,7 @@
15
15
  */
16
16
 
17
17
  import log from "../../../../../../log";
18
+ import isNullOrUndefined from "../../../../../../utils/is_null_or_undefined";
18
19
  import { IIndexSegment } from "../../../../utils/index_helpers";
19
20
 
20
21
  /**
@@ -40,23 +41,23 @@ export default function convertElementsToIndexSegment(
40
41
  let start = item.start;
41
42
  let duration = item.duration;
42
43
  const repeatCount = item.repeatCount;
43
- if (start == null) {
44
- if (previousItem == null) {
44
+ if (start === undefined) {
45
+ if (previousItem === null) {
45
46
  start = timelineStart;
46
- } else if (previousItem.duration != null) {
47
+ } else if (!isNullOrUndefined(previousItem.duration)) {
47
48
  start = previousItem.start +
48
49
  (previousItem.duration * (previousItem.repeatCount + 1));
49
50
  }
50
51
  }
51
- if ((duration == null || isNaN(duration)) &&
52
- nextItem != null && nextItem.start != null && !isNaN(nextItem.start) &&
53
- start != null && !isNaN(start)
52
+ if ((duration === undefined || isNaN(duration)) &&
53
+ nextItem !== null && nextItem.start !== undefined && !isNaN(nextItem.start) &&
54
+ start !== undefined && !isNaN(start)
54
55
  ) {
55
56
  duration = nextItem.start - start;
56
57
  }
57
- if ((start != null && !isNaN(start)) &&
58
- (duration != null && !isNaN(duration)) &&
59
- (repeatCount == null || !isNaN(repeatCount))
58
+ if ((start !== undefined && !isNaN(start)) &&
59
+ (duration !== undefined && !isNaN(duration)) &&
60
+ (repeatCount === undefined || !isNaN(repeatCount))
60
61
  ) {
61
62
  return { start,
62
63
  duration,
@@ -38,6 +38,7 @@ import isSegmentStillAvailable from "../../../../utils/is_segment_still_availabl
38
38
  import updateSegmentTimeline from "../../../../utils/update_segment_timeline";
39
39
  import { ISegmentTimelineElement } from "../../../node_parser_types";
40
40
  import ManifestBoundsCalculator from "../../manifest_bounds_calculator";
41
+ import { IResolvedBaseUrl } from "../../resolve_base_urls";
41
42
  import getInitSegment from "../get_init_segment";
42
43
  import getSegmentsFromTimeline from "../get_segments_from_timeline";
43
44
  import isPeriodFulfilled from "../is_period_fulfilled";
@@ -54,6 +55,8 @@ const { MIN_DASH_S_ELEMENTS_TO_PARSE_UNSAFELY } = config;
54
55
  * given media time.
55
56
  */
56
57
  export interface ITimelineIndex {
58
+ /** If `false`, the last segment anounced might be still incomplete. */
59
+ availabilityTimeComplete : boolean;
57
60
  /** Byte range for a possible index of segments in the server. */
58
61
  indexRange?: [number, number];
59
62
  /**
@@ -141,6 +144,8 @@ export interface ITimelineIndexIndexArgument {
141
144
 
142
145
  /** Aditional context needed by a SegmentTimeline RepresentationIndex. */
143
146
  export interface ITimelineIndexContextArgument {
147
+ /** If `false`, the last segment anounced might be still incomplete. */
148
+ availabilityTimeComplete : boolean;
144
149
  /** Allows to obtain the minimum and maximum positions of a content. */
145
150
  manifestBoundsCalculator : ManifestBoundsCalculator;
146
151
  /** Start of the period concerned by this RepresentationIndex, in seconds. */
@@ -155,7 +160,7 @@ export interface ITimelineIndexContextArgument {
155
160
  */
156
161
  receivedTime? : number;
157
162
  /** Base URL for the Representation concerned. */
158
- representationBaseURLs : string[];
163
+ representationBaseURLs : IResolvedBaseUrl[];
159
164
  /** ID of the Representation concerned. */
160
165
  representationId? : string;
161
166
  /** Bitrate of the Representation concerned. */
@@ -231,7 +236,8 @@ export default class TimelineRepresentationIndex implements IRepresentationIndex
231
236
  throw new Error("The given index is not compatible with a " +
232
237
  "TimelineRepresentationIndex.");
233
238
  }
234
- const { manifestBoundsCalculator,
239
+ const { availabilityTimeComplete,
240
+ manifestBoundsCalculator,
235
241
  isDynamic,
236
242
  representationBaseURLs,
237
243
  representationId,
@@ -269,18 +275,20 @@ export default class TimelineRepresentationIndex implements IRepresentationIndex
269
275
 
270
276
  this._isDynamic = isDynamic;
271
277
  this._parseTimeline = index.timelineParser ?? null;
272
- this._index = { indexRange: index.indexRange,
278
+ const urlSources : string[] = representationBaseURLs.map(b => b.url);
279
+ this._index = { availabilityTimeComplete,
280
+ indexRange: index.indexRange,
273
281
  indexTimeOffset,
274
282
  initialization: index.initialization == null ?
275
283
  undefined :
276
284
  {
277
- mediaURLs: createIndexURLs(representationBaseURLs,
285
+ mediaURLs: createIndexURLs(urlSources,
278
286
  index.initialization.media,
279
287
  representationId,
280
288
  representationBitrate),
281
289
  range: index.initialization.range,
282
290
  },
283
- mediaURLs: createIndexURLs(representationBaseURLs,
291
+ mediaURLs: createIndexURLs(urlSources,
284
292
  index.media,
285
293
  representationId,
286
294
  representationBitrate),
@@ -47,7 +47,7 @@ function processFormatedToken(
47
47
  }
48
48
 
49
49
  /**
50
- * @param {string} representationURL
50
+ * @param {string} baseURLs
51
51
  * @param {string|undefined} media
52
52
  * @param {string|undefined} id
53
53
  * @param {number|undefined} bitrate
@@ -89,7 +89,7 @@ export function replaceRepresentationDASHTokens(
89
89
  return path
90
90
  .replace(/\$\$/g, "$")
91
91
  .replace(/\$RepresentationID\$/g, String(id))
92
- .replace(/\$Bandwidth(|\%0(\d+)d)\$/g,
92
+ .replace(/\$Bandwidth(\%0(\d+)d)?\$/g,
93
93
  processFormatedToken(bitrate === undefined ? 0 :
94
94
  bitrate));
95
95
  }
@@ -121,13 +121,13 @@ export function createDashUrlDetokenizer(
121
121
  } else {
122
122
  return url
123
123
  .replace(/\$\$/g, "$")
124
- .replace(/\$Number(|\%0(\d+)d)\$/g, (_x, _y, widthStr : string) => {
124
+ .replace(/\$Number(\%0(\d+)d)?\$/g, (_x, _y, widthStr : string) => {
125
125
  if (nb === undefined) {
126
126
  throw new Error("Segment number not defined in a $Number$ scheme");
127
127
  }
128
128
  return processFormatedToken(nb)(_x, _y, widthStr);
129
129
  })
130
- .replace(/\$Time(|\%0(\d+)d)\$/g, (_x, _y, widthStr : string) => {
130
+ .replace(/\$Time(\%0(\d+)d)?\$/g, (_x, _y, widthStr : string) => {
131
131
  if (time === undefined) {
132
132
  throw new Error("Segment time not defined in a $Time$ scheme");
133
133
  }
@@ -30,22 +30,24 @@ import {
30
30
  } from "../node_parser_types";
31
31
  import attachTrickModeTrack from "./attach_trickmode_track";
32
32
  // eslint-disable-next-line max-len
33
- import extractMinimumAvailabilityTimeOffset from "./extract_minimum_availability_time_offset";
34
33
  import inferAdaptationType from "./infer_adaptation_type";
35
34
  import ManifestBoundsCalculator from "./manifest_bounds_calculator";
36
35
  import parseRepresentations, {
37
36
  IAdaptationInfos,
38
37
  } from "./parse_representations";
39
- import resolveBaseURLs from "./resolve_base_urls";
38
+ import resolveBaseURLs, {
39
+ IResolvedBaseUrl,
40
+ } from "./resolve_base_urls";
40
41
 
41
42
  /** Context needed when calling `parseAdaptationSets`. */
42
43
  export interface IAdaptationSetsContextInfos {
43
44
  /** Whether we should request new segments even if they are not yet finished. */
44
45
  aggressiveMode : boolean;
46
+ availabilityTimeComplete: boolean;
45
47
  /** availabilityTimeOffset of the concerned period. */
46
48
  availabilityTimeOffset: number;
47
49
  /** Eventual URLs from which every relative URL will be based on. */
48
- baseURLs : string[];
50
+ baseURLs : IResolvedBaseUrl[];
49
51
  /** Allows to obtain the first available position of a content. */
50
52
  manifestBoundsCalculator : ManifestBoundsCalculator;
51
53
  /* End time of the current period, in seconds. */
@@ -302,8 +304,11 @@ export default function parseAdaptationSets(
302
304
  roles.some((role) => role.schemeIdUri === "urn:mpeg:dash:role:2011");
303
305
 
304
306
  const representationsIR = adaptation.children.representations;
307
+ const availabilityTimeComplete =
308
+ adaptation.attributes.availabilityTimeComplete ??
309
+ periodInfos.availabilityTimeComplete;
305
310
  const availabilityTimeOffset =
306
- extractMinimumAvailabilityTimeOffset(adaptation.children.baseURLs) +
311
+ (adaptation.attributes.availabilityTimeOffset ?? 0) +
307
312
  periodInfos.availabilityTimeOffset;
308
313
 
309
314
  const adaptationMimeType = adaptation.attributes.mimeType;
@@ -335,6 +340,7 @@ export default function parseAdaptationSets(
335
340
 
336
341
  const adaptationInfos : IAdaptationInfos = {
337
342
  aggressiveMode: periodInfos.aggressiveMode,
343
+ availabilityTimeComplete,
338
344
  availabilityTimeOffset,
339
345
  baseURLs: resolveBaseURLs(periodInfos.baseURLs, adaptationChildren.baseURLs),
340
346
  manifestBoundsCalculator: periodInfos.manifestBoundsCalculator,
@@ -24,8 +24,8 @@ import {
24
24
  IMPDIntermediateRepresentation,
25
25
  IPeriodIntermediateRepresentation,
26
26
  } from "../node_parser_types";
27
+ import { IResponseData } from "../parsers_types";
27
28
  // eslint-disable-next-line max-len
28
- import extractMinimumAvailabilityTimeOffset from "./extract_minimum_availability_time_offset";
29
29
  import getClockOffset from "./get_clock_offset";
30
30
  import getHTTPUTCTimingURL from "./get_http_utc-timing_url";
31
31
  import getMinimumAndMaximumPosition from "./get_minimum_and_maximum_positions";
@@ -33,7 +33,9 @@ import parseAvailabilityStartTime from "./parse_availability_start_time";
33
33
  import parsePeriods, {
34
34
  IXLinkInfos,
35
35
  } from "./parse_periods";
36
- import resolveBaseURLs from "./resolve_base_urls";
36
+ import resolveBaseURLs, {
37
+ IResolvedBaseUrl,
38
+ } from "./resolve_base_urls";
37
39
 
38
40
  const { DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0 } = config;
39
41
 
@@ -85,7 +87,7 @@ export interface IIrParserResponseNeedsClock {
85
87
  * Callback to call with the fetched clock data in argument to continue
86
88
  * parsing the MPD.
87
89
  */
88
- continue : (clockValue : string) => IIrParserResponse;
90
+ continue : (clockValue : IResponseData<string>) => IIrParserResponse;
89
91
  };
90
92
  }
91
93
 
@@ -157,8 +159,15 @@ export default function parseMpdIr(
157
159
  type: "needs-clock",
158
160
  value: {
159
161
  url: UTCTimingHTTPURL,
160
- continue: function continueParsingMPD(clockValue : string) {
161
- args.externalClockOffset = getClockOffset(clockValue);
162
+ continue: function continueParsingMPD(
163
+ responseDataClock : IResponseData<string>) {
164
+ if (!responseDataClock.success) {
165
+ warnings.push(responseDataClock.error);
166
+ log.warn("DASH Parser: Error on fetching the clock ressource",
167
+ responseDataClock.error);
168
+ return parseMpdIr(mpdIR, args, warnings, true);
169
+ }
170
+ args.externalClockOffset = getClockOffset(responseDataClock.data);
162
171
  return parseMpdIr(mpdIR, args, warnings, true);
163
172
  },
164
173
  },
@@ -232,22 +241,21 @@ function parseCompleteIntermediateRepresentation(
232
241
  const { children: rootChildren,
233
242
  attributes: rootAttributes } = mpdIR;
234
243
  const isDynamic : boolean = rootAttributes.type === "dynamic";
235
- const baseURLs = resolveBaseURLs(args.url === undefined ?
236
- [] :
237
- [normalizeBaseURL(args.url)],
238
- rootChildren.baseURLs);
244
+ const initialBaseUrl : IResolvedBaseUrl[] = args.url !== undefined ?
245
+ [{ url: normalizeBaseURL(args.url),
246
+ availabilityTimeOffset: 0,
247
+ availabilityTimeComplete: true }] :
248
+ [];
249
+ const mpdBaseUrls = resolveBaseURLs(initialBaseUrl, rootChildren.baseURLs);
239
250
  const availabilityStartTime = parseAvailabilityStartTime(rootAttributes,
240
251
  args.referenceDateTime);
241
252
  const timeShiftBufferDepth = rootAttributes.timeShiftBufferDepth;
242
253
  const { externalClockOffset: clockOffset,
243
254
  unsafelyBaseOnPreviousManifest } = args;
244
- const availabilityTimeOffset =
245
- extractMinimumAvailabilityTimeOffset(rootChildren.baseURLs);
246
255
 
247
256
  const manifestInfos = { aggressiveMode: args.aggressiveMode,
248
257
  availabilityStartTime,
249
- availabilityTimeOffset,
250
- baseURLs,
258
+ baseURLs: mpdBaseUrls,
251
259
  clockOffset,
252
260
  duration: rootAttributes.duration,
253
261
  isDynamic,
@@ -31,12 +31,13 @@ import {
31
31
  IPeriodIntermediateRepresentation,
32
32
  } from "../node_parser_types";
33
33
  // eslint-disable-next-line max-len
34
- import extractMinimumAvailabilityTimeOffset from "./extract_minimum_availability_time_offset";
35
34
  import flattenOverlappingPeriods from "./flatten_overlapping_periods";
36
35
  import getPeriodsTimeInformation from "./get_periods_time_infos";
37
36
  import ManifestBoundsCalculator from "./manifest_bounds_calculator";
38
37
  import parseAdaptationSets from "./parse_adaptation_sets";
39
- import resolveBaseURLs from "./resolve_base_urls";
38
+ import resolveBaseURLs, {
39
+ IResolvedBaseUrl,
40
+ } from "./resolve_base_urls";
40
41
 
41
42
  const generatePeriodID = idGenerator();
42
43
 
@@ -54,9 +55,8 @@ export type IXLinkInfos = WeakMap<IPeriodIntermediateRepresentation, {
54
55
  export interface IPeriodsContextInfos {
55
56
  /** Whether we should request new segments even if they are not yet finished. */
56
57
  aggressiveMode : boolean;
57
- availabilityTimeOffset: number;
58
58
  availabilityStartTime : number;
59
- baseURLs : string[];
59
+ baseURLs : IResolvedBaseUrl[];
60
60
  clockOffset? : number;
61
61
  duration? : number;
62
62
  isDynamic : boolean;
@@ -141,14 +141,13 @@ export default function parsePeriods(
141
141
  const receivedTime = xlinkInfos !== undefined ? xlinkInfos.receivedTime :
142
142
  contextInfos.receivedTime;
143
143
 
144
- const availabilityTimeOffset =
145
- extractMinimumAvailabilityTimeOffset(periodIR.children.baseURLs) +
146
- contextInfos.availabilityTimeOffset;
147
-
148
144
  const unsafelyBaseOnPreviousPeriod = contextInfos
149
145
  .unsafelyBaseOnPreviousManifest?.getPeriod(periodID) ?? null;
150
146
 
147
+ const availabilityTimeComplete = periodIR.attributes.availabilityTimeComplete ?? true;
148
+ const availabilityTimeOffset = periodIR.attributes.availabilityTimeOffset ?? 0;
151
149
  const periodInfos = { aggressiveMode: contextInfos.aggressiveMode,
150
+ availabilityTimeComplete,
152
151
  availabilityTimeOffset,
153
152
  baseURLs: periodBaseURLs,
154
153
  manifestBoundsCalculator,
@@ -26,8 +26,6 @@ import {
26
26
  ISegmentTemplateIntermediateRepresentation,
27
27
  IScheme,
28
28
  } from "../node_parser_types";
29
- // eslint-disable-next-line max-len
30
- import extractMinimumAvailabilityTimeOffset from "./extract_minimum_availability_time_offset";
31
29
  import {
32
30
  BaseRepresentationIndex,
33
31
  ListRepresentationIndex,
@@ -35,7 +33,9 @@ import {
35
33
  TimelineRepresentationIndex,
36
34
  } from "./indexes";
37
35
  import ManifestBoundsCalculator from "./manifest_bounds_calculator";
38
- import resolveBaseURLs from "./resolve_base_urls";
36
+ import resolveBaseURLs, {
37
+ IResolvedBaseUrl,
38
+ } from "./resolve_base_urls";
39
39
 
40
40
  /** Supplementary context needed to parse a RepresentationIndex. */
41
41
  export interface IRepresentationInfos {
@@ -43,10 +43,11 @@ export interface IRepresentationInfos {
43
43
  adaptation : IAdaptationSetIntermediateRepresentation;
44
44
  /** Whether we should request new segments even if they are not yet finished. */
45
45
  aggressiveMode : boolean;
46
+ availabilityTimeComplete : boolean;
46
47
  /** availability time offset of the concerned Adaptation. */
47
- availabilityTimeOffset: number;
48
+ availabilityTimeOffset : number;
48
49
  /** Eventual URLs from which every relative URL will be based on. */
49
- baseURLs : string[];
50
+ baseURLs : IResolvedBaseUrl[];
50
51
  /** Allows to obtain the first/last available position of a dynamic content. */
51
52
  manifestBoundsCalculator : ManifestBoundsCalculator;
52
53
  /** End time of the current period, in seconds. */
@@ -111,6 +112,7 @@ export default function parseRepresentationIndex(
111
112
  .some(({ schemeIdUri }) => schemeIdUri === inbandEvent.schemeIdUri);
112
113
  };
113
114
  const context = { aggressiveMode,
115
+ availabilityTimeComplete: true,
114
116
  availabilityTimeOffset,
115
117
  unsafelyBaseOnPreviousRepresentation,
116
118
  isEMSGWhitelisted,
@@ -126,10 +128,6 @@ export default function parseRepresentationIndex(
126
128
  let representationIndex : IRepresentationIndex;
127
129
  if (representation.children.segmentBase !== undefined) {
128
130
  const { segmentBase } = representation.children;
129
- context.availabilityTimeOffset =
130
- representationInfos.availabilityTimeOffset +
131
- extractMinimumAvailabilityTimeOffset(representation.children.baseURLs) +
132
- (segmentBase.availabilityTimeOffset ?? 0);
133
131
  representationIndex = new BaseRepresentationIndex(segmentBase, context);
134
132
  } else if (representation.children.segmentList !== undefined) {
135
133
  const { segmentList } = representation.children;
@@ -147,10 +145,12 @@ export default function parseRepresentationIndex(
147
145
  ...segmentTemplates as [
148
146
  ISegmentTemplateIntermediateRepresentation
149
147
  ] /* Ugly TS Hack */);
148
+ context.availabilityTimeComplete =
149
+ segmentTemplate.availabilityTimeComplete ??
150
+ representationInfos.availabilityTimeComplete;
150
151
  context.availabilityTimeOffset =
151
- representationInfos.availabilityTimeOffset +
152
- extractMinimumAvailabilityTimeOffset(representation.children.baseURLs) +
153
- (segmentTemplate.availabilityTimeOffset ?? 0);
152
+ (segmentTemplate.availabilityTimeOffset ?? 0) +
153
+ representationInfos.availabilityTimeOffset;
154
154
  representationIndex = TimelineRepresentationIndex
155
155
  .isTimelineIndexArgument(segmentTemplate) ?
156
156
  new TimelineRepresentationIndex(segmentTemplate, context) :
@@ -28,10 +28,12 @@ import {
28
28
  IRepresentationIntermediateRepresentation,
29
29
  ISegmentTemplateIntermediateRepresentation,
30
30
  IScheme,
31
+ IContentProtectionIntermediateRepresentation,
31
32
  } from "../node_parser_types";
32
33
  import { getWEBMHDRInformation } from "./get_hdr_information";
33
34
  import ManifestBoundsCalculator from "./manifest_bounds_calculator";
34
35
  import parseRepresentationIndex from "./parse_representation_index";
36
+ import { IResolvedBaseUrl } from "./resolve_base_urls";
35
37
 
36
38
  /**
37
39
  * Combine inband event streams from representation and
@@ -61,10 +63,11 @@ function combineInbandEventStreams(
61
63
  export interface IAdaptationInfos {
62
64
  /** Whether we should request new segments even if they are not yet finished. */
63
65
  aggressiveMode : boolean;
66
+ availabilityTimeComplete: boolean;
64
67
  /** availability time offset of the concerned Adaptation. */
65
68
  availabilityTimeOffset: number;
66
69
  /** Eventual URLs from which every relative URL will be based on. */
67
- baseURLs : string[];
70
+ baseURLs : IResolvedBaseUrl[];
68
71
  /** Allows to obtain the first/last available position of a dynamic content. */
69
72
  manifestBoundsCalculator : ManifestBoundsCalculator;
70
73
  /** End time of the current period, in seconds. */
@@ -175,8 +178,16 @@ export default function parseRepresentations(
175
178
  const inbandEventStreams =
176
179
  combineInbandEventStreams(representation, adaptation);
177
180
 
181
+ const availabilityTimeComplete =
182
+ representation.attributes.availabilityTimeComplete ??
183
+ adaptationInfos.availabilityTimeComplete;
184
+ const availabilityTimeOffset =
185
+ (representation.attributes.availabilityTimeOffset ?? 0) +
186
+ adaptationInfos.availabilityTimeOffset;
178
187
  const representationInfos = objectAssign({}, adaptationInfos,
179
- { unsafelyBaseOnPreviousRepresentation,
188
+ { availabilityTimeOffset,
189
+ availabilityTimeComplete,
190
+ unsafelyBaseOnPreviousRepresentation,
180
191
  adaptation,
181
192
  inbandEventStreams });
182
193
  const representationIndex = parseRepresentationIndex(representation,
@@ -237,8 +248,16 @@ export default function parseRepresentations(
237
248
  adaptation.attributes.width;
238
249
  }
239
250
 
240
- if (adaptation.children.contentProtections != null) {
241
- const contentProtections = adaptation.children.contentProtections
251
+ const contentProtectionsIr : IContentProtectionIntermediateRepresentation[] =
252
+ adaptation.children.contentProtections !== undefined ?
253
+ adaptation.children.contentProtections :
254
+ [];
255
+ if (representation.children.contentProtections !== undefined) {
256
+ contentProtectionsIr.push(...representation.children.contentProtections);
257
+ }
258
+
259
+ if (contentProtectionsIr.length > 0) {
260
+ const contentProtections = contentProtectionsIr
242
261
  .reduce<IContentProtections>((acc, cp) => {
243
262
  let systemId : string|undefined;
244
263
  if (cp.attributes.schemeIdUri !== undefined &&