rx-player 3.25.2 → 3.26.3-dev.2022021400

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 (925) hide show
  1. package/.eslintrc.js +1 -1
  2. package/.github/workflows/checks.yml +99 -0
  3. package/.github/workflows/perfs.yml +22 -0
  4. package/.github/workflows/sonarcloud_analysis.yml +20 -0
  5. package/CHANGELOG.md +142 -70
  6. package/CONTRIBUTING.md +68 -3
  7. package/MAINTAINERS.md +1 -1
  8. package/README.md +121 -73
  9. package/VERSION +1 -1
  10. package/dist/_esm5.processed/compat/browser_compatibility_types.d.ts +14 -9
  11. package/dist/_esm5.processed/compat/browser_compatibility_types.js +7 -19
  12. package/dist/_esm5.processed/compat/browser_detection.js +4 -12
  13. package/dist/_esm5.processed/compat/can_rely_on_video_visibility_and_size.js +2 -4
  14. package/dist/_esm5.processed/compat/clear_element_src.js +8 -6
  15. package/dist/_esm5.processed/compat/eme/close_session.js +4 -2
  16. package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +7 -20
  17. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -1
  18. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +18 -27
  19. package/dist/_esm5.processed/compat/eme/custom_media_keys/moz_media_keys_constructor.js +7 -14
  20. package/dist/_esm5.processed/compat/eme/custom_media_keys/ms_media_keys_constructor.d.ts +21 -0
  21. package/dist/_esm5.processed/compat/eme/custom_media_keys/ms_media_keys_constructor.js +9 -10
  22. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +6 -12
  23. package/dist/_esm5.processed/compat/eme/custom_media_keys/types.d.ts +1 -1
  24. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +22 -25
  25. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys_constructor.js +2 -1
  26. package/dist/_esm5.processed/compat/eme/generate_key_request.js +1 -2
  27. package/dist/_esm5.processed/compat/eme/load_session.js +2 -3
  28. package/dist/_esm5.processed/compat/event_listeners.d.ts +5 -4
  29. package/dist/_esm5.processed/compat/event_listeners.js +21 -35
  30. package/dist/_esm5.processed/compat/fullscreen.js +1 -5
  31. package/dist/_esm5.processed/compat/index.d.ts +3 -4
  32. package/dist/_esm5.processed/compat/index.js +3 -4
  33. package/dist/_esm5.processed/compat/is_vtt_cue.js +1 -2
  34. package/dist/_esm5.processed/compat/make_vtt_cue.js +11 -6
  35. package/dist/_esm5.processed/compat/on_height_width_change.js +1 -2
  36. package/dist/_esm5.processed/compat/patch_webkit_source_buffer.js +3 -0
  37. package/dist/_esm5.processed/compat/play.d.ts +1 -1
  38. package/dist/_esm5.processed/compat/play.js +1 -1
  39. package/dist/_esm5.processed/compat/set_element_src.js +1 -1
  40. package/dist/_esm5.processed/compat/when_loaded_metadata.js +1 -2
  41. package/dist/_esm5.processed/compat/when_media_source_open.js +1 -2
  42. package/dist/_esm5.processed/config.d.ts +72 -13
  43. package/dist/_esm5.processed/config.js +73 -14
  44. package/dist/_esm5.processed/core/abr/abr_manager.d.ts +11 -10
  45. package/dist/_esm5.processed/core/abr/abr_manager.js +47 -17
  46. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +1 -1
  47. package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
  48. package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
  49. package/dist/_esm5.processed/core/abr/get_buffer_levels.js +3 -0
  50. package/dist/_esm5.processed/core/abr/guess_based_chooser.d.ts +95 -0
  51. package/dist/_esm5.processed/core/abr/guess_based_chooser.js +242 -0
  52. package/dist/_esm5.processed/core/abr/index.d.ts +3 -3
  53. package/dist/_esm5.processed/core/abr/last_estimate_storage.d.ts +61 -0
  54. package/dist/_esm5.processed/core/abr/last_estimate_storage.js +37 -0
  55. package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +26 -8
  56. package/dist/_esm5.processed/core/abr/network_analyzer.js +68 -31
  57. package/dist/_esm5.processed/core/abr/pending_requests_store.d.ts +56 -28
  58. package/dist/_esm5.processed/core/abr/pending_requests_store.js +5 -8
  59. package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +35 -52
  60. package/dist/_esm5.processed/core/abr/representation_estimator.js +114 -65
  61. package/dist/_esm5.processed/core/abr/representation_score_calculator.d.ts +5 -8
  62. package/dist/_esm5.processed/core/abr/representation_score_calculator.js +20 -23
  63. package/dist/_esm5.processed/core/abr/{ewma.d.ts → utils/ewma.d.ts} +0 -0
  64. package/dist/_esm5.processed/core/abr/{ewma.js → utils/ewma.js} +0 -0
  65. package/dist/_esm5.processed/core/abr/{filter_by_bitrate.d.ts → utils/filter_by_bitrate.d.ts} +1 -1
  66. package/dist/_esm5.processed/core/abr/{filter_by_bitrate.js → utils/filter_by_bitrate.js} +1 -1
  67. package/dist/_esm5.processed/core/abr/{filter_by_width.d.ts → utils/filter_by_width.d.ts} +1 -1
  68. package/dist/_esm5.processed/core/abr/{filter_by_width.js → utils/filter_by_width.js} +2 -2
  69. package/dist/_esm5.processed/core/abr/{select_optimal_representation.d.ts → utils/select_optimal_representation.d.ts} +1 -1
  70. package/dist/_esm5.processed/core/abr/{select_optimal_representation.js → utils/select_optimal_representation.js} +1 -1
  71. package/dist/_esm5.processed/core/api/emit_seek_events.d.ts +4 -4
  72. package/dist/_esm5.processed/core/api/emit_seek_events.js +12 -10
  73. package/dist/_esm5.processed/core/api/get_player_state.d.ts +3 -4
  74. package/dist/_esm5.processed/core/api/get_player_state.js +2 -2
  75. package/dist/_esm5.processed/core/api/index.d.ts +3 -1
  76. package/dist/_esm5.processed/core/api/index.js +2 -0
  77. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +6 -0
  78. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +25 -15
  79. package/dist/_esm5.processed/core/api/option_utils.d.ts +5 -5
  80. package/dist/_esm5.processed/core/api/option_utils.js +6 -40
  81. package/dist/_esm5.processed/core/api/playback_observer.d.ts +280 -0
  82. package/dist/_esm5.processed/core/api/playback_observer.js +461 -0
  83. package/dist/_esm5.processed/core/api/public_api.d.ts +11 -10
  84. package/dist/_esm5.processed/core/api/public_api.js +118 -140
  85. package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +7 -8
  86. package/dist/_esm5.processed/core/api/track_choice_manager.js +54 -57
  87. package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.d.ts +4 -6
  88. package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.js +25 -32
  89. package/dist/_esm5.processed/core/eme/attach_media_keys.js +2 -6
  90. package/dist/_esm5.processed/core/eme/check_key_statuses.js +4 -9
  91. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js +1 -2
  92. package/dist/_esm5.processed/core/eme/clear_eme_session.js +6 -2
  93. package/dist/_esm5.processed/core/eme/create_session.js +1 -2
  94. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +2 -3
  95. package/dist/_esm5.processed/core/eme/eme_manager.js +5 -7
  96. package/dist/_esm5.processed/core/eme/find_key_system.js +20 -21
  97. package/dist/_esm5.processed/core/eme/get_media_keys.js +4 -11
  98. package/dist/_esm5.processed/core/eme/get_session.js +3 -6
  99. package/dist/_esm5.processed/core/eme/init_media_keys.js +6 -14
  100. package/dist/_esm5.processed/core/eme/session_events_listener.js +12 -10
  101. package/dist/_esm5.processed/core/eme/set_server_certificate.js +8 -3
  102. package/dist/_esm5.processed/core/eme/types.d.ts +14 -6
  103. package/dist/_esm5.processed/core/eme/utils/close_session.js +2 -3
  104. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +3 -9
  105. package/dist/_esm5.processed/core/eme/utils/is_session_usable.js +1 -1
  106. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +3 -4
  107. package/dist/_esm5.processed/core/eme/utils/persistent_sessions_store.js +5 -8
  108. package/dist/_esm5.processed/core/fetchers/index.d.ts +2 -2
  109. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +28 -13
  110. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +258 -65
  111. package/dist/_esm5.processed/core/fetchers/segment/index.d.ts +2 -2
  112. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.d.ts +13 -31
  113. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.js +3 -7
  114. package/dist/_esm5.processed/core/fetchers/segment/prioritizer.d.ts +53 -53
  115. package/dist/_esm5.processed/core/fetchers/segment/prioritizer.js +1 -4
  116. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +101 -19
  117. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +239 -99
  118. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +38 -21
  119. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +13 -10
  120. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.d.ts +37 -22
  121. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +129 -59
  122. package/dist/_esm5.processed/core/init/create_eme_manager.js +1 -2
  123. package/dist/_esm5.processed/core/init/create_media_source.js +3 -4
  124. package/dist/_esm5.processed/core/init/create_stream_playback_observer.d.ts +39 -0
  125. package/dist/_esm5.processed/core/init/create_stream_playback_observer.js +50 -0
  126. package/dist/_esm5.processed/core/init/duration_updater.js +17 -8
  127. package/dist/_esm5.processed/{transports/utils/return_parsed_manifest.d.ts → core/init/emit_loaded_event.d.ts} +9 -8
  128. package/dist/_esm5.processed/core/init/emit_loaded_event.js +47 -0
  129. package/dist/_esm5.processed/core/init/end_of_stream.js +1 -2
  130. package/dist/_esm5.processed/core/init/events_generators.d.ts +3 -5
  131. package/dist/_esm5.processed/core/init/events_generators.js +5 -16
  132. package/dist/_esm5.processed/core/init/get_initial_time.js +2 -3
  133. package/dist/_esm5.processed/core/init/initial_seek_and_play.d.ts +56 -22
  134. package/dist/_esm5.processed/core/init/initial_seek_and_play.js +65 -56
  135. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +8 -7
  136. package/dist/_esm5.processed/core/init/initialize_directfile.js +31 -33
  137. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +12 -12
  138. package/dist/_esm5.processed/core/init/initialize_media_source.js +20 -18
  139. package/dist/_esm5.processed/core/init/load_on_media_source.d.ts +9 -12
  140. package/dist/_esm5.processed/core/init/load_on_media_source.js +30 -43
  141. package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
  142. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +11 -18
  143. package/dist/_esm5.processed/core/init/stall_avoider.d.ts +12 -7
  144. package/dist/_esm5.processed/core/init/stall_avoider.js +102 -39
  145. package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
  146. package/dist/_esm5.processed/core/init/stream_events_emitter/refresh_scheduled_events_list.js +2 -12
  147. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.d.ts +2 -2
  148. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +20 -15
  149. package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +2 -2
  150. package/dist/_esm5.processed/core/init/throw_on_media_error.js +1 -2
  151. package/dist/_esm5.processed/core/init/types.d.ts +11 -28
  152. package/dist/_esm5.processed/core/init/update_playback_rate.d.ts +7 -6
  153. package/dist/_esm5.processed/core/init/update_playback_rate.js +11 -12
  154. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.d.ts +5 -5
  155. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.js +12 -7
  156. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.d.ts +2 -2
  157. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +32 -8
  158. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.d.ts +15 -15
  159. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +4 -2
  160. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +20 -4
  161. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +52 -7
  162. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +33 -32
  163. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +20 -4
  164. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +47 -1
  165. package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +18 -4
  166. package/dist/_esm5.processed/core/segment_buffers/implementations/types.js +17 -1
  167. package/dist/_esm5.processed/core/segment_buffers/implementations/utils/manual_time_ranges.js +2 -2
  168. package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
  169. package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.d.ts +81 -0
  170. package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.js +91 -0
  171. package/dist/_esm5.processed/core/{fetchers/utils/create_request_scheduler.d.ts → segment_buffers/inventory/index.d.ts} +5 -4
  172. package/dist/_esm5.processed/core/{fetchers/manifest/get_manifest_backoff_options.d.ts → segment_buffers/inventory/index.js} +2 -11
  173. package/dist/_esm5.processed/core/segment_buffers/{segment_inventory.d.ts → inventory/segment_inventory.d.ts} +38 -39
  174. package/dist/_esm5.processed/core/segment_buffers/{segment_inventory.js → inventory/segment_inventory.js} +65 -28
  175. package/dist/_esm5.processed/core/{abr/cached_segment_detector.d.ts → segment_buffers/inventory/types.d.ts} +10 -9
  176. package/dist/_esm5.processed/core/segment_buffers/inventory/types.js +16 -0
  177. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +2 -2
  178. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +1 -1
  179. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +18 -16
  180. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +38 -34
  181. package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.d.ts +9 -17
  182. package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.js +11 -22
  183. package/dist/_esm5.processed/core/stream/adaptation/index.d.ts +2 -2
  184. package/dist/_esm5.processed/core/stream/events_generators.d.ts +13 -6
  185. package/dist/_esm5.processed/core/stream/events_generators.js +20 -12
  186. package/dist/_esm5.processed/core/stream/index.d.ts +2 -2
  187. package/dist/_esm5.processed/core/stream/orchestrator/active_period_emitter.d.ts +2 -2
  188. package/dist/_esm5.processed/core/stream/orchestrator/active_period_emitter.js +5 -6
  189. package/dist/_esm5.processed/core/stream/orchestrator/are_streams_complete.d.ts +2 -2
  190. package/dist/_esm5.processed/core/stream/orchestrator/are_streams_complete.js +1 -2
  191. package/dist/_esm5.processed/core/stream/orchestrator/get_blacklisted_ranges.d.ts +1 -1
  192. package/dist/_esm5.processed/core/stream/orchestrator/index.d.ts +2 -2
  193. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +10 -8
  194. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +41 -41
  195. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.d.ts +6 -4
  196. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +12 -15
  197. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.d.ts +1 -1
  198. package/dist/_esm5.processed/core/stream/period/index.d.ts +2 -2
  199. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +25 -11
  200. package/dist/_esm5.processed/core/stream/period/period_stream.js +39 -30
  201. package/dist/_esm5.processed/core/stream/reload_after_switch.d.ts +45 -0
  202. package/dist/_esm5.processed/core/stream/reload_after_switch.js +48 -0
  203. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.d.ts +5 -3
  204. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.js +10 -8
  205. package/dist/_esm5.processed/core/stream/representation/downloading_queue.d.ts +222 -0
  206. package/dist/_esm5.processed/core/stream/representation/downloading_queue.js +254 -0
  207. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.d.ts +1 -3
  208. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +9 -12
  209. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +3 -7
  210. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +10 -18
  211. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +3 -1
  212. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +108 -6
  213. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.d.ts +6 -9
  214. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +7 -8
  215. package/dist/_esm5.processed/core/stream/representation/index.d.ts +2 -2
  216. package/dist/_esm5.processed/core/stream/representation/push_init_segment.d.ts +5 -3
  217. package/dist/_esm5.processed/core/stream/representation/push_init_segment.js +4 -8
  218. package/dist/_esm5.processed/core/stream/representation/push_media_segment.d.ts +7 -5
  219. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +5 -9
  220. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +12 -18
  221. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +150 -209
  222. package/dist/_esm5.processed/core/stream/types.d.ts +65 -17
  223. package/dist/_esm5.processed/errors/error_message.js +1 -1
  224. package/dist/_esm5.processed/errors/request_error.js +3 -1
  225. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.d.ts +7 -5
  226. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.js +26 -13
  227. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_content_infos.js +3 -6
  228. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.d.ts +3 -6
  229. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.js +32 -36
  230. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.d.ts +4 -3
  231. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.js +6 -2
  232. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +2 -3
  233. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +2 -2
  234. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.js +9 -23
  235. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
  236. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +28 -29
  237. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/types.d.ts +1 -1
  238. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +12 -10
  239. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/index.js +5 -13
  240. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.d.ts +1 -1
  241. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.js +10 -3
  242. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
  243. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
  244. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +12 -2
  245. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.js +6 -1
  246. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -1
  247. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
  248. package/dist/_esm5.processed/features/initialize_features.js +49 -47
  249. package/dist/_esm5.processed/features/list/directfile.js +1 -2
  250. package/dist/_esm5.processed/features/types.d.ts +3 -10
  251. package/dist/_esm5.processed/index.js +2 -2
  252. package/dist/_esm5.processed/manifest/adaptation.d.ts +10 -16
  253. package/dist/_esm5.processed/manifest/adaptation.js +3 -25
  254. package/dist/_esm5.processed/manifest/index.d.ts +5 -4
  255. package/dist/_esm5.processed/manifest/index.js +3 -2
  256. package/dist/_esm5.processed/manifest/manifest.d.ts +11 -11
  257. package/dist/_esm5.processed/manifest/manifest.js +14 -11
  258. package/dist/_esm5.processed/manifest/period.d.ts +4 -4
  259. package/dist/_esm5.processed/manifest/period.js +7 -16
  260. package/dist/_esm5.processed/manifest/representation.d.ts +3 -3
  261. package/dist/_esm5.processed/manifest/representation.js +3 -7
  262. package/dist/_esm5.processed/manifest/representation_index/static.js +1 -0
  263. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +42 -21
  264. package/dist/_esm5.processed/manifest/types.d.ts +95 -3
  265. package/dist/_esm5.processed/manifest/update_period_in_place.js +1 -1
  266. package/dist/_esm5.processed/manifest/update_periods.js +11 -7
  267. package/dist/_esm5.processed/manifest/{are_same_content.d.ts → utils.d.ts} +9 -7
  268. package/dist/_esm5.processed/manifest/utils.js +44 -0
  269. package/dist/_esm5.processed/minimal.js +2 -2
  270. package/dist/_esm5.processed/parsers/containers/isobmff/get_box.d.ts +18 -9
  271. package/dist/_esm5.processed/parsers/containers/isobmff/get_box.js +32 -9
  272. package/dist/_esm5.processed/parsers/containers/isobmff/read.d.ts +18 -5
  273. package/dist/_esm5.processed/parsers/containers/isobmff/read.js +28 -6
  274. package/dist/_esm5.processed/parsers/containers/isobmff/utils.js +54 -58
  275. package/dist/_esm5.processed/parsers/images/bif.js +2 -11
  276. package/dist/_esm5.processed/parsers/manifest/dash/common/attach_trickmode_track.js +9 -8
  277. package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +2 -2
  278. package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
  279. package/dist/_esm5.processed/parsers/manifest/dash/common/get_http_utc-timing_url.js +2 -2
  280. package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
  281. package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.js +1 -3
  282. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +8 -7
  283. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +5 -7
  284. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
  285. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.js +1 -2
  286. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -1
  287. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +8 -12
  288. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +16 -15
  289. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +7 -15
  290. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +19 -18
  291. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +12 -12
  292. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
  293. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.js +11 -12
  294. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/find_first_common_start_time.js +3 -8
  295. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/parse_s_element.js +3 -3
  296. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +34 -21
  297. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +26 -18
  298. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.d.ts +1 -1
  299. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.js +4 -4
  300. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  301. package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
  302. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -33
  303. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +50 -57
  304. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +10 -9
  305. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +29 -30
  306. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +26 -26
  307. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +70 -65
  308. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +24 -16
  309. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +30 -42
  310. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -36
  311. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +28 -22
  312. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.d.ts +7 -2
  313. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.js +22 -21
  314. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +10 -0
  315. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/BaseURL.js +9 -9
  316. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +24 -0
  317. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.js +7 -5
  318. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +13 -11
  319. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +6 -6
  320. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +70 -29
  321. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +14 -5
  322. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +9 -21
  323. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +11 -0
  324. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.js +7 -1
  325. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.js +22 -0
  326. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/MPD.js +23 -0
  327. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Period.js +31 -0
  328. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +23 -0
  329. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.js +5 -0
  330. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/XLink.js +6 -0
  331. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/root.js +6 -0
  332. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/parsers_stack.js +1 -3
  333. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
  334. package/dist/_esm5.processed/parsers/manifest/local/parse_local_manifest.js +6 -11
  335. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +13 -7
  336. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
  337. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +4 -13
  338. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
  339. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +9 -30
  340. package/dist/_esm5.processed/parsers/manifest/smooth/get_codecs.js +1 -1
  341. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
  342. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +5 -6
  343. package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
  344. package/dist/_esm5.processed/parsers/manifest/utils/check_manifest_ids.js +1 -1
  345. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
  346. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +16 -6
  347. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +12 -4
  348. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.js +5 -5
  349. package/dist/_esm5.processed/parsers/manifest/utils/is_segment_still_available.js +3 -6
  350. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.d.ts +11 -1
  351. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +45 -29
  352. package/dist/_esm5.processed/parsers/texttracks/sami/html.js +2 -2
  353. package/dist/_esm5.processed/parsers/texttracks/sami/native.js +2 -2
  354. package/dist/_esm5.processed/parsers/texttracks/srt/html.js +11 -7
  355. package/dist/_esm5.processed/parsers/texttracks/srt/parse_cue.js +1 -2
  356. package/dist/_esm5.processed/parsers/texttracks/ttml/get_parameters.js +1 -5
  357. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_font_size.js +13 -1
  358. package/dist/_esm5.processed/parsers/texttracks/ttml/html/create_element.js +10 -6
  359. package/dist/_esm5.processed/parsers/texttracks/ttml/html/generate_css_test_outline.js +4 -4
  360. package/dist/_esm5.processed/parsers/texttracks/ttml/html/parse_cue.js +1 -2
  361. package/dist/_esm5.processed/parsers/texttracks/ttml/nodes.js +2 -1
  362. package/dist/_esm5.processed/parsers/texttracks/ttml/parse_ttml.js +11 -15
  363. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_default_style_elements.js +2 -2
  364. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_style_attribute.js +5 -5
  365. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
  366. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.js +1 -3
  367. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
  368. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.js +2 -7
  369. package/dist/_esm5.processed/public_types.d.ts +4 -0
  370. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +1 -3
  371. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.d.ts +3 -4
  372. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +70 -9
  373. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +12 -6
  374. package/dist/_esm5.processed/transports/dash/image_pipelines.js +34 -36
  375. package/dist/_esm5.processed/transports/dash/init_segment_loader.d.ts +8 -4
  376. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +32 -36
  377. package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.d.ts +14 -3
  378. package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +38 -40
  379. package/dist/_esm5.processed/transports/dash/manifest_parser.d.ts +3 -7
  380. package/dist/_esm5.processed/transports/dash/manifest_parser.js +115 -52
  381. package/dist/_esm5.processed/transports/dash/pipelines.js +10 -10
  382. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +14 -3
  383. package/dist/_esm5.processed/transports/dash/segment_loader.js +70 -57
  384. package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +3 -4
  385. package/dist/_esm5.processed/transports/dash/segment_parser.js +15 -32
  386. package/dist/_esm5.processed/transports/dash/text_loader.d.ts +3 -4
  387. package/dist/_esm5.processed/transports/dash/text_loader.js +28 -18
  388. package/dist/_esm5.processed/transports/dash/text_parser.d.ts +5 -4
  389. package/dist/_esm5.processed/transports/dash/text_parser.js +58 -51
  390. package/dist/_esm5.processed/transports/local/pipelines.js +16 -14
  391. package/dist/_esm5.processed/transports/local/segment_loader.d.ts +8 -5
  392. package/dist/_esm5.processed/transports/local/segment_loader.js +69 -28
  393. package/dist/_esm5.processed/transports/local/segment_parser.d.ts +5 -3
  394. package/dist/_esm5.processed/transports/local/segment_parser.js +15 -27
  395. package/dist/_esm5.processed/transports/local/text_parser.d.ts +9 -5
  396. package/dist/_esm5.processed/transports/local/text_parser.js +54 -53
  397. package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +5 -5
  398. package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.js +7 -9
  399. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +82 -138
  400. package/dist/_esm5.processed/transports/smooth/extract_timings_infos.js +3 -6
  401. package/dist/_esm5.processed/transports/smooth/isobmff/create_video_init_segment.d.ts +1 -4
  402. package/dist/_esm5.processed/transports/smooth/isobmff/create_video_init_segment.js +1 -4
  403. package/dist/_esm5.processed/transports/smooth/pipelines.js +149 -155
  404. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +6 -3
  405. package/dist/_esm5.processed/transports/smooth/segment_loader.js +150 -107
  406. package/dist/_esm5.processed/transports/smooth/utils.d.ts +9 -1
  407. package/dist/_esm5.processed/transports/smooth/utils.js +11 -1
  408. package/dist/_esm5.processed/transports/types.d.ts +533 -376
  409. package/dist/_esm5.processed/transports/utils/byte_range.js +2 -2
  410. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.d.ts +3 -3
  411. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +45 -32
  412. package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +4 -4
  413. package/dist/_esm5.processed/transports/utils/generate_manifest_loader.js +16 -5
  414. package/dist/_esm5.processed/transports/utils/get_isobmff_timing_infos.js +6 -1
  415. package/dist/_esm5.processed/transports/utils/parse_text_track.js +8 -12
  416. package/dist/_esm5.processed/utils/array_find.d.ts +1 -1
  417. package/dist/_esm5.processed/utils/array_find.js +0 -5
  418. package/dist/_esm5.processed/utils/array_find_index.d.ts +1 -1
  419. package/dist/_esm5.processed/utils/array_find_index.js +0 -5
  420. package/dist/_esm5.processed/utils/assert.d.ts +1 -1
  421. package/dist/_esm5.processed/utils/assert.js +3 -3
  422. package/dist/_esm5.processed/utils/cancellable_sleep.d.ts +30 -0
  423. package/dist/_esm5.processed/utils/cancellable_sleep.js +42 -0
  424. package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
  425. package/dist/_esm5.processed/utils/cast_to_observable.js +11 -6
  426. package/dist/_esm5.processed/utils/concat_map_latest.js +1 -2
  427. package/dist/_esm5.processed/utils/defer_subscriptions.js +1 -2
  428. package/dist/_esm5.processed/utils/filter_map.js +1 -2
  429. package/dist/_esm5.processed/utils/flat_map.js +0 -6
  430. package/dist/_esm5.processed/utils/id_generator.d.ts +2 -1
  431. package/dist/_esm5.processed/utils/id_generator.js +2 -1
  432. package/dist/_esm5.processed/utils/languages/normalize.js +1 -3
  433. package/dist/_esm5.processed/utils/ranges.js +1 -2
  434. package/dist/_esm5.processed/utils/reference.d.ts +108 -0
  435. package/dist/_esm5.processed/utils/reference.js +137 -0
  436. package/dist/_esm5.processed/utils/request/fetch.d.ts +64 -27
  437. package/dist/_esm5.processed/utils/request/fetch.js +95 -113
  438. package/dist/_esm5.processed/utils/request/index.d.ts +3 -3
  439. package/dist/_esm5.processed/utils/request/xhr.d.ts +64 -47
  440. package/dist/_esm5.processed/utils/request/xhr.js +49 -43
  441. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +39 -0
  442. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +58 -0
  443. package/dist/_esm5.processed/utils/rx-retry_with_backoff.js +1 -2
  444. package/dist/_esm5.processed/utils/task_canceller.d.ts +240 -0
  445. package/dist/_esm5.processed/utils/task_canceller.js +289 -0
  446. package/dist/mpd-parser.wasm +0 -0
  447. package/dist/rx-player.d.ts +1 -15
  448. package/dist/rx-player.js +8775 -6211
  449. package/dist/rx-player.min.d.ts +1 -15
  450. package/dist/rx-player.min.js +1 -1
  451. package/jest.config.js +28 -4
  452. package/package.json +122 -106
  453. package/scripts/README.md +11 -0
  454. package/scripts/build/constants.d.ts +50 -0
  455. package/scripts/build/generate_build.js +197 -0
  456. package/scripts/build/templates/experimental/features/index.d.ts +16 -0
  457. package/scripts/build/templates/experimental/features/index.js +16 -0
  458. package/scripts/build/templates/experimental/tools/VideoThumbnailLoader/index.d.ts +18 -0
  459. package/scripts/build/templates/experimental/tools/VideoThumbnailLoader/index.js +18 -0
  460. package/scripts/build/templates/experimental/tools/index.d.ts +16 -0
  461. package/scripts/build/templates/experimental/tools/index.js +16 -0
  462. package/scripts/build/templates/features/index.d.ts +16 -0
  463. package/scripts/build/templates/features/index.js +16 -0
  464. package/scripts/build/templates/logger/index.d.ts +17 -0
  465. package/scripts/build/templates/logger/index.js +17 -0
  466. package/scripts/build/templates/minimal/index.d.ts +17 -0
  467. package/scripts/build/templates/minimal/index.js +17 -0
  468. package/scripts/build/templates/tools/TextTrackRenderer.d.ts +18 -0
  469. package/scripts/build/templates/tools/TextTrackRenderer.js +18 -0
  470. package/scripts/build/templates/tools/index.d.ts +16 -0
  471. package/scripts/build/templates/tools/index.js +16 -0
  472. package/scripts/build/templates/tools/string-utils.d.ts +18 -0
  473. package/{dist/_esm5.processed/core/fetchers/segment/get_segment_backoff_options.d.ts → scripts/build/templates/tools/string-utils.js} +3 -11
  474. package/scripts/build/templates/types/index.d.ts +16 -0
  475. package/scripts/build/templates/types/index.js +15 -0
  476. package/scripts/check_nodejs_import_compatibility.js +35 -1
  477. package/scripts/doc-generator/construct_table_of_contents.js +31 -24
  478. package/scripts/doc-generator/convert_MD_to_HMTL.js +4 -8
  479. package/scripts/doc-generator/create_documentation.js +331 -0
  480. package/scripts/doc-generator/create_documentation_page.js +209 -0
  481. package/scripts/doc-generator/create_page.js +117 -35
  482. package/scripts/doc-generator/generate_header_html.js +147 -0
  483. package/scripts/doc-generator/generate_page_html.js +115 -0
  484. package/scripts/doc-generator/generate_page_list_html.js +92 -0
  485. package/scripts/doc-generator/generate_sidebar_html.js +85 -0
  486. package/scripts/doc-generator/get_search_data_for_content.js +137 -0
  487. package/scripts/doc-generator/index.js +14 -15
  488. package/scripts/doc-generator/parse_doc_configs.js +327 -0
  489. package/scripts/doc-generator/scripts/lunr.js +10 -0
  490. package/scripts/doc-generator/scripts/script.js +451 -0
  491. package/scripts/doc-generator/styles/style.css +712 -144
  492. package/scripts/doc-generator/utils.js +74 -0
  493. package/scripts/fast_demo_build.js +143 -0
  494. package/scripts/generate_demo_list.js +3 -3
  495. package/scripts/generate_documentation_list.js +9 -5
  496. package/scripts/generate_full_demo.js +108 -10
  497. package/scripts/generate_standalone_demo.js +15 -8
  498. package/scripts/launch_static_server.js +139 -56
  499. package/scripts/list-npm-scripts.js +99 -0
  500. package/scripts/run_standalone_demo.js +1 -0
  501. package/scripts/{run_full_demo.js → start_demo_web_server.js} +16 -3
  502. package/scripts/update-version +8 -1
  503. package/scripts/{display_webpack_errors.js → utils/display_webpack_errors.js} +0 -4
  504. package/scripts/{get_human_readable_hours.js → utils/get_human_readable_hours.js} +0 -4
  505. package/sonar-project.properties +2 -1
  506. package/src/compat/__tests__/add_text_track.test.ts +12 -11
  507. package/src/compat/__tests__/browser_compatibility_types.test.ts +69 -60
  508. package/src/compat/__tests__/browser_version.test.ts +3 -1
  509. package/src/compat/__tests__/change_source_buffer_type.test.ts +3 -3
  510. package/src/compat/__tests__/clear_element_src.test.ts +62 -36
  511. package/src/compat/__tests__/fullscreen.test.ts +154 -139
  512. package/src/compat/__tests__/is_offline.test.ts +20 -12
  513. package/src/compat/__tests__/is_vtt_cue.test.ts +14 -10
  514. package/src/compat/__tests__/make_vtt_cue.test.ts +16 -15
  515. package/src/compat/__tests__/patch_webkit_source_buffer.test.ts +30 -48
  516. package/src/compat/__tests__/play.test.ts +2 -2
  517. package/src/compat/__tests__/remove_cue.test.ts +5 -5
  518. package/src/compat/__tests__/set_element_src.test.ts +3 -3
  519. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +14 -6
  520. package/src/compat/__tests__/when_loaded_metadata.test.ts +4 -5
  521. package/src/compat/__tests__/when_media_source_open.test.ts +4 -5
  522. package/src/compat/browser_compatibility_types.ts +38 -36
  523. package/src/compat/browser_detection.ts +17 -12
  524. package/src/compat/can_rely_on_video_visibility_and_size.ts +3 -3
  525. package/src/compat/clear_element_src.ts +8 -6
  526. package/src/compat/eme/close_session.ts +7 -6
  527. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +22 -26
  528. package/src/compat/eme/custom_media_keys/index.ts +32 -38
  529. package/src/compat/eme/custom_media_keys/moz_media_keys_constructor.ts +16 -19
  530. package/src/compat/eme/custom_media_keys/ms_media_keys_constructor.ts +39 -9
  531. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +10 -12
  532. package/src/compat/eme/custom_media_keys/types.ts +1 -1
  533. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +27 -30
  534. package/src/compat/eme/custom_media_keys/webkit_media_keys_constructor.ts +6 -2
  535. package/src/compat/eme/generate_key_request.ts +1 -1
  536. package/src/compat/eme/load_session.ts +4 -6
  537. package/src/compat/event_listeners.ts +30 -46
  538. package/src/compat/fullscreen.ts +2 -4
  539. package/src/compat/index.ts +2 -6
  540. package/src/compat/is_vtt_cue.ts +1 -2
  541. package/src/compat/make_vtt_cue.ts +10 -8
  542. package/src/compat/on_height_width_change.ts +4 -6
  543. package/src/compat/patch_webkit_source_buffer.ts +11 -5
  544. package/src/compat/play.ts +1 -1
  545. package/src/compat/set_element_src.ts +1 -1
  546. package/src/compat/when_loaded_metadata.ts +1 -1
  547. package/src/compat/when_media_source_open.ts +1 -1
  548. package/src/config.ts +79 -14
  549. package/src/core/abr/README.md +7 -7
  550. package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
  551. package/src/core/abr/abr_manager.ts +62 -21
  552. package/src/core/abr/bandwidth_estimator.ts +1 -1
  553. package/src/core/abr/buffer_based_chooser.ts +85 -18
  554. package/src/core/abr/get_buffer_levels.ts +3 -0
  555. package/src/core/abr/guess_based_chooser.ts +308 -0
  556. package/src/core/abr/index.ts +7 -3
  557. package/src/core/abr/last_estimate_storage.ts +79 -0
  558. package/src/core/abr/network_analyzer.ts +75 -32
  559. package/src/core/abr/pending_requests_store.ts +72 -40
  560. package/src/core/abr/representation_estimator.ts +205 -135
  561. package/src/core/abr/representation_score_calculator.ts +33 -26
  562. package/src/core/abr/{__tests__ → utils/__tests__}/ewma.test.ts +0 -0
  563. package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_bitrate.test.ts +1 -1
  564. package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_width.test.ts +1 -1
  565. package/src/core/abr/{__tests__ → utils/__tests__}/select_optimal_representation.test.ts +1 -1
  566. package/src/core/abr/{ewma.ts → utils/ewma.ts} +0 -0
  567. package/src/core/abr/{filter_by_bitrate.ts → utils/filter_by_bitrate.ts} +2 -2
  568. package/src/core/abr/{filter_by_width.ts → utils/filter_by_width.ts} +3 -3
  569. package/src/core/abr/{select_optimal_representation.ts → utils/select_optimal_representation.ts} +2 -2
  570. package/src/core/api/README.md +4 -3
  571. package/src/core/api/__tests__/get_player_state.test.ts +58 -110
  572. package/src/core/api/__tests__/media_element_track_choice_manager.test.ts +35 -31
  573. package/src/core/api/__tests__/option_utils.test.ts +104 -17
  574. package/src/core/api/emit_seek_events.ts +21 -20
  575. package/src/core/api/get_player_state.ts +5 -7
  576. package/src/core/api/index.ts +8 -3
  577. package/src/core/api/media_element_track_choice_manager.ts +22 -3
  578. package/src/core/api/option_utils.ts +7 -7
  579. package/src/core/api/playback_observer.ts +768 -0
  580. package/src/core/api/public_api.ts +128 -130
  581. package/src/core/api/track_choice_manager.ts +82 -78
  582. package/src/core/eme/__tests__/__global__/get_license.test.ts +14 -9
  583. package/src/core/eme/__tests__/__global__/init_data.test.ts +12 -12
  584. package/src/core/eme/__tests__/__global__/media_key_system_access.test.ts +3 -1
  585. package/src/core/eme/__tests__/__global__/media_keys.test.ts +6 -8
  586. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +18 -12
  587. package/src/core/eme/__tests__/__global__/utils.ts +21 -17
  588. package/src/core/eme/__tests__/clean_old_loaded_sessions.test.ts +4 -4
  589. package/src/core/eme/__tests__/clean_old_stored_persistent_info.test.ts +3 -2
  590. package/src/core/eme/__tests__/init_media_keys.test.ts +10 -66
  591. package/src/core/eme/attach_media_keys.ts +2 -1
  592. package/src/core/eme/check_key_statuses.ts +24 -13
  593. package/src/core/eme/clean_old_loaded_sessions.ts +2 -4
  594. package/src/core/eme/clear_eme_session.ts +6 -1
  595. package/src/core/eme/create_session.ts +3 -5
  596. package/src/core/eme/dispose_media_keys.ts +2 -2
  597. package/src/core/eme/eme_manager.ts +10 -12
  598. package/src/core/eme/find_key_system.ts +17 -17
  599. package/src/core/eme/get_media_keys.ts +4 -6
  600. package/src/core/eme/get_session.ts +2 -4
  601. package/src/core/eme/init_media_keys.ts +9 -9
  602. package/src/core/eme/session_events_listener.ts +21 -18
  603. package/src/core/eme/set_server_certificate.ts +9 -5
  604. package/src/core/eme/types.ts +17 -6
  605. package/src/core/eme/utils/close_session.ts +7 -7
  606. package/src/core/eme/utils/is_session_usable.ts +1 -1
  607. package/src/core/eme/utils/loaded_sessions_store.ts +2 -2
  608. package/src/core/eme/utils/persistent_sessions_store.ts +2 -2
  609. package/src/core/fetchers/index.ts +2 -2
  610. package/src/core/fetchers/manifest/manifest_fetcher.ts +256 -109
  611. package/src/core/fetchers/segment/__tests__/prioritizer.test.ts +4 -5
  612. package/src/core/fetchers/segment/index.ts +2 -2
  613. package/src/core/fetchers/segment/prioritized_segment_fetcher.ts +48 -51
  614. package/src/core/fetchers/segment/prioritizer.ts +82 -82
  615. package/src/core/fetchers/segment/segment_fetcher.ts +396 -177
  616. package/src/core/fetchers/segment/segment_fetcher_creator.ts +56 -39
  617. package/src/core/fetchers/utils/try_urls_with_backoff.ts +123 -91
  618. package/src/core/init/__tests__/refresh_scheduled_events_list.test.ts +1 -1
  619. package/src/core/init/create_eme_manager.ts +1 -1
  620. package/src/core/init/create_media_source.ts +5 -7
  621. package/src/core/init/create_stream_playback_observer.ts +88 -0
  622. package/src/core/init/duration_updater.ts +21 -18
  623. package/src/core/init/emit_loaded_event.ts +71 -0
  624. package/src/core/init/end_of_stream.ts +2 -4
  625. package/src/core/init/events_generators.ts +4 -5
  626. package/src/core/init/get_initial_time.ts +0 -1
  627. package/src/core/init/initial_seek_and_play.ts +128 -96
  628. package/src/core/init/initialize_directfile.ts +49 -57
  629. package/src/core/init/initialize_media_source.ts +31 -31
  630. package/src/core/init/load_on_media_source.ts +70 -74
  631. package/src/core/init/manifest_update_scheduler.ts +18 -19
  632. package/src/core/init/stall_avoider.ts +142 -51
  633. package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
  634. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +24 -21
  635. package/src/core/init/stream_events_emitter/types.ts +2 -2
  636. package/src/core/init/throw_on_media_error.ts +1 -1
  637. package/src/core/init/types.ts +15 -28
  638. package/src/core/init/update_playback_rate.ts +17 -18
  639. package/src/core/segment_buffers/README.md +3 -3
  640. package/src/core/segment_buffers/garbage_collector.ts +17 -13
  641. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +46 -11
  642. package/src/core/segment_buffers/implementations/image/image_segment_buffer.ts +21 -18
  643. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +92 -18
  644. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +33 -32
  645. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +82 -6
  646. package/src/core/segment_buffers/implementations/types.ts +23 -4
  647. package/src/core/segment_buffers/implementations/utils/manual_time_ranges.ts +2 -2
  648. package/src/core/segment_buffers/index.ts +6 -1
  649. package/src/core/segment_buffers/inventory/buffered_history.ts +127 -0
  650. package/src/core/segment_buffers/inventory/index.ts +28 -0
  651. package/src/core/segment_buffers/{segment_inventory.ts → inventory/segment_inventory.ts} +85 -52
  652. package/{dist/_esm5.processed/manifest/are_same_content.js → src/core/segment_buffers/inventory/types.ts} +19 -11
  653. package/src/core/segment_buffers/segment_buffers_store.ts +4 -13
  654. package/src/core/stream/adaptation/adaptation_stream.ts +90 -65
  655. package/src/core/stream/adaptation/create_representation_estimator.ts +19 -45
  656. package/src/core/stream/adaptation/index.ts +2 -2
  657. package/src/core/stream/events_generators.ts +31 -7
  658. package/src/core/stream/index.ts +2 -2
  659. package/src/core/stream/orchestrator/active_period_emitter.ts +9 -11
  660. package/src/core/stream/orchestrator/are_streams_complete.ts +4 -6
  661. package/src/core/stream/orchestrator/get_blacklisted_ranges.ts +1 -1
  662. package/src/core/stream/orchestrator/index.ts +2 -2
  663. package/src/core/stream/orchestrator/stream_orchestrator.ts +70 -62
  664. package/src/core/stream/period/create_empty_adaptation_stream.ts +14 -10
  665. package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
  666. package/src/core/stream/period/index.ts +2 -2
  667. package/src/core/stream/period/period_stream.ts +126 -85
  668. package/src/core/stream/reload_after_switch.ts +70 -0
  669. package/src/core/stream/representation/append_segment_to_buffer.ts +21 -17
  670. package/src/core/stream/representation/downloading_queue.ts +502 -0
  671. package/src/core/stream/representation/force_garbage_collection.ts +20 -29
  672. package/src/core/stream/representation/get_buffer_status.ts +15 -13
  673. package/src/core/stream/representation/get_needed_segments.ts +135 -6
  674. package/src/core/stream/representation/get_segment_priority.ts +8 -10
  675. package/src/core/stream/representation/index.ts +2 -2
  676. package/src/core/stream/representation/push_init_segment.ts +19 -16
  677. package/src/core/stream/representation/push_media_segment.ts +21 -17
  678. package/src/core/stream/representation/representation_stream.ts +238 -307
  679. package/src/core/stream/types.ts +91 -39
  680. package/src/errors/request_error.ts +4 -1
  681. package/src/experimental/features/__tests__/dash_wasm.test.ts +2 -0
  682. package/src/experimental/tools/VideoThumbnailLoader/create_request.ts +47 -30
  683. package/src/experimental/tools/VideoThumbnailLoader/get_content_infos.ts +1 -2
  684. package/src/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.ts +41 -72
  685. package/src/experimental/tools/VideoThumbnailLoader/load_segments.ts +20 -13
  686. package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +7 -7
  687. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +13 -27
  688. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +38 -37
  689. package/src/experimental/tools/VideoThumbnailLoader/types.ts +0 -1
  690. package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +56 -47
  691. package/src/experimental/tools/createMetaplaylist/index.ts +1 -1
  692. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +6 -4
  693. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +3 -3
  694. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +5 -7
  695. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaContentType.test.ts +7 -7
  696. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaDisplayInfos.test.ts +1 -0
  697. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +12 -4
  698. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
  699. package/src/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.ts +12 -2
  700. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts +6 -1
  701. package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
  702. package/src/features/__tests__/initialize_features.test.ts +207 -110
  703. package/src/features/initialize_features.ts +40 -37
  704. package/src/features/list/__tests__/bif_parser.test.ts +2 -0
  705. package/src/features/list/__tests__/dash.test.ts +2 -0
  706. package/src/features/list/__tests__/directfile.test.ts +2 -0
  707. package/src/features/list/__tests__/eme.test.ts +2 -0
  708. package/src/features/list/__tests__/html_sami_parser.test.ts +2 -0
  709. package/src/features/list/__tests__/html_srt_parser.test.ts +2 -0
  710. package/src/features/list/__tests__/html_text_buffer.test.ts +2 -0
  711. package/src/features/list/__tests__/html_ttml_parser.test.ts +2 -0
  712. package/src/features/list/__tests__/html_vtt_parser.test.ts +2 -0
  713. package/src/features/list/__tests__/image_buffer.test.ts +2 -0
  714. package/src/features/list/__tests__/native_sami_parser.test.ts +2 -0
  715. package/src/features/list/__tests__/native_srt_parser.test.ts +2 -0
  716. package/src/features/list/__tests__/native_text_buffer.test.ts +2 -0
  717. package/src/features/list/__tests__/native_ttml_parser.test.ts +2 -0
  718. package/src/features/list/__tests__/native_vtt_parser.test.ts +2 -0
  719. package/src/features/list/__tests__/smooth.test.ts +2 -0
  720. package/src/features/types.ts +3 -11
  721. package/src/index.ts +2 -2
  722. package/src/manifest/__tests__/adaptation.test.ts +0 -79
  723. package/src/manifest/__tests__/manifest.test.ts +68 -67
  724. package/src/manifest/__tests__/period.test.ts +142 -118
  725. package/src/manifest/__tests__/update_period_in_place.test.ts +85 -62
  726. package/src/manifest/__tests__/update_periods.test.ts +33 -12
  727. package/src/manifest/adaptation.ts +17 -51
  728. package/src/manifest/index.ts +15 -2
  729. package/src/manifest/manifest.ts +31 -18
  730. package/src/manifest/period.ts +13 -20
  731. package/src/manifest/representation.ts +3 -3
  732. package/src/manifest/representation_index/__tests__/static.test.ts +1 -0
  733. package/src/manifest/representation_index/static.ts +1 -0
  734. package/src/manifest/representation_index/types.ts +43 -21
  735. package/src/manifest/types.ts +97 -3
  736. package/src/manifest/{are_same_content.ts → utils.ts} +26 -9
  737. package/src/minimal.ts +3 -2
  738. package/src/parsers/containers/isobmff/get_box.ts +35 -8
  739. package/src/parsers/containers/isobmff/read.ts +32 -5
  740. package/src/parsers/containers/isobmff/utils.ts +52 -47
  741. package/src/parsers/manifest/dash/common/__tests__/attach_trickmode_track.test.ts +7 -4
  742. package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +4 -4
  743. package/src/parsers/manifest/dash/common/__tests__/get_periods_time_infos.test.ts +29 -6
  744. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
  745. package/src/parsers/manifest/dash/common/attach_trickmode_track.ts +5 -8
  746. package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +4 -2
  747. package/src/parsers/manifest/dash/common/get_clock_offset.ts +3 -3
  748. package/src/parsers/manifest/dash/common/get_hdr_information.ts +1 -1
  749. package/src/parsers/manifest/dash/common/get_http_utc-timing_url.ts +15 -6
  750. package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
  751. package/src/parsers/manifest/dash/common/indexes/base.ts +11 -9
  752. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +5 -2
  753. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +10 -10
  754. package/src/parsers/manifest/dash/common/indexes/list.ts +20 -17
  755. package/src/parsers/manifest/dash/common/indexes/template.ts +30 -22
  756. package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
  757. package/src/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.ts +10 -9
  758. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +63 -27
  759. package/src/parsers/manifest/dash/common/indexes/tokens.ts +4 -4
  760. package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
  761. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
  762. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +64 -73
  763. package/src/parsers/manifest/dash/common/parse_mpd.ts +33 -24
  764. package/src/parsers/manifest/dash/common/parse_periods.ts +115 -87
  765. package/src/parsers/manifest/dash/common/parse_representation_index.ts +88 -80
  766. package/src/parsers/manifest/dash/common/parse_representations.ts +61 -64
  767. package/src/parsers/manifest/dash/common/resolve_base_urls.ts +33 -24
  768. package/src/parsers/manifest/dash/js-parser/__tests__/parse_from_document.test.ts +1 -1
  769. package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +12 -0
  770. package/src/parsers/manifest/dash/js-parser/node_parsers/BaseURL.ts +13 -9
  771. package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +28 -0
  772. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.ts +8 -5
  773. package/src/parsers/manifest/dash/js-parser/node_parsers/utils.ts +3 -0
  774. package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +5 -2
  775. package/src/parsers/manifest/dash/node_parser_types.ts +66 -29
  776. package/src/parsers/manifest/dash/parsers_types.ts +11 -5
  777. package/src/parsers/manifest/dash/wasm-parser/Cargo.lock +4 -2
  778. package/src/parsers/manifest/dash/wasm-parser/Cargo.toml +1 -1
  779. package/src/parsers/manifest/dash/wasm-parser/rs/events.rs +43 -0
  780. package/src/parsers/manifest/dash/wasm-parser/rs/lib.rs +1 -8
  781. package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +41 -8
  782. package/src/parsers/manifest/dash/wasm-parser/rs/processor/mod.rs +75 -521
  783. package/src/parsers/manifest/dash/wasm-parser/rs/reportable.rs +22 -1
  784. package/src/parsers/manifest/dash/wasm-parser/rs/utils.rs +40 -1
  785. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +10 -19
  786. package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +13 -0
  787. package/src/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.ts +8 -1
  788. package/src/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.ts +25 -0
  789. package/src/parsers/manifest/dash/wasm-parser/ts/generators/MPD.ts +26 -0
  790. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Period.ts +34 -0
  791. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +26 -0
  792. package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.ts +6 -0
  793. package/src/parsers/manifest/dash/wasm-parser/ts/generators/XLink.ts +7 -0
  794. package/src/parsers/manifest/dash/wasm-parser/ts/generators/root.ts +7 -0
  795. package/src/parsers/manifest/dash/wasm-parser/ts/parsers_stack.ts +0 -1
  796. package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +31 -1
  797. package/src/parsers/manifest/local/representation_index.ts +2 -0
  798. package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +6 -5
  799. package/src/parsers/manifest/smooth/create_parser.ts +24 -22
  800. package/src/parsers/manifest/smooth/representation_index.ts +17 -15
  801. package/src/parsers/manifest/types.ts +28 -28
  802. package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +39 -36
  803. package/src/parsers/manifest/utils/check_manifest_ids.ts +2 -2
  804. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +16 -7
  805. package/src/parsers/manifest/utils/index_helpers.ts +22 -12
  806. package/src/parsers/manifest/utils/is_segment_still_available.ts +4 -6
  807. package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
  808. package/src/parsers/texttracks/sami/html.ts +1 -1
  809. package/src/parsers/texttracks/sami/native.ts +1 -1
  810. package/src/parsers/texttracks/srt/html.ts +16 -10
  811. package/src/parsers/texttracks/ttml/html/apply_font_size.ts +11 -1
  812. package/src/parsers/texttracks/ttml/nodes.ts +2 -1
  813. package/src/parsers/texttracks/webvtt/html/__tests__/convert_payload_to_html.test.ts +9 -6
  814. package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
  815. package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
  816. package/src/public_types.ts +18 -0
  817. package/src/transports/README.md +8 -4
  818. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +68 -27
  819. package/src/transports/dash/image_pipelines.ts +58 -45
  820. package/src/transports/dash/init_segment_loader.ts +68 -45
  821. package/src/transports/dash/low_latency_segment_loader.ts +52 -68
  822. package/src/transports/dash/manifest_parser.ts +148 -78
  823. package/src/transports/dash/pipelines.ts +10 -10
  824. package/src/transports/dash/segment_loader.ts +117 -90
  825. package/src/transports/dash/segment_parser.ts +46 -45
  826. package/src/transports/dash/text_loader.ts +55 -34
  827. package/src/transports/dash/text_parser.ts +91 -78
  828. package/src/transports/local/pipelines.ts +19 -21
  829. package/src/transports/local/segment_loader.ts +86 -40
  830. package/src/transports/local/segment_parser.ts +31 -38
  831. package/src/transports/local/text_parser.ts +82 -74
  832. package/src/transports/metaplaylist/manifest_loader.ts +17 -15
  833. package/src/transports/metaplaylist/pipelines.ts +158 -181
  834. package/src/transports/smooth/extract_timings_infos.ts +1 -1
  835. package/src/transports/smooth/isobmff/create_boxes.ts +5 -5
  836. package/src/transports/smooth/isobmff/create_video_init_segment.ts +1 -4
  837. package/src/transports/smooth/pipelines.ts +206 -187
  838. package/src/transports/smooth/segment_loader.ts +138 -87
  839. package/src/transports/smooth/utils.ts +13 -0
  840. package/src/transports/types.ts +639 -439
  841. package/src/transports/utils/__tests__/check_isobmff_integrity.test.ts +24 -24
  842. package/src/transports/utils/__tests__/infer_segment_container.test.ts +31 -30
  843. package/src/transports/utils/call_custom_manifest_loader.ts +83 -60
  844. package/src/transports/utils/generate_manifest_loader.ts +34 -12
  845. package/src/transports/utils/get_isobmff_timing_infos.ts +6 -1
  846. package/src/transports/utils/parse_text_track.ts +4 -2
  847. package/src/typings/globals.d.ts +57 -40
  848. package/src/utils/__tests__/array_find.test.ts +5 -5
  849. package/src/utils/__tests__/array_find_index.test.ts +6 -5
  850. package/src/utils/__tests__/array_includes.test.ts +1 -0
  851. package/src/utils/__tests__/assert.test.ts +38 -21
  852. package/src/utils/__tests__/assert_unreachable.test.ts +8 -7
  853. package/src/utils/__tests__/concat_map_latest.test.ts +7 -9
  854. package/src/utils/__tests__/defer_subscriptions.test.ts +4 -4
  855. package/src/utils/__tests__/event_emitter.test.ts +1 -1
  856. package/src/utils/__tests__/flat_map.test.ts +18 -6
  857. package/src/utils/__tests__/id_generator.test.ts +3 -3
  858. package/src/utils/__tests__/initialization_segment_cache.test.ts +7 -0
  859. package/src/utils/__tests__/promise.test.ts +1 -1
  860. package/src/utils/__tests__/starts_with.test.ts +2 -0
  861. package/src/utils/array_find.ts +11 -3
  862. package/src/utils/array_find_index.ts +11 -3
  863. package/src/utils/assert.ts +5 -2
  864. package/src/utils/cancellable_sleep.ts +51 -0
  865. package/src/utils/cast_to_observable.ts +12 -13
  866. package/src/utils/concat_map_latest.ts +2 -4
  867. package/src/utils/defer_subscriptions.ts +1 -1
  868. package/src/utils/filter_map.ts +2 -4
  869. package/src/utils/flat_map.ts +10 -8
  870. package/src/utils/id_generator.ts +2 -1
  871. package/src/utils/object_assign.ts +1 -1
  872. package/src/utils/reference.ts +234 -0
  873. package/src/utils/request/fetch.ts +175 -147
  874. package/src/utils/request/index.ts +6 -6
  875. package/src/utils/request/xhr.ts +144 -128
  876. package/src/utils/rx-from_cancellable_promise.ts +66 -0
  877. package/src/utils/rx-retry_with_backoff.ts +2 -4
  878. package/src/utils/task_canceller.ts +326 -0
  879. package/src/utils/uniq.ts +1 -1
  880. package/tsconfig.json +5 -1
  881. package/tsconfig.modules.json +9 -3
  882. package/dist/_esm5.processed/compat/is_playback_stuck.d.ts +0 -28
  883. package/dist/_esm5.processed/compat/is_playback_stuck.js +0 -33
  884. package/dist/_esm5.processed/core/abr/cached_segment_detector.js +0 -60
  885. package/dist/_esm5.processed/core/abr/create_filters.d.ts +0 -27
  886. package/dist/_esm5.processed/core/abr/create_filters.js +0 -52
  887. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
  888. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
  889. package/dist/_esm5.processed/core/api/clock.d.ts +0 -129
  890. package/dist/_esm5.processed/core/api/clock.js +0 -335
  891. package/dist/_esm5.processed/core/fetchers/manifest/get_manifest_backoff_options.js +0 -38
  892. package/dist/_esm5.processed/core/fetchers/segment/create_segment_loader.d.ts +0 -98
  893. package/dist/_esm5.processed/core/fetchers/segment/create_segment_loader.js +0 -124
  894. package/dist/_esm5.processed/core/fetchers/segment/get_segment_backoff_options.js +0 -32
  895. package/dist/_esm5.processed/core/fetchers/utils/create_request_scheduler.js +0 -38
  896. package/dist/_esm5.processed/core/init/create_stream_clock.d.ts +0 -34
  897. package/dist/_esm5.processed/core/init/create_stream_clock.js +0 -56
  898. package/dist/_esm5.processed/core/stream/utils.d.ts +0 -60
  899. package/dist/_esm5.processed/core/stream/utils.js +0 -70
  900. package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.d.ts +0 -31
  901. package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.js +0 -37
  902. package/dist/_esm5.processed/transports/utils/return_parsed_manifest.js +0 -32
  903. package/scripts/clean-up_builds +0 -18
  904. package/scripts/doc-generator/construct_html.js +0 -135
  905. package/scripts/doc-generator/construct_page_list.js +0 -120
  906. package/scripts/doc-generator/create_for_dir.js +0 -151
  907. package/scripts/doc-generator/get_files_to_convert.js +0 -71
  908. package/scripts/doc-generator/mkdir_parent.js +0 -21
  909. package/scripts/doc-generator/read_title_from_md.js +0 -22
  910. package/scripts/doc-generator/remove_toc_from_md.js +0 -20
  911. package/scripts/generate_builds +0 -224
  912. package/scripts/list-npm-scripts-info.js +0 -39
  913. package/src/compat/is_playback_stuck.ts +0 -42
  914. package/src/core/abr/cached_segment_detector.ts +0 -86
  915. package/src/core/abr/create_filters.ts +0 -59
  916. package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
  917. package/src/core/api/clock.ts +0 -497
  918. package/src/core/fetchers/manifest/get_manifest_backoff_options.ts +0 -50
  919. package/src/core/fetchers/segment/create_segment_loader.ts +0 -251
  920. package/src/core/fetchers/segment/get_segment_backoff_options.ts +0 -45
  921. package/src/core/fetchers/utils/create_request_scheduler.ts +0 -56
  922. package/src/core/init/create_stream_clock.ts +0 -94
  923. package/src/core/stream/utils.ts +0 -97
  924. package/src/parsers/manifest/dash/common/extract_minimum_availability_time_offset.ts +0 -41
  925. package/src/transports/utils/return_parsed_manifest.ts +0 -47
@@ -14,12 +14,14 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import {
18
- Observable,
19
- } from "rxjs";
20
17
  import { IInbandEvent } from "../core/stream";
21
18
  import Manifest, {
22
19
  Adaptation,
20
+ IExposedAdaptation,
21
+ IExposedManifest,
22
+ IExposedPeriod,
23
+ IExposedRepresentation,
24
+ IExposedSegment,
23
25
  IRepresentationFilter,
24
26
  ISegment,
25
27
  ISupplementaryImageTrack,
@@ -30,6 +32,9 @@ import Manifest, {
30
32
  import { IBifThumbnail } from "../parsers/images/bif";
31
33
  import { ILocalManifest } from "../parsers/manifest/local";
32
34
  import { IMetaPlaylist } from "../parsers/manifest/metaplaylist";
35
+ import TaskCanceller, {
36
+ CancellationSignal,
37
+ } from "../utils/task_canceller";
33
38
 
34
39
  /**
35
40
  * Interface returned by any transport implementation.
@@ -49,395 +54,662 @@ export interface ITransportPipelines {
49
54
  /** Functions allowing to load an parse the Manifest for this transport. */
50
55
  manifest : ITransportManifestPipeline;
51
56
  /** Functions allowing to load an parse audio segments. */
52
- audio : ISegmentPipeline<Uint8Array | ArrayBuffer | null,
53
- Uint8Array | ArrayBuffer | null,
57
+ audio : ISegmentPipeline<ILoadedAudioVideoSegmentFormat,
54
58
  Uint8Array | ArrayBuffer | null>;
55
59
  /** Functions allowing to load an parse video segments. */
56
- video : ISegmentPipeline<Uint8Array | ArrayBuffer | null,
57
- Uint8Array | ArrayBuffer | null,
60
+ video : ISegmentPipeline<ILoadedAudioVideoSegmentFormat,
58
61
  Uint8Array | ArrayBuffer | null>;
59
62
  /** Functions allowing to load an parse text (e.g. subtitles) segments. */
60
- text : ISegmentPipeline<Uint8Array | ArrayBuffer | string | null,
61
- null,
62
- ITextTrackSegmentData>;
63
+ text : ISegmentPipeline<ILoadedTextSegmentFormat,
64
+ ITextTrackSegmentData | null>;
63
65
  /** Functions allowing to load an parse image (e.g. thumbnails) segments. */
64
- image : ISegmentPipeline<Uint8Array | ArrayBuffer | null,
65
- null,
66
- IImageTrackSegmentData>;
66
+ image : ISegmentPipeline<ILoadedImageSegmentFormat,
67
+ IImageTrackSegmentData | null>;
67
68
  }
68
69
 
69
70
  /** Functions allowing to load and parse the Manifest. */
70
- export interface ITransportManifestPipeline { resolver? : IManifestResolverFunction;
71
- loader : IManifestLoaderFunction;
72
- parser : IManifestParserFunction; }
73
-
74
- /**
75
- * @deprecated
76
- * "Resolves the Manifest's URL, to obtain its true URL.
77
- * This is a deprecated function which corresponds to an old use case at
78
- * Canal+ where the URL of the Manifest first need to be parsed from a .wsx
79
- * file.
80
- * Thankfully this API should not be used anymore, though to not break
81
- * compatibility, we have to keep it until a v4.x.x release.
82
- *
83
- * @param {Object} x - Object containing the URL used to obtain the real URL of
84
- * the Manifest.
85
- * @returns {Observable.<Object>}
86
- */
87
- export type IManifestResolverFunction =
88
- (x : IManifestLoaderArguments) => Observable<IManifestLoaderArguments>;
71
+ export interface ITransportManifestPipeline {
72
+ /**
73
+ * "Loader" of the Manifest pipeline, allowing to request a Manifest so it can
74
+ * later be parsed by the `parseManifest` function.
75
+ *
76
+ * @param {string|undefined} url - URL of the Manifest we want to load.
77
+ * `undefined` if the Manifest doesn't have an URL linked to it, in which case
78
+ * the Manifest should be loaded through another mean.
79
+ * @param {CancellationSignal} cancellationSignal - Signal which will allow to
80
+ * cancel the loading operation if the Manifest is not needed anymore (for
81
+ * example, if the content has just been stopped).
82
+ * When cancelled, the promise returned by this function will reject with a
83
+ * `CancellationError`.
84
+ * @returns {Promise.<Object>} - Promise emitting the loaded Manifest, that
85
+ * then can be parsed through the `parseManifest` function.
86
+ *
87
+ * Rejects in two cases:
88
+ * - The loading operation has been cancelled through the `cancelSignal`
89
+ * given in argument.
90
+ * In that case, this Promise will reject with a `CancellationError`.
91
+ * - The loading operation failed, most likely due to a request error.
92
+ * In that case, this Promise will reject with the corresponding Error.
93
+ */
94
+ loadManifest : (
95
+ url : string | undefined,
96
+ cancelSignal : CancellationSignal,
97
+ ) => Promise<IRequestedData<ILoadedManifestFormat>>;
89
98
 
90
- /**
91
- * "Loader" of the Manifest pipeline, allowing to request a Manifest so it can
92
- * later be parsed by the `parseManifest` function.
93
- *
94
- * @param {Object} x - Object containing the URL of the Manifest we want to
95
- * load.
96
- * @returns {Observable.<Object>}
97
- */
98
- export type IManifestLoaderFunction =
99
- (x : IManifestLoaderArguments) => Observable<IManifestLoaderEvent>;
99
+ /**
100
+ * "Parser" of the Manifest pipeline, allowing to parse a loaded Manifest so
101
+ * it can be exploited by the rest of the RxPlayer's logic.
102
+ *
103
+ * @param {Object} manifestData - Response obtained from the `loadManifest`
104
+ * function.
105
+ * @param {Object} parserOptions - Various options relative to the parsing
106
+ * operation.
107
+ * @param {Function} onWarnings - Callbacks called:
108
+ * - when minor Manifest parsing errors are found
109
+ * - when `scheduleRequest` rejects on requests this function can do
110
+ * without.
111
+ * @param {CancellationSignal} cancelSignal - Cancellation signal which will
112
+ * allow to abort the parsing operation if you do not want the Manifest
113
+ * anymore.
114
+ *
115
+ * That cancellationSignal can be triggered at any time, such as:
116
+ * - after a warning is received
117
+ * - while a request scheduled through the `scheduleRequest` argument is
118
+ * pending.
119
+ *
120
+ * `parseManifest` will interrupt all operations if the signal has been
121
+ * triggered in one of those scenarios, and will automatically reject with
122
+ * the corresponding `CancellationError` instance.
123
+ * @param {Function} scheduleRequest - Allows `parseManifest` to schedule
124
+ * network requests, for example to fetch sub-parts of the Manifest or
125
+ * supplementary resources we can only know of at Manifest parsing time.
126
+ *
127
+ * All requests scheduled through `scheduleRequest` should abort (and the
128
+ * corresponding Promise reject a `CancellationError`) when/if `cancelSignal`
129
+ * is triggered.
130
+ *
131
+ * If a request scheduled through `scheduleRequest` rejects with an error:
132
+ * - either the error was due to a cancellation, in which case
133
+ * `parseManifest` should reject the same error immediately.
134
+ * - either the requested resource was mandatory to parse the Manifest
135
+ * in which case `parseManifest` will reject with the same error.
136
+ * - either the parser can make up for that error, in which case it will
137
+ * just be emitted as a warning and `parseManifest` will continue its
138
+ * operations.
139
+ * @returns {Object | Promise.<Object>} - Returns directly the Manifest data
140
+ * if the parsing can be performed synchronously or through a Promise if it
141
+ * needs to perform network requests first through the `scheduleRequest`
142
+ * function.
143
+ *
144
+ * Throws if an error happens synchronously and rejects if it happens
145
+ * asynchronously.
146
+ *
147
+ * If this error is due to a failed request performed through the
148
+ * `scheduleRequest` argument, then the rejected error should be the same one
149
+ * than the one rejected by `scheduleRequest`.
150
+ *
151
+ * If this error is due to a cancellation instead (indicated through the
152
+ * `cancelSignal` argument), then the rejected error should be the
153
+ * `CancellationError` instance instead.
154
+ */
155
+ parseManifest : (
156
+ manifestData : IRequestedData<unknown>,
157
+ parserOptions : IManifestParserOptions,
158
+ onWarnings : (warnings : Error[]) => void,
159
+ cancelSignal : CancellationSignal,
160
+ scheduleRequest : IManifestParserRequestScheduler
161
+ ) => IManifestParserResult |
162
+ Promise<IManifestParserResult>;
100
163
 
101
- /**
102
- * "Parser" of the Manifest pipeline, allowing to parse a loaded Manifest so
103
- * it can be exploited by the rest of the RxPlayer's logic.
104
- *
105
- * @param {Object} x
106
- * @returns {Observable.<Object>}
107
- */
108
- export type IManifestParserFunction = (
109
- x : IManifestParserArguments
110
- ) => Observable< IManifestParserResponseEvent |
111
- IManifestParserWarningEvent>;
164
+ /**
165
+ * @deprecated
166
+ * "Resolves the Manifest's URL, to obtain its true URL.
167
+ * This is a deprecated function which corresponds to an old use case at
168
+ * Canal+ where the URL of the Manifest first need to be parsed from a .wsx
169
+ * file.
170
+ * Thankfully this API should not be used anymore, though to not break
171
+ * compatibility, we have to keep it until a v4.x.x release.
172
+ *
173
+ * @param {string | undefined} url - URL used to obtain the real URL of the
174
+ * Manifest.
175
+ * @param {CancellationSignal} cancelSignal - Cancellation signal which will
176
+ * allow to abort the resolving operation if you do not want the Manifest
177
+ * anymore.
178
+ * When cancelled, the promise returned by this function will reject with a
179
+ * `CancellationError`.
180
+ * @returns {Promise.<string|undefined>} - Promise emitting the "real" URL of
181
+ * the Manifest, that should be loaded by the `loadManifest` function.
182
+ * `undefined` if the URL is either unknown or inexistant.
183
+ *
184
+ * Rejects in two cases:
185
+ *
186
+ * 1. The resolving operation has been aborted through the `cancelSignal`
187
+ * given in argument.
188
+ * In that case, this Promise will reject a `CancellationError`.
189
+ *
190
+ * 2. The resolving operation failed, most likely due to a request error.
191
+ * In that case, this Promise will reject the corresponding Error.
192
+ */
193
+ resolveManifestUrl? : (
194
+ url : string | undefined,
195
+ cancelSignal : CancellationSignal,
196
+ ) => Promise<string | undefined>;
197
+ }
112
198
 
113
199
  /** Functions allowing to load and parse segments of any type. */
114
200
  export interface ISegmentPipeline<
115
- LoadedFormat,
116
- ParsedInitDataFormat,
117
- ParsedMediaDataFormat,
201
+ TLoadedFormat,
202
+ TParsedSegmentDataFormat,
118
203
  > {
119
- loader : ISegmentLoader<LoadedFormat>;
120
- parser : ISegmentParser<LoadedFormat,
121
- ParsedInitDataFormat,
122
- ParsedMediaDataFormat>;
204
+ loadSegment : ISegmentLoader<TLoadedFormat>;
205
+ parseSegment : ISegmentParser<TLoadedFormat,
206
+ TParsedSegmentDataFormat>;
123
207
  }
124
208
 
125
209
  /**
126
210
  * Segment loader function, allowing to load a segment of any type.
127
- * @param {Object} x
128
- * @returns {Observable.<Object>}
211
+ * @param {stop|null} url - URL at which the segment should be downloaded.
212
+ * `null` if we do not have an URL (in which case the segment should be loaded
213
+ * through other means, such as information taken from the segment's content).
214
+ * @param {Object} content - Content linked to the wanted segment.
215
+ * @param {CancellationSignal} cancelSignal - Cancellation signal which will
216
+ * allow to cancel the loading operation if the segment is not needed anymore.
217
+ *
218
+ * When cancelled, this loader should stop any pending operation (such as an
219
+ * HTTP request) and the Promise returned should reject immediately with a
220
+ * `CancellationError`, generated through this CancellationSignal object.
221
+ * @param {Object} callbacks - Callbacks called on various loader events.
222
+ * @returns {Promise.<Object>} - Promise resolving when it has finished loading
223
+ * the segment.
129
224
  */
130
- export type ISegmentLoader<LoadedFormat> = (
131
- x : ISegmentLoaderArguments
132
- ) => Observable<ISegmentLoaderEvent<LoadedFormat>>;
225
+ export type ISegmentLoader<TLoadedFormat> = (
226
+ url : string | null,
227
+ content : ISegmentContext,
228
+ cancelSignal : CancellationSignal,
229
+ callbacks : ISegmentLoaderCallbacks<TLoadedFormat>
230
+ ) => Promise<ISegmentLoaderResultSegmentCreated<TLoadedFormat> |
231
+ ISegmentLoaderResultSegmentLoaded<TLoadedFormat> |
232
+ ISegmentLoaderResultChunkedComplete>;
133
233
 
134
234
  /**
135
- * Segment parser function, allowing to parse a segment of any type.
136
- * @param {Object} x
137
- * @returns {Observable.<Object>}
235
+ * Segment parser function, allowing to parse a chunk (which may be a sub-part
236
+ * of a segment) of any type.
237
+ *
238
+ * This function will throw if it encounters any error it cannot recover from.
138
239
  */
139
240
  export type ISegmentParser<
140
- LoadedFormat,
141
- ParsedInitDataFormat,
142
- ParsedMediaDataFormat
241
+ TLoadedFormat,
242
+ TParsedSegmentDataFormat
143
243
  > = (
144
- x : ISegmentParserArguments< LoadedFormat >
145
- ) => Observable<ISegmentParserInitSegment<ParsedInitDataFormat> |
146
- ISegmentParserSegment<ParsedMediaDataFormat>>;
147
-
148
- /** Arguments for the loader of the manifest pipeline. */
149
- export interface IManifestLoaderArguments {
150
- /**
151
- * URL of the Manifest we want to load.
152
- * `undefined` if the Manifest doesn't have an URL linked to it, in which
153
- * case the Manifest should be loaded from another mean.
154
- */
155
- url : string | undefined;
156
- }
157
-
158
- /** Arguments for the loader of the segment pipelines. */
159
- export interface ISegmentLoaderArguments {
160
- /** Manifest object related to this segment. */
161
- manifest : Manifest;
162
- /** Period object related to this segment. */
163
- period : Period;
164
- /** Adaptation object related to this segment. */
165
- adaptation : Adaptation;
166
- /** Representation Object related to this segment. */
167
- representation : Representation;
168
- /** Segment we want to load. */
169
- segment : ISegment;
244
+ /** Attributes of the corresponding loader's response. */
245
+ loadedSegment : {
246
+ /** The loaded segment data. */
247
+ data : TLoadedFormat;
248
+ /**
249
+ * If `true`,`data` is only a "chunk" of the whole segment (which potentially
250
+ * will contain multiple chunks).
251
+ * If `false`, `data` is the data for the whole segment.
252
+ */
253
+ isChunked : boolean;
254
+ },
255
+ /** Context about the wanted segment. */
256
+ content : ISegmentContext,
170
257
  /**
171
- * URL at which the segment should be downloaded.
172
- * `null` if we do not have an URL (in which case the segment should be loaded
173
- * through an other mean).
258
+ * "Timescale" obtained from parsing the wanted representation's initialization
259
+ * segment.
260
+ *
261
+ * `undefined` if either no such `timescale` has been parsed yet or if this
262
+ * value doesn't exist for the wanted segment.
263
+ *
264
+ * This value can be useful when parsing the loaded segment's data.
174
265
  */
175
- url : string | null;
176
- }
177
-
178
- /** Payload of a "data-loaded" event. */
179
- export interface ILoaderDataLoadedValue<T> {
180
- /** The loaded response data. */
181
- responseData : T;
182
- /** Duration the request took to be performed, in seconds. */
183
- duration : number | undefined;
266
+ initTimescale : number | undefined
267
+ ) =>
184
268
  /**
185
- * "Real" URL (post-redirection) at which the data can be loaded.
269
+ * The parsed data.
186
270
  *
187
- * Note that this doesn't always apply e.g. some data might need multiple
188
- * URLs to be fetched, some other might need to fetch no URL.
189
- * This property should only be set when a unique URL is sufficient to
190
- * retrieve the whole data.
271
+ * Can be of two types:
272
+ * - `ISegmentParserParsedInitChunk`: When the parsed chunk was part of an
273
+ * initialization segment.
274
+ * Such segments only serve to initialize the decoder and do not contain
275
+ * any decodable media data.
276
+ * - `ISegmentParserParsedMediaChunk`: When the parsed chunk was part of a
277
+ * media segment.
278
+ * Such segments generally contain decodable media data.
191
279
  */
192
- url? : string;
280
+ ISegmentParserParsedInitChunk<TParsedSegmentDataFormat> |
281
+ ISegmentParserParsedMediaChunk<TParsedSegmentDataFormat>;
282
+
283
+ export interface IManifestParserOptions {
193
284
  /**
194
- * Time at which the request began in terms of `performance.now`.
195
- * If fetching the corresponding data necessitated to perform multiple
196
- * requests, this time corresponds to the first request made.
285
+ * If set, offset to add to `performance.now()` to obtain the current
286
+ * server's time.
197
287
  */
198
- sendingTime? : number;
288
+ externalClockOffset : number | undefined;
289
+ /** Original URL used for the full version of the Manifest. */
290
+ originalUrl : string | undefined;
291
+ /** The previous value of the Manifest (when updating). */
292
+ previousManifest : Manifest | null;
199
293
  /**
200
- * Time at which the request ended in terms of `performance.now`.
201
- * If fetching the corresponding data necessitated to perform multiple
202
- * requests, this time corresponds to the last request to end.
294
+ * If set to `true`, the Manifest parser can perform advanced optimizations
295
+ * to speed-up the parsing process. Those optimizations might lead to a
296
+ * de-synchronization with what is actually on the server, hence the "unsafe"
297
+ * part.
298
+ * To use with moderation and only when needed.
203
299
  */
204
- receivedTime? : number;
205
- /** Size in bytes of the loaded data. `undefined` if we don't know. */
206
- size : number | undefined;
300
+ unsafeMode : boolean;
207
301
  }
208
302
 
209
- /** Form that can take a loaded Manifest once loaded. */
210
- export type ILoadedManifest = Document |
211
- ArrayBuffer |
212
- string |
213
- IMetaPlaylist |
214
- ILocalManifest |
215
- Manifest;
216
-
217
- /** Event emitted by a Manifest loader when the Manifest is fully available. */
218
- export interface IManifestLoaderDataLoadedEvent {
219
- type : "data-loaded";
220
- value : ILoaderDataLoadedValue<ILoadedManifest>;
221
- }
303
+ export interface IManifestParserCallbacks {
304
+ onWarning : (warning : Error) => void;
222
305
 
223
- /** Event emitted by a segment loader when the data has been fully loaded. */
224
- export interface ISegmentLoaderDataLoadedEvent<T> { type : "data-loaded";
225
- value : ILoaderDataLoadedValue<T>; }
306
+ /**
307
+ * @param {Function} performRequest - Function performing the request
308
+ * @param {TaskCanceller} canceller - Interface allowing to cancel the request
309
+ * performed by the `performRequest` argument.
310
+ * @returns {Promise.<Object>}
311
+ */
312
+ scheduleRequest : (
313
+ performRequest : () => Promise< IRequestedData< Document | string > >,
314
+ canceller : TaskCanceller
315
+ ) => Promise< IRequestedData< Document | string > >;
316
+ }
226
317
 
227
318
  /**
228
- * Event emitted by a segment loader when the data is available without needing
229
- * to perform any request.
319
+ * Function allowing a Manifest parser to perform a request needed for the
320
+ * parsing of the Manifest.
230
321
  *
231
- * Such data are for example directly generated from already-available data,
232
- * such as properties of a Manifest.
233
- */
234
- export interface ISegmentLoaderDataCreatedEvent<T> { type : "data-created";
235
- value : { responseData : T }; }
236
-
237
- /**
238
- * Event emitted by a segment loader when new information on a pending request
239
- * is available.
322
+ * @param {Function} performRequest - Function performing the wanted request.
323
+ * Note that this function might be called multiple times depending on the error
324
+ * obtained at the last call.
325
+ *
326
+ * Should resolve with the requested data on success.
240
327
  *
241
- * Note that this event is not mandatory.
242
- * It will be used to allow to communicate network metrics to the rest of the
243
- * player, like to adapt the quality of the content depending on the user's
244
- * bandwidth.
328
+ * Rejects in two cases:
329
+ * - The request has been cancelled through the `canceller` given.
330
+ * In that case, this Promise will reject with a `CancellationError`.
331
+ *
332
+ * - The request failed.
333
+ * In that case, this Promise will reject with the corresponding Error.
334
+ *
335
+ * @param {TaskCanceller} canceller - Interface allowing to cancel the request
336
+ * performed by the `performRequest` argument.
337
+ *
338
+ * When triggered, the request should be aborted and the Promise returned by
339
+ * `performRequest` should reject the corresponding `CancellationError`.
340
+ *
341
+ * The Promise returned by that function should in consequence also reject the
342
+ * same `CancellationError`.
343
+ *
344
+ * @returns {Promise.<Object>} - Promise resolving with the requested data on
345
+ * success.
346
+ *
347
+ * Rejects in two cases:
348
+ * - The request has been cancelled through the `canceller` given.
349
+ * In that case, this Promise will reject with a `CancellationError`.
350
+ *
351
+ * - All the attempts to perform the request failed.
352
+ * In that case, this Promise will reject with the Error corresponding to
353
+ * the last performed request.
245
354
  */
246
- export interface ILoaderProgressEvent {
247
- type : "progress";
248
- value : {
249
- /** Time since the beginning of the request so far, in seconds. */
250
- duration : number;
251
- /** Size of the data already downloaded, in bytes. */
252
- size : number;
253
- /** Size of whole data to download (data already-loaded included), in bytes. */
254
- totalSize? : number;
255
- };
256
- }
257
-
258
- /** Event emitted by a segment loader when a chunk of the response is available. */
259
- export interface ISegmentLoaderDataChunkEvent {
260
- type : "data-chunk";
261
- value : {
262
- /** Loaded chunk, as raw data. */
263
- responseData: ArrayBuffer |
264
- Uint8Array;
265
- };
355
+ export type IManifestParserRequestScheduler =
356
+ (
357
+ performRequest : () => Promise< IRequestedData< ILoadedManifestFormat > >
358
+ ) => Promise< IRequestedData< ILoadedManifestFormat > >;
359
+
360
+ // Either the Manifest can be parsed directly, in which case a
361
+ // IManifestParserResult is returned, either the Manifest parser needs to
362
+ // perform supplementary requests first
363
+
364
+ /** Event emitted when a Manifest has been parsed by a Manifest parser. */
365
+ export interface IManifestParserResult {
366
+ /** The parsed Manifest Object itself. */
367
+ manifest : Manifest;
368
+ /**
369
+ * "Real" URL (post-redirection) at which the Manifest can be refreshed.
370
+ *
371
+ * Note that this doesn't always apply e.g. some Manifest might need multiple
372
+ * URLs to be fetched, some other might need to fetch no URL.
373
+ * This property should only be set when a unique URL is sufficient to
374
+ * retrieve the whole data.
375
+ */
376
+ url? : string | undefined;
266
377
  }
267
378
 
268
379
  /**
269
- * Event emitted by segment loaders when all data from a segment has been
270
- * communicated through `ISegmentLoaderDataChunkEvent` events.
380
+ * Allow the parser to ask for loading supplementary ressources while still
381
+ * profiting from the same retries and error management than the loader.
271
382
  */
272
- export interface ISegmentLoaderDataChunkCompleteEvent {
273
- type : "data-chunk-complete";
274
- value : {
275
- /** Duration the request took to be performed, in seconds. */
276
- duration : number | undefined;
277
- /**
278
- * "Real" URL (post-redirection) at which the segment was loaded.
279
- *
280
- * Note that this doesn't always apply e.g. some segment might need multiple
281
- * URLs to be fetched, some other might need to fetch no URL.
282
- * This property should only be set when a unique URL is sufficient to
283
- * retrieve the whole data.
284
- */
285
- url? : string;
286
- /**
287
- * Time at which the request began in terms of `performance.now`.
288
- * If fetching the corresponding data necessitated to perform multiple
289
- * requests, this time corresponds to the first request made.
290
- */
291
- sendingTime? : number;
292
- /**
293
- * Time at which the request ended in terms of `performance.now`.
294
- * If fetching the corresponding data necessitated to perform multiple
295
- * requests, this time corresponds to the last request to end.
296
- */
297
- receivedTime? : number;
298
- /** Size in bytes of the loaded data. `undefined` if we don't know. */
299
- size : number | undefined;
300
- };
383
+ export interface IManifestParserRequestNeeded {
384
+ resultType : "request-needed";
385
+ performRequest : IManifestParserRequest;
301
386
  }
302
387
 
303
388
  /**
304
- * Event sent by a segment loader when the corresponding segment is available
305
- * chunk per chunk.
389
+ * Time information for a single segment.
390
+ * Those variables expose the best guess we have on the effective duration and
391
+ * starting time that the corresponding segment should have at decoding time.
306
392
  */
307
- export type ISegmentLoaderChunkEvent = ISegmentLoaderDataChunkEvent |
308
- ISegmentLoaderDataChunkCompleteEvent;
309
-
310
- /** Event emitted by a Manifest loader. */
311
- export type IManifestLoaderEvent = IManifestLoaderDataLoadedEvent;
312
-
313
- /** Event emitted by a segment loader. */
314
- export type ISegmentLoaderEvent<T> = ILoaderProgressEvent |
315
- ISegmentLoaderChunkEvent |
316
- ISegmentLoaderDataLoadedEvent<T> |
317
- ISegmentLoaderDataCreatedEvent<T>;
318
-
319
- /** Arguments given to the `parser` function of the Manifest pipeline. */
320
- export interface IManifestParserArguments {
321
- /** Response obtained from the loader. */
322
- response : ILoaderDataLoadedValue<unknown>;
323
- /** Original URL used for the full version of the Manifest. */
324
- url? : string;
325
- /**
326
- * If set, offset to add to `performance.now()` to obtain the current
327
- * server's time.
328
- */
329
- externalClockOffset? : number;
330
- /** The previous value of the Manifest (when updating). */
331
- previousManifest : Manifest | null;
393
+ export interface IChunkTimeInfo {
332
394
  /**
333
- * Allow the parser to ask for loading supplementary ressources while still
334
- * profiting from the same retries and error management than the loader.
395
+ * Difference between the latest and the earliest presentation time
396
+ * available in that chunk, in seconds.
397
+ *
398
+ * If multiple chunks are present in a single segment (e.g. low-latency CMAF
399
+ * chunks, this is only the duration of the current chunk).
400
+ *
401
+ * Either `undefined` or set to `0` for an initialization segment.
335
402
  */
336
- scheduleRequest : (request : () =>
337
- Observable< ILoaderDataLoadedValue< string | Document | ArrayBuffer > >) =>
338
- Observable< ILoaderDataLoadedValue< string | Document | ArrayBuffer > >;
403
+ duration : number | undefined;
404
+ /** Earliest presentation time available in that segment, in seconds. */
405
+ time : number;
406
+ }
407
+
408
+ /** Text track segment data, once parsed. */
409
+ export interface ITextTrackSegmentData {
410
+ /** The text track data, in the format indicated in `type`. */
411
+ data : string;
412
+ /** The format of `data` (examples: "ttml", "srt" or "vtt") */
413
+ type : string;
339
414
  /**
340
- * If set to `true`, the Manifest parser can perform advanced optimizations
341
- * to speed-up the parsing process. Those optimizations might lead to a
342
- * de-synchronization with what is actually on the server, hence the "unsafe"
343
- * part.
344
- * To use with moderation and only when needed.
415
+ * Language in which the text track is, as a language code.
416
+ * This is mostly needed for "sami" subtitles, to know which cues can / should
417
+ * be parsed.
345
418
  */
346
- unsafeMode : boolean;
419
+ language? : string | undefined;
420
+ /** start time from which the segment apply, in seconds. */
421
+ start? : number | undefined;
422
+ /** end time until which the segment apply, in seconds. */
423
+ end? : number | undefined;
347
424
  }
348
425
 
349
- /** Arguments given to the `parser` function of the segment pipeline. */
350
- export interface ISegmentParserArguments<T> {
351
- /** Attributes of the corresponding loader's response. */
352
- response : {
353
- /** The loaded data. */
354
- data: T;
426
+ /** Format under which image data is decodable by the RxPlayer. */
427
+ export interface IImageTrackSegmentData {
428
+ data : IBifThumbnail[]; // image track data, in the given type
429
+ end : number; // end time time until which the segment apply
430
+ start : number; // start time from which the segment apply
431
+ timescale : number; // timescale to convert the start and end into seconds
432
+ type : string; // the type of the data (example: "bif")
433
+ }
434
+
435
+ export type IManifestParserRequest1 = (
436
+ (
355
437
  /**
356
- * If `true`,`data` is only a "chunk" of the whole segment (which potentially
357
- * will contain multiple chunks).
358
- * If `false`, `data` is the data for the whole segment.
438
+ * Cancellation signal which will allow to cancel the request if the
439
+ * Manifest is not needed anymore.
440
+ *
441
+ * When cancelled, this parser should stop any pending operation (such as an
442
+ * HTTP request) and the Promise returned should reject immediately after with
443
+ * a `CancellationError`.
359
444
  */
360
- isChunked : boolean;
361
- };
445
+ cancelSignal : CancellationSignal,
446
+ ) => Promise< IRequestedData< Document | string > >
447
+ );
448
+ export type IManifestParserRequest = (
362
449
  /**
363
- * "Timescale" obtained from parsing the wanted representation's initialization
450
+ * Cancellation signal which will allow to cancel the request if the
451
+ * Manifest is not needed anymore.
452
+ *
453
+ * When cancelled, this parser should stop any pending operation (such as an
454
+ * HTTP request) and the Promise returned should reject immediately after with
455
+ * a `CancellationError`.
456
+ */
457
+ cancelSignal : CancellationSignal,
458
+ ) => Promise< IManifestParserResult |
459
+ IManifestParserRequestNeeded >;
460
+
461
+ export interface ITransportAudioVideoSegmentPipeline {
462
+ loadSegment : ISegmentLoader<ILoadedAudioVideoSegmentFormat>;
463
+ parseSegment : ISegmentParser<ILoadedAudioVideoSegmentFormat,
464
+ Uint8Array | ArrayBuffer | null>;
465
+ }
466
+
467
+ export interface ITransportTextSegmentPipeline {
468
+ loadSegment : ISegmentLoader<ILoadedTextSegmentFormat>;
469
+ parseSegment : ISegmentParser<ILoadedTextSegmentFormat,
470
+ ITextTrackSegmentData | null>;
471
+ }
472
+
473
+ export interface ITransportImageSegmentPipeline {
474
+ loadSegment : ISegmentLoader<ILoadedImageSegmentFormat>;
475
+ parseSegment : ISegmentParser<ILoadedImageSegmentFormat,
476
+ IImageTrackSegmentData | null>;
477
+ }
478
+
479
+ export type ITransportSegmentPipeline = ITransportAudioVideoSegmentPipeline |
480
+ ITransportTextSegmentPipeline |
481
+ ITransportImageSegmentPipeline;
482
+
483
+ export type ITransportPipeline = ITransportManifestPipeline |
484
+ ITransportSegmentPipeline;
485
+
486
+ interface IServerSyncInfos { serverTimestamp : number;
487
+ clientTime : number; }
488
+
489
+ export interface ITransportOptions {
490
+ aggressiveMode? : boolean | undefined;
491
+ checkMediaSegmentIntegrity? : boolean | undefined;
492
+ lowLatencyMode : boolean;
493
+ manifestLoader?: ICustomManifestLoader | undefined;
494
+ manifestUpdateUrl? : string | undefined;
495
+ referenceDateTime? : number | undefined;
496
+ representationFilter? : IRepresentationFilter | undefined;
497
+ segmentLoader? : ICustomSegmentLoader | undefined;
498
+ serverSyncInfos? : IServerSyncInfos | undefined;
499
+ /* eslint-disable import/no-deprecated */
500
+ supplementaryImageTracks? : ISupplementaryImageTrack[] | undefined;
501
+ supplementaryTextTracks? : ISupplementaryTextTrack[] | undefined;
502
+ /* eslint-enable import/no-deprecated */
503
+
504
+ __priv_patchLastSegmentInSidx? : boolean | undefined;
505
+ }
506
+
507
+ export type ICustomSegmentLoader = (
508
+ // first argument: infos on the segment
509
+ infos : { url : string;
510
+ manifest : IExposedManifest;
511
+ period : IExposedPeriod;
512
+ adaptation : IExposedAdaptation;
513
+ representation : IExposedRepresentation;
514
+ segment : IExposedSegment; },
515
+
516
+ // second argument: callbacks
517
+ callbacks : { resolve : (rArgs : { data : ArrayBuffer | Uint8Array;
518
+ sendingTime? : number | undefined;
519
+ receivingTime? : number | undefined;
520
+ size? : number | undefined;
521
+ duration? : number | undefined; }) => void;
522
+
523
+ reject : (err? : unknown) => void;
524
+ fallback : () => void;
525
+ progress : (
526
+ info : { duration : number;
527
+ size : number;
528
+ totalSize? : number | undefined; }
529
+ ) => void;
530
+ }
531
+ ) =>
532
+ // returns either the aborting callback or nothing
533
+ (() => void)|void;
534
+
535
+ export type ICustomManifestLoader = (
536
+ // first argument: url of the manifest
537
+ url : string | undefined,
538
+
539
+ // second argument: callbacks
540
+ callbacks : { resolve : (args : { data : ILoadedManifestFormat;
541
+ url? : string | undefined;
542
+ sendingTime? : number | undefined;
543
+ receivingTime? : number | undefined;
544
+ size? : number | undefined;
545
+ duration? : number | undefined; })
546
+ => void;
547
+
548
+ reject : (err? : Error) => void;
549
+ fallback : () => void; }
550
+ ) =>
551
+ // returns either the aborting callback or nothing
552
+ (() => void)|void;
553
+
554
+ export interface ISegmentContext {
555
+ /** Manifest object related to this segment. */
556
+ manifest : Manifest;
557
+ /** Period object related to this segment. */
558
+ period : Period;
559
+ /** Adaptation object related to this segment. */
560
+ adaptation : Adaptation;
561
+ /** Representation Object related to this segment. */
562
+ representation : Representation;
563
+ /** Segment we want to load. */
564
+ segment : ISegment;
565
+ }
566
+
567
+ export interface ISegmentLoaderCallbacks<T> {
568
+ /**
569
+ * Callback called when new progress information on a segment request is
570
+ * available.
571
+ * The information emitted though this callback can be used to gather
572
+ * metrics on a current, un-terminated, request.
573
+ */
574
+ onProgress : (info : ISegmentLoadingProgressInformation) => void;
575
+ /**
576
+ * Callback called when a decodable sub-part of the segment is available.
577
+ *
578
+ * Note that this callback is only called if the loader decides to load the
579
+ * wanted segment in a "chunk" mode, that is, when the segment is loaded
580
+ * decodable chunk by decodable chunk, each being a subpart of this same
364
581
  * segment.
365
582
  *
366
- * `undefined` if either no such `timescale` has been parsed yet or if this
367
- * value doesn't exist for the wanted segment.
583
+ * In that case, this callback might be called multiple times for subsequent
584
+ * decodable chunks until the Promise resolves.
368
585
  *
369
- * This value can be useful when parsing the loaded segment's data.
586
+ * Not all segments are loaded in a "chunk" mode.
587
+ * The alternatives to this mode are:
588
+ *
589
+ * - when the segment is created locally without needing to perform any
590
+ * request.
591
+ *
592
+ * - when the segment is loaded as a whole.
593
+ *
594
+ * In both of those other cases, the segment data can be retrieved in the
595
+ * Promise returned by the segment loader instead.
370
596
  */
371
- initTimescale? : number;
372
- /** Context about the wanted segment. */
373
- content : {
374
- /** Manifest object related to this segment. */
375
- manifest : Manifest;
376
- /** Period object related to this segment. */
377
- period : Period;
378
- /** Adaptation object related to this segment. */
379
- adaptation : Adaptation;
380
- /** Representation Object related to this segment. */
381
- representation : Representation;
382
- /** Segment we want to parse. */
383
- segment : ISegment;
384
- };
597
+ onNewChunk : (data : T) => void;
385
598
  }
386
599
 
387
- /** Event emitted when a Manifest object has been parsed. */
388
- export interface IManifestParserResponseEvent {
389
- type : "parsed";
390
- value: {
391
- /** The parsed Manifest Object itself. */
392
- manifest : Manifest;
393
- /**
394
- * "Real" URL (post-redirection) at which the Manifest can be refreshed.
395
- *
396
- * Note that this doesn't always apply e.g. some Manifest might need multiple
397
- * URLs to be fetched, some other might need to fetch no URL.
398
- * This property should only be set when a unique URL is sufficient to
399
- * retrieve the whole data.
400
- */
401
- url? : string;
402
- };
600
+ /** Information related to a pending Segment request progressing. */
601
+ export interface ISegmentLoadingProgressInformation {
602
+ /** Time since the beginning of the request so far, in seconds. */
603
+ duration : number;
604
+ /** Size of the data already downloaded, in bytes. */
605
+ size : number;
606
+ /** Size of whole data to download (data already-loaded included), in bytes. */
607
+ totalSize? : number | undefined;
403
608
  }
404
609
 
405
- /** Event emitted when a minor error was encountered when parsing the Manifest. */
406
- export interface IManifestParserWarningEvent {
407
- type : "warning";
408
- /** Error describing the minor parsing error encountered. */
409
- value : Error;
610
+ /**
611
+ * Result returned by a segment loader when a segment has been loaded in a
612
+ * "chunk" mode.
613
+ * In that mode, the segment has been divided into multiple decodable chunks
614
+ * each sent in order through the `onNewChunk` callback of the corresponding
615
+ * loader.
616
+ */
617
+ export interface ISegmentLoaderResultChunkedComplete {
618
+ resultType : "chunk-complete";
619
+ /** Information on the request performed. */
620
+ resultData : IChunkCompleteInformation;
410
621
  }
411
622
 
412
623
  /**
413
- * Time information for a single segment.
414
- * Those variables expose the best guess we have on the effective duration and
415
- * starting time that the corresponding segment should have at decoding time.
624
+ * Result returned by a segment loader when a segment has been loaded
625
+ * by performing a request.
416
626
  */
417
- export interface IChunkTimeInfo {
627
+ export interface ISegmentLoaderResultSegmentLoaded<T> {
628
+ resultType : "segment-loaded";
629
+ /** Segment data and information on the request. */
630
+ resultData : IRequestedData<T>;
631
+ }
632
+
633
+ /**
634
+ * Result returned by a segment loader when a segment has been fully
635
+ * created locally and thus did not depend on a request.
636
+ * TODO merge with ISegmentLoaderResultSegmentLoaded?
637
+ */
638
+ export interface ISegmentLoaderResultSegmentCreated<T> {
639
+ resultType : "segment-created";
640
+ /** The data iself. */
641
+ resultData : T;
642
+ }
643
+
644
+ /** Data emitted in a `ISegmentLoaderResultChunkedComplete`. */
645
+ export interface IChunkCompleteInformation {
646
+ /** Duration the request took to be performed, in seconds. */
647
+ requestDuration : number | undefined;
418
648
  /**
419
- * Difference between the latest and the earliest presentation time
420
- * available in that segment, in seconds.
649
+ * "Real" URL (post-redirection) at which the segment was loaded.
421
650
  *
422
- * Either `undefined` or set to `0` for an initialization segment.
651
+ * Note that this doesn't always apply e.g. some segment might need multiple
652
+ * URLs to be fetched, some other might need to fetch no URL.
653
+ * This property should only be set when a unique URL is sufficient to
654
+ * retrieve the whole data.
423
655
  */
424
- duration : number | undefined;
425
- /** Earliest presentation time available in that segment, in seconds. */
426
- time : number;
656
+ url? : string | undefined;
657
+ /**
658
+ * Time at which the request began in terms of `performance.now`.
659
+ * If fetching the corresponding data necessitated to perform multiple
660
+ * requests, this time corresponds to the first request made.
661
+ */
662
+ sendingTime? : number | undefined;
663
+ /**
664
+ * Time at which the request ended in terms of `performance.now`.
665
+ * If fetching the corresponding data necessitated to perform multiple
666
+ * requests, this time corresponds to the last request to end.
667
+ */
668
+ receivedTime? : number | undefined;
669
+ /** Size in bytes of the loaded data. `undefined` if we don't know. */
670
+ size : number | undefined;
427
671
  }
428
672
 
429
- /** Payload sent when an initialization segment has been parsed. */
430
- export interface ISegmentParserParsedInitSegment<T> {
673
+ /** Format of a loaded Manifest before parsing. */
674
+ export type ILoadedManifestFormat = Document |
675
+ string |
676
+ ArrayBuffer |
677
+ IMetaPlaylist |
678
+ ILocalManifest |
679
+ Manifest;
680
+
681
+ /** Format of a loaded audio and video segment before parsing. */
682
+ export type ILoadedAudioVideoSegmentFormat = Uint8Array |
683
+ ArrayBuffer |
684
+ null;
685
+
686
+ /** Format of a loaded text segment before parsing. */
687
+ export type ILoadedTextSegmentFormat = Uint8Array |
688
+ ArrayBuffer |
689
+ string |
690
+ null;
691
+
692
+ /** Format of a loaded image segment before parsing. */
693
+ export type ILoadedImageSegmentFormat = Uint8Array |
694
+ ArrayBuffer |
695
+ null;
696
+
697
+ /**
698
+ * Result returned by a segment parser when it parsed a chunk from an init
699
+ * segment (which does not contain media data).
700
+ */
701
+ export interface ISegmentParserParsedInitChunk<DataType> {
702
+ segmentType : "init";
431
703
  /**
432
704
  * Initialization segment that can be directly pushed to the corresponding
433
705
  * buffer.
434
706
  */
435
- initializationData : T | null;
707
+ initializationData : DataType | null;
436
708
  /**
437
709
  * Timescale metadata found inside this initialization segment.
438
710
  * That timescale might be useful when parsing further merdia segments.
439
711
  */
440
- initTimescale? : number;
712
+ initTimescale? : number | undefined;
441
713
  /**
442
714
  * If set to `true`, some protection information has been found in this
443
715
  * initialization segment and lead the corresponding `Representation`
@@ -452,34 +724,51 @@ export interface ISegmentParserParsedInitSegment<T> {
452
724
  protectionDataUpdate : boolean;
453
725
  }
454
726
 
455
- /** Payload sent when an media segment has been parsed. */
456
- export interface ISegmentParserParsedSegment<T> {
457
- /** Data to decode. */
458
- chunkData : T | null;
459
- /** Time information about the segment. */
727
+ /**
728
+ * Result returned by a segment parser when it parsed a chunk from a media
729
+ * segment (which contains media data, unlike an initialization segment).
730
+ */
731
+ export interface ISegmentParserParsedMediaChunk<DataType> {
732
+ segmentType : "media";
733
+ /**
734
+ * Parsed chunk of data that can be decoded.
735
+ * `null` if no data was parsed.
736
+ */
737
+ chunkData : DataType | null;
738
+ /**
739
+ * Time information on this parsed chunk.
740
+ * `null` if unknown.
741
+ */
460
742
  chunkInfos : IChunkTimeInfo | null;
461
743
  /**
462
- * Time offset, in seconds, to add to the absolute timed data defined in
744
+ * time offset, in seconds, to add to the absolute timed data defined in
463
745
  * `chunkData` to obtain the "real" wanted effective time.
464
746
  *
465
747
  * For example:
466
- * If `chunkData` announce that the segment begins at 32 seconds, and
467
- * `chunkOffset` equals to `4`, then the segment should really begin at 36
468
- * seconds (32 + 4).
748
+ * If `chunkData` announces (when parsed by the demuxer or decoder) that the
749
+ * segment begins at 32 seconds, and `chunkOffset` equals to `4`, then the
750
+ * segment should really begin at 36 seconds (32 + 4).
469
751
  *
470
752
  * Note that `chunkInfos` needs not to be offseted as it should already
471
753
  * contain the correct time information.
472
754
  */
473
755
  chunkOffset : number;
474
756
  /**
475
- * Start and end windows at which this segment applies (part of the segment
476
- * respectively before and after that time will be ignored).
757
+ * start and end windows for the segment (part of the chunk respectively
758
+ * before and after that time will be ignored).
759
+ * `undefined` when their is no such limitation.
477
760
  */
478
761
  appendWindow : [ number | undefined,
479
762
  number | undefined ];
480
- /** Inband events parsed from segment data. */
481
- inbandEvents? : IInbandEvent[];
482
- /** Tells if the result of the parsing shows that the manifest should be refreshed */
763
+ /**
764
+ * If set and not empty, then "events" have been encountered in this parsed
765
+ * chunks.
766
+ */
767
+ inbandEvents? : IInbandEvent[] | undefined;
768
+ /**
769
+ * If set to `true`, then parsing this chunk revealed that the current
770
+ * Manifest instance needs to be refreshed.
771
+ */
483
772
  needsManifestRefresh?: boolean;
484
773
  /**
485
774
  * If set to `true`, some protection information has been found in this
@@ -495,122 +784,33 @@ export interface ISegmentParserParsedSegment<T> {
495
784
  protectionDataUpdate : boolean;
496
785
  }
497
786
 
498
- /**
499
- * What a segment parser returns when parsing an initialization segment.
500
- *
501
- * Those types of segment contain no decodable data and are only there for
502
- * initialization purposes, such as giving initial infos to the decoder on
503
- * subsequent media segments that will be pushed.
504
- */
505
- export interface ISegmentParserInitSegment<T> {
506
- type : "parsed-init-segment";
507
- value : ISegmentParserParsedInitSegment<T>;
508
- }
509
-
510
- /**
511
- * What a segment parser returns when parsing a media segment.
512
- * Those types of segment contain decodable data.
513
- */
514
- export interface ISegmentParserSegment<T> {
515
- type : "parsed-segment";
516
- value : ISegmentParserParsedSegment<T>;
517
- }
518
-
519
- // format under which audio / video data / initialization data is decodable
520
- /** Text track segment data, once parsed. */
521
- export interface ITextTrackSegmentData {
522
- /** The text track data, in the format indicated in `type`. */
523
- data : string;
524
- /** The format of `data` (examples: "ttml", "srt" or "vtt") */
525
- type : string;
787
+ /** Describe data loaded through a request. */
788
+ export interface IRequestedData<T> {
789
+ /** The loaded response data. */
790
+ responseData : T;
791
+ /** Duration the request took to be performed, in seconds. */
792
+ requestDuration : number | undefined;
526
793
  /**
527
- * Language in which the text track is, as a language code.
528
- * This is mostly needed for "sami" subtitles, to know which cues can / should
529
- * be parsed.
794
+ * "Real" URL (post-redirection) at which the data can be loaded.
795
+ *
796
+ * Note that this doesn't always apply e.g. some data might need multiple
797
+ * URLs to be fetched, some other might need to fetch no URL.
798
+ * This property should only be set when a unique URL is sufficient to
799
+ * retrieve the whole data.
530
800
  */
531
- language? : string;
532
- /** start time from which the segment apply, in seconds. */
533
- start? : number;
534
- /** end time until which the segment apply, in seconds. */
535
- end? : number;
536
- }
537
-
538
- /** Format under which image data is decodable by the RxPlayer. */
539
- export interface IImageTrackSegmentData {
540
- /** Exploitable image track data. */
541
- data : IBifThumbnail[];
542
- /** End time time until which the segment apply, in the timescale given. */
543
- end : number;
544
- /** Start time time from which the segment apply, in the timescale given. */
545
- start : number;
546
- /** Timescale to convert the `start` and `end` properties into seconds. */
547
- timescale : number;
548
- /** The format the data is in (example: "bif"). */
549
- type : "bif";
550
- }
551
-
552
- interface IServerSyncInfos { serverTimestamp : number;
553
- clientTime : number; }
554
-
555
- export interface ITransportOptions {
556
- aggressiveMode? : boolean;
557
- checkMediaSegmentIntegrity? : boolean;
558
- lowLatencyMode : boolean;
559
- manifestLoader?: CustomManifestLoader;
560
- manifestUpdateUrl? : string;
561
- referenceDateTime? : number;
562
- representationFilter? : IRepresentationFilter;
563
- segmentLoader? : CustomSegmentLoader;
564
- serverSyncInfos? : IServerSyncInfos;
565
- /* eslint-disable import/no-deprecated */
566
- supplementaryImageTracks? : ISupplementaryImageTrack[];
567
- supplementaryTextTracks? : ISupplementaryTextTrack[];
568
- /* eslint-enable import/no-deprecated */
569
-
570
- __priv_patchLastSegmentInSidx? : boolean;
801
+ url? : string | undefined;
802
+ /**
803
+ * Time at which the request began in terms of `performance.now`.
804
+ * If fetching the corresponding data necessitated to perform multiple
805
+ * requests, this time corresponds to the first request made.
806
+ */
807
+ sendingTime? : number | undefined;
808
+ /**
809
+ * Time at which the request ended in terms of `performance.now`.
810
+ * If fetching the corresponding data necessitated to perform multiple
811
+ * requests, this time corresponds to the last request to end.
812
+ */
813
+ receivedTime? : number | undefined;
814
+ /** Size in bytes of the loaded data. `undefined` if we don't know. */
815
+ size : number | undefined;
571
816
  }
572
-
573
- export type CustomSegmentLoader = (
574
- // first argument: infos on the segment
575
- args : { adaptation : Adaptation;
576
- representation : Representation;
577
- segment : ISegment;
578
- transport : string;
579
- url : string;
580
- manifest : Manifest; },
581
-
582
- // second argument: callbacks
583
- callbacks : { resolve : (rArgs : { data : ArrayBuffer | Uint8Array;
584
- sendingTime? : number;
585
- receivingTime? : number;
586
- size? : number;
587
- duration? : number; })
588
- => void;
589
-
590
- progress : (pArgs : { duration : number;
591
- size : number;
592
- totalSize? : number; })
593
- => void;
594
- reject : (err? : Error) => void;
595
- fallback? : () => void; }
596
- ) =>
597
- // returns either the aborting callback or nothing
598
- (() => void)|void;
599
-
600
- export type CustomManifestLoader = (
601
- // first argument: url of the manifest
602
- url : string | undefined,
603
-
604
- // second argument: callbacks
605
- callbacks : { resolve : (args : { data : ILoadedManifest;
606
- sendingTime? : number;
607
- receivingTime? : number;
608
- size? : number;
609
- duration? : number; })
610
- => void;
611
-
612
- reject : (err? : Error) => void;
613
- fallback? : () => void; }
614
- ) =>
615
- // returns either the aborting callback or nothing
616
- (() => void)|void;