rx-player 3.33.0 → 3.33.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,994 +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 noop from "../../utils/noop";
20
- import objectAssign from "../../utils/object_assign";
21
- import { getRange } from "../../utils/ranges";
22
- import SharedReference, {
23
- IReadOnlySharedReference,
24
- } from "../../utils/reference";
25
- import TaskCanceller, {
26
- CancellationSignal,
27
- } from "../../utils/task_canceller";
28
-
29
- /**
30
- * HTMLMediaElement Events for which playback observations are calculated and
31
- * emitted.
32
- * @type {Array.<string>}
33
- */
34
- const SCANNED_MEDIA_ELEMENTS_EVENTS : IPlaybackObserverEventType[] = [ "canplay",
35
- "ended",
36
- "play",
37
- "pause",
38
- "seeking",
39
- "seeked",
40
- "loadedmetadata",
41
- "ratechange" ];
42
-
43
- /**
44
- * Class allowing to "observe" current playback conditions so the RxPlayer is
45
- * then able to react upon them.
46
- *
47
- * This is a central class of the RxPlayer as many modules rely on the
48
- * `PlaybackObserver` to know the current state of the media being played.
49
- *
50
- * You can use the PlaybackObserver to either get the last observation
51
- * performed, get the current media state or listen to media observation sent
52
- * at a regular interval.
53
- *
54
- * @class {PlaybackObserver}
55
- */
56
- export default class PlaybackObserver {
57
-
58
- /** HTMLMediaElement which we want to observe. */
59
- private _mediaElement : HTMLMediaElement;
60
-
61
- /** If `true`, a `MediaSource` object is linked to `_mediaElement`. */
62
- private _withMediaSource : boolean;
63
-
64
- /**
65
- * If `true`, we're playing in a low-latency mode, which might have an
66
- * influence on some chosen interval values here.
67
- */
68
- private _lowLatencyMode : boolean;
69
-
70
- /**
71
- * The RxPlayer usually wants to differientate when a seek was sourced from
72
- * the RxPlayer's internal logic vs when it was sourced from an outside
73
- * application code.
74
- *
75
- * To implement this in the PlaybackObserver, we maintain this counter
76
- * allowing to know when a "seeking" event received from a `HTMLMediaElement`
77
- * was due to an "internal seek" or an external seek:
78
- * - This counter is incremented each time an "internal seek" (seek from the
79
- * inside of the RxPlayer has been performed.
80
- * - This counter is decremented each time we received a "seeking" event.
81
- *
82
- * This allows us to correctly characterize seeking events: if the counter is
83
- * superior to `0`, it is probably due to an internal "seek".
84
- */
85
- private _internalSeeksIncoming : number[];
86
-
87
- /**
88
- * Stores the last playback observation produced by the `PlaybackObserver`.:
89
- */
90
- private _observationRef : IReadOnlySharedReference<IPlaybackObservation>;
91
-
92
- /**
93
- * `TaskCanceller` allowing to free all resources and stop producing playback
94
- * observations.
95
- */
96
- private _canceller : TaskCanceller;
97
-
98
- /**
99
- * Create a new `PlaybackObserver`, which allows to produce new "playback
100
- * observations" on various media events and intervals.
101
- *
102
- * Note that creating a `PlaybackObserver` lead to the usage of resources,
103
- * such as event listeners which will only be freed once the `stop` method is
104
- * called.
105
- * @param {HTMLMediaElement} mediaElement
106
- * @param {Object} options
107
- */
108
- constructor(mediaElement : HTMLMediaElement, options : IPlaybackObserverOptions) {
109
- this._internalSeeksIncoming = [];
110
- this._mediaElement = mediaElement;
111
- this._withMediaSource = options.withMediaSource;
112
- this._lowLatencyMode = options.lowLatencyMode;
113
- this._canceller = new TaskCanceller();
114
- this._observationRef = this._createSharedReference();
115
- }
116
-
117
- /**
118
- * Stop the `PlaybackObserver` from emitting playback observations and free all
119
- * resources reserved to emitting them such as event listeners and intervals.
120
- *
121
- * Once `stop` is called, no new playback observation will ever be emitted.
122
- *
123
- * Note that it is important to call stop once the `PlaybackObserver` is no
124
- * more needed to avoid unnecessarily leaking resources.
125
- */
126
- public stop() {
127
- this._canceller.cancel();
128
- }
129
-
130
- /**
131
- * Returns the current position advertised by the `HTMLMediaElement`, in
132
- * seconds.
133
- * @returns {number}
134
- */
135
- public getCurrentTime() : number {
136
- return this._mediaElement.currentTime;
137
- }
138
-
139
- /**
140
- * Returns the current playback rate advertised by the `HTMLMediaElement`.
141
- * @returns {number}
142
- */
143
- public getPlaybackRate() : number {
144
- return this._mediaElement.playbackRate;
145
- }
146
-
147
- /**
148
- * Returns the current `paused` status advertised by the `HTMLMediaElement`.
149
- *
150
- * Use this instead of the same status emitted on an observation when you want
151
- * to be sure you're using the current value.
152
- * @returns {boolean}
153
- */
154
- public getIsPaused() : boolean {
155
- return this._mediaElement.paused;
156
- }
157
-
158
- /**
159
- * Update the current position (seek) on the `HTMLMediaElement`, by giving a
160
- * new position in seconds.
161
- *
162
- * Note that seeks performed through this method are caracherized as
163
- * "internal" seeks. They don't result into the exact same playback
164
- * observation than regular seeks (which most likely comes from the outside,
165
- * e.g. the user).
166
- * @param {number} time
167
- */
168
- public setCurrentTime(time: number) : void {
169
- this._internalSeeksIncoming.push(time);
170
- log.info("API: Seeking internally", time);
171
- this._mediaElement.currentTime = time;
172
- }
173
-
174
- /**
175
- * Update the playback rate of the `HTMLMediaElement`.
176
- * @param {number} playbackRate
177
- */
178
- public setPlaybackRate(playbackRate: number) : void {
179
- this._mediaElement.playbackRate = playbackRate;
180
- }
181
-
182
- /**
183
- * Returns the current `readyState` advertised by the `HTMLMediaElement`.
184
- * @returns {number}
185
- */
186
- public getReadyState() : number {
187
- return this._mediaElement.readyState;
188
- }
189
-
190
- /**
191
- * Returns an `IReadOnlySharedReference` storing the last playback observation
192
- * produced by the `PlaybackObserver` and updated each time a new one is
193
- * produced.
194
- *
195
- * This value can then be for example listened to to be notified of future
196
- * playback observations.
197
- *
198
- * @returns {Object}
199
- */
200
- public getReference() : IReadOnlySharedReference<IPlaybackObservation> {
201
- return this._observationRef;
202
- }
203
-
204
- /**
205
- * Register a callback so it regularly receives playback observations.
206
- * @param {Function} cb
207
- * @param {Object} options - Configuration options:
208
- * - `includeLastObservation`: If set to `true` the last observation will
209
- * be first emitted synchronously.
210
- * - `clearSignal`: If set, the callback will be unregistered when this
211
- * CancellationSignal emits.
212
- */
213
- public listen(
214
- cb : (
215
- observation : IPlaybackObservation,
216
- stopListening : () => void
217
- ) => void,
218
- options? : { includeLastObservation? : boolean | undefined;
219
- clearSignal? : CancellationSignal | undefined; }
220
- ) {
221
- if (this._canceller.isUsed() || options?.clearSignal?.isCancelled() === true) {
222
- return noop;
223
- }
224
- this._observationRef.onUpdate(cb, {
225
- clearSignal: options?.clearSignal,
226
- emitCurrentValue: options?.includeLastObservation,
227
- });
228
- }
229
-
230
- /**
231
- * Generate a new playback observer which can listen to other
232
- * properties and which can only be accessed to read observations (e.g.
233
- * it cannot ask to perform a seek).
234
- *
235
- * The object returned will respect the `IReadOnlyPlaybackObserver` interface
236
- * and will inherit this `PlaybackObserver`'s lifecycle: it will emit when
237
- * the latter emits.
238
- *
239
- * As argument, this method takes a function which will allow to produce
240
- * the new set of properties to be present on each observation.
241
- * @param {Function} transform
242
- * @returns {Object}
243
- */
244
- public deriveReadOnlyObserver<TDest>(
245
- transform : (
246
- observationRef : IReadOnlySharedReference<IPlaybackObservation>,
247
- cancellationSignal : CancellationSignal
248
- ) => IReadOnlySharedReference<TDest>
249
- ) : IReadOnlyPlaybackObserver<TDest> {
250
- return generateReadOnlyObserver(this, transform, this._canceller.signal);
251
- }
252
-
253
- /**
254
- * Creates the `IReadOnlySharedReference` that will generate playback
255
- * observations.
256
- * @returns {Object}
257
- */
258
- private _createSharedReference() : IReadOnlySharedReference<IPlaybackObservation> {
259
- if (this._observationRef !== undefined) {
260
- return this._observationRef;
261
- }
262
-
263
- let lastObservation : IPlaybackObservation | null;
264
- const { SAMPLING_INTERVAL_MEDIASOURCE,
265
- SAMPLING_INTERVAL_LOW_LATENCY,
266
- SAMPLING_INTERVAL_NO_MEDIASOURCE } = config.getCurrent();
267
-
268
- const getCurrentObservation = (
269
- event : IPlaybackObserverEventType
270
- ) : IPlaybackObservation => {
271
- let tmpEvt: IPlaybackObserverEventType = event;
272
- let startedInternalSeekTime : number | undefined;
273
- if (tmpEvt === "seeking" && this._internalSeeksIncoming.length > 0) {
274
- tmpEvt = "internal-seeking";
275
- startedInternalSeekTime = this._internalSeeksIncoming.shift();
276
- }
277
- const _lastObservation = lastObservation ?? this._generateInitialObservation();
278
- const mediaTimings = getMediaInfos(this._mediaElement,
279
- tmpEvt,
280
- this._withMediaSource);
281
- let pendingInternalSeek : number | null = null;
282
- if (mediaTimings.seeking) {
283
- if (typeof startedInternalSeekTime === "number") {
284
- pendingInternalSeek = startedInternalSeekTime;
285
- } else if (_lastObservation.pendingInternalSeek !== null && event !== "seeking") {
286
- pendingInternalSeek = _lastObservation.pendingInternalSeek;
287
- }
288
- }
289
- const rebufferingStatus = getRebufferingStatus(
290
- _lastObservation,
291
- mediaTimings,
292
- { lowLatencyMode: this._lowLatencyMode,
293
- withMediaSource: this._withMediaSource });
294
-
295
- const freezingStatus = getFreezingStatus(_lastObservation, mediaTimings);
296
- const timings = objectAssign(
297
- {},
298
- { rebuffering: rebufferingStatus,
299
- freezing: freezingStatus,
300
- pendingInternalSeek },
301
- mediaTimings);
302
- if (log.hasLevel("DEBUG")) {
303
- log.debug("API: current media element state tick",
304
- "event", timings.event,
305
- "position", timings.position,
306
- "seeking", timings.seeking,
307
- "internalSeek", timings.pendingInternalSeek,
308
- "rebuffering", timings.rebuffering !== null,
309
- "freezing", timings.freezing !== null,
310
- "ended", timings.ended,
311
- "paused", timings.paused,
312
- "playbackRate", timings.playbackRate,
313
- "readyState", timings.readyState);
314
- }
315
- return timings;
316
- };
317
-
318
- const returnedSharedReference = new SharedReference(getCurrentObservation("init"),
319
- this._canceller.signal);
320
-
321
- const generateObservationForEvent = (event : IPlaybackObserverEventType) => {
322
- const newObservation = getCurrentObservation(event);
323
- if (log.hasLevel("DEBUG")) {
324
- log.debug("API: current playback timeline:\n" +
325
- prettyPrintBuffered(newObservation.buffered,
326
- newObservation.position),
327
- `\n${event}`);
328
- }
329
- lastObservation = newObservation;
330
- returnedSharedReference.setValue(newObservation);
331
- };
332
-
333
- const interval = this._lowLatencyMode ? SAMPLING_INTERVAL_LOW_LATENCY :
334
- this._withMediaSource ? SAMPLING_INTERVAL_MEDIASOURCE :
335
- SAMPLING_INTERVAL_NO_MEDIASOURCE;
336
- let intervalId = setInterval(onInterval, interval);
337
- const removeEventListeners = SCANNED_MEDIA_ELEMENTS_EVENTS.map((eventName) => {
338
- this._mediaElement.addEventListener(eventName, onMediaEvent);
339
- function onMediaEvent() {
340
- restartInterval();
341
- generateObservationForEvent(eventName);
342
- }
343
- return () => {
344
- this._mediaElement.removeEventListener(eventName, onMediaEvent);
345
- };
346
- });
347
-
348
- this._canceller.signal.register(() => {
349
- clearInterval(intervalId);
350
- removeEventListeners.forEach(cb => cb());
351
- returnedSharedReference.finish();
352
- });
353
-
354
- return returnedSharedReference;
355
-
356
- function onInterval() {
357
- generateObservationForEvent("timeupdate");
358
- }
359
-
360
- function restartInterval() {
361
- clearInterval(intervalId);
362
- intervalId = setInterval(onInterval, interval);
363
- }
364
- }
365
-
366
- private _generateInitialObservation() : IPlaybackObservation {
367
- return objectAssign(getMediaInfos(this._mediaElement,
368
- "init",
369
- this._withMediaSource),
370
- { rebuffering: null,
371
- freezing: null,
372
- pendingInternalSeek: null });
373
- }
374
- }
375
-
376
- /** "Event" that triggered the playback observation. */
377
- export type IPlaybackObserverEventType =
378
- /** First playback observation automatically emitted. */
379
- "init" | // set once on first emit
380
- /** Regularly emitted playback observation when no event happened in a long time. */
381
- "timeupdate" |
382
- /** On the HTML5 event with the same name */
383
- "canplay" |
384
- /** On the HTML5 event with the same name */
385
- "ended" |
386
- /** On the HTML5 event with the same name */
387
- "canplaythrough" | // HTML5 Event
388
- /** On the HTML5 event with the same name */
389
- "play" |
390
- /** On the HTML5 event with the same name */
391
- "pause" |
392
- /** On the HTML5 event with the same name */
393
- "seeking" |
394
- /** On the HTML5 event with the same name */
395
- "seeked" |
396
- /** On the HTML5 event with the same name */
397
- "stalled" |
398
- /** On the HTML5 event with the same name */
399
- "loadedmetadata" |
400
- /** On the HTML5 event with the same name */
401
- "ratechange" |
402
- /** An internal seek happens */
403
- "internal-seeking";
404
-
405
- /** Information recuperated on the media element on each playback observation. */
406
- interface IMediaInfos {
407
- /**
408
- * Gap between `currentTime` and the next position with un-buffered data.
409
- * `Infinity` if we don't have buffered data right now.
410
- * `undefined` if we cannot determine the buffer gap.
411
- */
412
- bufferGap : number | undefined;
413
- /** Value of `buffered` (buffered ranges) for the media element. */
414
- buffered : TimeRanges;
415
- /**
416
- * The buffered range we are currently playing.
417
- * `null` if no range is currently available.
418
- * `undefined` if we cannot tell which range is currently available.
419
- */
420
- currentRange : { start : number;
421
- end : number; } |
422
- null |
423
- undefined;
424
- /**
425
- * `currentTime` (position) set on the media element at the time of the
426
- * PlaybackObserver's measure.
427
- */
428
- position : number;
429
- /** Current `duration` set on the media element. */
430
- duration : number;
431
- /** Current `ended` set on the media element. */
432
- ended: boolean;
433
- /** Current `paused` set on the media element. */
434
- paused : boolean;
435
- /** Current `playbackRate` set on the media element. */
436
- playbackRate : number;
437
- /** Current `readyState` value on the media element. */
438
- readyState : number;
439
- /** Current `seeking` value on the mediaElement. */
440
- seeking : boolean;
441
- /** Event that triggered this playback observation. */
442
- event : IPlaybackObserverEventType;
443
- }
444
-
445
- /**
446
- * Describes when the player is "rebuffering" and what event started that
447
- * status.
448
- * "Rebuffering" is a status where the player has not enough buffer ahead to
449
- * play reliably.
450
- * The RxPlayer should pause playback when a playback observation indicates the
451
- * rebuffering status.
452
- */
453
- export interface IRebufferingStatus {
454
- /** What started the player to rebuffer. */
455
- reason : "seeking" | // Building buffer after seeking
456
- "not-ready" | // Building buffer after low readyState
457
- "buffering"; // Other cases
458
- /** `performance.now` at the time the rebuffering happened. */
459
- timestamp : number;
460
- /**
461
- * Position, in seconds, at which data is awaited.
462
- * If `null` the player is rebuffering but not because it is awaiting future data.
463
- * If `undefined`, that position is unknown.
464
- */
465
- position : number | null | undefined;
466
- }
467
-
468
- /**
469
- * Describes when the player is "frozen".
470
- * This status is reserved for when the player is stuck at the same position for
471
- * an unknown reason.
472
- */
473
- export interface IFreezingStatus {
474
- /** `performance.now` at the time the freezing started to be detected. */
475
- timestamp : number;
476
- }
477
-
478
- /** Information emitted on each playback observation. */
479
- export interface IPlaybackObservation extends IMediaInfos {
480
- /**
481
- * Set if the player is short on audio and/or video media data and is a such,
482
- * rebuffering.
483
- * `null` if not.
484
- */
485
- rebuffering : IRebufferingStatus | null;
486
- /**
487
- * Set if the player is frozen, that is, stuck in place for unknown reason.
488
- * Note that this reason can be a valid one, such as a necessary license not
489
- * being obtained yet.
490
- *
491
- * `null` if the player is not frozen.
492
- */
493
- freezing : IFreezingStatus | null;
494
- /**
495
- * If `true`, an "internal seek" (a seeking operation triggered by the
496
- * RxPlayer code) is currently pending.
497
- */
498
- pendingInternalSeek : number | null;
499
- }
500
-
501
- /**
502
- * Interface providing a generic and read-only version of a `PlaybackObserver`.
503
- *
504
- * This interface allows to provide regular and specific playback information
505
- * without allowing any effect on playback like seeking.
506
- *
507
- * This can be very useful to give specific playback information to modules you
508
- * don't want to be able to update playback.
509
- *
510
- * Note that a `PlaybackObserver` is compatible and can thus be upcasted to a
511
- * `IReadOnlyPlaybackObserver` to "remove" its right to update playback.
512
- */
513
- export interface IReadOnlyPlaybackObserver<TObservationType> {
514
- /** Get the current playing position, in seconds. */
515
- getCurrentTime() : number;
516
- /**
517
- * Returns the current playback rate advertised by the `HTMLMediaElement`.
518
- * @returns {number}
519
- */
520
- getPlaybackRate() : number;
521
- /** Get the HTMLMediaElement's current `readyState`. */
522
- getReadyState() : number;
523
- /**
524
- * Returns the current `paused` status advertised by the `HTMLMediaElement`.
525
- *
526
- * Use this instead of the same status emitted on an observation when you want
527
- * to be sure you're using the current value.
528
- * @returns {boolean}
529
- */
530
- getIsPaused() : boolean;
531
- /**
532
- * Returns an `IReadOnlySharedReference` storing the last playback observation
533
- * produced by the `IReadOnlyPlaybackObserver` and updated each time a new one
534
- * is produced.
535
- *
536
- * This value can then be for example listened to to be notified of future
537
- * playback observations.
538
- *
539
- * @returns {Object}
540
- */
541
- getReference() : IReadOnlySharedReference<TObservationType>;
542
- /**
543
- * Register a callback so it regularly receives playback observations.
544
- * @param {Function} cb
545
- * @param {Object} options - Configuration options:
546
- * - `includeLastObservation`: If set to `true` the last observation will
547
- * be first emitted synchronously.
548
- * - `clearSignal`: If set, the callback will be unregistered when this
549
- * CancellationSignal emits.
550
- * @returns {Function} - Allows to easily unregister the callback
551
- */
552
- listen(
553
- cb : (
554
- observation : TObservationType,
555
- stopListening : () => void
556
- ) => void,
557
- options? : { includeLastObservation? : boolean | undefined;
558
- clearSignal? : CancellationSignal | undefined; }
559
- ) : void;
560
- /**
561
- * Generate a new `IReadOnlyPlaybackObserver` from this one.
562
- *
563
- * As argument, this method takes a function which will allow to produce
564
- * the new set of properties to be present on each observation.
565
- * @param {Function} transform
566
- * @returns {Object}
567
- */
568
- deriveReadOnlyObserver<TDest>(
569
- transform : (
570
- observationRef : IReadOnlySharedReference<TObservationType>,
571
- cancellationSignal : CancellationSignal
572
- ) => IReadOnlySharedReference<TDest>
573
- ) : IReadOnlyPlaybackObserver<TDest>;
574
- }
575
-
576
- /**
577
- * Returns the amount of time in seconds the buffer should have ahead of the
578
- * current position before resuming playback. Based on the infos of the
579
- * rebuffering status.
580
- *
581
- * Waiting time differs between a rebuffering happening after a "seek" or one
582
- * happening after a buffer starvation occured.
583
- * @param {Object|null} rebufferingStatus
584
- * @param {Boolean} lowLatencyMode
585
- * @returns {Number}
586
- */
587
- function getRebufferingEndGap(
588
- rebufferingStatus : IRebufferingStatus,
589
- lowLatencyMode : boolean
590
- ) : number {
591
- if (rebufferingStatus === null) {
592
- return 0;
593
- }
594
- const suffix : "LOW_LATENCY" | "DEFAULT" = lowLatencyMode ? "LOW_LATENCY" :
595
- "DEFAULT";
596
- const { RESUME_GAP_AFTER_SEEKING,
597
- RESUME_GAP_AFTER_NOT_ENOUGH_DATA,
598
- RESUME_GAP_AFTER_BUFFERING } = config.getCurrent();
599
-
600
- switch (rebufferingStatus.reason) {
601
- case "seeking":
602
- return RESUME_GAP_AFTER_SEEKING[suffix];
603
- case "not-ready":
604
- return RESUME_GAP_AFTER_NOT_ENOUGH_DATA[suffix];
605
- case "buffering":
606
- return RESUME_GAP_AFTER_BUFFERING[suffix];
607
- }
608
- }
609
-
610
- /**
611
- * @param {Object} currentRange
612
- * @param {Number} duration
613
- * @param {Boolean} lowLatencyMode
614
- * @returns {Boolean}
615
- */
616
- function hasLoadedUntilTheEnd(
617
- currentTime : number,
618
- currentRange : { start : number; end : number } | null | undefined,
619
- ended : boolean,
620
- duration : number,
621
- lowLatencyMode : boolean
622
- ) : boolean {
623
- const { REBUFFERING_GAP } = config.getCurrent();
624
- const suffix : "LOW_LATENCY" | "DEFAULT" = lowLatencyMode ? "LOW_LATENCY" :
625
- "DEFAULT";
626
- if (currentRange === undefined) {
627
- return ended && Math.abs(duration - currentTime) <= REBUFFERING_GAP[suffix];
628
- }
629
- return currentRange !== null &&
630
- (duration - currentRange.end) <= REBUFFERING_GAP[suffix];
631
- }
632
-
633
- /**
634
- * Get basic playback information.
635
- * @param {HTMLMediaElement} mediaElement
636
- * @param {string} event
637
- * @returns {Object}
638
- */
639
- function getMediaInfos(
640
- mediaElement : HTMLMediaElement,
641
- event : IPlaybackObserverEventType,
642
- withMediaSource : boolean
643
- ) : IMediaInfos {
644
- const { buffered,
645
- currentTime,
646
- duration,
647
- ended,
648
- paused,
649
- playbackRate,
650
- readyState,
651
- seeking } = mediaElement;
652
-
653
- let currentRange;
654
- let bufferGap;
655
- if (!withMediaSource && buffered.length === 0 && readyState >= 3) {
656
- // Sometimes `buffered` stay empty for directfile contents yet we are able
657
- // to play. This seems to be linked to browser-side issues but has been
658
- // encountered on enough platforms (Chrome desktop and PlayStation 4's
659
- // WebKit for us to do something about it in the player.
660
- currentRange = undefined;
661
- bufferGap = undefined;
662
- } else {
663
- currentRange = getRange(buffered, currentTime);
664
- bufferGap = currentRange !== null ? currentRange.end - currentTime :
665
- // TODO null/0 would probably be
666
- // more appropriate
667
- Infinity;
668
- }
669
- return { bufferGap,
670
- buffered,
671
- currentRange,
672
- position: currentTime,
673
- duration,
674
- ended,
675
- paused,
676
- playbackRate,
677
- readyState,
678
- seeking,
679
- event };
680
- }
681
-
682
- /**
683
- * Infer rebuffering status of the media based on:
684
- * - the return of the function getMediaInfos
685
- * - the previous observation object.
686
- *
687
- * @param {Object} prevObservation - Previous playback observation object.
688
- * @param {Object} currentInfo - Current set of basic information on the
689
- * `HTMLMediaElement`. This does not need every single property from a regular
690
- * playback observation.
691
- * @param {Object} options
692
- * @returns {Object|null}
693
- */
694
- function getRebufferingStatus(
695
- prevObservation : IPlaybackObservation,
696
- currentInfo : IMediaInfos,
697
- { withMediaSource, lowLatencyMode } : IPlaybackObserverOptions
698
- ) : IRebufferingStatus | null {
699
-
700
- const { REBUFFERING_GAP } = config.getCurrent();
701
- const { event: currentEvt,
702
- position: currentTime,
703
- bufferGap,
704
- currentRange,
705
- duration,
706
- paused,
707
- readyState,
708
- ended } = currentInfo;
709
-
710
- const { rebuffering: prevRebuffering,
711
- event: prevEvt,
712
- position: prevTime } = prevObservation;
713
-
714
- const fullyLoaded = hasLoadedUntilTheEnd(currentTime,
715
- currentRange,
716
- ended,
717
- duration,
718
- lowLatencyMode);
719
-
720
- const canSwitchToRebuffering = (readyState >= 1 &&
721
- currentEvt !== "loadedmetadata" &&
722
- prevRebuffering === null &&
723
- !(fullyLoaded || ended));
724
-
725
- let rebufferEndPosition : number | null | undefined = null;
726
- let shouldRebuffer : boolean | undefined;
727
- let shouldStopRebuffer : boolean | undefined;
728
-
729
- const rebufferGap = lowLatencyMode ? REBUFFERING_GAP.LOW_LATENCY :
730
- REBUFFERING_GAP.DEFAULT;
731
-
732
- if (withMediaSource) {
733
- if (canSwitchToRebuffering) {
734
- if (bufferGap === Infinity) {
735
- shouldRebuffer = true;
736
- rebufferEndPosition = currentTime;
737
- } else if (bufferGap === undefined) {
738
- if (readyState < 3) {
739
- shouldRebuffer = true;
740
- rebufferEndPosition = undefined;
741
- }
742
- } else if (bufferGap <= rebufferGap) {
743
- shouldRebuffer = true;
744
- rebufferEndPosition = currentTime + bufferGap;
745
- }
746
- } else if (prevRebuffering !== null) {
747
- const resumeGap = getRebufferingEndGap(prevRebuffering, lowLatencyMode);
748
- if (shouldRebuffer !== true && prevRebuffering !== null && readyState > 1 &&
749
- (fullyLoaded || ended ||
750
- (bufferGap !== undefined && isFinite(bufferGap) && bufferGap > resumeGap)) ||
751
- (bufferGap === undefined && readyState >= 3))
752
- {
753
- shouldStopRebuffer = true;
754
- } else if (bufferGap === undefined) {
755
- rebufferEndPosition = undefined;
756
- } else if (bufferGap === Infinity) {
757
- rebufferEndPosition = currentTime;
758
- } else if (bufferGap <= resumeGap) {
759
- rebufferEndPosition = currentTime + bufferGap;
760
- }
761
- }
762
- }
763
-
764
- // when using a direct file, the media will stall and unstall on its
765
- // own, so we only try to detect when the media timestamp has not changed
766
- // between two consecutive timeupdates
767
- else {
768
- if (canSwitchToRebuffering &&
769
- (
770
- (
771
- !paused &&
772
- currentEvt === "timeupdate" && prevEvt === "timeupdate" &&
773
- currentTime === prevTime
774
- ) ||
775
- (
776
- currentEvt === "seeking" && (
777
- bufferGap === Infinity || (bufferGap === undefined && readyState < 3)
778
- )
779
- )
780
- )
781
- ) {
782
- shouldRebuffer = true;
783
- } else if (
784
- prevRebuffering !== null &&
785
- (
786
- (currentEvt !== "seeking" && currentTime !== prevTime) ||
787
- currentEvt === "canplay" ||
788
- (bufferGap === undefined && readyState >= 3) ||
789
- (
790
- bufferGap !== undefined && bufferGap < Infinity &&
791
- (
792
- bufferGap > getRebufferingEndGap(prevRebuffering, lowLatencyMode) ||
793
- fullyLoaded || ended
794
- )
795
- )
796
- )
797
- ) {
798
- shouldStopRebuffer = true;
799
- }
800
- }
801
-
802
- if (shouldStopRebuffer === true) {
803
- return null;
804
- } else if (shouldRebuffer === true || prevRebuffering !== null) {
805
- let reason : "seeking" | "not-ready" | "buffering" | "internal-seek";
806
- if (currentEvt === "seeking" ||
807
- prevRebuffering !== null && prevRebuffering.reason === "seeking") {
808
- reason = "seeking";
809
- } else if (currentInfo.seeking) {
810
- reason = "seeking";
811
- } else if (readyState === 1) {
812
- reason = "not-ready";
813
- } else {
814
- reason = "buffering";
815
- }
816
- if (prevRebuffering !== null && prevRebuffering.reason === reason) {
817
- return { reason: prevRebuffering.reason,
818
- timestamp: prevRebuffering.timestamp,
819
- position: rebufferEndPosition };
820
- }
821
- return { reason,
822
- timestamp: performance.now(),
823
- position: rebufferEndPosition };
824
- }
825
- return null;
826
- }
827
-
828
- /**
829
- * Detect if the current media can be considered as "freezing" (i.e. not
830
- * advancing for unknown reasons).
831
- *
832
- * Returns a corresponding `IFreezingStatus` object if that's the case and
833
- * `null` if not.
834
- * @param {Object} prevObservation
835
- * @param {Object} currentInfo
836
- * @returns {Object|null}
837
- */
838
- function getFreezingStatus(
839
- prevObservation : IPlaybackObservation,
840
- currentInfo : IMediaInfos
841
- ) : IFreezingStatus | null {
842
- const { MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING } = config.getCurrent();
843
- if (prevObservation.freezing) {
844
- if (currentInfo.ended ||
845
- currentInfo.paused ||
846
- currentInfo.readyState === 0 ||
847
- currentInfo.playbackRate === 0 ||
848
- prevObservation.position !== currentInfo.position)
849
- {
850
- return null; // Quit freezing status
851
- }
852
- return prevObservation.freezing; // Stay in it
853
- }
854
-
855
- return currentInfo.event === "timeupdate" &&
856
- currentInfo.bufferGap !== undefined &&
857
- currentInfo.bufferGap > MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING &&
858
- !currentInfo.ended &&
859
- !currentInfo.paused &&
860
- currentInfo.readyState >= 1 &&
861
- currentInfo.playbackRate !== 0 &&
862
- currentInfo.position === prevObservation.position ?
863
- { timestamp: performance.now() } :
864
- null;
865
- }
866
-
867
- export interface IPlaybackObserverOptions {
868
- withMediaSource : boolean;
869
- lowLatencyMode : boolean;
870
- }
871
-
872
- /**
873
- * Pretty print a TimeRanges Object, to see the current content of it in a
874
- * one-liner string.
875
- *
876
- * @example
877
- * This function is called by giving it directly the TimeRanges, such as:
878
- * ```js
879
- * prettyPrintBuffered(document.getElementsByTagName("video")[0].buffered);
880
- * ```
881
- *
882
- * Let's consider this possible return:
883
- *
884
- * ```
885
- * 0.00|==29.95==|29.95 ~30.05~ 60.00|==29.86==|89.86
886
- * ^14
887
- * ```
888
- * This means that our video element has 29.95 seconds of buffer between 0 and
889
- * 29.95 seconds.
890
- * Then 30.05 seconds where no buffer is found.
891
- * Then 29.86 seconds of buffer between 60.00 and 89.86 seconds.
892
- *
893
- * A caret on the second line indicates the current time we're at.
894
- * The number coming after it is the current time.
895
- * @param {TimeRanges} buffered
896
- * @param {number} currentTime
897
- * @returns {string}
898
- */
899
- function prettyPrintBuffered(
900
- buffered : TimeRanges,
901
- currentTime : number
902
- ) : string {
903
- let str = "";
904
- let currentTimeStr = "";
905
-
906
- for (let i = 0; i < buffered.length; i++) {
907
- const start = buffered.start(i);
908
- const end = buffered.end(i);
909
- const fixedStart = start.toFixed(2);
910
- const fixedEnd = end.toFixed(2);
911
- const fixedDuration = (end - start).toFixed(2);
912
- const newIntervalStr = `${fixedStart}|==${fixedDuration}==|${fixedEnd}`;
913
- str += newIntervalStr;
914
- if (currentTimeStr.length === 0 && end > currentTime) {
915
- const padBefore = str.length - Math.floor(newIntervalStr.length / 2);
916
- currentTimeStr = " ".repeat(padBefore) + `^${currentTime}`;
917
- }
918
- if (i < buffered.length - 1) {
919
- const nextStart = buffered.start(i + 1);
920
- const fixedDiff = (nextStart - end).toFixed(2);
921
- const holeStr = ` ~${fixedDiff}~ `;
922
- str += holeStr;
923
- if (currentTimeStr.length === 0 && currentTime < nextStart) {
924
- const padBefore = str.length - Math.floor(holeStr.length / 2);
925
- currentTimeStr = " ".repeat(padBefore) + `^${currentTime}`;
926
- }
927
- }
928
- }
929
- if (currentTimeStr.length === 0) {
930
- currentTimeStr = " ".repeat(str.length) + `^${currentTime}`;
931
- }
932
- return str + "\n" + currentTimeStr;
933
- }
934
-
935
- /**
936
- * Create `IReadOnlyPlaybackObserver` from a source `IReadOnlyPlaybackObserver`
937
- * and a mapping function.
938
- * @param {Object} src
939
- * @param {Function} transform
940
- * @returns {Object}
941
- */
942
- function generateReadOnlyObserver<TSource, TDest>(
943
- src : IReadOnlyPlaybackObserver<TSource>,
944
- transform : (
945
- observationRef : IReadOnlySharedReference<TSource>,
946
- cancellationSignal : CancellationSignal
947
- ) => IReadOnlySharedReference<TDest>,
948
- cancellationSignal : CancellationSignal
949
- ) : IReadOnlyPlaybackObserver<TDest> {
950
- const mappedRef = transform(src.getReference(), cancellationSignal);
951
- return {
952
- getCurrentTime() {
953
- return src.getCurrentTime();
954
- },
955
- getReadyState() {
956
- return src.getReadyState();
957
- },
958
- getPlaybackRate() : number {
959
- return src.getPlaybackRate();
960
- },
961
- getIsPaused() {
962
- return src.getIsPaused();
963
- },
964
- getReference() : IReadOnlySharedReference<TDest> {
965
- return mappedRef;
966
- },
967
- listen(
968
- cb : (
969
- observation : TDest,
970
- stopListening : () => void
971
- ) => void,
972
- options? : { includeLastObservation? : boolean | undefined;
973
- clearSignal? : CancellationSignal | undefined; }
974
- ) : void {
975
- if (cancellationSignal.isCancelled() ||
976
- options?.clearSignal?.isCancelled() === true)
977
- {
978
- return ;
979
- }
980
- mappedRef.onUpdate(cb, {
981
- clearSignal: options?.clearSignal,
982
- emitCurrentValue: options?.includeLastObservation,
983
- });
984
- },
985
- deriveReadOnlyObserver<TNext>(
986
- newTransformFn : (
987
- observationRef : IReadOnlySharedReference<TDest>,
988
- signal : CancellationSignal
989
- ) => IReadOnlySharedReference<TNext>
990
- ) : IReadOnlyPlaybackObserver<TNext> {
991
- return generateReadOnlyObserver(this, newTransformFn, cancellationSignal);
992
- },
993
- };
994
- }