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,1111 +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 log from "../../../log";
19
- import {
20
- Adaptation,
21
- areSameContent,
22
- ISegment,
23
- Period,
24
- Representation,
25
- } from "../../../manifest";
26
- import BufferedHistory, {
27
- IBufferedHistoryEntry,
28
- } from "./buffered_history";
29
- import { IChunkContext } from "./types";
30
-
31
- /** Categorization of a given chunk in the `SegmentInventory`. */
32
- export const enum ChunkStatus {
33
- /**
34
- * This chunk is only a part of a partially-pushed segment for now, meaning
35
- * that it is only a sub-part of a requested segment that was not yet
36
- * fully-loaded and pushed.
37
- *
38
- * Once and if the corresponding segment is fully-pushed, its `ChunkStatus`
39
- * switches to `Complete`.
40
- */
41
- PartiallyPushed = 0,
42
- /** This chunk corresponds to a fully-loaded segment. */
43
- Complete = 1,
44
- /**
45
- * This chunk's push operation failed, in this scenario there is no certitude
46
- * about the presence of that chunk in the buffer: it may not be present,
47
- * partially-present, or fully-present depending on why that push operation
48
- * failed, which is generally only known by the lower-level code.
49
- */
50
- Failed = 2,
51
- }
52
-
53
- /** Information stored on a single chunk by the SegmentInventory. */
54
- export interface IBufferedChunk {
55
- /**
56
- * Complete size of the pushed chunk, in bytes.
57
- * Note that this does not always reflect the memory imprint of the segment in
58
- * memory:
59
- *
60
- * 1. It's the size of the original container file. A browser receiving that
61
- * segment might then transform it under another form that may be more or
62
- * less voluminous.
63
- *
64
- * 2. It's the size of the full chunk. In some scenarios only a sub-part of
65
- * that chunk is actually considered (examples: when using append
66
- * windows, when another chunk overlap that one etc.).
67
- */
68
- chunkSize : number | undefined;
69
- /**
70
- * Last inferred end in the media buffer this chunk ends at, in seconds.
71
- *
72
- * Depending on if contiguous chunks were around it during the first
73
- * synchronization for that chunk this value could be more or less precize.
74
- */
75
- bufferedEnd : number|undefined;
76
- /**
77
- * Last inferred start in the media buffer this chunk starts at, in seconds.
78
- *
79
- * Depending on if contiguous chunks were around it during the first
80
- * synchronization for that chunk this value could be more or less precize.
81
- */
82
- bufferedStart : number|undefined;
83
- /** Supposed end, in seconds, the chunk is expected to end at. */
84
- end : number;
85
- /**
86
- * If `true` the `end` property is an estimate the `SegmentInventory` has
87
- * a high confidence in.
88
- * In that situation, `bufferedEnd` can easily be compared to it to check if
89
- * that segment has been partially, or fully, garbage collected.
90
- *
91
- * If `false`, it is just a guess based on segment information.
92
- */
93
- precizeEnd : boolean;
94
- /**
95
- * If `true` the `start` property is an estimate the `SegmentInventory` has
96
- * a high confidence in.
97
- * In that situation, `bufferedStart` can easily be compared to it to check if
98
- * that segment has been partially, or fully, garbage collected.
99
- *
100
- * If `false`, it is just a guess based on segment information.
101
- */
102
- precizeStart : boolean;
103
- /** Information on what that chunk actually contains. */
104
- infos : IChunkContext;
105
- /**
106
- * Status of this chunk.
107
- * @see ChunkStatus
108
- */
109
- status : ChunkStatus;
110
- /**
111
- * If `true`, the segment as a whole is divided into multiple parts in the
112
- * buffer, with other segment(s) between them.
113
- * If `false`, it is contiguous.
114
- *
115
- * Splitted segments are a rare occurence that is more complicated to handle
116
- * than contiguous ones.
117
- */
118
- splitted : boolean;
119
- /**
120
- * Supposed start, in seconds, the chunk is expected to start at.
121
- *
122
- * If the current `chunk` is part of a "partially pushed" segment (see
123
- * `partiallyPushed`), the definition of this property is flexible in the way
124
- * that it can correspond either to the start of the chunk or to the start of
125
- * the whole segment the chunk is linked to.
126
- * As such, this property should not be relied on until the segment has been
127
- * fully-pushed.
128
- */
129
- start : number; // Supposed start the segment should start from, in seconds
130
- }
131
-
132
- /** information to provide when "inserting" a new chunk into the SegmentInventory. */
133
- export interface IInsertedChunkInfos {
134
- /** The Adaptation that chunk is linked to */
135
- adaptation : Adaptation;
136
- /** The Period that chunk is linked to */
137
- period : Period;
138
- /** The Representation that chunk is linked to. */
139
- representation : Representation;
140
- /** The Segment that chunk is linked to. */
141
- segment : ISegment;
142
- /** Estimated size of the full pushed chunk, in bytes. */
143
- chunkSize : number | undefined;
144
- /**
145
- * Start time, in seconds, this chunk most probably begins from after being
146
- * pushed.
147
- * In doubt, you can set it at the start of the whole segment (after
148
- * considering the possible offsets and append windows).
149
- */
150
- start : number;
151
- /**
152
- * End time, in seconds, this chunk most probably ends at after being
153
- * pushed.
154
- *
155
- * In doubt, you can set it at the end of the whole segment (after
156
- * considering the possible offsets and append windows).
157
- */
158
- end : number;
159
- }
160
-
161
- /**
162
- * Keep track of every chunk downloaded and currently in the linked media
163
- * buffer.
164
- *
165
- * The main point of this class is to know which chunks are already pushed to
166
- * the corresponding media buffer, at which bitrate, and which have been garbage-collected
167
- * since by the browser (and thus may need to be re-loaded).
168
- * @class SegmentInventory
169
- */
170
- export default class SegmentInventory {
171
- /**
172
- * Keeps track of all the segments which should be currently in the browser's
173
- * memory.
174
- * This array contains objects, each being related to a single downloaded
175
- * chunk or segment which is at least partially added in the media buffer.
176
- */
177
- private _inventory : IBufferedChunk[];
178
-
179
- private _bufferedHistory : BufferedHistory;
180
-
181
- constructor() {
182
- const { BUFFERED_HISTORY_RETENTION_TIME,
183
- BUFFERED_HISTORY_MAXIMUM_ENTRIES } = config.getCurrent();
184
- this._inventory = [];
185
- this._bufferedHistory = new BufferedHistory(BUFFERED_HISTORY_RETENTION_TIME,
186
- BUFFERED_HISTORY_MAXIMUM_ENTRIES);
187
- }
188
-
189
- /**
190
- * Reset the whole inventory.
191
- */
192
- public reset() : void {
193
- this._inventory.length = 0;
194
- }
195
-
196
- /**
197
- * Infer each segment's `bufferedStart` and `bufferedEnd` properties from the
198
- * TimeRanges given.
199
- *
200
- * The TimeRanges object given should come from the media buffer linked to
201
- * that SegmentInventory.
202
- *
203
- * /!\ A SegmentInventory should not be associated to multiple media buffers
204
- * at a time, so each `synchronizeBuffered` call should be given a TimeRanges
205
- * coming from the same buffer.
206
- * @param {TimeRanges} buffered
207
- * @param {boolean|undefined} [skipLog=false] - This method normally may
208
- * trigger a voluminous debug log if debug logs are enabled.
209
- * As this method might be called very often in some specific debugging
210
- * situations, setting this value to `true` allows to prevent the call from
211
- * triggering a log.
212
- */
213
- public synchronizeBuffered(buffered : TimeRanges, skipLog : boolean = false) : void {
214
- const inventory = this._inventory;
215
- let inventoryIndex = 0; // Current index considered.
216
- let thisSegment = inventory[0]; // Current segmentInfos considered
217
- const { MINIMUM_SEGMENT_SIZE } = config.getCurrent();
218
- /** Type of buffer considered, used for logs */
219
- const bufferType : string | undefined = thisSegment?.infos.adaptation.type;
220
-
221
- const rangesLength = buffered.length;
222
- for (let i = 0; i < rangesLength; i++) {
223
- if (thisSegment === undefined) { // we arrived at the end of our inventory
224
- return;
225
- }
226
-
227
- // take the i'nth contiguous buffered TimeRange
228
- const rangeStart = buffered.start(i);
229
- const rangeEnd = buffered.end(i);
230
- if (rangeEnd - rangeStart < MINIMUM_SEGMENT_SIZE) {
231
- log.warn("SI: skipped TimeRange when synchronizing because it was too small",
232
- bufferType, rangeStart, rangeEnd);
233
- continue;
234
- }
235
-
236
- const indexBefore = inventoryIndex; // keep track of that number
237
-
238
- // Find the first segment either within this TimeRange or completely past
239
- // it:
240
- // skip until first segment with at least `MINIMUM_SEGMENT_SIZE` past the
241
- // start of that range.
242
- while (thisSegment !== undefined &&
243
- ((thisSegment.bufferedEnd ?? thisSegment.end)
244
- - rangeStart) < MINIMUM_SEGMENT_SIZE)
245
- {
246
- thisSegment = inventory[++inventoryIndex];
247
- }
248
-
249
- // Contains infos about the last garbage-collected segment before
250
- // `thisSegment`.
251
- let lastDeletedSegmentInfos : { end : number;
252
- precizeEnd : boolean; } |
253
- null = null;
254
-
255
- // remove garbage-collected segments
256
- // (Those not in that TimeRange nor in the previous one)
257
- const numberOfSegmentToDelete = inventoryIndex - indexBefore;
258
- if (numberOfSegmentToDelete > 0) {
259
- const lastDeletedSegment = // last garbage-collected segment
260
- inventory[indexBefore + numberOfSegmentToDelete - 1];
261
-
262
- lastDeletedSegmentInfos = {
263
- end: lastDeletedSegment.bufferedEnd ?? lastDeletedSegment.end,
264
- precizeEnd: lastDeletedSegment.precizeEnd,
265
- };
266
- log.debug(`SI: ${numberOfSegmentToDelete} segments GCed.`, bufferType);
267
- const removed = inventory.splice(indexBefore, numberOfSegmentToDelete);
268
- for (const seg of removed) {
269
- if (
270
- seg.bufferedStart === undefined &&
271
- seg.bufferedEnd === undefined &&
272
- seg.status !== ChunkStatus.Failed
273
- ) {
274
- this._bufferedHistory.addBufferedSegment(seg.infos, null);
275
- }
276
- }
277
- inventoryIndex = indexBefore;
278
- }
279
-
280
- if (thisSegment === undefined) {
281
- return;
282
- }
283
-
284
- // If the current segment is actually completely outside that range (it
285
- // is contained in one of the next one), skip that part.
286
- if (rangeEnd - (thisSegment.bufferedStart ?? thisSegment.start)
287
- >= MINIMUM_SEGMENT_SIZE
288
- ) {
289
- guessBufferedStartFromRangeStart(thisSegment,
290
- rangeStart,
291
- lastDeletedSegmentInfos,
292
- bufferType);
293
-
294
- if (inventoryIndex === inventory.length - 1) {
295
- // This is the last segment in the inventory.
296
- // We can directly update the end as the end of the current range.
297
- guessBufferedEndFromRangeEnd(thisSegment, rangeEnd, bufferType);
298
- return;
299
- }
300
-
301
- thisSegment = inventory[++inventoryIndex];
302
-
303
- // Make contiguous until first segment outside that range
304
- let thisSegmentStart = thisSegment.bufferedStart ?? thisSegment.start;
305
- let thisSegmentEnd = thisSegment.bufferedEnd ?? thisSegment.end;
306
- const nextRangeStart = i < rangesLength - 1 ? buffered.start(i + 1) :
307
- undefined;
308
- while (thisSegment !== undefined &&
309
- (rangeEnd - thisSegmentStart) >= MINIMUM_SEGMENT_SIZE &&
310
- (nextRangeStart === undefined ||
311
- rangeEnd - thisSegmentStart >= thisSegmentEnd - nextRangeStart))
312
- {
313
- const prevSegment = inventory[inventoryIndex - 1];
314
-
315
- // those segments are contiguous, we have no way to infer their real
316
- // end
317
- if (prevSegment.bufferedEnd === undefined) {
318
- prevSegment.bufferedEnd = thisSegment.precizeStart ? thisSegment.start :
319
- prevSegment.end;
320
- log.debug("SI: calculating buffered end of contiguous segment",
321
- bufferType, prevSegment.bufferedEnd, prevSegment.end);
322
- }
323
-
324
- thisSegment.bufferedStart = prevSegment.bufferedEnd;
325
- thisSegment = inventory[++inventoryIndex];
326
- if (thisSegment !== undefined) {
327
- thisSegmentStart = thisSegment.bufferedStart ?? thisSegment.start;
328
- thisSegmentEnd = thisSegment.bufferedEnd ?? thisSegment.end;
329
- }
330
- }
331
- }
332
-
333
- // update the bufferedEnd of the last segment in that range
334
- const lastSegmentInRange = inventory[inventoryIndex - 1];
335
- if (lastSegmentInRange !== undefined) {
336
- guessBufferedEndFromRangeEnd(lastSegmentInRange, rangeEnd, bufferType);
337
- }
338
- }
339
-
340
- // if we still have segments left, they are not affiliated to any range.
341
- // They might have been garbage collected, delete them from here.
342
- if (thisSegment != null) {
343
- log.debug("SI: last segments have been GCed",
344
- bufferType, inventoryIndex, inventory.length);
345
- const removed = inventory.splice(inventoryIndex, inventory.length - inventoryIndex);
346
- for (const seg of removed) {
347
- if (
348
- seg.bufferedStart === undefined &&
349
- seg.bufferedEnd === undefined &&
350
- seg.status !== ChunkStatus.Failed
351
- ) {
352
- this._bufferedHistory.addBufferedSegment(seg.infos, null);
353
- }
354
- }
355
- }
356
- if (!skipLog && bufferType !== undefined && log.hasLevel("DEBUG")) {
357
- log.debug(`SI: current ${bufferType} inventory timeline:\n` +
358
- prettyPrintInventory(this._inventory));
359
- }
360
- }
361
-
362
- /**
363
- * Add a new chunk in the inventory.
364
- *
365
- * Chunks are decodable sub-parts of a whole segment. Once all chunks in a
366
- * segment have been inserted, you should call the `completeSegment` method.
367
- * @param {Object} chunkInformation
368
- */
369
- public insertChunk(
370
- { period,
371
- adaptation,
372
- representation,
373
- segment,
374
- chunkSize,
375
- start,
376
- end } : IInsertedChunkInfos,
377
- succeed: boolean
378
- ) : void {
379
- if (segment.isInit) {
380
- return;
381
- }
382
-
383
- const bufferType = adaptation.type;
384
- if (start >= end) {
385
- log.warn("SI: Invalid chunked inserted: starts before it ends",
386
- bufferType, start, end);
387
- return;
388
- }
389
-
390
- const inventory = this._inventory;
391
- const newSegment = { status: succeed ? ChunkStatus.PartiallyPushed :
392
- ChunkStatus.Failed,
393
- chunkSize,
394
- splitted: false,
395
- start,
396
- end,
397
- precizeStart: false,
398
- precizeEnd: false,
399
- bufferedStart: undefined,
400
- bufferedEnd: undefined,
401
- infos: { segment, period, adaptation, representation } };
402
-
403
- // begin by the end as in most use cases this will be faster
404
- for (let i = inventory.length - 1; i >= 0; i--) {
405
- const segmentI = inventory[i];
406
-
407
- if ((segmentI.start) <= start) {
408
- if ((segmentI.end) <= start) {
409
- // our segment is after, push it after this one
410
- //
411
- // Case 1:
412
- // prevSegment : |------|
413
- // newSegment : |======|
414
- // ===> : |------|======|
415
- //
416
- // Case 2:
417
- // prevSegment : |------|
418
- // newSegment : |======|
419
- // ===> : |------| |======|
420
- log.debug("SI: Pushing segment strictly after previous one.",
421
- bufferType, start, segmentI.end);
422
- this._inventory.splice(i + 1, 0, newSegment);
423
-
424
- i += 2; // Go to segment immediately after newSegment
425
- while (i < inventory.length && inventory[i].start < newSegment.end) {
426
- if (inventory[i].end > newSegment.end) {
427
- // The next segment ends after newSegment.
428
- // Mutate the next segment.
429
- //
430
- // Case 1:
431
- // prevSegment : |------|
432
- // newSegment : |======|
433
- // nextSegment : |----|
434
- // ===> : |------|======|-|
435
- log.debug("SI: Segment pushed updates the start of the next one",
436
- bufferType, newSegment.end, inventory[i].start);
437
- inventory[i].start = newSegment.end;
438
- inventory[i].bufferedStart = undefined;
439
- inventory[i].precizeStart = inventory[i].precizeStart &&
440
- newSegment.precizeEnd;
441
- return;
442
- }
443
- // The next segment was completely contained in newSegment.
444
- // Remove it.
445
- //
446
- // Case 1:
447
- // prevSegment : |------|
448
- // newSegment : |======|
449
- // nextSegment : |---|
450
- // ===> : |------|======|
451
- //
452
- // Case 2:
453
- // prevSegment : |------|
454
- // newSegment : |======|
455
- // nextSegment : |----|
456
- // ===> : |------|======|
457
- log.debug("SI: Segment pushed removes the next one",
458
- bufferType, start, end, inventory[i].start, inventory[i].end);
459
- inventory.splice(i, 1);
460
- }
461
- return;
462
- } else {
463
- if (segmentI.start === start) {
464
- if (segmentI.end <= end) {
465
- // In those cases, replace
466
- //
467
- // Case 1:
468
- // prevSegment : |-------|
469
- // newSegment : |=======|
470
- // ===> : |=======|
471
- //
472
- // Case 2:
473
- // prevSegment : |-------|
474
- // newSegment : |==========|
475
- // ===> : |==========|
476
- log.debug("SI: Segment pushed replace another one",
477
- bufferType, start, end, segmentI.end);
478
- this._inventory.splice(i, 1, newSegment);
479
- i += 1; // Go to segment immediately after newSegment
480
- while (i < inventory.length && inventory[i].start < newSegment.end) {
481
- if (inventory[i].end > newSegment.end) {
482
- // The next segment ends after newSegment.
483
- // Mutate the next segment.
484
- //
485
- // Case 1:
486
- // newSegment : |======|
487
- // nextSegment : |----|
488
- // ===> : |======|--|
489
- log.debug("SI: Segment pushed updates the start of the next one",
490
- bufferType, newSegment.end, inventory[i].start);
491
- inventory[i].start = newSegment.end;
492
- inventory[i].bufferedStart = undefined;
493
- inventory[i].precizeStart = inventory[i].precizeStart &&
494
- newSegment.precizeEnd;
495
- return;
496
- }
497
- // The next segment was completely contained in newSegment.
498
- // Remove it.
499
- //
500
- // Case 1:
501
- // newSegment : |======|
502
- // nextSegment : |---|
503
- // ===> : |======|
504
- //
505
- // Case 2:
506
- // newSegment : |======|
507
- // nextSegment : |----|
508
- // ===> : |======|
509
- log.debug("SI: Segment pushed removes the next one",
510
- bufferType, start, end, inventory[i].start, inventory[i].end);
511
- inventory.splice(i, 1);
512
- }
513
- return;
514
- } else {
515
- // The previous segment starts at the same time and finishes
516
- // after the new segment.
517
- // Update the start of the previous segment and put the new
518
- // segment before.
519
- //
520
- // Case 1:
521
- // prevSegment : |------------|
522
- // newSegment : |==========|
523
- // ===> : |==========|-|
524
- log.debug("SI: Segment pushed ends before another with the same start",
525
- bufferType, start, end, segmentI.end);
526
- inventory.splice(i, 0, newSegment);
527
- segmentI.start = newSegment.end;
528
- segmentI.bufferedStart = undefined;
529
- segmentI.precizeStart = segmentI.precizeStart &&
530
- newSegment.precizeEnd;
531
- return;
532
- }
533
- } else {
534
- if (segmentI.end <= newSegment.end) {
535
- // our segment has a "complex" relation with this one,
536
- // update the old one end and add this one after it.
537
- //
538
- // Case 1:
539
- // prevSegment : |-------|
540
- // newSegment : |======|
541
- // ===> : |--|======|
542
- //
543
- // Case 2:
544
- // prevSegment : |-------|
545
- // newSegment : |====|
546
- // ===> : |--|====|
547
- log.debug("SI: Segment pushed updates end of previous one",
548
- bufferType, start, end, segmentI.start, segmentI.end);
549
- this._inventory.splice(i + 1, 0, newSegment);
550
- segmentI.end = newSegment.start;
551
- segmentI.bufferedEnd = undefined;
552
- segmentI.precizeEnd = segmentI.precizeEnd &&
553
- newSegment.precizeStart;
554
- i += 2; // Go to segment immediately after newSegment
555
- while (i < inventory.length && inventory[i].start < newSegment.end) {
556
- if (inventory[i].end > newSegment.end) {
557
- // The next segment ends after newSegment.
558
- // Mutate the next segment.
559
- //
560
- // Case 1:
561
- // newSegment : |======|
562
- // nextSegment : |----|
563
- // ===> : |======|--|
564
- log.debug("SI: Segment pushed updates the start of the next one",
565
- bufferType, newSegment.end, inventory[i].start);
566
- inventory[i].start = newSegment.end;
567
- inventory[i].bufferedStart = undefined;
568
- inventory[i].precizeStart = inventory[i].precizeStart &&
569
- newSegment.precizeEnd;
570
- return;
571
- }
572
- // The next segment was completely contained in newSegment.
573
- // Remove it.
574
- //
575
- // Case 1:
576
- // newSegment : |======|
577
- // nextSegment : |---|
578
- // ===> : |======|
579
- //
580
- // Case 2:
581
- // newSegment : |======|
582
- // nextSegment : |----|
583
- // ===> : |======|
584
- log.debug("SI: Segment pushed removes the next one",
585
- bufferType, start, end, inventory[i].start, inventory[i].end);
586
- inventory.splice(i, 1);
587
- }
588
- return;
589
- } else {
590
- // The previous segment completely recovers the new segment.
591
- // Split the previous segment into two segments, before and after
592
- // the new segment.
593
- //
594
- // Case 1:
595
- // prevSegment : |---------|
596
- // newSegment : |====|
597
- // ===> : |--|====|-|
598
- log.warn("SI: Segment pushed is contained in a previous one",
599
- bufferType, start, end, segmentI.start, segmentI.end);
600
- const nextSegment = { status: segmentI.status,
601
- /**
602
- * Note: this sadly means we're doing as if
603
- * that chunk is present two times.
604
- * Thankfully, this scenario should be
605
- * fairly rare.
606
- */
607
- chunkSize: segmentI.chunkSize,
608
- splitted: true,
609
- start: newSegment.end,
610
- end: segmentI.end,
611
- precizeStart: segmentI.precizeStart &&
612
- segmentI.precizeEnd &&
613
- newSegment.precizeEnd,
614
- precizeEnd: segmentI.precizeEnd,
615
- bufferedStart: undefined,
616
- bufferedEnd: segmentI.end,
617
- infos: segmentI.infos };
618
- segmentI.end = newSegment.start;
619
- segmentI.splitted = true;
620
- segmentI.bufferedEnd = undefined;
621
- segmentI.precizeEnd = segmentI.precizeEnd &&
622
- newSegment.precizeStart;
623
- inventory.splice(i + 1, 0, newSegment);
624
- inventory.splice(i + 2, 0, nextSegment);
625
- return;
626
- }
627
- }
628
- }
629
- }
630
- }
631
-
632
- // if we got here, we are at the first segment
633
- // check bounds of the previous first segment
634
- const firstSegment = this._inventory[0];
635
- if (firstSegment === undefined) { // we do not have any segment yet
636
- log.debug("SI: first segment pushed", bufferType, start, end);
637
- this._inventory.push(newSegment);
638
- return;
639
- }
640
-
641
- if (firstSegment.start >= end) {
642
- // our segment is before, put it before
643
- //
644
- // Case 1:
645
- // firstSegment : |----|
646
- // newSegment : |====|
647
- // ===> : |====|----|
648
- //
649
- // Case 2:
650
- // firstSegment : |----|
651
- // newSegment : |====|
652
- // ===> : |====| |----|
653
- log.debug("SI: Segment pushed comes before all previous ones",
654
- bufferType, start, end, firstSegment.start);
655
- this._inventory.splice(0, 0, newSegment);
656
- } else if (firstSegment.end <= end) {
657
- // Our segment is bigger, replace the first
658
- //
659
- // Case 1:
660
- // firstSegment : |---|
661
- // newSegment : |=======|
662
- // ===> : |=======|
663
- //
664
- // Case 2:
665
- // firstSegment : |-----|
666
- // newSegment : |=======|
667
- // ===> : |=======|
668
- log.debug("SI: Segment pushed starts before and completely " +
669
- "recovers the previous first one",
670
- bufferType, start, end , firstSegment.start, firstSegment.end);
671
- this._inventory.splice(0, 1, newSegment);
672
- while (inventory.length > 1 && inventory[1].start < newSegment.end) {
673
- if (inventory[1].end > newSegment.end) {
674
- // The next segment ends after newSegment.
675
- // Mutate the next segment.
676
- //
677
- // Case 1:
678
- // newSegment : |======|
679
- // nextSegment : |----|
680
- // ===> : |======|--|
681
- log.debug("SI: Segment pushed updates the start of the next one",
682
- bufferType, newSegment.end, inventory[1].start);
683
- inventory[1].start = newSegment.end;
684
- inventory[1].bufferedStart = undefined;
685
- inventory[1].precizeStart = newSegment.precizeEnd;
686
- return;
687
- }
688
- // The next segment was completely contained in newSegment.
689
- // Remove it.
690
- //
691
- // Case 1:
692
- // newSegment : |======|
693
- // nextSegment : |---|
694
- // ===> : |======|
695
- //
696
- // Case 2:
697
- // newSegment : |======|
698
- // nextSegment : |----|
699
- // ===> : |======|
700
- log.debug("SI: Segment pushed removes the next one",
701
- bufferType, start, end, inventory[1].start, inventory[1].end);
702
- inventory.splice(1, 1);
703
- }
704
- return;
705
- } else {
706
- // our segment has a "complex" relation with the first one,
707
- // update the old one start and add this one before it.
708
- //
709
- // Case 1:
710
- // firstSegment : |------|
711
- // newSegment : |======|
712
- // ===> : |======|--|
713
- log.debug("SI: Segment pushed start of the next one",
714
- bufferType, start, end, firstSegment.start, firstSegment.end);
715
- firstSegment.start = end;
716
- firstSegment.bufferedStart = undefined;
717
- firstSegment.precizeStart = newSegment.precizeEnd;
718
- this._inventory.splice(0, 0, newSegment);
719
- return;
720
- }
721
- }
722
-
723
- /**
724
- * Indicate that inserted chunks can now be considered as a complete segment.
725
- * Take in argument the same content than what was given to `insertChunk` for
726
- * the corresponding chunks.
727
- * @param {Object} content
728
- */
729
- public completeSegment(
730
- content : { period: Period;
731
- adaptation: Adaptation;
732
- representation: Representation;
733
- segment: ISegment; },
734
- newBuffered : TimeRanges
735
- ) : void {
736
- if (content.segment.isInit) {
737
- return;
738
- }
739
- const inventory = this._inventory;
740
-
741
- const resSegments : IBufferedChunk[] = [];
742
-
743
- for (let i = 0; i < inventory.length; i++) {
744
- if (areSameContent(inventory[i].infos, content)) {
745
- let splitted = false;
746
- if (resSegments.length > 0) {
747
- splitted = true;
748
- if (resSegments.length === 1) {
749
- log.warn("SI: Completed Segment is splitted.",
750
- content.segment.id,
751
- content.segment.time,
752
- content.segment.end);
753
- resSegments[0].splitted = true;
754
- }
755
- }
756
-
757
- const firstI = i;
758
- let segmentSize = inventory[i].chunkSize;
759
- i += 1;
760
- while (i < inventory.length &&
761
- areSameContent(inventory[i].infos, content))
762
- {
763
- const chunkSize = inventory[i].chunkSize;
764
- if (segmentSize !== undefined && chunkSize !== undefined) {
765
- segmentSize += chunkSize;
766
- }
767
- i++;
768
- }
769
-
770
- const lastI = i - 1;
771
- const length = lastI - firstI;
772
- const lastEnd = inventory[lastI].end;
773
- const lastBufferedEnd = inventory[lastI].bufferedEnd;
774
- if (length > 0) {
775
- this._inventory.splice(firstI + 1, length);
776
- i -= length;
777
- }
778
- if (this._inventory[firstI].status === ChunkStatus.PartiallyPushed) {
779
- this._inventory[firstI].status = ChunkStatus.Complete;
780
- }
781
- this._inventory[firstI].chunkSize = segmentSize;
782
- this._inventory[firstI].end = lastEnd;
783
- this._inventory[firstI].bufferedEnd = lastBufferedEnd;
784
- this._inventory[firstI].splitted = splitted;
785
- resSegments.push(this._inventory[firstI]);
786
- }
787
- }
788
-
789
- if (resSegments.length === 0) {
790
- log.warn("SI: Completed Segment not found",
791
- content.segment.id,
792
- content.segment.time);
793
- } else {
794
- this.synchronizeBuffered(newBuffered);
795
- for (const seg of resSegments) {
796
- if (seg.bufferedStart !== undefined && seg.bufferedEnd !== undefined) {
797
- if (seg.status !== ChunkStatus.Failed) {
798
- this._bufferedHistory.addBufferedSegment(seg.infos,
799
- { start: seg.bufferedStart,
800
- end: seg.bufferedEnd });
801
- }
802
- } else {
803
- log.debug("SI: buffered range not known after sync. Skipping history.",
804
- seg.start,
805
- seg.end);
806
- }
807
- }
808
- }
809
- }
810
-
811
- /**
812
- * Returns the whole inventory.
813
- *
814
- * To get a list synchronized with what a media buffer actually has buffered
815
- * you might want to call `synchronizeBuffered` before calling this method.
816
- * @returns {Array.<Object>}
817
- */
818
- public getInventory() : IBufferedChunk[] {
819
- return this._inventory;
820
- }
821
-
822
- /**
823
- * Returns a recent history of registered operations performed and event
824
- * received linked to the segment given in argument.
825
- *
826
- * Not all operations and events are registered in the returned history.
827
- * Please check the return type for more information on what is available.
828
- *
829
- * Note that history is short-lived for memory usage and performance reasons.
830
- * You may not receive any information on operations that happened too long
831
- * ago.
832
- * @param {Object} context
833
- * @returns {Array.<Object>}
834
- */
835
- public getHistoryFor(context : IChunkContext) : IBufferedHistoryEntry[] {
836
- return this._bufferedHistory.getHistoryFor(context);
837
- }
838
- }
839
-
840
- /**
841
- * Returns `true` if the buffered start of the given chunk looks coherent enough
842
- * relatively to what is announced in the Manifest.
843
- * @param {Object} thisSegment
844
- * @returns {Boolean}
845
- */
846
- function bufferedStartLooksCoherent(
847
- thisSegment : IBufferedChunk
848
- ) : boolean {
849
- if (thisSegment.bufferedStart === undefined ||
850
- thisSegment.status !== ChunkStatus.Complete)
851
- {
852
- return false;
853
- }
854
- const { start, end } = thisSegment;
855
- const duration = end - start;
856
- const { MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE,
857
- MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE } = config.getCurrent();
858
- return Math.abs(start - thisSegment.bufferedStart) <=
859
- MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE &&
860
- (thisSegment.bufferedEnd === undefined ||
861
- thisSegment.bufferedEnd > thisSegment.bufferedStart &&
862
- Math.abs(thisSegment.bufferedEnd - thisSegment.bufferedStart -
863
- duration) <= Math.min(MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE,
864
- duration / 3));
865
- }
866
-
867
- /**
868
- * Returns `true` if the buffered end of the given chunk looks coherent enough
869
- * relatively to what is announced in the Manifest.
870
- * @param {Object} thisSegment
871
- * @returns {Boolean}
872
- */
873
- function bufferedEndLooksCoherent(
874
- thisSegment : IBufferedChunk
875
- ) : boolean {
876
- if (thisSegment.bufferedEnd === undefined ||
877
- thisSegment.status !== ChunkStatus.Complete)
878
- {
879
- return false;
880
- }
881
- const { start, end } = thisSegment;
882
- const duration = end - start;
883
- const { MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE,
884
- MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE } = config.getCurrent();
885
- return Math.abs(end - thisSegment.bufferedEnd) <=
886
- MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE &&
887
- thisSegment.bufferedStart != null &&
888
- thisSegment.bufferedEnd > thisSegment.bufferedStart &&
889
- Math.abs(thisSegment.bufferedEnd - thisSegment.bufferedStart -
890
- duration) <= Math.min(MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE,
891
- duration / 3);
892
- }
893
-
894
- /**
895
- * Evaluate the given buffered Chunk's buffered start from its range's start,
896
- * considering that this chunk is the first one in it.
897
- * @param {Object} firstSegmentInRange
898
- * @param {number} rangeStart
899
- * @param {Object} lastDeletedSegmentInfos
900
- */
901
- function guessBufferedStartFromRangeStart(
902
- firstSegmentInRange : IBufferedChunk,
903
- rangeStart : number,
904
- lastDeletedSegmentInfos : { end : number; precizeEnd : boolean } |
905
- null,
906
- bufferType : string
907
- ) : void {
908
- const { MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE } = config.getCurrent();
909
- if (firstSegmentInRange.bufferedStart !== undefined) {
910
- if (firstSegmentInRange.bufferedStart < rangeStart) {
911
- log.debug("SI: Segment partially GCed at the start",
912
- bufferType, firstSegmentInRange.bufferedStart, rangeStart);
913
- firstSegmentInRange.bufferedStart = rangeStart;
914
- }
915
- if (!firstSegmentInRange.precizeStart &&
916
- bufferedStartLooksCoherent(firstSegmentInRange))
917
- {
918
- firstSegmentInRange.start = firstSegmentInRange.bufferedStart;
919
- firstSegmentInRange.precizeStart = true;
920
- }
921
- } else if (firstSegmentInRange.precizeStart) {
922
- log.debug("SI: buffered start is precize start",
923
- bufferType, firstSegmentInRange.start);
924
- firstSegmentInRange.bufferedStart = firstSegmentInRange.start;
925
- } else if (lastDeletedSegmentInfos !== null &&
926
- lastDeletedSegmentInfos.end > rangeStart &&
927
- (lastDeletedSegmentInfos.precizeEnd ||
928
- firstSegmentInRange.start - lastDeletedSegmentInfos.end <=
929
- MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE))
930
- {
931
- log.debug("SI: buffered start is end of previous segment",
932
- bufferType,
933
- rangeStart,
934
- firstSegmentInRange.start,
935
- lastDeletedSegmentInfos.end);
936
- firstSegmentInRange.bufferedStart = lastDeletedSegmentInfos.end;
937
- if (bufferedStartLooksCoherent(firstSegmentInRange)) {
938
- firstSegmentInRange.start = lastDeletedSegmentInfos.end;
939
- firstSegmentInRange.precizeStart = true;
940
- }
941
- } else if (firstSegmentInRange.start - rangeStart <=
942
- MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE)
943
- {
944
- log.debug("SI: found true buffered start",
945
- bufferType, rangeStart, firstSegmentInRange.start);
946
- firstSegmentInRange.bufferedStart = rangeStart;
947
- if (bufferedStartLooksCoherent(firstSegmentInRange)) {
948
- firstSegmentInRange.start = rangeStart;
949
- firstSegmentInRange.precizeStart = true;
950
- }
951
- } else if (rangeStart < firstSegmentInRange.start) {
952
- log.debug("SI: range start too far from expected start",
953
- bufferType, rangeStart, firstSegmentInRange.start);
954
- firstSegmentInRange.bufferedStart = firstSegmentInRange.start;
955
- } else {
956
- log.debug("SI: Segment appears immediately garbage collected at the start",
957
- bufferType, firstSegmentInRange.bufferedStart, rangeStart);
958
- firstSegmentInRange.bufferedStart = rangeStart;
959
- }
960
- }
961
-
962
- /**
963
- * Evaluate the given buffered Chunk's buffered end from its range's end,
964
- * considering that this chunk is the last one in it.
965
- * @param {Object} lastSegmentInRange
966
- * @param {number} rangeEnd
967
- * @param {string} bufferType
968
- */
969
- function guessBufferedEndFromRangeEnd(
970
- lastSegmentInRange : IBufferedChunk,
971
- rangeEnd : number,
972
- bufferType? : string
973
- ) : void {
974
- const { MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE } = config.getCurrent();
975
- if (lastSegmentInRange.bufferedEnd !== undefined) {
976
- if (lastSegmentInRange.bufferedEnd > rangeEnd) {
977
- log.debug("SI: Segment partially GCed at the end",
978
- bufferType, lastSegmentInRange.bufferedEnd, rangeEnd);
979
- lastSegmentInRange.bufferedEnd = rangeEnd;
980
- }
981
- if (!lastSegmentInRange.precizeEnd &&
982
- rangeEnd - lastSegmentInRange.end <= MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE &&
983
- bufferedEndLooksCoherent(lastSegmentInRange))
984
- {
985
- lastSegmentInRange.precizeEnd = true;
986
- lastSegmentInRange.end = rangeEnd;
987
- }
988
- } else if (lastSegmentInRange.precizeEnd) {
989
- log.debug("SI: buffered end is precize end",
990
- bufferType, lastSegmentInRange.end);
991
- lastSegmentInRange.bufferedEnd = lastSegmentInRange.end;
992
- } else if (rangeEnd - lastSegmentInRange.end <=
993
- MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE)
994
- {
995
- log.debug("SI: found true buffered end",
996
- bufferType, rangeEnd, lastSegmentInRange.end);
997
- lastSegmentInRange.bufferedEnd = rangeEnd;
998
- if (bufferedEndLooksCoherent(lastSegmentInRange)) {
999
- lastSegmentInRange.end = rangeEnd;
1000
- lastSegmentInRange.precizeEnd = true;
1001
- }
1002
- } else if (rangeEnd > lastSegmentInRange.end) {
1003
- log.debug("SI: range end too far from expected end",
1004
- bufferType, rangeEnd, lastSegmentInRange.end);
1005
- lastSegmentInRange.bufferedEnd = lastSegmentInRange.end;
1006
- } else {
1007
- log.debug("SI: Segment appears immediately garbage collected at the end",
1008
- bufferType, lastSegmentInRange.bufferedEnd, rangeEnd);
1009
- lastSegmentInRange.bufferedEnd = rangeEnd;
1010
- }
1011
- }
1012
-
1013
- /**
1014
- * Pretty print the inventory, to easily note which segments are where in the
1015
- * current buffer.
1016
- *
1017
- * This is mostly useful when logging.
1018
- *
1019
- * @example
1020
- * This function is called by giving it the inventory, such as:
1021
- * ```js
1022
- * prettyPrintInventory(inventory);
1023
- * ```
1024
- *
1025
- * Let's consider this possible return:
1026
- * ```
1027
- * 0.00|A|9.00 ~ 9.00|B|45.08 ~ 282.08|B|318.08
1028
- * [A] P: gen-dash-period-0 || R: video/5(2362822)
1029
- * [B] P: gen-dash-period-0 || R: video/6(2470094)
1030
- * ```
1031
- * We have a first part, from 0 to 9 seconds, which contains segments for
1032
- * the Representation with the id "video/5" and an associated bitrate of
1033
- * 2362822 bits per seconds (in the Period with the id "gen-dash-period-0").
1034
- *
1035
- * Then from 9.00 seconds to 45.08 seconds, we have segments from another
1036
- * Representation from the same Period (with the id "video/6" and a bitrate
1037
- * of 2470094 bits per seconds).
1038
- *
1039
- * At last we have a long time between 45.08 and 282.08 with no segment followed
1040
- * by a segment from that same Representation between 282.08 seconds and 318.08
1041
- * seconds.
1042
- * @param {Array.<Object>} inventory
1043
- * @returns {string}
1044
- */
1045
- function prettyPrintInventory(inventory : IBufferedChunk[]) : string {
1046
- const roundingError = 1 / 60;
1047
- const encounteredReps :
1048
- Partial<Record<string /* Period `id` */,
1049
- Partial<Record<string /* Representation `id` */,
1050
- string /* associated letter */ >>>> = {};
1051
- const letters : Array<{ letter : string;
1052
- periodId : string;
1053
- representationId : string | number;
1054
- bitrate? : number; }> = [];
1055
- let lastChunk : IBufferedChunk | null = null;
1056
- let lastLetter : string | null = null;
1057
-
1058
- function generateNewLetter(infos : IChunkContext) : string {
1059
- const currentLetter = String.fromCharCode(letters.length + 65);
1060
- letters.push({ letter: currentLetter,
1061
- periodId: infos.period.id,
1062
- representationId: infos.representation.id,
1063
- bitrate: infos.representation.bitrate });
1064
- return currentLetter;
1065
- }
1066
-
1067
- let str = "";
1068
- for (let i = 0; i < inventory.length; i++) {
1069
- const chunk = inventory[i];
1070
- if (chunk.bufferedStart !== undefined && chunk.bufferedEnd !== undefined) {
1071
-
1072
- const periodId = chunk.infos.period.id;
1073
- const representationId = chunk.infos.representation.id;
1074
- const encounteredPeriod = encounteredReps[periodId];
1075
-
1076
- let currentLetter : string;
1077
- if (encounteredPeriod === undefined) {
1078
- currentLetter = generateNewLetter(chunk.infos);
1079
- encounteredReps[periodId] = { [representationId]: currentLetter };
1080
- } else if (encounteredPeriod[representationId] === undefined) {
1081
- currentLetter = generateNewLetter(chunk.infos);
1082
- encounteredPeriod[representationId] = currentLetter;
1083
- } else {
1084
- currentLetter = encounteredPeriod[representationId] as string;
1085
- }
1086
-
1087
- if (lastChunk === null) {
1088
- str += `${chunk.bufferedStart.toFixed(2)}|${currentLetter}|`;
1089
- } else if (lastLetter === currentLetter) {
1090
- if ((lastChunk.bufferedEnd as number) + roundingError < chunk.bufferedStart) {
1091
- str += `${(lastChunk.bufferedEnd as number).toFixed(2)} ~ ` +
1092
- `${chunk.bufferedStart.toFixed(2)}|${currentLetter}|`;
1093
- }
1094
- } else {
1095
- str += `${(lastChunk.bufferedEnd as number).toFixed(2)} ~ ` +
1096
- `${chunk.bufferedStart.toFixed(2)}|${currentLetter}|`;
1097
- }
1098
- lastChunk = chunk;
1099
- lastLetter = currentLetter;
1100
- }
1101
- }
1102
- if (lastChunk !== null) {
1103
- str += String(lastChunk.end.toFixed(2));
1104
- }
1105
- letters.forEach(letterInfo => {
1106
- str += `\n[${letterInfo.letter}] ` +
1107
- `P: ${letterInfo.periodId} || R: ${letterInfo.representationId}` +
1108
- `(${letterInfo.bitrate ?? "unknown bitrate"})`;
1109
- });
1110
- return str;
1111
- }