rx-player 3.33.0 → 3.33.1

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 (819) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/VERSION +1 -1
  3. package/dist/_esm5.processed/core/api/public_api.js +2 -2
  4. package/dist/_esm5.processed/manifest/manifest.js +1 -0
  5. package/dist/_esm5.processed/utils/retry_promise_with_backoff.d.ts +11 -0
  6. package/dist/_esm5.processed/utils/retry_promise_with_backoff.js +18 -4
  7. package/dist/mpd-parser.wasm +0 -0
  8. package/dist/rx-player.d.ts +1 -1
  9. package/dist/rx-player.js +24 -9
  10. package/dist/rx-player.min.d.ts +1 -1
  11. package/dist/rx-player.min.js +1 -1
  12. package/package.json +6 -6
  13. package/.editorconfig +0 -22
  14. package/.eslintrc.js +0 -406
  15. package/.github/workflows/checks.yml +0 -101
  16. package/.github/workflows/perfs.yml +0 -22
  17. package/.github/workflows/sonarcloud_analysis.yml +0 -20
  18. package/CONTRIBUTING.md +0 -272
  19. package/FILES.md +0 -283
  20. package/jest.config.js +0 -73
  21. package/manifest.mpd +0 -149
  22. package/scripts/README.md +0 -11
  23. package/scripts/build/constants.d.ts +0 -53
  24. package/scripts/build/generate_build.js +0 -190
  25. package/scripts/build/templates/experimental/features/index.d.ts +0 -16
  26. package/scripts/build/templates/experimental/features/index.js +0 -16
  27. package/scripts/build/templates/experimental/index.d.ts +0 -16
  28. package/scripts/build/templates/experimental/index.js +0 -16
  29. package/scripts/build/templates/experimental/tools/VideoThumbnailLoader/index.d.ts +0 -18
  30. package/scripts/build/templates/experimental/tools/VideoThumbnailLoader/index.js +0 -18
  31. package/scripts/build/templates/experimental/tools/index.d.ts +0 -16
  32. package/scripts/build/templates/experimental/tools/index.js +0 -16
  33. package/scripts/build/templates/features/index.d.ts +0 -16
  34. package/scripts/build/templates/features/index.js +0 -16
  35. package/scripts/build/templates/logger/index.d.ts +0 -17
  36. package/scripts/build/templates/logger/index.js +0 -17
  37. package/scripts/build/templates/minimal/index.d.ts +0 -17
  38. package/scripts/build/templates/minimal/index.js +0 -17
  39. package/scripts/build/templates/tools/TextTrackRenderer.d.ts +0 -18
  40. package/scripts/build/templates/tools/TextTrackRenderer.js +0 -18
  41. package/scripts/build/templates/tools/index.d.ts +0 -16
  42. package/scripts/build/templates/tools/index.js +0 -16
  43. package/scripts/build/templates/tools/string-utils.d.ts +0 -18
  44. package/scripts/build/templates/tools/string-utils.js +0 -18
  45. package/scripts/build/templates/types/index.d.ts +0 -16
  46. package/scripts/build/templates/types/index.js +0 -15
  47. package/scripts/canal-release.patch +0 -316
  48. package/scripts/check_nodejs_import_compatibility.js +0 -60
  49. package/scripts/deploy_new_demo +0 -123
  50. package/scripts/fast_demo_build.js +0 -129
  51. package/scripts/generate_certificate +0 -19
  52. package/scripts/generate_demo_list.js +0 -105
  53. package/scripts/generate_documentation_list.js +0 -109
  54. package/scripts/generate_full_demo.js +0 -201
  55. package/scripts/generate_standalone_demo.js +0 -82
  56. package/scripts/launch_static_server.js +0 -163
  57. package/scripts/list-npm-scripts.js +0 -207
  58. package/scripts/make-dev-releases +0 -90
  59. package/scripts/report_build_sizes +0 -96
  60. package/scripts/run_standalone_demo.js +0 -27
  61. package/scripts/start_demo_web_server.js +0 -44
  62. package/scripts/update-version +0 -48
  63. package/scripts/update_gh-pages_demo +0 -132
  64. package/scripts/update_gh-pages_doc +0 -106
  65. package/scripts/utils/display_webpack_errors.js +0 -33
  66. package/scripts/utils/get_human_readable_hours.js +0 -14
  67. package/scripts/wasm-strip.js +0 -359
  68. package/sonar-project.properties +0 -7
  69. package/src/README.md +0 -136
  70. package/src/compat/README.md +0 -29
  71. package/src/compat/__tests__/add_text_track.test.ts +0 -176
  72. package/src/compat/__tests__/browser_compatibility_types.test.ts +0 -152
  73. package/src/compat/__tests__/browser_version.test.ts +0 -84
  74. package/src/compat/__tests__/can_patch_isobmff.test.ts +0 -50
  75. package/src/compat/__tests__/can_rely_on_video_visibility_and_size.test.ts +0 -78
  76. package/src/compat/__tests__/can_reuse_media_keys.test.ts +0 -31
  77. package/src/compat/__tests__/change_source_buffer_type.test.ts +0 -60
  78. package/src/compat/__tests__/clear_element_src.test.ts +0 -252
  79. package/src/compat/__tests__/enable_audio_track.test.ts +0 -341
  80. package/src/compat/__tests__/fullscreen.test.ts +0 -286
  81. package/src/compat/__tests__/is_codec_supported.test.ts +0 -78
  82. package/src/compat/__tests__/is_offline.test.ts +0 -65
  83. package/src/compat/__tests__/is_seeking_approximate.test.ts +0 -48
  84. package/src/compat/__tests__/is_vtt_cue.test.ts +0 -71
  85. package/src/compat/__tests__/make_vtt_cue.test.ts +0 -97
  86. package/src/compat/__tests__/patch_webkit_source_buffer.test.ts +0 -144
  87. package/src/compat/__tests__/remove_cue.test.ts +0 -229
  88. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +0 -128
  89. package/src/compat/__tests__/should_reload_media_source_on_decipherability_update.test.ts +0 -50
  90. package/src/compat/__tests__/should_renew_media_key_system_access.test.ts +0 -55
  91. package/src/compat/__tests__/should_unset_media_keys.test.ts +0 -53
  92. package/src/compat/__tests__/should_validate_metadata.test.ts +0 -53
  93. package/src/compat/__tests__/should_wait_for_data_before_loaded.test.ts +0 -121
  94. package/src/compat/__tests__/should_wait_for_have_enough_data.test.ts +0 -36
  95. package/src/compat/add_class_name.ts +0 -41
  96. package/src/compat/add_text_track.ts +0 -58
  97. package/src/compat/browser_compatibility_types.ts +0 -222
  98. package/src/compat/browser_detection.ts +0 -172
  99. package/src/compat/browser_version.ts +0 -44
  100. package/src/compat/can_patch_isobmff.ts +0 -30
  101. package/src/compat/can_rely_on_video_visibility_and_size.ts +0 -52
  102. package/src/compat/can_reuse_media_keys.ts +0 -20
  103. package/src/compat/change_source_buffer_type.ts +0 -66
  104. package/src/compat/clear_element_src.ts +0 -55
  105. package/src/compat/eme/close_session.ts +0 -111
  106. package/src/compat/eme/constants.ts +0 -21
  107. package/src/compat/eme/custom_key_system_access.ts +0 -67
  108. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +0 -186
  109. package/src/compat/eme/custom_media_keys/index.ts +0 -28
  110. package/src/compat/eme/custom_media_keys/moz_media_keys_constructor.ts +0 -88
  111. package/src/compat/eme/custom_media_keys/ms_media_keys_constructor.ts +0 -69
  112. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +0 -235
  113. package/src/compat/eme/custom_media_keys/types.ts +0 -67
  114. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +0 -308
  115. package/src/compat/eme/custom_media_keys/webkit_media_keys_constructor.ts +0 -50
  116. package/src/compat/eme/eme-api-implementation.ts +0 -318
  117. package/src/compat/eme/generate_key_request.ts +0 -162
  118. package/src/compat/eme/get_init_data.ts +0 -159
  119. package/src/compat/eme/get_uuid_kid_from_keystatus_kid.ts +0 -37
  120. package/src/compat/eme/get_webkit_fairplay_initdata.ts +0 -75
  121. package/src/compat/eme/index.ts +0 -47
  122. package/src/compat/eme/load_session.ts +0 -67
  123. package/src/compat/enable_audio_track.ts +0 -33
  124. package/src/compat/event_listeners.ts +0 -566
  125. package/src/compat/fullscreen.ts +0 -87
  126. package/src/compat/get_start_date.ts +0 -48
  127. package/src/compat/has_issues_with_high_media_source_duration.ts +0 -27
  128. package/src/compat/index.ts +0 -87
  129. package/src/compat/is_codec_supported.ts +0 -40
  130. package/src/compat/is_debug_mode_enabled.ts +0 -12
  131. package/src/compat/is_node.ts +0 -18
  132. package/src/compat/is_offline.ts +0 -44
  133. package/src/compat/is_seeking_approximate.ts +0 -32
  134. package/src/compat/is_vtt_cue.ts +0 -30
  135. package/src/compat/make_vtt_cue.ts +0 -51
  136. package/src/compat/on_height_width_change.ts +0 -119
  137. package/src/compat/patch_webkit_source_buffer.ts +0 -89
  138. package/src/compat/remove_cue.ts +0 -64
  139. package/src/compat/should_favour_custom_safari_EME.ts +0 -34
  140. package/src/compat/should_prevent_seeking_at_0_initially.ts +0 -19
  141. package/src/compat/should_reload_media_source_on_decipherability_update.ts +0 -32
  142. package/src/compat/should_renew_media_key_system_access.ts +0 -26
  143. package/src/compat/should_unset_media_keys.ts +0 -27
  144. package/src/compat/should_validate_metadata.ts +0 -27
  145. package/src/compat/should_wait_for_data_before_loaded.ts +0 -35
  146. package/src/compat/should_wait_for_have_enough_data.ts +0 -17
  147. package/src/config.ts +0 -32
  148. package/src/core/README.md +0 -56
  149. package/src/core/adaptive/README.md +0 -147
  150. package/src/core/adaptive/__tests__/buffer_based_chooser.test.ts +0 -548
  151. package/src/core/adaptive/adaptive_representation_selector.ts +0 -916
  152. package/src/core/adaptive/buffer_based_chooser.ts +0 -264
  153. package/src/core/adaptive/guess_based_chooser.ts +0 -309
  154. package/src/core/adaptive/index.ts +0 -45
  155. package/src/core/adaptive/network_analyzer.ts +0 -419
  156. package/src/core/adaptive/utils/__tests__/bandwith_estimator.test.ts +0 -134
  157. package/src/core/adaptive/utils/__tests__/ewma.test.ts +0 -79
  158. package/src/core/adaptive/utils/__tests__/filter_by_bitrate.test.ts +0 -56
  159. package/src/core/adaptive/utils/__tests__/filter_by_width.test.ts +0 -60
  160. package/src/core/adaptive/utils/__tests__/get_buffer_levels.test.ts +0 -48
  161. package/src/core/adaptive/utils/__tests__/select_optimal_representation.test.ts +0 -243
  162. package/src/core/adaptive/utils/bandwidth_estimator.ts +0 -88
  163. package/src/core/adaptive/utils/ewma.ts +0 -59
  164. package/src/core/adaptive/utils/filter_by_bitrate.ts +0 -46
  165. package/src/core/adaptive/utils/filter_by_width.ts +0 -49
  166. package/src/core/adaptive/utils/get_buffer_levels.ts +0 -50
  167. package/src/core/adaptive/utils/last_estimate_storage.ts +0 -79
  168. package/src/core/adaptive/utils/pending_requests_store.ts +0 -147
  169. package/src/core/adaptive/utils/representation_score_calculator.ts +0 -168
  170. package/src/core/adaptive/utils/select_optimal_representation.ts +0 -54
  171. package/src/core/api/README.md +0 -36
  172. package/src/core/api/__tests__/option_utils.test.ts +0 -1668
  173. package/src/core/api/__tests__/public_api.test.ts +0 -857
  174. package/src/core/api/__tests__/utils.test.ts +0 -195
  175. package/src/core/api/debug/buffer_graph.ts +0 -244
  176. package/src/core/api/debug/buffer_size_graph.ts +0 -130
  177. package/src/core/api/debug/constants.ts +0 -2
  178. package/src/core/api/debug/index.ts +0 -3
  179. package/src/core/api/debug/modules/general_info.ts +0 -213
  180. package/src/core/api/debug/modules/segment_buffer_content.ts +0 -155
  181. package/src/core/api/debug/modules/segment_buffer_size.ts +0 -48
  182. package/src/core/api/debug/render.ts +0 -40
  183. package/src/core/api/debug/utils.ts +0 -103
  184. package/src/core/api/index.ts +0 -27
  185. package/src/core/api/option_utils.ts +0 -700
  186. package/src/core/api/playback_observer.ts +0 -994
  187. package/src/core/api/public_api.ts +0 -3247
  188. package/src/core/api/tracks_management/__tests__/media_element_track_choice_manager.test.ts +0 -184
  189. package/src/core/api/tracks_management/media_element_track_choice_manager.ts +0 -975
  190. package/src/core/api/tracks_management/track_choice_manager.ts +0 -1280
  191. package/src/core/api/utils.ts +0 -216
  192. package/src/core/decrypt/README.md +0 -22
  193. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +0 -422
  194. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +0 -677
  195. package/src/core/decrypt/__tests__/__global__/media_key_system_access.test.ts +0 -528
  196. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +0 -343
  197. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +0 -264
  198. package/src/core/decrypt/__tests__/__global__/utils.ts +0 -491
  199. package/src/core/decrypt/attach_media_keys.ts +0 -121
  200. package/src/core/decrypt/clear_on_stop.ts +0 -47
  201. package/src/core/decrypt/content_decryptor.ts +0 -1246
  202. package/src/core/decrypt/create_or_load_session.ts +0 -133
  203. package/src/core/decrypt/create_session.ts +0 -214
  204. package/src/core/decrypt/dispose_decryption_resources.ts +0 -54
  205. package/src/core/decrypt/find_key_system.ts +0 -376
  206. package/src/core/decrypt/get_key_system_configuration.ts +0 -51
  207. package/src/core/decrypt/get_media_keys.ts +0 -147
  208. package/src/core/decrypt/index.ts +0 -36
  209. package/src/core/decrypt/init_media_keys.ts +0 -60
  210. package/src/core/decrypt/session_events_listener.ts +0 -386
  211. package/src/core/decrypt/set_server_certificate.ts +0 -105
  212. package/src/core/decrypt/types.ts +0 -404
  213. package/src/core/decrypt/utils/__tests__/are_init_values_compatible.test.ts +0 -261
  214. package/src/core/decrypt/utils/__tests__/clean_old_loaded_sessions.test.ts +0 -158
  215. package/src/core/decrypt/utils/__tests__/clean_old_stored_persistent_info.test.ts +0 -133
  216. package/src/core/decrypt/utils/are_init_values_compatible.ts +0 -140
  217. package/src/core/decrypt/utils/check_key_statuses.ts +0 -193
  218. package/src/core/decrypt/utils/clean_old_loaded_sessions.ts +0 -45
  219. package/src/core/decrypt/utils/clean_old_stored_persistent_info.ts +0 -48
  220. package/src/core/decrypt/utils/get_drm_system_id.ts +0 -42
  221. package/src/core/decrypt/utils/init_data_values_container.ts +0 -119
  222. package/src/core/decrypt/utils/is_session_usable.ts +0 -62
  223. package/src/core/decrypt/utils/key_id_comparison.ts +0 -57
  224. package/src/core/decrypt/utils/key_session_record.ts +0 -174
  225. package/src/core/decrypt/utils/loaded_sessions_store.ts +0 -505
  226. package/src/core/decrypt/utils/media_keys_infos_store.ts +0 -85
  227. package/src/core/decrypt/utils/persistent_sessions_store.ts +0 -358
  228. package/src/core/decrypt/utils/serializable_bytes.ts +0 -59
  229. package/src/core/decrypt/utils/server_certificate_store.ts +0 -133
  230. package/src/core/fetchers/README.md +0 -84
  231. package/src/core/fetchers/cdn_prioritizer.ts +0 -207
  232. package/src/core/fetchers/index.ts +0 -38
  233. package/src/core/fetchers/manifest/index.ts +0 -28
  234. package/src/core/fetchers/manifest/manifest_fetcher.ts +0 -798
  235. package/src/core/fetchers/segment/__tests__/task_prioritizer.test.ts +0 -763
  236. package/src/core/fetchers/segment/index.ts +0 -28
  237. package/src/core/fetchers/segment/prioritized_segment_fetcher.ts +0 -113
  238. package/src/core/fetchers/segment/segment_fetcher.ts +0 -482
  239. package/src/core/fetchers/segment/segment_fetcher_creator.ts +0 -129
  240. package/src/core/fetchers/segment/task_prioritizer.ts +0 -455
  241. package/src/core/fetchers/utils/error_selector.ts +0 -38
  242. package/src/core/fetchers/utils/schedule_request.ts +0 -493
  243. package/src/core/init/README.md +0 -81
  244. package/src/core/init/directfile_content_initializer.ts +0 -310
  245. package/src/core/init/index.ts +0 -22
  246. package/src/core/init/media_source_content_initializer.ts +0 -878
  247. package/src/core/init/types.ts +0 -266
  248. package/src/core/init/utils/__tests__/are_same_stream_events.test.ts +0 -84
  249. package/src/core/init/utils/__tests__/refresh_scheduled_events_list.test.ts +0 -94
  250. package/src/core/init/utils/content_time_boundaries_observer.ts +0 -646
  251. package/src/core/init/utils/create_media_source.ts +0 -139
  252. package/src/core/init/utils/create_stream_playback_observer.ts +0 -132
  253. package/src/core/init/utils/end_of_stream.ts +0 -108
  254. package/src/core/init/utils/get_initial_time.ts +0 -165
  255. package/src/core/init/utils/get_loaded_reference.ts +0 -82
  256. package/src/core/init/utils/initial_seek_and_play.ts +0 -237
  257. package/src/core/init/utils/initialize_content_decryption.ts +0 -172
  258. package/src/core/init/utils/media_source_duration_updater.ts +0 -349
  259. package/src/core/init/utils/rebuffering_controller.ts +0 -642
  260. package/src/core/init/utils/stream_events_emitter/are_same_stream_events.ts +0 -42
  261. package/src/core/init/utils/stream_events_emitter/index.ts +0 -22
  262. package/src/core/init/utils/stream_events_emitter/refresh_scheduled_events_list.ts +0 -74
  263. package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +0 -252
  264. package/src/core/init/utils/stream_events_emitter/types.ts +0 -46
  265. package/src/core/init/utils/throw_on_media_error.ts +0 -74
  266. package/src/core/segment_buffers/README.md +0 -219
  267. package/src/core/segment_buffers/garbage_collector.ts +0 -177
  268. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +0 -650
  269. package/src/core/segment_buffers/implementations/audio_video/index.ts +0 -18
  270. package/src/core/segment_buffers/implementations/image/image_segment_buffer.ts +0 -152
  271. package/src/core/segment_buffers/implementations/image/index.ts +0 -18
  272. package/src/core/segment_buffers/implementations/index.ts +0 -20
  273. package/src/core/segment_buffers/implementations/text/html/__tests__/utils.test.ts +0 -343
  274. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +0 -527
  275. package/src/core/segment_buffers/implementations/text/html/index.ts +0 -24
  276. package/src/core/segment_buffers/implementations/text/html/parsers.ts +0 -49
  277. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +0 -391
  278. package/src/core/segment_buffers/implementations/text/html/types.ts +0 -23
  279. package/src/core/segment_buffers/implementations/text/html/update_proportional_elements.ts +0 -93
  280. package/src/core/segment_buffers/implementations/text/html/utils.ts +0 -139
  281. package/src/core/segment_buffers/implementations/text/native/index.ts +0 -19
  282. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +0 -340
  283. package/src/core/segment_buffers/implementations/text/native/parsers.ts +0 -47
  284. package/src/core/segment_buffers/implementations/types.ts +0 -386
  285. package/src/core/segment_buffers/implementations/utils/manual_time_ranges.ts +0 -80
  286. package/src/core/segment_buffers/index.ts +0 -67
  287. package/src/core/segment_buffers/inventory/buffered_history.ts +0 -131
  288. package/src/core/segment_buffers/inventory/index.ts +0 -30
  289. package/src/core/segment_buffers/inventory/segment_inventory.ts +0 -1111
  290. package/src/core/segment_buffers/inventory/types.ts +0 -35
  291. package/src/core/segment_buffers/segment_buffers_store.ts +0 -383
  292. package/src/core/stream/README.md +0 -59
  293. package/src/core/stream/adaptation/adaptation_stream.ts +0 -378
  294. package/src/core/stream/adaptation/index.ts +0 -20
  295. package/src/core/stream/adaptation/types.ts +0 -199
  296. package/src/core/stream/adaptation/utils/create_representation_estimator.ts +0 -114
  297. package/src/core/stream/index.ts +0 -38
  298. package/src/core/stream/orchestrator/README.md +0 -349
  299. package/src/core/stream/orchestrator/get_time_ranges_for_content.ts +0 -70
  300. package/src/core/stream/orchestrator/index.ts +0 -30
  301. package/src/core/stream/orchestrator/stream_orchestrator.ts +0 -664
  302. package/src/core/stream/period/index.ts +0 -20
  303. package/src/core/stream/period/period_stream.ts +0 -469
  304. package/src/core/stream/period/types.ts +0 -132
  305. package/src/core/stream/period/utils/get_adaptation_switch_strategy.ts +0 -287
  306. package/src/core/stream/representation/README.md +0 -16
  307. package/src/core/stream/representation/index.ts +0 -20
  308. package/src/core/stream/representation/representation_stream.ts +0 -474
  309. package/src/core/stream/representation/types.ts +0 -292
  310. package/src/core/stream/representation/utils/append_segment_to_buffer.ts +0 -77
  311. package/src/core/stream/representation/utils/check_for_discontinuity.ts +0 -305
  312. package/src/core/stream/representation/utils/downloading_queue.ts +0 -603
  313. package/src/core/stream/representation/utils/force_garbage_collection.ts +0 -113
  314. package/src/core/stream/representation/utils/get_buffer_status.ts +0 -322
  315. package/src/core/stream/representation/utils/get_needed_segments.ts +0 -617
  316. package/src/core/stream/representation/utils/get_segment_priority.ts +0 -43
  317. package/src/core/stream/representation/utils/push_init_segment.ts +0 -85
  318. package/src/core/stream/representation/utils/push_media_segment.ts +0 -113
  319. package/src/default_config.ts +0 -1293
  320. package/src/errors/README.md +0 -6
  321. package/src/errors/__tests__/assertion_error.test.ts +0 -26
  322. package/src/errors/__tests__/encrypted_media_error.test.ts +0 -45
  323. package/src/errors/__tests__/error_message.test.ts +0 -23
  324. package/src/errors/__tests__/format_error.test.ts +0 -62
  325. package/src/errors/__tests__/is_known_error.test.ts +0 -65
  326. package/src/errors/__tests__/media_error.test.ts +0 -55
  327. package/src/errors/__tests__/network_error.test.ts +0 -84
  328. package/src/errors/__tests__/other_error.test.ts +0 -53
  329. package/src/errors/__tests__/request_error.test.ts +0 -45
  330. package/src/errors/assertion_error.ts +0 -40
  331. package/src/errors/custom_loader_error.ts +0 -57
  332. package/src/errors/encrypted_media_error.ts +0 -71
  333. package/src/errors/error_codes.ts +0 -149
  334. package/src/errors/error_message.ts +0 -30
  335. package/src/errors/format_error.ts +0 -39
  336. package/src/errors/index.ts +0 -52
  337. package/src/errors/is_known_error.ts +0 -35
  338. package/src/errors/media_error.ts +0 -118
  339. package/src/errors/network_error.ts +0 -74
  340. package/src/errors/other_error.ts +0 -50
  341. package/src/errors/request_error.ts +0 -76
  342. package/src/experimental/README.md +0 -16
  343. package/src/experimental/features/__tests__/dash_wasm.test.ts +0 -44
  344. package/src/experimental/features/__tests__/debug_element.test.ts +0 -12
  345. package/src/experimental/features/__tests__/index.test.ts +0 -19
  346. package/src/experimental/features/__tests__/local.test.ts +0 -35
  347. package/src/experimental/features/__tests__/metaplaylist.test.ts +0 -35
  348. package/src/experimental/features/dash_wasm.ts +0 -41
  349. package/src/experimental/features/debug_element.ts +0 -13
  350. package/src/experimental/features/index.ts +0 -20
  351. package/src/experimental/features/local.ts +0 -28
  352. package/src/experimental/features/metaplaylist.ts +0 -28
  353. package/src/experimental/index.ts +0 -5
  354. package/src/experimental/tools/VideoThumbnailLoader/features/dash.ts +0 -23
  355. package/src/experimental/tools/VideoThumbnailLoader/features/metaplaylist.ts +0 -23
  356. package/src/experimental/tools/VideoThumbnailLoader/index.ts +0 -25
  357. package/src/experimental/tools/VideoThumbnailLoader/load_and_push_segment.ts +0 -77
  358. package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +0 -75
  359. package/src/experimental/tools/VideoThumbnailLoader/remove_buffer_around_time.ts +0 -54
  360. package/src/experimental/tools/VideoThumbnailLoader/types.ts +0 -39
  361. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +0 -423
  362. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader_error.ts +0 -34
  363. package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +0 -141
  364. package/src/experimental/tools/createMetaplaylist/index.ts +0 -72
  365. package/src/experimental/tools/index.ts +0 -27
  366. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/capabilities.test.ts +0 -37
  367. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +0 -140
  368. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +0 -153
  369. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +0 -405
  370. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/defaultCodecFinder.test.ts +0 -136
  371. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaContentType.test.ts +0 -294
  372. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaDisplayInfos.test.ts +0 -189
  373. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/utils.test.ts +0 -361
  374. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +0 -184
  375. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +0 -136
  376. package/src/experimental/tools/mediaCapabilitiesProber/capabilities.ts +0 -169
  377. package/src/experimental/tools/mediaCapabilitiesProber/index.ts +0 -18
  378. package/src/experimental/tools/mediaCapabilitiesProber/log.ts +0 -21
  379. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +0 -67
  380. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +0 -89
  381. package/src/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.ts +0 -100
  382. package/src/experimental/tools/mediaCapabilitiesProber/probers/defaultCodecsFinder.ts +0 -66
  383. package/src/experimental/tools/mediaCapabilitiesProber/probers/index.ts +0 -44
  384. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.ts +0 -66
  385. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/format.ts +0 -100
  386. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts +0 -105
  387. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.ts +0 -54
  388. package/src/experimental/tools/mediaCapabilitiesProber/types.ts +0 -75
  389. package/src/experimental/tools/mediaCapabilitiesProber/utils.ts +0 -107
  390. package/src/experimental/tools/parseBIFThumbnails.ts +0 -39
  391. package/src/features/README.md +0 -11
  392. package/src/features/__tests__/add_features.test.ts +0 -69
  393. package/src/features/__tests__/initialize_features.test.ts +0 -674
  394. package/src/features/add_features.ts +0 -37
  395. package/src/features/features_object.ts +0 -37
  396. package/src/features/index.ts +0 -40
  397. package/src/features/initialize_features.ts +0 -136
  398. package/src/features/list/__tests__/bif_parser.test.ts +0 -30
  399. package/src/features/list/__tests__/dash.test.ts +0 -41
  400. package/src/features/list/__tests__/directfile.test.ts +0 -35
  401. package/src/features/list/__tests__/eme.test.ts +0 -28
  402. package/src/features/list/__tests__/html_sami_parser.test.ts +0 -33
  403. package/src/features/list/__tests__/html_srt_parser.test.ts +0 -33
  404. package/src/features/list/__tests__/html_text_buffer.test.ts +0 -29
  405. package/src/features/list/__tests__/html_ttml_parser.test.ts +0 -33
  406. package/src/features/list/__tests__/html_vtt_parser.test.ts +0 -33
  407. package/src/features/list/__tests__/image_buffer.test.ts +0 -28
  408. package/src/features/list/__tests__/index.test.ts +0 -55
  409. package/src/features/list/__tests__/native_sami_parser.test.ts +0 -33
  410. package/src/features/list/__tests__/native_srt_parser.test.ts +0 -33
  411. package/src/features/list/__tests__/native_text_buffer.test.ts +0 -29
  412. package/src/features/list/__tests__/native_ttml_parser.test.ts +0 -33
  413. package/src/features/list/__tests__/native_vtt_parser.test.ts +0 -33
  414. package/src/features/list/__tests__/smooth.test.ts +0 -36
  415. package/src/features/list/bif_parser.ts +0 -31
  416. package/src/features/list/dash.ts +0 -36
  417. package/src/features/list/directfile.ts +0 -35
  418. package/src/features/list/eme.ts +0 -29
  419. package/src/features/list/html_sami_parser.ts +0 -31
  420. package/src/features/list/html_srt_parser.ts +0 -31
  421. package/src/features/list/html_text_buffer.ts +0 -29
  422. package/src/features/list/html_ttml_parser.ts +0 -31
  423. package/src/features/list/html_vtt_parser.ts +0 -31
  424. package/src/features/list/image_buffer.ts +0 -29
  425. package/src/features/list/index.ts +0 -32
  426. package/src/features/list/native_sami_parser.ts +0 -32
  427. package/src/features/list/native_srt_parser.ts +0 -32
  428. package/src/features/list/native_text_buffer.ts +0 -30
  429. package/src/features/list/native_ttml_parser.ts +0 -32
  430. package/src/features/list/native_vtt_parser.ts +0 -32
  431. package/src/features/list/smooth.ts +0 -32
  432. package/src/features/types.ts +0 -183
  433. package/src/index.ts +0 -38
  434. package/src/log.ts +0 -22
  435. package/src/manifest/README.md +0 -55
  436. package/src/manifest/__tests__/adaptation.test.ts +0 -485
  437. package/src/manifest/__tests__/manifest.test.ts +0 -428
  438. package/src/manifest/__tests__/period.test.ts +0 -769
  439. package/src/manifest/__tests__/representation.test.ts +0 -297
  440. package/src/manifest/__tests__/update_period_in_place.test.ts +0 -1074
  441. package/src/manifest/__tests__/update_periods.test.ts +0 -845
  442. package/src/manifest/adaptation.ts +0 -294
  443. package/src/manifest/index.ts +0 -67
  444. package/src/manifest/manifest.ts +0 -811
  445. package/src/manifest/period.ts +0 -211
  446. package/src/manifest/representation.ts +0 -451
  447. package/src/manifest/representation_index/__tests__/static.test.ts +0 -74
  448. package/src/manifest/representation_index/index.ts +0 -31
  449. package/src/manifest/representation_index/static.ts +0 -158
  450. package/src/manifest/representation_index/types.ts +0 -433
  451. package/src/manifest/types.ts +0 -33
  452. package/src/manifest/update_period_in_place.ts +0 -142
  453. package/src/manifest/update_periods.ts +0 -201
  454. package/src/manifest/utils.ts +0 -60
  455. package/src/minimal.ts +0 -34
  456. package/src/parsers/README.md +0 -12
  457. package/src/parsers/containers/isobmff/constants.ts +0 -24
  458. package/src/parsers/containers/isobmff/create_box.ts +0 -81
  459. package/src/parsers/containers/isobmff/drm/index.ts +0 -17
  460. package/src/parsers/containers/isobmff/drm/playready.ts +0 -45
  461. package/src/parsers/containers/isobmff/get_box.ts +0 -278
  462. package/src/parsers/containers/isobmff/index.ts +0 -51
  463. package/src/parsers/containers/isobmff/read.ts +0 -105
  464. package/src/parsers/containers/isobmff/take_pssh_out.ts +0 -101
  465. package/src/parsers/containers/isobmff/utils.ts +0 -555
  466. package/src/parsers/containers/matroska/index.ts +0 -21
  467. package/src/parsers/containers/matroska/utils.ts +0 -313
  468. package/src/parsers/images/bif.ts +0 -128
  469. package/src/parsers/manifest/dash/common/__tests__/attach_trickmode_track.test.ts +0 -65
  470. package/src/parsers/manifest/dash/common/__tests__/convert_supplemental_codecs.test.ts +0 -37
  471. package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +0 -162
  472. package/src/parsers/manifest/dash/common/__tests__/get_clock_offset.test.ts +0 -65
  473. package/src/parsers/manifest/dash/common/__tests__/get_http_utc-timing_url.test.ts +0 -165
  474. package/src/parsers/manifest/dash/common/__tests__/get_periods_time_infos.test.ts +0 -118
  475. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +0 -290
  476. package/src/parsers/manifest/dash/common/__tests__/parse_availability_start_time.test.ts +0 -63
  477. package/src/parsers/manifest/dash/common/attach_trickmode_track.ts +0 -55
  478. package/src/parsers/manifest/dash/common/convert_supplemental_codecs.ts +0 -32
  479. package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +0 -87
  480. package/src/parsers/manifest/dash/common/get_clock_offset.ts +0 -41
  481. package/src/parsers/manifest/dash/common/get_hdr_information.ts +0 -94
  482. package/src/parsers/manifest/dash/common/get_http_utc-timing_url.ts +0 -46
  483. package/src/parsers/manifest/dash/common/get_minimum_and_maximum_positions.ts +0 -39
  484. package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +0 -91
  485. package/src/parsers/manifest/dash/common/index.ts +0 -40
  486. package/src/parsers/manifest/dash/common/indexes/__tests__/tokens.test.ts +0 -60
  487. package/src/parsers/manifest/dash/common/indexes/base.ts +0 -444
  488. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +0 -55
  489. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +0 -148
  490. package/src/parsers/manifest/dash/common/indexes/index.ts +0 -39
  491. package/src/parsers/manifest/dash/common/indexes/list.ts +0 -338
  492. package/src/parsers/manifest/dash/common/indexes/template.ts +0 -652
  493. package/src/parsers/manifest/dash/common/indexes/timeline/__tests__/parse_s_element.test.ts +0 -115
  494. package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +0 -54
  495. package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_previous_timeline.ts +0 -102
  496. package/src/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.ts +0 -66
  497. package/src/parsers/manifest/dash/common/indexes/timeline/find_first_common_start_time.ts +0 -153
  498. package/src/parsers/manifest/dash/common/indexes/timeline/index.ts +0 -21
  499. package/src/parsers/manifest/dash/common/indexes/timeline/parse_s_element.ts +0 -72
  500. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +0 -1049
  501. package/src/parsers/manifest/dash/common/indexes/tokens.ts +0 -127
  502. package/src/parsers/manifest/dash/common/indexes/utils.ts +0 -32
  503. package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +0 -142
  504. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +0 -165
  505. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +0 -569
  506. package/src/parsers/manifest/dash/common/parse_availability_start_time.ts +0 -35
  507. package/src/parsers/manifest/dash/common/parse_mpd.ts +0 -399
  508. package/src/parsers/manifest/dash/common/parse_periods.ts +0 -363
  509. package/src/parsers/manifest/dash/common/parse_representation_index.ts +0 -199
  510. package/src/parsers/manifest/dash/common/parse_representations.ts +0 -352
  511. package/src/parsers/manifest/dash/common/resolve_base_urls.ts +0 -58
  512. package/src/parsers/manifest/dash/index.ts +0 -22
  513. package/src/parsers/manifest/dash/js-parser/__tests__/parse_from_document.test.ts +0 -45
  514. package/src/parsers/manifest/dash/js-parser/index.ts +0 -18
  515. package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +0 -381
  516. package/src/parsers/manifest/dash/js-parser/node_parsers/BaseURL.ts +0 -35
  517. package/src/parsers/manifest/dash/js-parser/node_parsers/ContentComponent.ts +0 -49
  518. package/src/parsers/manifest/dash/js-parser/node_parsers/ContentProtection.ts +0 -94
  519. package/src/parsers/manifest/dash/js-parser/node_parsers/EventStream.ts +0 -117
  520. package/src/parsers/manifest/dash/js-parser/node_parsers/Initialization.ts +0 -48
  521. package/src/parsers/manifest/dash/js-parser/node_parsers/MPD.ts +0 -180
  522. package/src/parsers/manifest/dash/js-parser/node_parsers/Period.ts +0 -152
  523. package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +0 -234
  524. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentBase.ts +0 -112
  525. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentList.ts +0 -50
  526. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.ts +0 -98
  527. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentTimeline.ts +0 -35
  528. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentURL.ts +0 -63
  529. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/AdaptationSet.test.ts +0 -407
  530. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/ContentComponent.test.ts +0 -67
  531. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/ContentProtection.test.ts +0 -223
  532. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/Initialization.test.ts +0 -139
  533. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/SegmentTimeline.test.ts +0 -119
  534. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/SegmentURL.test.ts +0 -205
  535. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/utils.test.ts +0 -218
  536. package/src/parsers/manifest/dash/js-parser/node_parsers/utils.ts +0 -384
  537. package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +0 -129
  538. package/src/parsers/manifest/dash/node_parser_types.ts +0 -431
  539. package/src/parsers/manifest/dash/parsers_types.ts +0 -91
  540. package/src/parsers/manifest/dash/wasm-parser/Cargo.lock +0 -25
  541. package/src/parsers/manifest/dash/wasm-parser/Cargo.toml +0 -16
  542. package/src/parsers/manifest/dash/wasm-parser/README.md +0 -267
  543. package/src/parsers/manifest/dash/wasm-parser/index.ts +0 -21
  544. package/src/parsers/manifest/dash/wasm-parser/rs/errors.rs +0 -28
  545. package/src/parsers/manifest/dash/wasm-parser/rs/events.rs +0 -373
  546. package/src/parsers/manifest/dash/wasm-parser/rs/lib.rs +0 -85
  547. package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +0 -414
  548. package/src/parsers/manifest/dash/wasm-parser/rs/processor/mod.rs +0 -472
  549. package/src/parsers/manifest/dash/wasm-parser/rs/processor/s_element.rs +0 -72
  550. package/src/parsers/manifest/dash/wasm-parser/rs/reader.rs +0 -17
  551. package/src/parsers/manifest/dash/wasm-parser/rs/reportable.rs +0 -147
  552. package/src/parsers/manifest/dash/wasm-parser/rs/utils.rs +0 -217
  553. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +0 -477
  554. package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +0 -343
  555. package/src/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.ts +0 -38
  556. package/src/parsers/manifest/dash/wasm-parser/ts/generators/ContentComponent.ts +0 -53
  557. package/src/parsers/manifest/dash/wasm-parser/ts/generators/ContentProtection.ts +0 -62
  558. package/src/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.ts +0 -144
  559. package/src/parsers/manifest/dash/wasm-parser/ts/generators/MPD.ts +0 -183
  560. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Period.ts +0 -180
  561. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +0 -215
  562. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Scheme.ts +0 -44
  563. package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentBase.ts +0 -115
  564. package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.ts +0 -61
  565. package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentTemplate.ts +0 -133
  566. package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentUrl.ts +0 -70
  567. package/src/parsers/manifest/dash/wasm-parser/ts/generators/XLink.ts +0 -66
  568. package/src/parsers/manifest/dash/wasm-parser/ts/generators/index.ts +0 -17
  569. package/src/parsers/manifest/dash/wasm-parser/ts/generators/root.ts +0 -66
  570. package/src/parsers/manifest/dash/wasm-parser/ts/parsers_stack.ts +0 -80
  571. package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +0 -298
  572. package/src/parsers/manifest/dash/wasm-parser/ts/utils.ts +0 -47
  573. package/src/parsers/manifest/index.ts +0 -17
  574. package/src/parsers/manifest/local/index.ts +0 -25
  575. package/src/parsers/manifest/local/parse_local_manifest.ts +0 -164
  576. package/src/parsers/manifest/local/representation_index.ts +0 -246
  577. package/src/parsers/manifest/local/types.ts +0 -291
  578. package/src/parsers/manifest/metaplaylist/index.ts +0 -28
  579. package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +0 -335
  580. package/src/parsers/manifest/metaplaylist/representation_index.ts +0 -251
  581. package/src/parsers/manifest/smooth/create_parser.ts +0 -699
  582. package/src/parsers/manifest/smooth/get_codecs.ts +0 -55
  583. package/src/parsers/manifest/smooth/index.ts +0 -26
  584. package/src/parsers/manifest/smooth/parse_C_nodes.ts +0 -69
  585. package/src/parsers/manifest/smooth/parse_protection_node.ts +0 -72
  586. package/src/parsers/manifest/smooth/representation_index.ts +0 -704
  587. package/src/parsers/manifest/smooth/utils/add_segment_infos.ts +0 -77
  588. package/src/parsers/manifest/smooth/utils/parseBoolean.ts +0 -31
  589. package/src/parsers/manifest/smooth/utils/reduceChildren.ts +0 -36
  590. package/src/parsers/manifest/smooth/utils/tokens.ts +0 -46
  591. package/src/parsers/manifest/types.ts +0 -395
  592. package/src/parsers/manifest/utils/__tests__/get_first_time_from_adaptations.test.ts +0 -161
  593. package/src/parsers/manifest/utils/__tests__/get_last_time_from_adaptation.test.ts +0 -161
  594. package/src/parsers/manifest/utils/__tests__/index_helpers.test.ts +0 -55
  595. package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +0 -546
  596. package/src/parsers/manifest/utils/check_manifest_ids.ts +0 -83
  597. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +0 -74
  598. package/src/parsers/manifest/utils/get_first_time_from_adaptation.ts +0 -48
  599. package/src/parsers/manifest/utils/get_last_time_from_adaptation.ts +0 -50
  600. package/src/parsers/manifest/utils/get_maximum_positions.ts +0 -87
  601. package/src/parsers/manifest/utils/get_minimum_position.ts +0 -80
  602. package/src/parsers/manifest/utils/index_helpers.ts +0 -204
  603. package/src/parsers/manifest/utils/update_segment_timeline.ts +0 -141
  604. package/src/parsers/texttracks/index.ts +0 -21
  605. package/src/parsers/texttracks/sami/html.ts +0 -219
  606. package/src/parsers/texttracks/sami/native.ts +0 -192
  607. package/src/parsers/texttracks/srt/__tests__/find_end_of_cue_block.test.ts +0 -99
  608. package/src/parsers/texttracks/srt/__tests__/get_cue_blocks.test.ts +0 -119
  609. package/src/parsers/texttracks/srt/__tests__/parse_cue.test.ts +0 -123
  610. package/src/parsers/texttracks/srt/__tests__/parse_timestamp.test.ts +0 -36
  611. package/src/parsers/texttracks/srt/find_end_of_cue_block.ts +0 -46
  612. package/src/parsers/texttracks/srt/get_cue_blocks.ts +0 -49
  613. package/src/parsers/texttracks/srt/html.ts +0 -182
  614. package/src/parsers/texttracks/srt/native.ts +0 -74
  615. package/src/parsers/texttracks/srt/parse_cue.ts +0 -76
  616. package/src/parsers/texttracks/srt/parse_timestamp.ts +0 -37
  617. package/src/parsers/texttracks/ttml/__tests__/resolve_styles_inheritance.test.ts +0 -248
  618. package/src/parsers/texttracks/ttml/get_parameters.ts +0 -106
  619. package/src/parsers/texttracks/ttml/get_styling.ts +0 -146
  620. package/src/parsers/texttracks/ttml/get_time_delimiters.ts +0 -49
  621. package/src/parsers/texttracks/ttml/html/__tests__/__global__/html_ttml_parser.test.test.ts +0 -190
  622. package/src/parsers/texttracks/ttml/html/__tests__/generate_css_test_outline.test.ts +0 -32
  623. package/src/parsers/texttracks/ttml/html/__tests__/ttml_color_to_css_color.test.ts +0 -62
  624. package/src/parsers/texttracks/ttml/html/apply_default_ttml_paragraph_style.ts +0 -67
  625. package/src/parsers/texttracks/ttml/html/apply_extent.ts +0 -65
  626. package/src/parsers/texttracks/ttml/html/apply_font_size.ts +0 -62
  627. package/src/parsers/texttracks/ttml/html/apply_line_height.ts +0 -50
  628. package/src/parsers/texttracks/ttml/html/apply_origin.ts +0 -64
  629. package/src/parsers/texttracks/ttml/html/apply_padding.ts +0 -141
  630. package/src/parsers/texttracks/ttml/html/create_element.ts +0 -549
  631. package/src/parsers/texttracks/ttml/html/generate_css_test_outline.ts +0 -46
  632. package/src/parsers/texttracks/ttml/html/index.ts +0 -23
  633. package/src/parsers/texttracks/ttml/html/parse_cue.ts +0 -65
  634. package/src/parsers/texttracks/ttml/html/parse_ttml_to_div.ts +0 -58
  635. package/src/parsers/texttracks/ttml/html/ttml_color_to_css_color.ts +0 -68
  636. package/src/parsers/texttracks/ttml/native/index.ts +0 -23
  637. package/src/parsers/texttracks/ttml/native/parse_cue.ts +0 -245
  638. package/src/parsers/texttracks/ttml/native/parse_ttml_to_vtt.ts +0 -39
  639. package/src/parsers/texttracks/ttml/parse_ttml.ts +0 -206
  640. package/src/parsers/texttracks/ttml/regexps.ts +0 -65
  641. package/src/parsers/texttracks/ttml/resolve_styles_inheritance.ts +0 -84
  642. package/src/parsers/texttracks/ttml/time_parsing.ts +0 -156
  643. package/src/parsers/texttracks/ttml/xml_utils.ts +0 -166
  644. package/src/parsers/texttracks/types.ts +0 -34
  645. package/src/parsers/texttracks/webvtt/__tests__/get_cue_blocks.test.ts +0 -218
  646. package/src/parsers/texttracks/webvtt/__tests__/get_style_blocks.test.ts +0 -65
  647. package/src/parsers/texttracks/webvtt/__tests__/parse_cue_block.test.ts +0 -249
  648. package/src/parsers/texttracks/webvtt/__tests__/parse_timestamp.test.ts +0 -39
  649. package/src/parsers/texttracks/webvtt/__tests__/utils.test.ts +0 -401
  650. package/src/parsers/texttracks/webvtt/get_cue_blocks.ts +0 -51
  651. package/src/parsers/texttracks/webvtt/get_style_blocks.ts +0 -56
  652. package/src/parsers/texttracks/webvtt/html/__tests__/convert_payload_to_html.test.ts +0 -106
  653. package/src/parsers/texttracks/webvtt/html/__tests__/create_default_style_elements.test.ts +0 -44
  654. package/src/parsers/texttracks/webvtt/html/__tests__/create_style_attribute.test.ts +0 -139
  655. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +0 -140
  656. package/src/parsers/texttracks/webvtt/html/__tests__/parse_style_block.test.ts +0 -345
  657. package/src/parsers/texttracks/webvtt/html/__tests__/parse_webvtt_to_div.test.ts +0 -181
  658. package/src/parsers/texttracks/webvtt/html/__tests__/to_html.test.ts +0 -234
  659. package/src/parsers/texttracks/webvtt/html/convert_payload_to_html.ts +0 -46
  660. package/src/parsers/texttracks/webvtt/html/create_default_style_elements.ts +0 -26
  661. package/src/parsers/texttracks/webvtt/html/create_style_attribute.ts +0 -222
  662. package/src/parsers/texttracks/webvtt/html/create_styled_element.ts +0 -95
  663. package/src/parsers/texttracks/webvtt/html/index.ts +0 -25
  664. package/src/parsers/texttracks/webvtt/html/parse_style_block.ts +0 -76
  665. package/src/parsers/texttracks/webvtt/html/parse_webvtt_to_div.ts +0 -67
  666. package/src/parsers/texttracks/webvtt/html/to_html.ts +0 -96
  667. package/src/parsers/texttracks/webvtt/native/index.ts +0 -23
  668. package/src/parsers/texttracks/webvtt/native/parse_vtt_to_cues.ts +0 -70
  669. package/src/parsers/texttracks/webvtt/native/set_settings_on_cue.ts +0 -95
  670. package/src/parsers/texttracks/webvtt/native/to_native_cue.ts +0 -34
  671. package/src/parsers/texttracks/webvtt/parse_cue_block.ts +0 -128
  672. package/src/parsers/texttracks/webvtt/parse_timestamp.ts +0 -40
  673. package/src/parsers/texttracks/webvtt/utils.ts +0 -135
  674. package/src/public_types.ts +0 -846
  675. package/src/tools/README.md +0 -4
  676. package/src/tools/TextTrackRenderer/index.ts +0 -28
  677. package/src/tools/TextTrackRenderer/text_track_renderer.ts +0 -107
  678. package/src/tools/index.ts +0 -20
  679. package/src/tools/string_utils.ts +0 -24
  680. package/src/transports/README.md +0 -276
  681. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +0 -98
  682. package/src/transports/dash/construct_segment_url.ts +0 -28
  683. package/src/transports/dash/extract_complete_chunks.ts +0 -66
  684. package/src/transports/dash/get_events_out_of_emsgs.ts +0 -105
  685. package/src/transports/dash/image_pipelines.ts +0 -122
  686. package/src/transports/dash/index.ts +0 -23
  687. package/src/transports/dash/init_segment_loader.ts +0 -114
  688. package/src/transports/dash/low_latency_segment_loader.ts +0 -87
  689. package/src/transports/dash/manifest_parser.ts +0 -325
  690. package/src/transports/dash/pipelines.ts +0 -72
  691. package/src/transports/dash/segment_loader.ts +0 -249
  692. package/src/transports/dash/segment_parser.ts +0 -194
  693. package/src/transports/dash/text_loader.ts +0 -120
  694. package/src/transports/dash/text_parser.ts +0 -234
  695. package/src/transports/index.ts +0 -17
  696. package/src/transports/local/index.ts +0 -18
  697. package/src/transports/local/pipelines.ts +0 -100
  698. package/src/transports/local/segment_loader.ts +0 -198
  699. package/src/transports/local/segment_parser.ts +0 -101
  700. package/src/transports/local/text_parser.ts +0 -185
  701. package/src/transports/metaplaylist/README.md +0 -94
  702. package/src/transports/metaplaylist/index.ts +0 -23
  703. package/src/transports/metaplaylist/manifest_loader.ts +0 -62
  704. package/src/transports/metaplaylist/pipelines.ts +0 -425
  705. package/src/transports/smooth/extract_timings_infos.ts +0 -142
  706. package/src/transports/smooth/index.ts +0 -23
  707. package/src/transports/smooth/isobmff/__tests__/create_boxes.test.ts +0 -231
  708. package/src/transports/smooth/isobmff/create_audio_init_segment.ts +0 -84
  709. package/src/transports/smooth/isobmff/create_boxes.ts +0 -481
  710. package/src/transports/smooth/isobmff/create_init_segment.ts +0 -100
  711. package/src/transports/smooth/isobmff/create_traf_box.ts +0 -40
  712. package/src/transports/smooth/isobmff/create_video_init_segment.ts +0 -78
  713. package/src/transports/smooth/isobmff/get_aaces_header.ts +0 -62
  714. package/src/transports/smooth/isobmff/index.ts +0 -32
  715. package/src/transports/smooth/isobmff/parse_tfrf.ts +0 -57
  716. package/src/transports/smooth/isobmff/parse_tfxd.ts +0 -38
  717. package/src/transports/smooth/isobmff/patch_segment.ts +0 -171
  718. package/src/transports/smooth/pipelines.ts +0 -533
  719. package/src/transports/smooth/segment_loader.ts +0 -288
  720. package/src/transports/smooth/utils.ts +0 -106
  721. package/src/transports/types.ts +0 -809
  722. package/src/transports/utils/__tests__/byte_range.test.ts +0 -35
  723. package/src/transports/utils/__tests__/check_isobmff_integrity.test.ts +0 -148
  724. package/src/transports/utils/__tests__/find_complete_box.test.ts +0 -138
  725. package/src/transports/utils/__tests__/infer_segment_container.test.ts +0 -227
  726. package/src/transports/utils/byte_range.ts +0 -25
  727. package/src/transports/utils/call_custom_manifest_loader.ts +0 -147
  728. package/src/transports/utils/check_isobmff_integrity.ts +0 -50
  729. package/src/transports/utils/find_complete_box.ts +0 -63
  730. package/src/transports/utils/generate_manifest_loader.ts +0 -97
  731. package/src/transports/utils/get_isobmff_timing_infos.ts +0 -86
  732. package/src/transports/utils/infer_segment_container.ts +0 -56
  733. package/src/transports/utils/parse_text_track.ts +0 -176
  734. package/src/typings/README.md +0 -7
  735. package/src/typings/globals.d.ts +0 -83
  736. package/src/typings/next-tick.d.ts +0 -23
  737. package/src/utils/README.md +0 -5
  738. package/src/utils/__tests__/are_arrays_of_numbers_equal.test.ts +0 -86
  739. package/src/utils/__tests__/are_codecs_compatible.test.ts +0 -88
  740. package/src/utils/__tests__/array_find.test.ts +0 -113
  741. package/src/utils/__tests__/array_find_index.test.ts +0 -113
  742. package/src/utils/__tests__/array_includes.test.ts +0 -151
  743. package/src/utils/__tests__/assert.test.ts +0 -237
  744. package/src/utils/__tests__/assert_unreachable.test.ts +0 -40
  745. package/src/utils/__tests__/base64.test.ts +0 -147
  746. package/src/utils/__tests__/byte_parsing.test.ts +0 -267
  747. package/src/utils/__tests__/deep_merge.test.ts +0 -48
  748. package/src/utils/__tests__/event_emitter.test.ts +0 -579
  749. package/src/utils/__tests__/flat_map.test.ts +0 -71
  750. package/src/utils/__tests__/get_fuzzed_delay.test.ts +0 -32
  751. package/src/utils/__tests__/hash_buffer.test.ts +0 -105
  752. package/src/utils/__tests__/id_generator.test.ts +0 -80
  753. package/src/utils/__tests__/initialization_segment_cache.test.ts +0 -245
  754. package/src/utils/__tests__/is_non_empty_string.test.ts +0 -41
  755. package/src/utils/__tests__/is_null_or_undefined.test.ts +0 -33
  756. package/src/utils/__tests__/list_to_map.test.ts +0 -46
  757. package/src/utils/__tests__/logger.test.ts +0 -214
  758. package/src/utils/__tests__/noop.test.ts +0 -23
  759. package/src/utils/__tests__/object_assign.test.ts +0 -56
  760. package/src/utils/__tests__/object_values.test.ts +0 -26
  761. package/src/utils/__tests__/ranges.test.ts +0 -907
  762. package/src/utils/__tests__/resolve_url.test.ts +0 -100
  763. package/src/utils/__tests__/simple_set.test.ts +0 -57
  764. package/src/utils/__tests__/sorted_list.test.ts +0 -335
  765. package/src/utils/__tests__/starts_with.test.ts +0 -65
  766. package/src/utils/__tests__/string_parsing.test.ts +0 -267
  767. package/src/utils/__tests__/uniq.test.ts +0 -134
  768. package/src/utils/__tests__/warn_once.test.ts +0 -38
  769. package/src/utils/__tests__/weak_map_memory.test.ts +0 -188
  770. package/src/utils/are_arrays_of_numbers_equal.ts +0 -39
  771. package/src/utils/are_codecs_compatible.ts +0 -51
  772. package/src/utils/array_find.ts +0 -55
  773. package/src/utils/array_find_index.ts +0 -54
  774. package/src/utils/array_includes.ts +0 -93
  775. package/src/utils/assert.ts +0 -65
  776. package/src/utils/assert_unreachable.ts +0 -45
  777. package/src/utils/base64.ts +0 -153
  778. package/src/utils/byte_parsing.ts +0 -256
  779. package/src/utils/cancellable_sleep.ts +0 -41
  780. package/src/utils/create_cancellable_promise.ts +0 -69
  781. package/src/utils/deep_merge.ts +0 -49
  782. package/src/utils/event_emitter.ts +0 -147
  783. package/src/utils/flat_map.ts +0 -50
  784. package/src/utils/get_fuzzed_delay.ts +0 -27
  785. package/src/utils/hash_buffer.ts +0 -42
  786. package/src/utils/id_generator.ts +0 -35
  787. package/src/utils/initialization_segment_cache.ts +0 -68
  788. package/src/utils/is_non_empty_string.ts +0 -23
  789. package/src/utils/is_null_or_undefined.ts +0 -27
  790. package/src/utils/languages/ISO_639-1_to_ISO_639-3.ts +0 -207
  791. package/src/utils/languages/ISO_639-2_to_ISO_639-3.ts +0 -43
  792. package/src/utils/languages/__tests__/normalize.test.ts +0 -290
  793. package/src/utils/languages/index.ts +0 -29
  794. package/src/utils/languages/normalize.ts +0 -152
  795. package/src/utils/list_to_map.ts +0 -32
  796. package/src/utils/logger.ts +0 -100
  797. package/src/utils/noop.ts +0 -26
  798. package/src/utils/object_assign.ts +0 -60
  799. package/src/utils/object_values.ts +0 -31
  800. package/src/utils/ranges.ts +0 -499
  801. package/src/utils/reference.ts +0 -390
  802. package/src/utils/request/fetch.ts +0 -250
  803. package/src/utils/request/index.ts +0 -38
  804. package/src/utils/request/xhr.ts +0 -287
  805. package/src/utils/resolve_url.ts +0 -126
  806. package/src/utils/retry_promise_with_backoff.ts +0 -95
  807. package/src/utils/simple_set.ts +0 -67
  808. package/src/utils/sleep.ts +0 -14
  809. package/src/utils/slice_uint8array.ts +0 -53
  810. package/src/utils/sorted_list.ts +0 -240
  811. package/src/utils/starts_with.ts +0 -42
  812. package/src/utils/string_parsing.ts +0 -414
  813. package/src/utils/task_canceller.ts +0 -367
  814. package/src/utils/uniq.ts +0 -49
  815. package/src/utils/warn_once.ts +0 -34
  816. package/src/utils/weak_map_memory.ts +0 -89
  817. package/src/utils/wrapInPromise.ts +0 -24
  818. package/tsconfig.json +0 -28
  819. package/tsconfig.modules.json +0 -36
@@ -1,1049 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- import config from "../../../../../../config";
18
- import { NetworkError } from "../../../../../../errors";
19
- import log from "../../../../../../log";
20
- import {
21
- IRepresentationIndex,
22
- ISegment,
23
- Representation,
24
- } from "../../../../../../manifest";
25
- import { IPlayerError } from "../../../../../../public_types";
26
- import assert from "../../../../../../utils/assert";
27
- import { IEMSG } from "../../../../../containers/isobmff";
28
- import clearTimelineFromPosition from "../../../../utils/clear_timeline_from_position";
29
- import {
30
- checkDiscontinuity,
31
- fromIndexTime,
32
- getIndexSegmentEnd,
33
- IIndexSegment,
34
- toIndexTime,
35
- } from "../../../../utils/index_helpers";
36
- import updateSegmentTimeline from "../../../../utils/update_segment_timeline";
37
- import { ISegmentTimelineElement } from "../../../node_parser_types";
38
- import ManifestBoundsCalculator from "../../manifest_bounds_calculator";
39
- import getInitSegment from "../get_init_segment";
40
- import getSegmentsFromTimeline from "../get_segments_from_timeline";
41
- import { constructRepresentationUrl } from "../tokens";
42
- import { getSegmentTimeRoundingError } from "../utils";
43
- import constructTimelineFromElements from "./construct_timeline_from_elements";
44
- // eslint-disable-next-line max-len
45
- import constructTimelineFromPreviousTimeline from "./construct_timeline_from_previous_timeline";
46
-
47
- /**
48
- * Index property defined for a SegmentTimeline RepresentationIndex
49
- * This object contains every property needed to generate an ISegment for a
50
- * given media time.
51
- */
52
- export interface ITimelineIndex {
53
- /** If `false`, the last segment anounced might be still incomplete. */
54
- availabilityTimeComplete : boolean;
55
- /** Minimum availabilityTimeOffset concerning the segments of this Representation. */
56
- availabilityTimeOffset : number;
57
- /** Byte range for a possible index of segments in the server. */
58
- indexRange?: [number, number] | undefined;
59
- /**
60
- * Temporal offset, in the current timescale (see timescale), to add to the
61
- * presentation time (time a segment has at decoding time) to obtain the
62
- * corresponding media time (original time of the media segment in the index
63
- * and on the media file).
64
- * For example, to look for a segment beginning at a second `T` on a
65
- * HTMLMediaElement, we actually will look for a segment in the index
66
- * beginning at:
67
- * ```
68
- * T * timescale + indexTimeOffset
69
- * ```
70
- */
71
- indexTimeOffset : number;
72
- /** Information on the initialization segment. */
73
- initialization? : {
74
- /**
75
- * URL path, to add to the wanted CDN, to access the initialization segment.
76
- * `null` if no URL exists.
77
- */
78
- url: string | null;
79
- /** possible byte range to request it. */
80
- range?: [number, number] | undefined;
81
- } | undefined;
82
- /**
83
- * Template for the URL suffix (to concatenate to the wanted CDN), to access any
84
- * media segment.
85
- * Can contain tokens to replace to convert it to real URLs.
86
- *
87
- * `null` if no URL exists.
88
- */
89
- segmentUrlTemplate : string | null ;
90
- /** Number from which the first segments in this index starts with. */
91
- startNumber? : number | undefined;
92
- /** Number associated to the last segment in this index. */
93
- endNumber? : number | undefined;
94
- /**
95
- * Every segments defined in this index.
96
- * `null` at the beginning as this property is parsed lazily (only when first
97
- * needed) for performances reasons.
98
- *
99
- * /!\ Please note that this structure should follow the exact same structure
100
- * than a SegmentTimeline element in the corresponding MPD.
101
- * This means:
102
- * - It should have the same amount of elements in its array than there was
103
- * `<S>` elements in the SegmentTimeline.
104
- * - Each of those same elements should have the same start time, the same
105
- * duration and the same repeat counter than what could be deduced from
106
- * the SegmentTimeline.
107
- * This is needed to be able to run parsing optimization when refreshing the
108
- * MPD. Not doing so could lead to the RxPlayer not being able to play the
109
- * stream anymore.
110
- */
111
- timeline : IIndexSegment[] | null;
112
- /**
113
- * Timescale to convert a time given here into seconds.
114
- * This is done by this simple operation:
115
- * ``timeInSeconds = timeInIndex * timescale``
116
- */
117
- timescale : number;
118
- }
119
-
120
- /**
121
- * `index` Argument for a SegmentTimeline RepresentationIndex.
122
- * Most of the properties here are already defined in ITimelineIndex.
123
- */
124
- export interface ITimelineIndexIndexArgument {
125
- indexRange?: [number, number] | undefined;
126
- initialization? : { media? : string | undefined;
127
- range?: [number, number] | undefined; } |
128
- undefined;
129
- media? : string | undefined;
130
- startNumber? : number | undefined;
131
- endNumber? : number | undefined;
132
- timescale? : number | undefined;
133
- /**
134
- * Offset present in the index to convert from the mediaTime (time declared in
135
- * the media segments and in this index) to the presentationTime (time wanted
136
- * when decoding the segment). Basically by doing something along the line
137
- * of:
138
- * ```
139
- * presentationTimeInSeconds =
140
- * mediaTimeInSeconds -
141
- * presentationTimeOffsetInSeconds +
142
- * periodStartInSeconds
143
- * ```
144
- * The time given here is in the current
145
- * timescale (see timescale)
146
- */
147
- presentationTimeOffset? : number | undefined;
148
-
149
- timelineParser? : (() => HTMLCollection) | undefined;
150
- timeline? : ISegmentTimelineElement[] | undefined;
151
- }
152
-
153
- /** Aditional context needed by a SegmentTimeline RepresentationIndex. */
154
- export interface ITimelineIndexContextArgument {
155
- /**
156
- * If `false`, declared segments in the MPD might still be not completely generated.
157
- * If `true`, they are completely generated.
158
- *
159
- * If `undefined`, the corresponding property was not set in the MPD and it is
160
- * thus assumed that they are all generated.
161
- * It might however be semantically different than `true` in the RxPlayer as it
162
- * means that the packager didn't include that information in the MPD.
163
- */
164
- availabilityTimeComplete : boolean | undefined;
165
- /**
166
- * availability time offset of the concerned Adaptation.
167
- *
168
- * If `undefined`, the corresponding property was not set in the MPD and it is
169
- * thus assumed to be equal to `0`.
170
- * It might however be semantically different than `0` in the RxPlayer as it
171
- * means that the packager didn't include that information in the MPD.
172
- */
173
- availabilityTimeOffset : number | undefined;
174
- /** Allows to obtain the minimum and maximum positions of a content. */
175
- manifestBoundsCalculator : ManifestBoundsCalculator;
176
- /** Start of the period linked to this RepresentationIndex, in seconds. */
177
- periodStart : number;
178
- /** End of the period linked to this RepresentationIndex, in seconds. */
179
- periodEnd : number|undefined;
180
- /** Whether the corresponding Manifest can be updated and changed. */
181
- isDynamic : boolean;
182
- /**
183
- * Time (in terms of `performance.now`) at which the XML file containing this
184
- * index was received
185
- */
186
- receivedTime? : number | undefined;
187
- /** ID of the Representation concerned. */
188
- representationId? : string | undefined;
189
- /** Bitrate of the Representation concerned. */
190
- representationBitrate? : number | undefined;
191
- /**
192
- * The parser should take this previous version of the
193
- * `TimelineRepresentationIndex` - which was from the same Representation
194
- * parsed at an earlier time - as a base to speed-up the parsing process.
195
- * /!\ If unexpected differences exist between both, there is a risk of
196
- * de-synchronization with what is actually on the server,
197
- * Use with moderation.
198
- */
199
- unsafelyBaseOnPreviousRepresentation : Representation | null;
200
- /** Function that tells if an EMSG is whitelisted by the manifest */
201
- isEMSGWhitelisted: (inbandEvent: IEMSG) => boolean;
202
- /**
203
- * Set to `true` if the linked Period is the chronologically last one in the
204
- * Manifest.
205
- */
206
- isLastPeriod : boolean;
207
- }
208
-
209
- export interface ILastSegmentInformation {
210
- /** End of the timeline on `time`, timescaled. */
211
- lastPosition? : number | undefined;
212
-
213
- /** Defines the time at which `lastPosition` was last calculated. */
214
- time : number;
215
- }
216
-
217
- /**
218
- * `IRepresentationIndex` implementation for a DASH `SegmentTimeline` segment
219
- * indexing scheme.
220
- * @class TimelineRepresentationIndex
221
- */
222
- export default class TimelineRepresentationIndex implements IRepresentationIndex {
223
- /** Underlying structure to retrieve segment information. */
224
- protected _index : ITimelineIndex;
225
-
226
- /** Time, in terms of `performance.now`, of the last Manifest update. */
227
- private _lastUpdate : number;
228
-
229
- /** Absolute start of the period, timescaled and converted to index time. */
230
- private _scaledPeriodStart : number;
231
-
232
- /** Absolute end of the period, timescaled and converted to index time. */
233
- private _scaledPeriodEnd : number | undefined;
234
-
235
- /** Whether this RepresentationIndex can change over time. */
236
- private _isDynamic : boolean;
237
-
238
- /** Retrieve the maximum and minimum position of the whole content. */
239
- private _manifestBoundsCalculator : ManifestBoundsCalculator;
240
-
241
- /**
242
- * Lazily get the S elements from this timeline.
243
- * `null` once this call has been done once, to free memory.
244
- */
245
- private _parseTimeline : (() => HTMLCollection) | null;
246
-
247
- /**
248
- * This variable represents the same `TimelineRepresentationIndex` at the
249
- * previous Manifest update.
250
- * Note that it is not always set.
251
- * This can be used as a base to speed-up the creation of the underlying
252
- * index structure as it can be really heavy for long Manifests.
253
- * To avoid taking too much memory, this variable is reset to `null` once used.
254
- */
255
- private _unsafelyBaseOnPreviousIndex : TimelineRepresentationIndex | null;
256
-
257
- /* Function that tells if an EMSG is whitelisted by the manifest */
258
- private _isEMSGWhitelisted: (inbandEvent: IEMSG) => boolean;
259
-
260
- /** `true` if the linked Period is the chronologically last one in the Manifest. */
261
- private _isLastPeriod: boolean;
262
-
263
- /**
264
- * @param {Object} index
265
- * @param {Object} context
266
- */
267
- constructor(
268
- index : ITimelineIndexIndexArgument,
269
- context : ITimelineIndexContextArgument
270
- ) {
271
- if (!TimelineRepresentationIndex.isTimelineIndexArgument(index)) {
272
- throw new Error("The given index is not compatible with a " +
273
- "TimelineRepresentationIndex.");
274
- }
275
- const { availabilityTimeComplete,
276
- availabilityTimeOffset,
277
- manifestBoundsCalculator,
278
- isDynamic,
279
- isLastPeriod,
280
- representationId,
281
- representationBitrate,
282
- periodStart,
283
- periodEnd,
284
- isEMSGWhitelisted } = context;
285
- const timescale = index.timescale ?? 1;
286
-
287
- const presentationTimeOffset = index.presentationTimeOffset != null ?
288
- index.presentationTimeOffset :
289
- 0;
290
-
291
- const scaledStart = periodStart * timescale;
292
- const indexTimeOffset = presentationTimeOffset - scaledStart;
293
-
294
- this._manifestBoundsCalculator = manifestBoundsCalculator;
295
-
296
- this._isEMSGWhitelisted = isEMSGWhitelisted;
297
- this._isLastPeriod = isLastPeriod;
298
- this._lastUpdate = context.receivedTime == null ?
299
- performance.now() :
300
- context.receivedTime;
301
-
302
- this._unsafelyBaseOnPreviousIndex = null;
303
- if (context.unsafelyBaseOnPreviousRepresentation !== null &&
304
- context.unsafelyBaseOnPreviousRepresentation.index
305
- instanceof TimelineRepresentationIndex)
306
- {
307
- // avoid too much nested references, to keep memory down
308
- context.unsafelyBaseOnPreviousRepresentation
309
- .index._unsafelyBaseOnPreviousIndex = null;
310
- this._unsafelyBaseOnPreviousIndex = context
311
- .unsafelyBaseOnPreviousRepresentation.index;
312
- }
313
-
314
- this._isDynamic = isDynamic;
315
- this._parseTimeline = index.timelineParser ?? null;
316
- const initializationUrl = index.initialization?.media === undefined ?
317
- null :
318
- constructRepresentationUrl(index.initialization.media,
319
- representationId,
320
- representationBitrate);
321
-
322
- const segmentUrlTemplate = index.media === undefined ?
323
- null :
324
- constructRepresentationUrl(index.media, representationId, representationBitrate);
325
-
326
- let actualAvailabilityTimeOffset;
327
- // Technically, it seems (although it is not clear) that an MPD may contain
328
- // future segments and it's the job of a player to not request segments later
329
- // than the time at which they should be available.
330
- // In practice, we don't do that for various reasons: precision issues,
331
- // various DASH spec interpretations by packagers and players...
332
- //
333
- // So as a compromise, if nothing in the MPD indicates that future segments
334
- // may be announced (see code below), we will act as if ALL segments in this
335
- // TimelineRepresentationIndex are requestable
336
- if (
337
- availabilityTimeOffset === undefined &&
338
- availabilityTimeComplete === undefined
339
- ) {
340
- actualAvailabilityTimeOffset = Infinity; // Meaning: we can request
341
- // everything in the index
342
- } else {
343
- actualAvailabilityTimeOffset = availabilityTimeOffset ?? 0;
344
- }
345
-
346
- this._index = { availabilityTimeComplete: availabilityTimeComplete ?? true,
347
- availabilityTimeOffset: actualAvailabilityTimeOffset,
348
- indexRange: index.indexRange,
349
- indexTimeOffset,
350
- initialization: index.initialization == null ?
351
- undefined :
352
- {
353
- url: initializationUrl,
354
- range: index.initialization.range,
355
- },
356
- segmentUrlTemplate,
357
- startNumber: index.startNumber,
358
- endNumber: index.endNumber,
359
- timeline: index.timeline === undefined ?
360
- null :
361
- updateTimelineFromEndNumber(index.timeline,
362
- index.startNumber,
363
- index.endNumber),
364
- timescale };
365
-
366
- this._scaledPeriodStart = toIndexTime(periodStart, this._index);
367
- this._scaledPeriodEnd = periodEnd === undefined ? undefined :
368
- toIndexTime(periodEnd, this._index);
369
- }
370
-
371
- /**
372
- * Construct init Segment.
373
- * @returns {Object}
374
- */
375
- getInitSegment() : ISegment {
376
- return getInitSegment(this._index, this._isEMSGWhitelisted);
377
- }
378
-
379
- /**
380
- * Asks for segments to download for a given time range.
381
- * @param {Number} from - Beginning of the time wanted, in seconds
382
- * @param {Number} duration - duration wanted, in seconds
383
- * @returns {Array.<Object>}
384
- */
385
- getSegments(from : number, duration : number) : ISegment[] {
386
- this._refreshTimeline(); // clear timeline if needed
387
- if (this._index.timeline === null) {
388
- this._index.timeline = this._getTimeline();
389
- }
390
-
391
- // destructuring to please TypeScript
392
- const { segmentUrlTemplate,
393
- startNumber,
394
- endNumber,
395
- timeline,
396
- timescale,
397
- indexTimeOffset } = this._index;
398
- return getSegmentsFromTimeline({ segmentUrlTemplate,
399
- startNumber,
400
- endNumber,
401
- timeline,
402
- timescale,
403
- indexTimeOffset },
404
- from,
405
- duration,
406
- this._manifestBoundsCalculator,
407
- this._scaledPeriodEnd,
408
- this._isEMSGWhitelisted);
409
- }
410
-
411
- /**
412
- * Returns true if the index should be refreshed.
413
- * @returns {Boolean}
414
- */
415
- shouldRefresh() : false {
416
- // DASH Manifest based on a SegmentTimeline should have minimumUpdatePeriod
417
- // attribute which should be sufficient to know when to refresh it.
418
- return false;
419
- }
420
-
421
- /**
422
- * Returns the starting time, in seconds, of the earliest segment currently
423
- * available.
424
- * Returns null if nothing is in the index
425
- * @returns {Number|null}
426
- */
427
- getFirstAvailablePosition(): number | null {
428
- this._refreshTimeline();
429
- if (this._index.timeline === null) {
430
- this._index.timeline = this._getTimeline();
431
- }
432
- const timeline = this._index.timeline;
433
- return timeline.length === 0 ? null :
434
- fromIndexTime(Math.max(this._scaledPeriodStart,
435
- timeline[0].start),
436
- this._index);
437
- }
438
-
439
- /**
440
- * Returns the ending time, in seconds, of the last segment currently
441
- * available.
442
- * Returns null if nothing is in the index
443
- * @returns {Number|null}
444
- */
445
- getLastAvailablePosition(): number | null {
446
- this._refreshTimeline();
447
- if (this._index.timeline === null) {
448
- this._index.timeline = this._getTimeline();
449
- }
450
-
451
- const lastReqSegInfo = getLastRequestableSegmentInfo(
452
- // Needed typecast for TypeScript
453
- this._index as typeof this._index & { timeline: IIndexSegment[] },
454
- this._manifestBoundsCalculator,
455
- this._scaledPeriodEnd
456
- );
457
- if (lastReqSegInfo === null) {
458
- return null;
459
- }
460
- const lastScaledPosition = Math.min(lastReqSegInfo.end,
461
- this._scaledPeriodEnd ?? Infinity);
462
- return fromIndexTime(lastScaledPosition, this._index);
463
- }
464
-
465
- /**
466
- * Returns the absolute end in seconds this RepresentationIndex can reach once
467
- * all segments are available.
468
- * @returns {number|null|undefined}
469
- */
470
- getEnd(): number | undefined | null {
471
- if (this._isDynamic && !this._isLastPeriod) {
472
- return undefined;
473
- }
474
-
475
- this._refreshTimeline();
476
- if (this._index.timeline === null) {
477
- this._index.timeline = this._getTimeline();
478
- }
479
- if (this._index.timeline.length <= 0) {
480
- return null;
481
- }
482
- const lastSegment = this._index.timeline[this._index.timeline.length - 1];
483
- const lastTime = Math.min(getIndexSegmentEnd(lastSegment,
484
- null,
485
- this._scaledPeriodEnd),
486
- this._scaledPeriodEnd ?? Infinity);
487
- return fromIndexTime(lastTime, this._index);
488
- }
489
-
490
- /**
491
- * Returns:
492
- * - `true` if in the given time interval, at least one new segment is
493
- * expected to be available in the future.
494
- * - `false` either if all segments in that time interval are already
495
- * available for download or if none will ever be available for it.
496
- * - `undefined` when it is not possible to tell.
497
- * @param {number} start
498
- * @param {number} end
499
- * @returns {boolean|undefined}
500
- */
501
- awaitSegmentBetween(start: number, end: number): boolean | undefined {
502
- assert(start <= end);
503
- if (!this._isDynamic) {
504
- return false; // No segment will be newly available in the future
505
- }
506
-
507
- this._refreshTimeline();
508
- if (this._index.timeline === null) {
509
- this._index.timeline = this._getTimeline();
510
- }
511
- const { timescale, timeline } = this._index;
512
- const segmentTimeRounding = getSegmentTimeRoundingError(timescale);
513
- const scaledWantedEnd = toIndexTime(end, this._index);
514
- const lastReqSegInfo = getLastRequestableSegmentInfo(
515
- // Needed typecast for TypeScript
516
- this._index as typeof this._index & { timeline: IIndexSegment[] },
517
- this._manifestBoundsCalculator,
518
- this._scaledPeriodEnd
519
- );
520
- if (lastReqSegInfo !== null) {
521
- const lastReqSegmentEnd = Math.min(lastReqSegInfo.end,
522
- this._scaledPeriodEnd ?? Infinity);
523
- const roundedReqSegmentEnd = lastReqSegmentEnd + segmentTimeRounding;
524
- if (roundedReqSegmentEnd >= Math.min(scaledWantedEnd,
525
- this._scaledPeriodEnd ?? Infinity))
526
- {
527
- return false; // everything up to that point is already requestable
528
- }
529
- }
530
-
531
- const scaledWantedStart = toIndexTime(start, this._index);
532
- if (timeline.length > 0 &&
533
- lastReqSegInfo !== null &&
534
- !lastReqSegInfo.isLastOfTimeline)
535
- {
536
- // There are some future segments already anounced in the MPD
537
-
538
- const lastSegment = timeline[timeline.length - 1];
539
- const lastSegmentEnd = getIndexSegmentEnd(lastSegment,
540
- null,
541
- this._scaledPeriodEnd);
542
- const roundedLastSegEnd = lastSegmentEnd + segmentTimeRounding;
543
- if (scaledWantedStart < roundedLastSegEnd + segmentTimeRounding) {
544
- return true; // The MPD's timeline already contains one such element,
545
- // It is just not requestable yet
546
- }
547
- }
548
-
549
- if (!this._isLastPeriod) {
550
- // Let's consider - perhaps wrongly, that Periods which aren't the last
551
- // one have all of their segments announced.
552
- return false;
553
- }
554
-
555
- if (this._scaledPeriodEnd === undefined) {
556
- return (scaledWantedEnd + segmentTimeRounding) > this._scaledPeriodStart ?
557
- undefined : // There may be future segments at this point
558
- false; // Before the current Period
559
- }
560
-
561
- // `true` if within the boundaries of this Period. `false` otherwise.
562
- return (scaledWantedStart - segmentTimeRounding) < this._scaledPeriodEnd &&
563
- (scaledWantedEnd + segmentTimeRounding) > this._scaledPeriodStart;
564
- }
565
-
566
- /**
567
- * Returns true if a Segment returned by this index is still considered
568
- * available.
569
- * Returns false if it is not available anymore.
570
- * Returns undefined if we cannot know whether it is still available or not.
571
- * @param {Object} segment
572
- * @returns {Boolean|undefined}
573
- */
574
- isSegmentStillAvailable(segment : ISegment) : boolean | undefined {
575
- if (segment.isInit) {
576
- return true;
577
- }
578
- this._refreshTimeline();
579
- if (this._index.timeline === null) {
580
- this._index.timeline = this._getTimeline();
581
- }
582
- return isSegmentStillAvailable(segment,
583
- // Needed typecast for TypeScript
584
- this._index as typeof this._index & {
585
- timeline: IIndexSegment[];
586
- },
587
- this._manifestBoundsCalculator,
588
- this._scaledPeriodEnd);
589
- }
590
-
591
- /**
592
- * Checks if the time given is in a discontinuity. That is:
593
- * - We're on the upper bound of the current range (end of the range - time
594
- * is inferior to the timescale)
595
- * - The next range starts after the end of the current range.
596
- * @param {Number} time
597
- * @returns {Number|null}
598
- */
599
- checkDiscontinuity(time : number) : number | null {
600
- this._refreshTimeline();
601
- let timeline = this._index.timeline;
602
- if (timeline === null) {
603
- timeline = this._getTimeline();
604
- this._index.timeline = timeline;
605
- }
606
- return checkDiscontinuity({ timeline,
607
- timescale: this._index.timescale,
608
- indexTimeOffset: this._index.indexTimeOffset },
609
- time,
610
- this._scaledPeriodEnd);
611
- }
612
-
613
- /**
614
- * @param {Error} error
615
- * @returns {Boolean}
616
- */
617
- canBeOutOfSyncError(error : IPlayerError) : boolean {
618
- if (!this._isDynamic) {
619
- return false;
620
- }
621
- return error instanceof NetworkError &&
622
- error.isHttpError(404);
623
- }
624
-
625
- /**
626
- * Replace this RepresentationIndex with one from a new version of the
627
- * Manifest.
628
- * @param {Object} newIndex
629
- */
630
- _replace(newIndex : TimelineRepresentationIndex) : void {
631
- this._parseTimeline = newIndex._parseTimeline;
632
- this._index = newIndex._index;
633
- this._isDynamic = newIndex._isDynamic;
634
- this._scaledPeriodStart = newIndex._scaledPeriodStart;
635
- this._scaledPeriodEnd = newIndex._scaledPeriodEnd;
636
- this._lastUpdate = newIndex._lastUpdate;
637
- this._manifestBoundsCalculator = newIndex._manifestBoundsCalculator;
638
- this._isLastPeriod = newIndex._isLastPeriod;
639
- }
640
-
641
- /**
642
- * Update this RepresentationIndex with a shorter version of it coming from a
643
- * new version of the MPD.
644
- * @param {Object} newIndex
645
- */
646
- _update(newIndex : TimelineRepresentationIndex) : void {
647
- if (this._index.timeline === null) {
648
- this._index.timeline = this._getTimeline();
649
- }
650
- if (newIndex._index.timeline === null) {
651
- newIndex._index.timeline = newIndex._getTimeline();
652
- }
653
- const hasReplaced = updateSegmentTimeline(this._index.timeline,
654
- newIndex._index.timeline);
655
- if (hasReplaced) {
656
- this._index.startNumber = newIndex._index.startNumber;
657
- }
658
- this._index.availabilityTimeOffset = newIndex._index.availabilityTimeOffset;
659
- this._index.availabilityTimeComplete = newIndex._index.availabilityTimeComplete;
660
- this._index.endNumber = newIndex._index.endNumber;
661
- this._isDynamic = newIndex._isDynamic;
662
- this._scaledPeriodStart = newIndex._scaledPeriodStart;
663
- this._scaledPeriodEnd = newIndex._scaledPeriodEnd;
664
- this._lastUpdate = newIndex._lastUpdate;
665
- this._isLastPeriod = newIndex._isLastPeriod;
666
- }
667
-
668
- /**
669
- * Returns `false` if this RepresentationIndex currently contains its last
670
- * segment.
671
- * Returns `true` if it's still pending.
672
- * @returns {Boolean}
673
- */
674
- isStillAwaitingFutureSegments() : boolean {
675
- if (!this._isDynamic) {
676
- return false;
677
- }
678
-
679
- this._refreshTimeline();
680
- if (this._index.timeline === null) {
681
- this._index.timeline = this._getTimeline();
682
- }
683
-
684
- const { timeline } = this._index;
685
- if (timeline.length === 0) {
686
- // No segment announced in this Period
687
- if (this._scaledPeriodEnd !== undefined) {
688
- const liveEdge = this._manifestBoundsCalculator.getEstimatedLiveEdge();
689
- if (liveEdge !== undefined &&
690
- toIndexTime(liveEdge, this._index) > this._scaledPeriodEnd)
691
- {
692
- // This Period is over, we're not awaiting anything
693
- return false;
694
- }
695
- }
696
- // Let's just consider that we're awaiting only for when this is the last Period.
697
- return this._isLastPeriod;
698
- }
699
-
700
- const segmentTimeRounding = getSegmentTimeRoundingError(this._index.timescale);
701
- const lastReqSegInfo = getLastRequestableSegmentInfo(
702
- // Needed typecast for TypeScript
703
- this._index as typeof this._index & { timeline: IIndexSegment[] },
704
- this._manifestBoundsCalculator,
705
- this._scaledPeriodEnd
706
- );
707
-
708
- if (lastReqSegInfo !== null && !lastReqSegInfo.isLastOfTimeline) {
709
- // There might be non-yet requestable segments in the manifest
710
- const lastReqSegmentEnd = Math.min(lastReqSegInfo.end,
711
- this._scaledPeriodEnd ?? Infinity);
712
- if (this._scaledPeriodEnd !== undefined &&
713
- lastReqSegmentEnd + segmentTimeRounding >= this._scaledPeriodEnd)
714
- {
715
- // The last requestable segment ends after the end of the Period anyway
716
- return false;
717
- }
718
- return true; // There are not-yet requestable segments
719
- }
720
-
721
- if (!this._isLastPeriod) {
722
- // This index is not linked to the current last Period in the MPD, in
723
- // which case it is inferred that all segments have been announced.
724
- //
725
- // Note that this condition might break very very rare use cases where old
726
- // Periods are still being generated, yet it should fix more cases than it
727
- // breaks.
728
- return false;
729
- }
730
-
731
- if (this._scaledPeriodEnd === undefined) {
732
- // This is the last Period of a dynamic content whose end is unknown.
733
- // Just return true.
734
- return true;
735
- }
736
- const lastSegment = timeline[timeline.length - 1];
737
- const lastSegmentEnd = getIndexSegmentEnd(lastSegment,
738
- null,
739
- this._scaledPeriodEnd);
740
- // We're awaiting future segments only if the current end is before the end
741
- // of the Period
742
- return (lastSegmentEnd + segmentTimeRounding) < this._scaledPeriodEnd;
743
- }
744
-
745
- /**
746
- * @returns {Boolean}
747
- */
748
- isInitialized() : true {
749
- return true;
750
- }
751
-
752
- /**
753
- * Returns `true` if the given object can be used as an "index" argument to
754
- * create a new `TimelineRepresentationIndex`.
755
- * @param {Object} index
756
- * @returns {boolean}
757
- */
758
- static isTimelineIndexArgument(index : ITimelineIndexIndexArgument) : boolean {
759
- return typeof index.timelineParser === "function" ||
760
- Array.isArray(index.timeline);
761
- }
762
-
763
- /**
764
- * Clean-up timeline to remove segment information which should not be
765
- * available due to timeshifting.
766
- */
767
- private _refreshTimeline() : void {
768
- if (this._index.timeline === null) {
769
- this._index.timeline = this._getTimeline();
770
- }
771
- if (!this._isDynamic) {
772
- return;
773
- }
774
- const firstPosition = this._manifestBoundsCalculator
775
- .getEstimatedMinimumSegmentTime();
776
- if (firstPosition == null) {
777
- return; // we don't know yet
778
- }
779
- const scaledFirstPosition = toIndexTime(firstPosition, this._index);
780
- const nbEltsRemoved = clearTimelineFromPosition(this._index.timeline,
781
- scaledFirstPosition);
782
- if (this._index.startNumber !== undefined) {
783
- this._index.startNumber += nbEltsRemoved;
784
- } else if (this._index.endNumber !== undefined) {
785
- this._index.startNumber = nbEltsRemoved + 1;
786
- }
787
- }
788
-
789
- /**
790
- * Allows to generate the "timeline" for this RepresentationIndex.
791
- * Call this function when the timeline is unknown.
792
- * This function was added to only perform that task lazily, i.e. only when
793
- * first needed.
794
- * After calling it, every now unneeded variable will be freed from memory.
795
- * This means that calling _getTimeline more than once will just return an
796
- * empty array.
797
- *
798
- * /!\ Please note that this structure should follow the exact same structure
799
- * than a SegmentTimeline element in the corresponding MPD.
800
- * This means:
801
- * - It should have the same amount of elements in its array than there was
802
- * `<S>` elements in the SegmentTimeline.
803
- * - Each of those same elements should have the same start time, the same
804
- * duration and the same repeat counter than what could be deduced from
805
- * the SegmentTimeline.
806
- * This is needed to be able to run parsing optimization when refreshing the
807
- * MPD. Not doing so could lead to the RxPlayer not being able to play the
808
- * stream anymore.
809
- * @returns {Array.<Object>}
810
- */
811
- private _getTimeline() : IIndexSegment[] {
812
- if (this._parseTimeline === null) {
813
- if (this._index.timeline !== null) {
814
- return this._index.timeline;
815
- }
816
- log.error("DASH: Timeline already lazily parsed.");
817
- return [];
818
- }
819
-
820
- const newElements = this._parseTimeline();
821
- this._parseTimeline = null; // Free memory
822
-
823
- const { MIN_DASH_S_ELEMENTS_TO_PARSE_UNSAFELY } = config.getCurrent();
824
- if (this._unsafelyBaseOnPreviousIndex === null ||
825
- newElements.length < MIN_DASH_S_ELEMENTS_TO_PARSE_UNSAFELY)
826
- {
827
- // Just completely parse the current timeline
828
- return updateTimelineFromEndNumber(constructTimelineFromElements(newElements),
829
- this._index.startNumber,
830
- this._index.endNumber);
831
- }
832
-
833
- // Construct previously parsed timeline if not already done
834
- let prevTimeline : IIndexSegment[];
835
- if (this._unsafelyBaseOnPreviousIndex._index.timeline === null) {
836
- prevTimeline = this._unsafelyBaseOnPreviousIndex._getTimeline();
837
- this._unsafelyBaseOnPreviousIndex._index.timeline = prevTimeline;
838
- } else {
839
- prevTimeline = this._unsafelyBaseOnPreviousIndex._index.timeline;
840
- }
841
- this._unsafelyBaseOnPreviousIndex = null; // Free memory
842
-
843
- return updateTimelineFromEndNumber(
844
- constructTimelineFromPreviousTimeline(newElements, prevTimeline),
845
- this._index.startNumber,
846
- this._index.endNumber);
847
-
848
- }
849
- }
850
-
851
- /**
852
- * Take the original SegmentTimeline's parsed timeline and, if an `endNumber` is
853
- * specified, filter segments which possess a number superior to that number.
854
- *
855
- * This should only be useful in only rare and broken MPDs, but we aim to
856
- * respect the specification even in those cases.
857
- *
858
- * @param {Array.<Object>} timeline
859
- * @param {number|undefined} startNumber
860
- * @param {Array.<Object>} endNumber
861
- * @returns {number|undefined}
862
- */
863
- function updateTimelineFromEndNumber(
864
- timeline : IIndexSegment[],
865
- startNumber : number | undefined,
866
- endNumber : number | undefined
867
- ) : IIndexSegment[] {
868
- if (endNumber === undefined) {
869
- return timeline;
870
- }
871
- let currNumber = startNumber ?? 1;
872
- for (let idx = 0; idx < timeline.length; idx++) {
873
- const seg = timeline[idx];
874
- currNumber += seg.repeatCount + 1;
875
- if (currNumber > endNumber) {
876
- if (currNumber === endNumber + 1) {
877
- return timeline.slice(0, idx + 1);
878
- } else {
879
- const newTimeline = timeline.slice(0, idx);
880
- const lastElt = { ...seg };
881
- const beginningNumber = currNumber - seg.repeatCount - 1;
882
- lastElt.repeatCount = Math.max(0, endNumber - beginningNumber);
883
- newTimeline.push(lastElt);
884
- return newTimeline;
885
- }
886
- }
887
- }
888
- return timeline;
889
- }
890
-
891
- /**
892
- * Returns true if a Segment returned by the corresponding index is still
893
- * considered available.
894
- * Returns false if it is not available anymore.
895
- * Returns undefined if we cannot know whether it is still available or not.
896
- * /!\ We do not check the mediaURLs of the segment.
897
- * @param {Object} segment
898
- * @param {Object} index
899
- * @param {Object} manifestBoundsCalculator
900
- * @param {number|undefined} scaledPeriodEnd
901
- * @returns {Boolean|undefined}
902
- */
903
- export function isSegmentStillAvailable(
904
- segment : ISegment,
905
- index: { availabilityTimeOffset : number;
906
- timeline : IIndexSegment[];
907
- indexTimeOffset: number;
908
- timescale : number; },
909
- manifestBoundsCalculator : ManifestBoundsCalculator,
910
- scaledPeriodEnd : number | undefined
911
- ) : boolean | undefined {
912
- const lastReqSegInfo = getLastRequestableSegmentInfo(index,
913
- manifestBoundsCalculator,
914
- scaledPeriodEnd);
915
- if (lastReqSegInfo === null) {
916
- return false;
917
- }
918
-
919
- for (let i = 0; i < index.timeline.length; i++) {
920
- if (lastReqSegInfo.timelineIdx < i) {
921
- return false;
922
- }
923
- const tSegment = index.timeline[i];
924
- const tSegmentTime = (tSegment.start - index.indexTimeOffset) / index.timescale;
925
- if (tSegmentTime > segment.time) {
926
- return false; // We went over it without finding it
927
- } else if (tSegmentTime === segment.time) {
928
- if (tSegment.range === undefined) {
929
- return segment.range === undefined;
930
- }
931
- return segment.range != null &&
932
- tSegment.range[0] === segment.range[0] &&
933
- tSegment.range[1] === segment.range[1];
934
- } else { // tSegment.start < segment.time
935
- if (tSegment.repeatCount >= 0 && tSegment.duration !== undefined) {
936
- const timeDiff = tSegmentTime - tSegment.start;
937
- const repeat = (timeDiff / tSegment.duration) - 1;
938
- return repeat % 1 === 0 && repeat <= lastReqSegInfo.newRepeatCount;
939
- }
940
- }
941
- }
942
- return false;
943
- }
944
-
945
- /**
946
- * Returns from the given RepresentationIndex information on the last segment
947
- * that may be requested currently.
948
- *
949
- * Returns `null` if there's no such segment.
950
- * @param {Object} index
951
- * @param {Object} manifestBoundsCalculator
952
- * @param {number|undefined} scaledPeriodEnd
953
- * @returns {number|null}
954
- */
955
- export function getLastRequestableSegmentInfo(
956
- index: { availabilityTimeOffset : number;
957
- timeline : IIndexSegment[];
958
- timescale : number; },
959
- manifestBoundsCalculator : ManifestBoundsCalculator,
960
- scaledPeriodEnd : number | undefined
961
- ) : ILastRequestableSegmentInfo | null {
962
- if (index.timeline.length <= 0) {
963
- return null;
964
- }
965
-
966
- if (index.availabilityTimeOffset === Infinity) {
967
- // availabilityTimeOffset to Infinity == Everything is requestable in the timeline.
968
- const lastIndex = index.timeline.length - 1;
969
- const lastElem = index.timeline[lastIndex];
970
- return { isLastOfTimeline: true,
971
- timelineIdx: lastIndex,
972
- newRepeatCount: lastElem.repeatCount,
973
- end: getIndexSegmentEnd(lastElem, null, scaledPeriodEnd) };
974
- }
975
-
976
- const adjustedMaxSeconds = manifestBoundsCalculator.getEstimatedMaximumPosition(
977
- index.availabilityTimeOffset
978
- );
979
- if (adjustedMaxSeconds === undefined) {
980
- const lastIndex = index.timeline.length - 1;
981
- const lastElem = index.timeline[lastIndex];
982
- return { isLastOfTimeline: true,
983
- timelineIdx: lastIndex,
984
- newRepeatCount: lastElem.repeatCount,
985
- end: getIndexSegmentEnd(lastElem, null, scaledPeriodEnd) };
986
- }
987
- for (let i = index.timeline.length - 1; i >= index.timeline.length; i--) {
988
- const element = index.timeline[i];
989
- const endOfFirstOccurence = element.start + element.duration;
990
- if (fromIndexTime(endOfFirstOccurence, index) <= adjustedMaxSeconds) {
991
- const endTime = getIndexSegmentEnd(element, index.timeline[i + 1], scaledPeriodEnd);
992
- if (fromIndexTime(endTime, index) <= adjustedMaxSeconds) {
993
- return { isLastOfTimeline: i === index.timeline.length - 1,
994
- timelineIdx: i,
995
- newRepeatCount: element.repeatCount,
996
- end: endOfFirstOccurence };
997
- } else {
998
- // We have to find the right repeatCount
999
- const maxIndexTime = toIndexTime(adjustedMaxSeconds, index);
1000
- const diffToSegStart = maxIndexTime - element.start;
1001
- const nbOfSegs = Math.floor(diffToSegStart / element.duration);
1002
- assert(nbOfSegs >= 1);
1003
- return { isLastOfTimeline: false,
1004
- timelineIdx: i,
1005
- newRepeatCount: nbOfSegs - 1,
1006
- end: element.start + nbOfSegs * element.duration };
1007
- }
1008
- }
1009
- }
1010
- return null;
1011
- }
1012
-
1013
- /**
1014
- * Information on the last requestable segment deduced from a timeline array of
1015
- * segment information.
1016
- */
1017
- export interface ILastRequestableSegmentInfo {
1018
- /**
1019
- * If `true`, we know that the last requestable segment is equal to the last
1020
- * segment that can be deduced from the corresponding given timeline.
1021
- * Written another way, there seem to be no segment announced in the timeline
1022
- * that are not yet requestable.
1023
- *
1024
- * If `false`, we know that the last requestable segment is not the last
1025
- * segment that can be deduced from the corresponding timeline.
1026
- * Written another way, there are supplementary segments in the timeline which
1027
- * are not yet requestable.
1028
- *
1029
- * Note that if the last requestable segment has its information from the last
1030
- * element from the timeline but it's not the last segment that would be
1031
- * deduced from the `repeatCount` property, then this value is set to `false`.
1032
- */
1033
- isLastOfTimeline: boolean;
1034
- /**
1035
- * End time at which the last requestable segment ends, in the corresponding
1036
- * index timescale (__NOT__ in seconds).
1037
- */
1038
- end: number;
1039
- /**
1040
- * The index in `timeline` of the last requestable segment.
1041
- * Note that its `repeatCount` may be updated and put as `newRepeatCount`.
1042
- */
1043
- timelineIdx: number;
1044
- /**
1045
- * The new `repeatCount` value for that last segment. May be equal or
1046
- * different from the timeline element found at `timelineIdx`.
1047
- */
1048
- newRepeatCount: number;
1049
- }