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
@@ -14,15 +14,19 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { Observable } from "rxjs";
18
- import { map } from "rxjs/operators";
17
+ import {
18
+ map,
19
+ Observable,
20
+ } from "rxjs";
19
21
  import { Period } from "../../manifest";
22
+ import { IReadOnlyPlaybackObserver } from "../api";
20
23
  import { IBufferType } from "../segment_buffers";
21
24
  import EVENTS from "./events_generators";
22
25
  import { IWaitingMediaSourceReloadInternalEvent } from "./types";
23
26
 
24
27
  /**
25
- * Regularly ask to reload the MediaSource on each `clock$` tick.
28
+ * Regularly ask to reload the MediaSource on each playback observation
29
+ * performed by the playback observer.
26
30
  *
27
31
  * If and only if the Period currently played corresponds to `Period`, applies
28
32
  * an offset to the reloaded position corresponding to `deltaPos`.
@@ -32,7 +36,7 @@ import { IWaitingMediaSourceReloadInternalEvent } from "./types";
32
36
  *
33
37
  * @param {Object} period - The Period linked to the Adaptation or
34
38
  * Representation that you want to switch to.
35
- * @param {Observable} clock$ - Observable emitting playback conditions.
39
+ * @param {Observable} playbackObserver - emit playback conditions.
36
40
  * Has to emit last playback conditions immediately on subscribe.
37
41
  * @param {number} deltaPos - If the concerned Period is playing at the time
38
42
  * this function is called, we will add this value, in seconds, to the current
@@ -44,16 +48,15 @@ import { IWaitingMediaSourceReloadInternalEvent } from "./types";
44
48
  export default function reloadAfterSwitch(
45
49
  period : Period,
46
50
  bufferType : IBufferType,
47
- clock$ : Observable<{
48
- getCurrentTime : () => number;
51
+ playbackObserver : IReadOnlyPlaybackObserver<{
49
52
  position : number;
50
53
  isPaused : boolean;
51
54
  }>,
52
55
  deltaPos : number
53
56
  ) : Observable<IWaitingMediaSourceReloadInternalEvent> {
54
- return clock$.pipe(
55
- map((tick) => {
56
- const currentTime = tick.getCurrentTime();
57
+ return playbackObserver.observe(true).pipe(
58
+ map((observation) => {
59
+ const currentTime = playbackObserver.getCurrentTime();
57
60
  const pos = currentTime + deltaPos;
58
61
 
59
62
  // Bind to Period start and end
@@ -62,6 +65,6 @@ export default function reloadAfterSwitch(
62
65
  return EVENTS.waitingMediaSourceReload(bufferType,
63
66
  period,
64
67
  reloadAt,
65
- !tick.isPaused);
68
+ !observation.isPaused);
66
69
  }));
67
70
  }
@@ -19,14 +19,14 @@
19
19
  */
20
20
 
21
21
  import {
22
+ catchError,
22
23
  concat as observableConcat,
24
+ mergeMap,
25
+ ignoreElements,
23
26
  Observable,
24
27
  } from "rxjs";
25
- import {
26
- catchError,
27
- ignoreElements,
28
- } from "rxjs/operators";
29
28
  import { MediaError } from "../../../errors";
29
+ import { IReadOnlyPlaybackObserver } from "../../api";
30
30
  import {
31
31
  IPushChunkInfos,
32
32
  SegmentBuffer,
@@ -38,13 +38,14 @@ import forceGarbageCollection from "./force_garbage_collection";
38
38
  * If it leads to a QuotaExceededError, try to run our custom range
39
39
  * _garbage collector_ then retry.
40
40
  *
41
- * @param {Observable} clock$
41
+ * @param {Observable} playbackObserver
42
42
  * @param {Object} segmentBuffer
43
43
  * @param {Object} dataInfos
44
44
  * @returns {Observable}
45
45
  */
46
46
  export default function appendSegmentToBuffer<T>(
47
- clock$ : Observable<{ position : number }>,
47
+ playbackObserver : IReadOnlyPlaybackObserver<{ position : number;
48
+ wantedTimeOffset: number; }>,
48
49
  segmentBuffer : SegmentBuffer,
49
50
  dataInfos : IPushChunkInfos<T>
50
51
  ) : Observable<unknown> {
@@ -59,16 +60,19 @@ export default function appendSegmentToBuffer<T>(
59
60
  throw new MediaError("BUFFER_APPEND_ERROR", reason);
60
61
  }
61
62
 
62
- return observableConcat(
63
- forceGarbageCollection(clock$, segmentBuffer).pipe(ignoreElements()),
64
- append$
65
- ).pipe(
66
- catchError((forcedGCError : unknown) => {
67
- const reason = forcedGCError instanceof Error ? forcedGCError.toString() :
68
- "Could not clean the buffer";
63
+ return playbackObserver.observe(true).pipe(mergeMap((observation) => {
64
+ const currentPos = observation.position + observation.wantedTimeOffset;
65
+ return observableConcat(
66
+ forceGarbageCollection(currentPos, segmentBuffer).pipe(ignoreElements()),
67
+ append$
68
+ ).pipe(
69
+ catchError((forcedGCError : unknown) => {
70
+ const reason = forcedGCError instanceof Error ? forcedGCError.toString() :
71
+ "Could not clean the buffer";
69
72
 
70
- throw new MediaError("BUFFER_FULL_ERROR", reason);
71
- })
72
- );
73
+ throw new MediaError("BUFFER_FULL_ERROR", reason);
74
+ })
75
+ );
76
+ }));
73
77
  }));
74
78
  }
@@ -15,24 +15,21 @@
15
15
  */
16
16
 
17
17
  import {
18
- BehaviorSubject,
19
18
  concat as observableConcat,
20
19
  defer as observableDefer,
21
- Observable,
22
- of as observableOf,
23
- merge as observableMerge,
24
20
  EMPTY,
25
- ReplaySubject,
26
- } from "rxjs";
27
- import {
28
21
  filter,
29
22
  finalize,
30
23
  map,
24
+ merge as observableMerge,
31
25
  mergeMap,
26
+ Observable,
27
+ of as observableOf,
28
+ ReplaySubject,
32
29
  share,
33
30
  switchMap,
34
31
  take,
35
- } from "rxjs/operators";
32
+ } from "rxjs";
36
33
  import { ICustomError } from "../../../errors";
37
34
  import log from "../../../log";
38
35
  import Manifest, {
@@ -42,12 +39,13 @@ import Manifest, {
42
39
  Representation,
43
40
  } from "../../../manifest";
44
41
  import {
45
- ISegmentParserParsedInitSegment,
46
- ISegmentParserParsedSegment,
42
+ ISegmentParserParsedInitChunk,
43
+ ISegmentParserParsedMediaChunk,
47
44
  } from "../../../transports";
48
45
  import assert from "../../../utils/assert";
49
46
  import assertUnreachable from "../../../utils/assert_unreachable";
50
47
  import objectAssign from "../../../utils/object_assign";
48
+ import { IReadOnlySharedReference } from "../../../utils/reference";
51
49
  import {
52
50
  IPrioritizedSegmentFetcher,
53
51
  IPrioritizedSegmentFetcherEvent,
@@ -75,7 +73,7 @@ export default class DownloadingQueue<T> {
75
73
  * Segments whose request are still pending are still in that queue. Segments
76
74
  * are only removed from it once their request has succeeded.
77
75
  */
78
- private _downloadQueue$ : BehaviorSubject<IDownloadQueueItem>;
76
+ private _downloadQueue : IReadOnlySharedReference<IDownloadQueueItem>;
79
77
  /**
80
78
  * Pending request for the initialization segment.
81
79
  * `null` if no request is pending for it.
@@ -103,8 +101,7 @@ export default class DownloadingQueue<T> {
103
101
  *
104
102
  * @param {Object} content - The context of the Representation you want to
105
103
  * load segments for.
106
- * @param {BehaviorSubject} downloadQueue$ - Emit the queue of segments you
107
- * want to load.
104
+ * @param {Object} downloadQueue - Queue of segments you want to load.
108
105
  * @param {Object} segmentFetcher - Interface to facilitate the download of
109
106
  * segments.
110
107
  * @param {boolean} hasInitSegment - Declare that an initialization segment
@@ -122,13 +119,13 @@ export default class DownloadingQueue<T> {
122
119
  */
123
120
  constructor(
124
121
  content: IDownloadingQueueContext,
125
- downloadQueue$ : BehaviorSubject<IDownloadQueueItem>,
122
+ downloadQueue : IReadOnlySharedReference<IDownloadQueueItem>,
126
123
  segmentFetcher : IPrioritizedSegmentFetcher<T>,
127
124
  hasInitSegment : boolean
128
125
  ) {
129
126
  this._content = content;
130
127
  this._currentObs$ = null;
131
- this._downloadQueue$ = downloadQueue$;
128
+ this._downloadQueue = downloadQueue;
132
129
  this._initSegmentRequest = null;
133
130
  this._mediaSegmentRequest = null;
134
131
  this._segmentFetcher = segmentFetcher;
@@ -171,7 +168,7 @@ export default class DownloadingQueue<T> {
171
168
  return this._currentObs$;
172
169
  }
173
170
  const obs = observableDefer(() => {
174
- const mediaQueue$ = this._downloadQueue$.pipe(
171
+ const mediaQueue$ = this._downloadQueue.asObservable().pipe(
175
172
  filter(({ segmentQueue }) => {
176
173
  // First, the first elements of the segmentQueue might be already
177
174
  // loaded but awaiting the initialization segment to be parsed.
@@ -204,7 +201,7 @@ export default class DownloadingQueue<T> {
204
201
  segmentQueue.length > 0 ? this._requestMediaSegments() :
205
202
  EMPTY));
206
203
 
207
- const initSegmentPush$ = this._downloadQueue$.pipe(
204
+ const initSegmentPush$ = this._downloadQueue.asObservable().pipe(
208
205
  filter((next) => {
209
206
  const initSegmentRequest = this._initSegmentRequest;
210
207
  if (next.initSegment !== null && initSegmentRequest !== null) {
@@ -242,7 +239,7 @@ export default class DownloadingQueue<T> {
242
239
  IParsedSegmentEvent<T> |
243
240
  IEndOfSegmentEvent> {
244
241
 
245
- const { segmentQueue } = this._downloadQueue$.getValue();
242
+ const { segmentQueue } = this._downloadQueue.getValue();
246
243
  const currentNeededSegment = segmentQueue[0];
247
244
  const recursivelyRequestSegments = (
248
245
  startingSegment : IQueuedSegment | undefined
@@ -263,7 +260,7 @@ export default class DownloadingQueue<T> {
263
260
  return request$
264
261
  .pipe(mergeMap((evt) => {
265
262
  switch (evt.type) {
266
- case "warning":
263
+ case "retry":
267
264
  return observableOf({ type: "retry" as const,
268
265
  value: { segment, error: evt.value } });
269
266
  case "interrupted":
@@ -272,7 +269,7 @@ export default class DownloadingQueue<T> {
272
269
 
273
270
  case "ended":
274
271
  this._mediaSegmentRequest = null;
275
- const lastQueue = this._downloadQueue$.getValue().segmentQueue;
272
+ const lastQueue = this._downloadQueue.getValue().segmentQueue;
276
273
  if (lastQueue.length === 0) {
277
274
  return observableOf({ type : "end-of-queue" as const,
278
275
  value : null });
@@ -339,7 +336,7 @@ export default class DownloadingQueue<T> {
339
336
  IEndOfSegmentEvent> =>
340
337
  {
341
338
  switch (evt.type) {
342
- case "warning":
339
+ case "retry":
343
340
  return observableOf({ type: "retry" as const,
344
341
  value: { segment, error: evt.value } });
345
342
  case "interrupted":
@@ -397,7 +394,7 @@ export type IDownloadingQueueEvent<T> = IParsedInitSegmentEvent<T> |
397
394
  * In that case, an `IParsedInitSegmentEvent` will always be sent before any
398
395
  * `IParsedSegmentEvent` event is sent.
399
396
  */
400
- export type IParsedInitSegmentEvent<T> = ISegmentParserParsedInitSegment<T> &
397
+ export type IParsedInitSegmentEvent<T> = ISegmentParserParsedInitChunk<T> &
401
398
  { segment : ISegment;
402
399
  type : "parsed-init"; };
403
400
 
@@ -416,7 +413,7 @@ export type IParsedInitSegmentEvent<T> = ISegmentParserParsedInitSegment<T> &
416
413
  * You will know that all `IParsedSegmentEvent` have been loaded for a given
417
414
  * segment once you received the `IEndOfSegmentEvent` for that segment.
418
415
  */
419
- export type IParsedSegmentEvent<T> = ISegmentParserParsedSegment<T> &
416
+ export type IParsedSegmentEvent<T> = ISegmentParserParsedMediaChunk<T> &
420
417
  { segment : ISegment;
421
418
  type : "parsed-media"; };
422
419
 
@@ -439,7 +436,7 @@ export interface ILoaderRetryEvent { type : "retry";
439
436
  export interface IEndOfQueueEvent { type : "end-of-queue"; value : null }
440
437
 
441
438
  /**
442
- * Structure of the object that has to be emitted through the `downloadQueue$`
439
+ * Structure of the object that has to be emitted through the `downloadQueue`
443
440
  * Observable, to signal which segments are currently needed.
444
441
  */
445
442
  export interface IDownloadQueueItem {
@@ -15,14 +15,11 @@
15
15
  */
16
16
 
17
17
  import {
18
+ concatAll,
19
+ defer as observableDefer,
18
20
  from as observableFrom,
19
21
  Observable,
20
22
  } from "rxjs";
21
- import {
22
- concatAll,
23
- mergeMap,
24
- take,
25
- } from "rxjs/operators";
26
23
  import config from "../../../config";
27
24
  import log from "../../../log";
28
25
  import { getInnerAndOuterTimeRanges } from "../../../utils/ranges";
@@ -42,28 +39,24 @@ const GC_GAP_BEEFY = config.BUFFER_GC_GAPS.BEEFY;
42
39
  * @returns {Observable}
43
40
  */
44
41
  export default function forceGarbageCollection(
45
- timings$ : Observable<{ position : number }>,
42
+ currentPosition : number,
46
43
  bufferingQueue : SegmentBuffer
47
44
  ) : Observable<unknown> {
48
- // wait for next timing event
49
- return timings$.pipe(
50
- take(1),
51
- mergeMap((timing) => {
52
- log.warn("Stream: Running garbage collector");
53
- const buffered = bufferingQueue.getBufferedRanges();
54
- let cleanedupRanges = selectGCedRanges(timing.position, buffered, GC_GAP_CALM);
45
+ return observableDefer(() => {
46
+ log.warn("Stream: Running garbage collector");
47
+ const buffered = bufferingQueue.getBufferedRanges();
48
+ let cleanedupRanges = selectGCedRanges(currentPosition, buffered, GC_GAP_CALM);
55
49
 
56
- // more aggressive GC if we could not find any range to clean
57
- if (cleanedupRanges.length === 0) {
58
- cleanedupRanges = selectGCedRanges(timing.position, buffered, GC_GAP_BEEFY);
59
- }
50
+ // more aggressive GC if we could not find any range to clean
51
+ if (cleanedupRanges.length === 0) {
52
+ cleanedupRanges = selectGCedRanges(currentPosition, buffered, GC_GAP_BEEFY);
53
+ }
60
54
 
61
- log.debug("Stream: GC cleaning", cleanedupRanges);
62
- return observableFrom(
63
- cleanedupRanges.map(({ start, end }) => bufferingQueue.removeBuffer(start, end))
64
- ).pipe(concatAll());
65
- })
66
- );
55
+ log.debug("Stream: GC cleaning", cleanedupRanges);
56
+ return observableFrom(
57
+ cleanedupRanges.map(({ start, end }) => bufferingQueue.removeBuffer(start, end))
58
+ ).pipe(concatAll());
59
+ });
67
60
  }
68
61
 
69
62
  /**
@@ -20,6 +20,7 @@ import Manifest, {
20
20
  Period,
21
21
  Representation,
22
22
  } from "../../../manifest";
23
+ import { IReadOnlyPlaybackObserver } from "../../api";
23
24
  import {
24
25
  IBufferedChunk,
25
26
  IEndOfSegmentOperation,
@@ -71,7 +72,7 @@ export interface IBufferStatus {
71
72
  * be filled by any segment, even in the future.
72
73
  *
73
74
  * @param {Object} content
74
- * @param {Object} tick
75
+ * @param {Object} playbackInfo
75
76
  * @param {number|undefined} fastSwitchThreshold
76
77
  * @param {number} bufferGoal
77
78
  * @param {Object} segmentBuffer
@@ -82,10 +83,8 @@ export default function getBufferStatus(
82
83
  manifest : Manifest;
83
84
  period : Period;
84
85
  representation : Representation; },
85
- tick : { position : number;
86
- wantedTimeOffset: number;
87
- liveGap? : number;
88
- getCurrentTime() : number; },
86
+ wantedStartPosition : number,
87
+ playbackObserver : IReadOnlyPlaybackObserver<unknown>,
89
88
  fastSwitchThreshold : number | undefined,
90
89
  bufferGoal : number,
91
90
  segmentBuffer : SegmentBuffer
@@ -93,7 +92,6 @@ export default function getBufferStatus(
93
92
  const { period, representation } = content;
94
93
  segmentBuffer.synchronizeInventory();
95
94
 
96
- const wantedStartPosition = tick.position + tick.wantedTimeOffset;
97
95
  const wantedEndPosition = wantedStartPosition + bufferGoal;
98
96
  const neededRange = { start: Math.max(wantedStartPosition, period.start),
99
97
  end: Math.min(wantedEndPosition, period.end ?? Infinity) };
@@ -115,6 +113,7 @@ export default function getBufferStatus(
115
113
  getPlayableBufferedSegments({ start: Math.max(neededRange.start - 0.5, 0),
116
114
  end: neededRange.end + 0.5 },
117
115
  segmentBuffer.getInventory());
116
+ const currentPlaybackTime = playbackObserver.getCurrentTime();
118
117
 
119
118
  /** Callback allowing to retrieve a segment's history in the buffer. */
120
119
  const getBufferedHistory = segmentBuffer.getSegmentHistory.bind(segmentBuffer);
@@ -122,12 +121,12 @@ export default function getBufferStatus(
122
121
  /** List of segments we will need to download. */
123
122
  const neededSegments = getNeededSegments({ content,
124
123
  bufferedSegments,
125
- currentPlaybackTime: tick.getCurrentTime(),
124
+ currentPlaybackTime,
126
125
  fastSwitchThreshold,
127
126
  getBufferedHistory,
128
127
  neededRange,
129
128
  segmentsBeingPushed })
130
- .map((segment) => ({ priority: getSegmentPriority(segment.time, tick),
129
+ .map((segment) => ({ priority: getSegmentPriority(segment.time, wantedStartPosition),
131
130
  segment }));
132
131
 
133
132
  /**
@@ -228,10 +227,9 @@ function getPlayableBufferedSegments(
228
227
  const inventorySegment = eltInventory.infos.segment;
229
228
  const eltInventoryStart = inventorySegment.time /
230
229
  inventorySegment.timescale;
231
- const eltInventoryEnd = inventorySegment.duration == null ?
230
+ const eltInventoryEnd = !inventorySegment.complete ?
232
231
  eltInventory.end :
233
- eltInventoryStart + inventorySegment.duration /
234
- inventorySegment.timescale;
232
+ eltInventoryStart + inventorySegment.duration / inventorySegment.timescale;
235
233
  if ((eltInventoryEnd > minEnd && eltInventoryStart < maxStart) ||
236
234
  (eltInventory.end > minEnd && eltInventory.start < maxStart))
237
235
  {
@@ -160,7 +160,7 @@ export default function getNeededSegments({
160
160
  return true; // never skip initialization segments
161
161
  }
162
162
 
163
- if (duration < MINIMUM_SEGMENT_SIZE) {
163
+ if (segment.complete && duration < MINIMUM_SEGMENT_SIZE) {
164
164
  return false; // too small, don't download
165
165
  }
166
166
 
@@ -19,24 +19,22 @@ import config from "../../../config";
19
19
  const { SEGMENT_PRIORITIES_STEPS } = config;
20
20
 
21
21
  /**
22
- * Calculate the priority number for a given time, in function of the distance
23
- * with the current time.
22
+ * Calculate the priority number for a given segment start time, in function of
23
+ * the distance with the wanted starting timestamp.
24
24
  *
25
25
  * The lower is this number, the higher should be the priority of the request.
26
26
  *
27
- * Note that a `timeWanted` given behind the current time will always have the
27
+ * Note that a `segmentTime` given behind the current time will always have the
28
28
  * highest priority.
29
- * @param {number} timeWanted
30
- * @param {Object} clockTick
29
+ * @param {number} segmentTime
30
+ * @param {Object} wantedStartTimestamp
31
31
  * @returns {number}
32
32
  */
33
33
  export default function getSegmentPriority(
34
- timeWanted : number,
35
- clockTick : { position : number;
36
- wantedTimeOffset : number; }
34
+ segmentTime : number,
35
+ wantedStartTimestamp : number
37
36
  ) : number {
38
- const currentTime = clockTick.position + clockTick.wantedTimeOffset;
39
- const distance = timeWanted - currentTime;
37
+ const distance = segmentTime - wantedStartTimestamp;
40
38
 
41
39
  for (let priority = 0; priority < SEGMENT_PRIORITIES_STEPS.length; priority++) {
42
40
  if (distance < SEGMENT_PRIORITIES_STEPS[priority]) {
@@ -16,13 +16,13 @@
16
16
 
17
17
  import RepresentationStream, {
18
18
  IRepresentationStreamArguments,
19
- IRepresentationStreamClockTick,
19
+ IRepresentationStreamPlaybackObservation,
20
20
  ITerminationOrder,
21
21
  } from "./representation_stream";
22
22
 
23
23
  export default RepresentationStream;
24
24
  export {
25
25
  IRepresentationStreamArguments,
26
- IRepresentationStreamClockTick,
26
+ IRepresentationStreamPlaybackObservation,
27
27
  ITerminationOrder,
28
28
  };
@@ -17,15 +17,16 @@
17
17
  import {
18
18
  defer as observableDefer,
19
19
  EMPTY,
20
+ map,
20
21
  Observable,
21
22
  } from "rxjs";
22
- import { map } from "rxjs/operators";
23
23
  import Manifest, {
24
24
  Adaptation,
25
25
  ISegment,
26
26
  Period,
27
27
  Representation,
28
28
  } from "../../../manifest";
29
+ import { IReadOnlyPlaybackObserver } from "../../api";
29
30
  import {
30
31
  IPushedChunkData,
31
32
  SegmentBuffer,
@@ -43,18 +44,20 @@ import appendSegmentToBuffer from "./append_segment_to_buffer";
43
44
  * @returns {Observable}
44
45
  */
45
46
  export default function pushInitSegment<T>(
46
- { clock$,
47
+ { playbackObserver,
47
48
  content,
48
49
  segment,
49
50
  segmentData,
50
- segmentBuffer } : { clock$ : Observable<{ position : number }>;
51
- content: { adaptation : Adaptation;
52
- manifest : Manifest;
53
- period : Period;
54
- representation : Representation; };
55
- segmentData : T | null;
56
- segment : ISegment;
57
- segmentBuffer : SegmentBuffer; }
51
+ segmentBuffer } :
52
+ { playbackObserver : IReadOnlyPlaybackObserver<{ position : number;
53
+ wantedTimeOffset : number; }>;
54
+ content: { adaptation : Adaptation;
55
+ manifest : Manifest;
56
+ period : Period;
57
+ representation : Representation; };
58
+ segmentData : T | null;
59
+ segment : ISegment;
60
+ segmentBuffer : SegmentBuffer; }
58
61
  ) : Observable< IStreamEventAddedSegment<T> > {
59
62
  return observableDefer(() => {
60
63
  if (segmentData === null) {
@@ -66,11 +69,11 @@ export default function pushInitSegment<T>(
66
69
  timestampOffset: 0,
67
70
  appendWindow: [ undefined, undefined ],
68
71
  codec };
69
- return appendSegmentToBuffer(clock$, segmentBuffer, { data,
70
- inventoryInfos: null })
71
- .pipe(map(() => {
72
- const buffered = segmentBuffer.getBufferedRanges();
73
- return EVENTS.addedSegment(content, segment, buffered, segmentData);
74
- }));
72
+ return appendSegmentToBuffer(playbackObserver,
73
+ segmentBuffer,
74
+ { data, inventoryInfos: null }).pipe(map(() => {
75
+ const buffered = segmentBuffer.getBufferedRanges();
76
+ return EVENTS.addedSegment(content, segment, buffered, segmentData);
77
+ }));
75
78
  });
76
79
  }
@@ -17,9 +17,9 @@
17
17
  import {
18
18
  defer as observableDefer,
19
19
  EMPTY,
20
+ map,
20
21
  Observable,
21
22
  } from "rxjs";
22
- import { map } from "rxjs/operators";
23
23
  import config from "../../../config";
24
24
  import Manifest, {
25
25
  Adaptation,
@@ -27,8 +27,9 @@ import Manifest, {
27
27
  Period,
28
28
  Representation,
29
29
  } from "../../../manifest";
30
- import { ISegmentParserParsedSegment } from "../../../transports";
30
+ import { ISegmentParserParsedMediaChunk } from "../../../transports";
31
31
  import objectAssign from "../../../utils/object_assign";
32
+ import { IReadOnlyPlaybackObserver } from "../../api";
32
33
  import { SegmentBuffer } from "../../segment_buffers";
33
34
  import EVENTS from "../events_generators";
34
35
  import { IStreamEventAddedSegment } from "../types";
@@ -45,20 +46,22 @@ const { APPEND_WINDOW_SECURITIES } = config;
45
46
  * @returns {Observable}
46
47
  */
47
48
  export default function pushMediaSegment<T>(
48
- { clock$,
49
+ { playbackObserver,
49
50
  content,
50
51
  initSegmentData,
51
52
  parsedSegment,
52
53
  segment,
53
- segmentBuffer } : { clock$ : Observable<{ position : number }>;
54
- content: { adaptation : Adaptation;
55
- manifest : Manifest;
56
- period : Period;
57
- representation : Representation; };
58
- initSegmentData : T | null;
59
- parsedSegment : ISegmentParserParsedSegment<T>;
60
- segment : ISegment;
61
- segmentBuffer : SegmentBuffer; }
54
+ segmentBuffer } :
55
+ { playbackObserver : IReadOnlyPlaybackObserver<{ position : number;
56
+ wantedTimeOffset : number; }>;
57
+ content: { adaptation : Adaptation;
58
+ manifest : Manifest;
59
+ period : Period;
60
+ representation : Representation; };
61
+ initSegmentData : T | null;
62
+ parsedSegment : ISegmentParserParsedMediaChunk<T>;
63
+ segment : ISegment;
64
+ segmentBuffer : SegmentBuffer; }
62
65
  ) : Observable< IStreamEventAddedSegment<T> > {
63
66
  return observableDefer(() => {
64
67
  if (parsedSegment.chunkData === null) {
@@ -103,10 +106,11 @@ export default function pushMediaSegment<T>(
103
106
  end: estimatedEnd },
104
107
  content);
105
108
 
106
- return appendSegmentToBuffer(clock$, segmentBuffer, { data, inventoryInfos })
107
- .pipe(map(() => {
108
- const buffered = segmentBuffer.getBufferedRanges();
109
- return EVENTS.addedSegment(content, segment, buffered, chunkData);
110
- }));
109
+ return appendSegmentToBuffer(playbackObserver,
110
+ segmentBuffer,
111
+ { data, inventoryInfos }).pipe(map(() => {
112
+ const buffered = segmentBuffer.getBufferedRanges();
113
+ return EVENTS.addedSegment(content, segment, buffered, chunkData);
114
+ }));
111
115
  });
112
116
  }