rx-player 4.0.0-dev.2023092900 → 4.0.0-dev.2023102700

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 (576) hide show
  1. package/CHANGELOG.md +221 -12
  2. package/FILES.md +0 -4
  3. package/MAINTAINERS.md +1 -0
  4. package/README.md +0 -21
  5. package/VERSION +1 -1
  6. package/dist/_esm5.processed/compat/add_class_name.js +6 -3
  7. package/dist/_esm5.processed/compat/add_text_track.js +11 -8
  8. package/dist/_esm5.processed/compat/browser_compatibility_types.js +13 -9
  9. package/dist/_esm5.processed/compat/browser_detection.js +49 -34
  10. package/dist/_esm5.processed/compat/browser_version.js +11 -8
  11. package/dist/_esm5.processed/compat/can_patch_isobmff.js +6 -3
  12. package/dist/_esm5.processed/compat/can_rely_on_video_visibility_and_size.js +9 -6
  13. package/dist/_esm5.processed/compat/can_reuse_media_keys.js +6 -3
  14. package/dist/_esm5.processed/compat/change_source_buffer_type.js +6 -3
  15. package/dist/_esm5.processed/compat/clear_element_src.js +12 -9
  16. package/dist/_esm5.processed/compat/eme/close_session.js +45 -106
  17. package/dist/_esm5.processed/compat/eme/constants.js +6 -3
  18. package/dist/_esm5.processed/compat/eme/custom_key_system_access.js +18 -22
  19. package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +78 -102
  20. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +16 -6
  21. package/dist/_esm5.processed/compat/eme/custom_media_keys/moz_media_keys_constructor.js +18 -15
  22. package/dist/_esm5.processed/compat/eme/custom_media_keys/ms_media_keys_constructor.js +7 -5
  23. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +70 -88
  24. package/dist/_esm5.processed/compat/eme/custom_media_keys/types.js +2 -1
  25. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +91 -117
  26. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys_constructor.js +7 -7
  27. package/dist/_esm5.processed/compat/eme/eme-api-implementation.js +82 -83
  28. package/dist/_esm5.processed/compat/eme/generate_key_request.js +36 -31
  29. package/dist/_esm5.processed/compat/eme/get_init_data.js +28 -25
  30. package/dist/_esm5.processed/compat/eme/get_uuid_kid_from_keystatus_kid.js +8 -5
  31. package/dist/_esm5.processed/compat/eme/get_webkit_fairplay_initdata.js +17 -14
  32. package/dist/_esm5.processed/compat/eme/index.js +13 -7
  33. package/dist/_esm5.processed/compat/eme/load_session.js +26 -69
  34. package/dist/_esm5.processed/compat/enable_audio_track.js +7 -4
  35. package/dist/_esm5.processed/compat/event_listeners.js +130 -102
  36. package/dist/_esm5.processed/compat/get_start_date.js +7 -4
  37. package/dist/_esm5.processed/compat/global_scope.js +7 -5
  38. package/dist/_esm5.processed/compat/has_issues_with_high_media_source_duration.js +6 -3
  39. package/dist/_esm5.processed/compat/index.js +47 -24
  40. package/dist/_esm5.processed/compat/is_codec_supported.js +8 -5
  41. package/dist/_esm5.processed/compat/is_debug_mode_enabled.js +4 -1
  42. package/dist/_esm5.processed/compat/is_node.js +5 -3
  43. package/dist/_esm5.processed/compat/is_seeking_approximate.js +5 -3
  44. package/dist/_esm5.processed/compat/is_vtt_cue.js +6 -3
  45. package/dist/_esm5.processed/compat/is_worker.js +3 -1
  46. package/dist/_esm5.processed/compat/make_vtt_cue.js +10 -7
  47. package/dist/_esm5.processed/compat/on_height_width_change.js +25 -22
  48. package/dist/_esm5.processed/compat/patch_webkit_source_buffer.js +19 -17
  49. package/dist/_esm5.processed/compat/remove_cue.js +12 -9
  50. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +7 -4
  51. package/dist/_esm5.processed/compat/should_reload_media_source_on_decipherability_update.js +4 -1
  52. package/dist/_esm5.processed/compat/should_renew_media_key_system_access.js +6 -3
  53. package/dist/_esm5.processed/compat/should_unset_media_keys.js +6 -3
  54. package/dist/_esm5.processed/compat/should_validate_metadata.js +6 -3
  55. package/dist/_esm5.processed/compat/should_wait_for_data_before_loaded.js +6 -3
  56. package/dist/_esm5.processed/compat/should_wait_for_have_enough_data.js +6 -3
  57. package/dist/_esm5.processed/config.js +15 -14
  58. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +123 -94
  59. package/dist/_esm5.processed/core/adaptive/buffer_based_chooser.js +43 -42
  60. package/dist/_esm5.processed/core/adaptive/guess_based_chooser.js +37 -44
  61. package/dist/_esm5.processed/core/adaptive/index.js +4 -2
  62. package/dist/_esm5.processed/core/adaptive/network_analyzer.js +75 -74
  63. package/dist/_esm5.processed/core/adaptive/utils/bandwidth_estimator.js +24 -23
  64. package/dist/_esm5.processed/core/adaptive/utils/ewma.js +13 -12
  65. package/dist/_esm5.processed/core/adaptive/utils/filter_by_bitrate.js +9 -6
  66. package/dist/_esm5.processed/core/adaptive/utils/filter_by_resolution.js +18 -19
  67. package/dist/_esm5.processed/core/adaptive/utils/get_buffer_levels.js +10 -7
  68. package/dist/_esm5.processed/core/adaptive/utils/last_estimate_storage.js +8 -7
  69. package/dist/_esm5.processed/core/adaptive/utils/pending_requests_store.js +26 -23
  70. package/dist/_esm5.processed/core/adaptive/utils/representation_score_calculator.js +25 -23
  71. package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.js +6 -3
  72. package/dist/_esm5.processed/core/api/debug/buffer_graph.js +41 -40
  73. package/dist/_esm5.processed/core/api/debug/buffer_size_graph.js +31 -30
  74. package/dist/_esm5.processed/core/api/debug/constants.js +4 -1
  75. package/dist/_esm5.processed/core/api/debug/index.js +4 -2
  76. package/dist/_esm5.processed/core/api/debug/modules/general_info.js +64 -72
  77. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +49 -46
  78. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +15 -12
  79. package/dist/_esm5.processed/core/api/debug/render.js +16 -13
  80. package/dist/_esm5.processed/core/api/debug/utils.js +18 -13
  81. package/dist/_esm5.processed/core/api/index.js +7 -4
  82. package/dist/_esm5.processed/core/api/option_utils.js +85 -58
  83. package/dist/_esm5.processed/core/api/playback_observer.js +135 -124
  84. package/dist/_esm5.processed/core/api/public_api.js +610 -684
  85. package/dist/_esm5.processed/core/api/track_management/index.js +19 -3
  86. package/dist/_esm5.processed/core/api/track_management/media_element_tracks_store.js +233 -247
  87. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +45 -58
  88. package/dist/_esm5.processed/core/api/track_management/tracks_store.js +300 -324
  89. package/dist/_esm5.processed/core/api/utils.js +32 -24
  90. package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.js +155 -185
  91. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +42 -81
  92. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +15 -12
  93. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +392 -510
  94. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +44 -90
  95. package/dist/_esm5.processed/core/decrypt/create_session.js +90 -149
  96. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +24 -67
  97. package/dist/_esm5.processed/core/decrypt/find_key_system.js +94 -155
  98. package/dist/_esm5.processed/core/decrypt/get_key_system_configuration.js +6 -3
  99. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +59 -109
  100. package/dist/_esm5.processed/core/decrypt/index.js +26 -7
  101. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +17 -59
  102. package/dist/_esm5.processed/core/decrypt/session_events_listener.js +84 -155
  103. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +50 -103
  104. package/dist/_esm5.processed/core/decrypt/types.js +5 -2
  105. package/dist/_esm5.processed/core/decrypt/utils/are_init_values_compatible.js +22 -19
  106. package/dist/_esm5.processed/core/decrypt/utils/check_key_statuses.js +40 -61
  107. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +17 -61
  108. package/dist/_esm5.processed/core/decrypt/utils/clean_old_stored_persistent_info.js +8 -5
  109. package/dist/_esm5.processed/core/decrypt/utils/get_drm_system_id.js +8 -5
  110. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +23 -23
  111. package/dist/_esm5.processed/core/decrypt/utils/is_session_usable.js +15 -12
  112. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +14 -21
  113. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +26 -27
  114. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +206 -310
  115. package/dist/_esm5.processed/core/decrypt/utils/media_keys_infos_store.js +8 -6
  116. package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.js +103 -102
  117. package/dist/_esm5.processed/core/decrypt/utils/serializable_bytes.js +13 -12
  118. package/dist/_esm5.processed/core/decrypt/utils/server_certificate_store.js +18 -16
  119. package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.js +37 -56
  120. package/dist/_esm5.processed/core/fetchers/index.js +7 -3
  121. package/dist/_esm5.processed/core/fetchers/manifest/index.js +4 -2
  122. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +233 -313
  123. package/dist/_esm5.processed/core/fetchers/segment/index.js +4 -2
  124. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.js +12 -9
  125. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +218 -234
  126. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +20 -19
  127. package/dist/_esm5.processed/core/fetchers/segment/task_prioritizer.js +73 -74
  128. package/dist/_esm5.processed/core/fetchers/utils/error_selector.js +8 -5
  129. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +210 -261
  130. package/dist/_esm5.processed/core/init/directfile_content_initializer.js +73 -99
  131. package/dist/_esm5.processed/core/init/index.js +5 -1
  132. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +256 -320
  133. package/dist/_esm5.processed/core/init/types.js +7 -24
  134. package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.js +109 -135
  135. package/dist/_esm5.processed/core/init/utils/create_media_source.js +35 -30
  136. package/dist/_esm5.processed/core/init/utils/create_stream_playback_observer.js +12 -10
  137. package/dist/_esm5.processed/core/init/utils/end_of_stream.js +30 -26
  138. package/dist/_esm5.processed/core/init/utils/get_initial_time.js +41 -38
  139. package/dist/_esm5.processed/core/init/utils/get_loaded_reference.js +13 -10
  140. package/dist/_esm5.processed/core/init/utils/initial_seek_and_play.js +29 -26
  141. package/dist/_esm5.processed/core/init/utils/initialize_content_decryption.js +30 -27
  142. package/dist/_esm5.processed/core/init/utils/media_source_duration_updater.js +58 -60
  143. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +140 -161
  144. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/are_same_stream_events.js +3 -1
  145. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/index.js +4 -2
  146. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/refresh_scheduled_events_list.js +28 -30
  147. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/stream_events_emitter.js +71 -90
  148. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/types.js +2 -1
  149. package/dist/_esm5.processed/core/init/utils/throw_on_media_error.js +16 -13
  150. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.js +75 -126
  151. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +130 -147
  152. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/index.js +4 -2
  153. package/dist/_esm5.processed/core/segment_buffers/implementations/index.js +20 -3
  154. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +106 -125
  155. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/index.js +4 -2
  156. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/parsers.js +11 -8
  157. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +48 -47
  158. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/types.js +2 -1
  159. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/update_proportional_elements.js +18 -15
  160. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.js +22 -15
  161. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/index.js +4 -2
  162. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +65 -82
  163. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/parsers.js +11 -8
  164. package/dist/_esm5.processed/core/segment_buffers/implementations/types.js +19 -17
  165. package/dist/_esm5.processed/core/segment_buffers/implementations/utils/manual_time_ranges.js +23 -22
  166. package/dist/_esm5.processed/core/segment_buffers/index.js +13 -6
  167. package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.js +24 -22
  168. package/dist/_esm5.processed/core/segment_buffers/inventory/index.js +8 -3
  169. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +151 -150
  170. package/dist/_esm5.processed/core/segment_buffers/inventory/types.js +2 -1
  171. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.js +9 -4
  172. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +82 -89
  173. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +118 -166
  174. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.js +31 -28
  175. package/dist/_esm5.processed/core/stream/adaptation/index.js +19 -3
  176. package/dist/_esm5.processed/core/stream/adaptation/types.js +2 -1
  177. package/dist/_esm5.processed/core/stream/index.js +4 -2
  178. package/dist/_esm5.processed/core/stream/orchestrator/get_time_ranges_for_content.js +14 -16
  179. package/dist/_esm5.processed/core/stream/orchestrator/index.js +4 -2
  180. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +175 -222
  181. package/dist/_esm5.processed/core/stream/period/index.js +19 -3
  182. package/dist/_esm5.processed/core/stream/period/period_stream.js +172 -216
  183. package/dist/_esm5.processed/core/stream/period/types.js +2 -1
  184. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.js +34 -33
  185. package/dist/_esm5.processed/core/stream/representation/index.js +19 -3
  186. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +80 -68
  187. package/dist/_esm5.processed/core/stream/representation/types.js +2 -1
  188. package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.js +33 -84
  189. package/dist/_esm5.processed/core/stream/representation/utils/check_for_discontinuity.js +32 -29
  190. package/dist/_esm5.processed/core/stream/representation/utils/downloading_queue.js +126 -145
  191. package/dist/_esm5.processed/core/stream/representation/utils/force_garbage_collection.js +32 -88
  192. package/dist/_esm5.processed/core/stream/representation/utils/get_buffer_status.js +61 -48
  193. package/dist/_esm5.processed/core/stream/representation/utils/get_needed_segments.js +71 -69
  194. package/dist/_esm5.processed/core/stream/representation/utils/get_segment_priority.js +8 -5
  195. package/dist/_esm5.processed/core/stream/representation/utils/push_init_segment.js +22 -63
  196. package/dist/_esm5.processed/core/stream/representation/utils/push_media_segment.js +49 -86
  197. package/dist/_esm5.processed/default_config.js +4 -2
  198. package/dist/_esm5.processed/errors/assertion_error.js +10 -26
  199. package/dist/_esm5.processed/errors/custom_loader_error.js +12 -28
  200. package/dist/_esm5.processed/errors/encrypted_media_error.js +16 -32
  201. package/dist/_esm5.processed/errors/error_codes.js +9 -4
  202. package/dist/_esm5.processed/errors/error_message.js +5 -2
  203. package/dist/_esm5.processed/errors/format_error.js +9 -7
  204. package/dist/_esm5.processed/errors/index.js +25 -11
  205. package/dist/_esm5.processed/errors/is_known_error.js +14 -11
  206. package/dist/_esm5.processed/errors/media_error.js +17 -33
  207. package/dist/_esm5.processed/errors/network_error.js +21 -37
  208. package/dist/_esm5.processed/errors/other_error.js +15 -31
  209. package/dist/_esm5.processed/errors/request_error.js +17 -33
  210. package/dist/_esm5.processed/experimental/features/dash_wasm.js +14 -11
  211. package/dist/_esm5.processed/experimental/features/debug_element.js +7 -4
  212. package/dist/_esm5.processed/experimental/features/index.d.ts +1 -0
  213. package/dist/_esm5.processed/experimental/features/index.js +11 -3
  214. package/dist/_esm5.processed/experimental/features/local.js +9 -6
  215. package/dist/_esm5.processed/experimental/features/metaplaylist.js +9 -6
  216. package/dist/_esm5.processed/experimental/index.js +5 -2
  217. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/features/dash.js +6 -3
  218. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/features/metaplaylist.js +6 -3
  219. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/index.js +7 -3
  220. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_and_push_segment.js +22 -16
  221. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +22 -19
  222. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/remove_buffer_around_time.js +6 -3
  223. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/types.js +2 -1
  224. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +125 -186
  225. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader_error.js +11 -27
  226. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +76 -119
  227. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/index.js +24 -15
  228. package/dist/_esm5.processed/experimental/tools/index.js +11 -5
  229. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.js +38 -43
  230. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +31 -34
  231. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/capabilities.js +21 -18
  232. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/index.js +4 -2
  233. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/log.js +5 -3
  234. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +20 -17
  235. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +21 -18
  236. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +13 -10
  237. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/defaultCodecsFinder.js +16 -13
  238. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/index.js +16 -14
  239. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.js +14 -11
  240. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/format.js +14 -11
  241. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.js +19 -16
  242. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +11 -8
  243. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.js +5 -2
  244. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/utils.js +25 -22
  245. package/dist/_esm5.processed/experimental/tools/parseBIFThumbnails.js +7 -4
  246. package/dist/_esm5.processed/features/add_features.js +11 -8
  247. package/dist/_esm5.processed/features/features_object.js +4 -2
  248. package/dist/_esm5.processed/features/index.js +7 -4
  249. package/dist/_esm5.processed/features/list/dash.js +11 -8
  250. package/dist/_esm5.processed/features/list/directfile.js +9 -5
  251. package/dist/_esm5.processed/features/list/eme.js +7 -4
  252. package/dist/_esm5.processed/features/list/html_sami_parser.js +9 -6
  253. package/dist/_esm5.processed/features/list/html_srt_parser.js +9 -6
  254. package/dist/_esm5.processed/features/list/html_text_buffer.js +7 -4
  255. package/dist/_esm5.processed/features/list/html_ttml_parser.js +9 -6
  256. package/dist/_esm5.processed/features/list/html_vtt_parser.js +9 -6
  257. package/dist/_esm5.processed/features/list/index.js +31 -14
  258. package/dist/_esm5.processed/features/list/native_sami_parser.js +9 -6
  259. package/dist/_esm5.processed/features/list/native_srt_parser.js +9 -6
  260. package/dist/_esm5.processed/features/list/native_text_buffer.js +7 -4
  261. package/dist/_esm5.processed/features/list/native_ttml_parser.js +9 -6
  262. package/dist/_esm5.processed/features/list/native_vtt_parser.js +9 -6
  263. package/dist/_esm5.processed/features/list/smooth.js +9 -6
  264. package/dist/_esm5.processed/features/types.js +2 -1
  265. package/dist/_esm5.processed/index.js +24 -9
  266. package/dist/_esm5.processed/log.js +5 -3
  267. package/dist/_esm5.processed/manifest/adaptation.js +52 -55
  268. package/dist/_esm5.processed/manifest/index.js +32 -13
  269. package/dist/_esm5.processed/manifest/manifest.js +112 -134
  270. package/dist/_esm5.processed/manifest/period.js +38 -42
  271. package/dist/_esm5.processed/manifest/representation.js +78 -61
  272. package/dist/_esm5.processed/manifest/representation_index/index.js +5 -2
  273. package/dist/_esm5.processed/manifest/representation_index/static.js +43 -42
  274. package/dist/_esm5.processed/manifest/representation_index/types.js +2 -1
  275. package/dist/_esm5.processed/manifest/types.js +5 -2
  276. package/dist/_esm5.processed/manifest/update_period_in_place.js +38 -48
  277. package/dist/_esm5.processed/manifest/update_periods.js +59 -69
  278. package/dist/_esm5.processed/manifest/utils.js +14 -9
  279. package/dist/_esm5.processed/minimal.js +9 -7
  280. package/dist/_esm5.processed/parsers/containers/isobmff/constants.js +4 -1
  281. package/dist/_esm5.processed/parsers/containers/isobmff/create_box.js +14 -10
  282. package/dist/_esm5.processed/parsers/containers/isobmff/drm/index.js +5 -1
  283. package/dist/_esm5.processed/parsers/containers/isobmff/drm/playready.js +15 -11
  284. package/dist/_esm5.processed/parsers/containers/isobmff/get_box.js +48 -40
  285. package/dist/_esm5.processed/parsers/containers/isobmff/index.js +27 -6
  286. package/dist/_esm5.processed/parsers/containers/isobmff/read.js +20 -14
  287. package/dist/_esm5.processed/parsers/containers/isobmff/take_pssh_out.js +25 -20
  288. package/dist/_esm5.processed/parsers/containers/isobmff/utils.js +130 -112
  289. package/dist/_esm5.processed/parsers/containers/matroska/index.js +6 -1
  290. package/dist/_esm5.processed/parsers/containers/matroska/utils.js +67 -63
  291. package/dist/_esm5.processed/parsers/images/bif.js +40 -29
  292. package/dist/_esm5.processed/parsers/manifest/dash/common/attach_trickmode_track.js +10 -12
  293. package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +10 -7
  294. package/dist/_esm5.processed/parsers/manifest/dash/common/get_clock_offset.js +8 -5
  295. package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.js +10 -6
  296. package/dist/_esm5.processed/parsers/manifest/dash/common/get_http_utc-timing_url.js +7 -6
  297. package/dist/_esm5.processed/parsers/manifest/dash/common/get_minimum_and_maximum_positions.js +10 -6
  298. package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.js +14 -9
  299. package/dist/_esm5.processed/parsers/manifest/dash/common/index.js +10 -4
  300. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +73 -67
  301. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.js +9 -4
  302. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +32 -25
  303. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/index.js +11 -5
  304. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +81 -70
  305. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +130 -123
  306. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +15 -12
  307. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_previous_timeline.js +35 -32
  308. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.js +14 -9
  309. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/find_first_common_start_time.js +30 -22
  310. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/index.js +4 -2
  311. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/parse_s_element.js +14 -11
  312. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +131 -129
  313. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.js +16 -10
  314. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/utils.js +7 -3
  315. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.js +19 -18
  316. package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.js +18 -17
  317. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +111 -111
  318. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_availability_start_time.js +4 -1
  319. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +86 -85
  320. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +97 -82
  321. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +39 -37
  322. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +61 -69
  323. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.js +12 -9
  324. package/dist/_esm5.processed/parsers/manifest/dash/index.js +8 -1
  325. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/index.js +4 -2
  326. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +66 -62
  327. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/BaseURL.js +7 -4
  328. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/ContentComponent.js +7 -4
  329. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/ContentProtection.js +22 -19
  330. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/EventStream.js +22 -19
  331. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Initialization.js +11 -8
  332. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/MPD.js +38 -34
  333. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Period.js +34 -30
  334. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +44 -40
  335. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentBase.js +24 -21
  336. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentList.js +15 -12
  337. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.js +21 -18
  338. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentTimeline.js +6 -3
  339. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentURL.js +12 -9
  340. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +60 -64
  341. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +33 -27
  342. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.js +2 -1
  343. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.js +2 -1
  344. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/index.js +4 -2
  345. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +192 -238
  346. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +67 -62
  347. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.js +8 -4
  348. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/ContentComponent.js +11 -7
  349. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/ContentProtection.js +17 -13
  350. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.js +29 -24
  351. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/MPD.js +38 -33
  352. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Period.js +37 -32
  353. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +43 -38
  354. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Scheme.js +9 -5
  355. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentBase.js +16 -12
  356. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.js +11 -7
  357. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentTemplate.js +20 -16
  358. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentUrl.js +11 -7
  359. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/XLink.js +11 -7
  360. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/index.js +5 -1
  361. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/root.js +10 -6
  362. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/parsers_stack.js +22 -20
  363. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/types.js +2 -1
  364. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/utils.js +6 -2
  365. package/dist/_esm5.processed/parsers/manifest/index.js +17 -1
  366. package/dist/_esm5.processed/parsers/manifest/local/index.js +4 -2
  367. package/dist/_esm5.processed/parsers/manifest/local/parse_local_manifest.js +30 -27
  368. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +71 -84
  369. package/dist/_esm5.processed/parsers/manifest/local/types.js +2 -1
  370. package/dist/_esm5.processed/parsers/manifest/metaplaylist/index.js +4 -2
  371. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +75 -72
  372. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.js +52 -52
  373. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +200 -176
  374. package/dist/_esm5.processed/parsers/manifest/smooth/get_codecs.js +13 -8
  375. package/dist/_esm5.processed/parsers/manifest/smooth/index.js +7 -4
  376. package/dist/_esm5.processed/parsers/manifest/smooth/parse_C_nodes.js +17 -14
  377. package/dist/_esm5.processed/parsers/manifest/smooth/parse_protection_node.js +17 -15
  378. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +102 -98
  379. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.js +49 -48
  380. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.js +10 -7
  381. package/dist/_esm5.processed/parsers/manifest/smooth/utils/parseBoolean.js +4 -1
  382. package/dist/_esm5.processed/parsers/manifest/smooth/utils/reduceChildren.js +6 -3
  383. package/dist/_esm5.processed/parsers/manifest/smooth/utils/tokens.js +5 -1
  384. package/dist/_esm5.processed/parsers/manifest/types.js +2 -1
  385. package/dist/_esm5.processed/parsers/manifest/utils/check_manifest_ids.js +27 -24
  386. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +10 -7
  387. package/dist/_esm5.processed/parsers/manifest/utils/get_first_time_from_adaptation.js +8 -5
  388. package/dist/_esm5.processed/parsers/manifest/utils/get_last_time_from_adaptation.js +8 -5
  389. package/dist/_esm5.processed/parsers/manifest/utils/get_maximum_positions.js +15 -12
  390. package/dist/_esm5.processed/parsers/manifest/utils/get_minimum_position.js +15 -12
  391. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.js +31 -22
  392. package/dist/_esm5.processed/parsers/manifest/utils/is_segment_still_available.js +9 -6
  393. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +38 -45
  394. package/dist/_esm5.processed/parsers/texttracks/index.js +2 -1
  395. package/dist/_esm5.processed/parsers/texttracks/sami/html.js +45 -43
  396. package/dist/_esm5.processed/parsers/texttracks/sami/native.js +41 -39
  397. package/dist/_esm5.processed/parsers/texttracks/srt/find_end_of_cue_block.js +7 -4
  398. package/dist/_esm5.processed/parsers/texttracks/srt/get_cue_blocks.js +11 -8
  399. package/dist/_esm5.processed/parsers/texttracks/srt/html.js +32 -29
  400. package/dist/_esm5.processed/parsers/texttracks/srt/native.js +16 -13
  401. package/dist/_esm5.processed/parsers/texttracks/srt/parse_cue.js +21 -18
  402. package/dist/_esm5.processed/parsers/texttracks/srt/parse_timestamp.js +10 -7
  403. package/dist/_esm5.processed/parsers/texttracks/ttml/get_parameters.js +37 -30
  404. package/dist/_esm5.processed/parsers/texttracks/ttml/get_styling.js +48 -48
  405. package/dist/_esm5.processed/parsers/texttracks/ttml/get_time_delimiters.js +14 -11
  406. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_default_ttml_paragraph_style.js +7 -2
  407. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_extent.js +15 -12
  408. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_font_size.js +15 -12
  409. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_line_height.js +11 -8
  410. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_origin.js +15 -12
  411. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_padding.js +25 -22
  412. package/dist/_esm5.processed/parsers/texttracks/ttml/html/create_element.js +117 -124
  413. package/dist/_esm5.processed/parsers/texttracks/ttml/html/generate_css_test_outline.js +11 -8
  414. package/dist/_esm5.processed/parsers/texttracks/ttml/html/index.js +4 -2
  415. package/dist/_esm5.processed/parsers/texttracks/ttml/html/parse_cue.js +12 -8
  416. package/dist/_esm5.processed/parsers/texttracks/ttml/html/parse_ttml_to_div.js +14 -11
  417. package/dist/_esm5.processed/parsers/texttracks/ttml/html/ttml_color_to_css_color.js +10 -7
  418. package/dist/_esm5.processed/parsers/texttracks/ttml/native/index.js +4 -2
  419. package/dist/_esm5.processed/parsers/texttracks/ttml/native/parse_cue.js +38 -35
  420. package/dist/_esm5.processed/parsers/texttracks/ttml/native/parse_ttml_to_vtt.js +11 -8
  421. package/dist/_esm5.processed/parsers/texttracks/ttml/parse_ttml.js +58 -58
  422. package/dist/_esm5.processed/parsers/texttracks/ttml/regexps.js +27 -13
  423. package/dist/_esm5.processed/parsers/texttracks/ttml/resolve_styles_inheritance.js +18 -18
  424. package/dist/_esm5.processed/parsers/texttracks/ttml/time_parsing.js +28 -26
  425. package/dist/_esm5.processed/parsers/texttracks/ttml/xml_utils.js +37 -25
  426. package/dist/_esm5.processed/parsers/texttracks/types.js +2 -1
  427. package/dist/_esm5.processed/parsers/texttracks/webvtt/get_cue_blocks.js +12 -9
  428. package/dist/_esm5.processed/parsers/texttracks/webvtt/get_style_blocks.js +14 -11
  429. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/convert_payload_to_html.js +11 -8
  430. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_default_style_elements.js +8 -5
  431. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_style_attribute.js +60 -60
  432. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_styled_element.js +30 -27
  433. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/index.js +4 -2
  434. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/parse_style_block.js +23 -26
  435. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/parse_webvtt_to_div.js +20 -17
  436. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.js +23 -18
  437. package/dist/_esm5.processed/parsers/texttracks/webvtt/native/index.js +4 -2
  438. package/dist/_esm5.processed/parsers/texttracks/webvtt/native/parse_vtt_to_cues.js +19 -16
  439. package/dist/_esm5.processed/parsers/texttracks/webvtt/native/set_settings_on_cue.js +20 -17
  440. package/dist/_esm5.processed/parsers/texttracks/webvtt/native/to_native_cue.js +8 -5
  441. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.js +26 -18
  442. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_timestamp.js +10 -7
  443. package/dist/_esm5.processed/parsers/texttracks/webvtt/utils.js +15 -7
  444. package/dist/_esm5.processed/public_types.js +2 -1
  445. package/dist/_esm5.processed/tools/TextTrackRenderer/index.js +13 -6
  446. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +26 -24
  447. package/dist/_esm5.processed/tools/index.js +6 -4
  448. package/dist/_esm5.processed/tools/string_utils.js +10 -1
  449. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +16 -24
  450. package/dist/_esm5.processed/transports/dash/construct_segment_url.js +6 -3
  451. package/dist/_esm5.processed/transports/dash/extract_complete_chunks.js +17 -14
  452. package/dist/_esm5.processed/transports/dash/get_events_out_of_emsgs.js +19 -16
  453. package/dist/_esm5.processed/transports/dash/index.js +4 -2
  454. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +47 -27
  455. package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +23 -16
  456. package/dist/_esm5.processed/transports/dash/manifest_parser.js +68 -60
  457. package/dist/_esm5.processed/transports/dash/pipelines.js +20 -17
  458. package/dist/_esm5.processed/transports/dash/segment_loader.js +49 -39
  459. package/dist/_esm5.processed/transports/dash/segment_parser.js +58 -39
  460. package/dist/_esm5.processed/transports/dash/text_loader.js +36 -30
  461. package/dist/_esm5.processed/transports/dash/text_parser.js +39 -29
  462. package/dist/_esm5.processed/transports/index.js +17 -1
  463. package/dist/_esm5.processed/transports/local/index.js +4 -2
  464. package/dist/_esm5.processed/transports/local/pipelines.js +26 -23
  465. package/dist/_esm5.processed/transports/local/segment_loader.js +26 -23
  466. package/dist/_esm5.processed/transports/local/segment_parser.js +36 -25
  467. package/dist/_esm5.processed/transports/local/text_parser.js +42 -27
  468. package/dist/_esm5.processed/transports/metaplaylist/index.js +4 -2
  469. package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.js +11 -7
  470. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +91 -96
  471. package/dist/_esm5.processed/transports/smooth/extract_timings_infos.js +26 -20
  472. package/dist/_esm5.processed/transports/smooth/index.js +4 -2
  473. package/dist/_esm5.processed/transports/smooth/is_mp4_embedded_track.js +4 -1
  474. package/dist/_esm5.processed/transports/smooth/isobmff/create_audio_init_segment.js +22 -19
  475. package/dist/_esm5.processed/transports/smooth/isobmff/create_boxes.js +92 -67
  476. package/dist/_esm5.processed/transports/smooth/isobmff/create_init_segment.js +29 -26
  477. package/dist/_esm5.processed/transports/smooth/isobmff/create_traf_box.js +9 -6
  478. package/dist/_esm5.processed/transports/smooth/isobmff/create_video_init_segment.js +23 -20
  479. package/dist/_esm5.processed/transports/smooth/isobmff/get_aaces_header.js +10 -7
  480. package/dist/_esm5.processed/transports/smooth/isobmff/index.js +13 -6
  481. package/dist/_esm5.processed/transports/smooth/isobmff/parse_tfrf.js +19 -16
  482. package/dist/_esm5.processed/transports/smooth/isobmff/parse_tfxd.js +9 -6
  483. package/dist/_esm5.processed/transports/smooth/isobmff/patch_segment.js +41 -38
  484. package/dist/_esm5.processed/transports/smooth/pipelines.js +106 -96
  485. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +2 -2
  486. package/dist/_esm5.processed/transports/smooth/segment_loader.js +149 -153
  487. package/dist/_esm5.processed/transports/smooth/utils.js +7 -3
  488. package/dist/_esm5.processed/transports/types.js +2 -1
  489. package/dist/_esm5.processed/transports/utils/byte_range.js +6 -4
  490. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +23 -18
  491. package/dist/_esm5.processed/transports/utils/check_isobmff_integrity.js +14 -11
  492. package/dist/_esm5.processed/transports/utils/find_complete_box.js +11 -8
  493. package/dist/_esm5.processed/transports/utils/generate_manifest_loader.js +22 -14
  494. package/dist/_esm5.processed/transports/utils/get_isobmff_timing_infos.js +13 -10
  495. package/dist/_esm5.processed/transports/utils/infer_segment_container.js +4 -1
  496. package/dist/_esm5.processed/transports/utils/parse_text_track.js +40 -26
  497. package/dist/_esm5.processed/utils/are_arrays_of_numbers_equal.js +5 -2
  498. package/dist/_esm5.processed/utils/are_codecs_compatible.js +11 -9
  499. package/dist/_esm5.processed/utils/array_find.js +7 -4
  500. package/dist/_esm5.processed/utils/array_find_index.js +6 -3
  501. package/dist/_esm5.processed/utils/array_includes.js +12 -11
  502. package/dist/_esm5.processed/utils/assert.js +13 -9
  503. package/dist/_esm5.processed/utils/assert_unreachable.js +6 -3
  504. package/dist/_esm5.processed/utils/base64.js +23 -18
  505. package/dist/_esm5.processed/utils/byte_parsing.js +30 -17
  506. package/dist/_esm5.processed/utils/cancellable_sleep.js +8 -5
  507. package/dist/_esm5.processed/utils/create_cancellable_promise.js +7 -4
  508. package/dist/_esm5.processed/utils/deep_merge.js +10 -21
  509. package/dist/_esm5.processed/utils/event_emitter.js +24 -24
  510. package/dist/_esm5.processed/utils/flat_map.js +7 -4
  511. package/dist/_esm5.processed/utils/get_fuzzed_delay.js +6 -3
  512. package/dist/_esm5.processed/utils/hash_buffer.js +7 -4
  513. package/dist/_esm5.processed/utils/id_generator.js +6 -3
  514. package/dist/_esm5.processed/utils/initialization_segment_cache.js +11 -12
  515. package/dist/_esm5.processed/utils/is_non_empty_string.js +4 -1
  516. package/dist/_esm5.processed/utils/is_null_or_undefined.js +4 -1
  517. package/dist/_esm5.processed/utils/languages/ISO_639-1_to_ISO_639-3.js +4 -2
  518. package/dist/_esm5.processed/utils/languages/ISO_639-2_to_ISO_639-3.js +4 -2
  519. package/dist/_esm5.processed/utils/languages/index.js +7 -3
  520. package/dist/_esm5.processed/utils/languages/normalize.js +26 -20
  521. package/dist/_esm5.processed/utils/logger.js +24 -23
  522. package/dist/_esm5.processed/utils/monotonic_timestamp.js +4 -1
  523. package/dist/_esm5.processed/utils/noop.js +4 -1
  524. package/dist/_esm5.processed/utils/object_assign.js +8 -10
  525. package/dist/_esm5.processed/utils/object_values.js +6 -3
  526. package/dist/_esm5.processed/utils/ranges.js +94 -71
  527. package/dist/_esm5.processed/utils/reference.js +48 -52
  528. package/dist/_esm5.processed/utils/request/fetch.js +79 -109
  529. package/dist/_esm5.processed/utils/request/index.js +9 -4
  530. package/dist/_esm5.processed/utils/request/xhr.js +49 -37
  531. package/dist/_esm5.processed/utils/resolve_url.js +18 -18
  532. package/dist/_esm5.processed/utils/retry_promise_with_backoff.js +34 -81
  533. package/dist/_esm5.processed/utils/sleep.js +5 -2
  534. package/dist/_esm5.processed/utils/slice_uint8array.js +3 -1
  535. package/dist/_esm5.processed/utils/sorted_list.js +37 -40
  536. package/dist/_esm5.processed/utils/starts_with.js +5 -2
  537. package/dist/_esm5.processed/utils/string_parsing.js +84 -73
  538. package/dist/_esm5.processed/utils/take_first_set.js +9 -10
  539. package/dist/_esm5.processed/utils/task_canceller.js +51 -71
  540. package/dist/_esm5.processed/utils/warn_once.js +7 -4
  541. package/dist/_esm5.processed/utils/weak_map_memory.js +12 -11
  542. package/dist/_esm5.processed/utils/wrapInPromise.js +5 -2
  543. package/dist/mpd-parser.wasm +0 -0
  544. package/dist/rx-player.js +43758 -45493
  545. package/dist/rx-player.min.js +1 -1
  546. package/jest.config.js +1 -22
  547. package/package.json +22 -23
  548. package/scripts/build/constants.d.ts +1 -23
  549. package/scripts/build/generate_build.js +1 -1
  550. package/scripts/check_nodejs_import_compatibility.js +1 -1
  551. package/scripts/update-version +1 -4
  552. package/sonar-project.properties +1 -1
  553. package/src/compat/event_listeners.ts +8 -8
  554. package/src/compat/global_scope.ts +2 -0
  555. package/src/core/adaptive/__tests__/buffer_based_chooser.test.ts +3 -3
  556. package/src/core/adaptive/adaptive_representation_selector.ts +27 -9
  557. package/src/core/adaptive/buffer_based_chooser.ts +1 -1
  558. package/src/core/adaptive/network_analyzer.ts +5 -4
  559. package/src/core/api/public_api.ts +2 -2
  560. package/src/core/api/track_management/track_dispatcher.ts +2 -1
  561. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +1 -1
  562. package/src/core/fetchers/cdn_prioritizer.ts +1 -1
  563. package/src/experimental/features/__tests__/index.test.ts +19 -0
  564. package/src/experimental/features/index.ts +1 -0
  565. package/src/features/list/__tests__/index.test.ts +49 -0
  566. package/src/index.ts +28 -3
  567. package/src/transports/smooth/segment_loader.ts +4 -4
  568. package/src/typings/globals.d.ts +0 -42
  569. package/src/utils/request/fetch.ts +1 -1
  570. package/src/utils/request/xhr.ts +1 -1
  571. package/tsconfig.json +1 -1
  572. package/tsconfig.modules.json +3 -3
  573. package/dist/_esm5.processed/features/initialize_features.d.ts +0 -19
  574. package/dist/_esm5.processed/features/initialize_features.js +0 -108
  575. package/src/features/__tests__/initialize_features.test.ts +0 -657
  576. package/src/features/initialize_features.ts +0 -129
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * Copyright 2015 CANAL+ Group
3
4
  *
@@ -13,11 +14,12 @@
13
14
  * See the License for the specific language governing permissions and
14
15
  * limitations under the License.
15
16
  */
16
- import config from "../../../config";
17
- import log from "../../../log";
18
- import { areSameContent, } from "../../../manifest";
19
- import takeFirstSet from "../../../utils/take_first_set";
20
- import BufferedHistory from "./buffered_history";
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const config_1 = require("../../../config");
19
+ const log_1 = require("../../../log");
20
+ const manifest_1 = require("../../../manifest");
21
+ const take_first_set_1 = require("../../../utils/take_first_set");
22
+ const buffered_history_1 = require("./buffered_history");
21
23
  /**
22
24
  * Keep track of every chunk downloaded and currently in the linked media
23
25
  * buffer.
@@ -27,18 +29,18 @@ import BufferedHistory from "./buffered_history";
27
29
  * since by the browser (and thus may need to be re-loaded).
28
30
  * @class SegmentInventory
29
31
  */
30
- var SegmentInventory = /** @class */ (function () {
31
- function SegmentInventory() {
32
- var _a = config.getCurrent(), BUFFERED_HISTORY_RETENTION_TIME = _a.BUFFERED_HISTORY_RETENTION_TIME, BUFFERED_HISTORY_MAXIMUM_ENTRIES = _a.BUFFERED_HISTORY_MAXIMUM_ENTRIES;
32
+ class SegmentInventory {
33
+ constructor() {
34
+ const { BUFFERED_HISTORY_RETENTION_TIME, BUFFERED_HISTORY_MAXIMUM_ENTRIES } = config_1.default.getCurrent();
33
35
  this._inventory = [];
34
- this._bufferedHistory = new BufferedHistory(BUFFERED_HISTORY_RETENTION_TIME, BUFFERED_HISTORY_MAXIMUM_ENTRIES);
36
+ this._bufferedHistory = new buffered_history_1.default(BUFFERED_HISTORY_RETENTION_TIME, BUFFERED_HISTORY_MAXIMUM_ENTRIES);
35
37
  }
36
38
  /**
37
39
  * Reset the whole inventory.
38
40
  */
39
- SegmentInventory.prototype.reset = function () {
41
+ reset() {
40
42
  this._inventory.length = 0;
41
- };
43
+ }
42
44
  /**
43
45
  * Infer each segment's `bufferedStart` and `bufferedEnd` properties from the
44
46
  * TimeRanges given.
@@ -51,52 +53,51 @@ var SegmentInventory = /** @class */ (function () {
51
53
  * coming from the same buffer.
52
54
  * @param {TimeRanges} buffered
53
55
  */
54
- SegmentInventory.prototype.synchronizeBuffered = function (buffered) {
55
- var inventory = this._inventory;
56
- var inventoryIndex = 0; // Current index considered.
57
- var thisSegment = inventory[0]; // Current segmentInfos considered
58
- var MINIMUM_SEGMENT_SIZE = config.getCurrent().MINIMUM_SEGMENT_SIZE;
56
+ synchronizeBuffered(buffered) {
57
+ const inventory = this._inventory;
58
+ let inventoryIndex = 0; // Current index considered.
59
+ let thisSegment = inventory[0]; // Current segmentInfos considered
60
+ const { MINIMUM_SEGMENT_SIZE } = config_1.default.getCurrent();
59
61
  /** Type of buffer considered, used for logs */
60
- var bufferType = thisSegment === null || thisSegment === void 0 ? void 0 : thisSegment.infos.adaptation.type;
61
- var rangesLength = buffered.length;
62
- for (var i = 0; i < rangesLength; i++) {
62
+ const bufferType = thisSegment === null || thisSegment === void 0 ? void 0 : thisSegment.infos.adaptation.type;
63
+ const rangesLength = buffered.length;
64
+ for (let i = 0; i < rangesLength; i++) {
63
65
  if (thisSegment === undefined) { // we arrived at the end of our inventory
64
66
  return;
65
67
  }
66
68
  // take the i'nth contiguous buffered TimeRange
67
- var rangeStart = buffered.start(i);
68
- var rangeEnd = buffered.end(i);
69
+ const rangeStart = buffered.start(i);
70
+ const rangeEnd = buffered.end(i);
69
71
  if (rangeEnd - rangeStart < MINIMUM_SEGMENT_SIZE) {
70
- log.warn("SI: skipped TimeRange when synchronizing because it was too small", bufferType, rangeStart, rangeEnd);
72
+ log_1.default.warn("SI: skipped TimeRange when synchronizing because it was too small", bufferType, rangeStart, rangeEnd);
71
73
  continue;
72
74
  }
73
- var indexBefore = inventoryIndex; // keep track of that number
75
+ const indexBefore = inventoryIndex; // keep track of that number
74
76
  // Find the first segment either within this TimeRange or completely past
75
77
  // it:
76
78
  // skip until first segment with at least `MINIMUM_SEGMENT_SIZE` past the
77
79
  // start of that range.
78
80
  while (thisSegment !== undefined &&
79
- (takeFirstSet(thisSegment.bufferedEnd, thisSegment.end)
81
+ ((0, take_first_set_1.default)(thisSegment.bufferedEnd, thisSegment.end)
80
82
  - rangeStart) < MINIMUM_SEGMENT_SIZE) {
81
83
  thisSegment = inventory[++inventoryIndex];
82
84
  }
83
85
  // Contains infos about the last garbage-collected segment before
84
86
  // `thisSegment`.
85
- var lastDeletedSegmentInfos = null;
87
+ let lastDeletedSegmentInfos = null;
86
88
  // remove garbage-collected segments
87
89
  // (Those not in that TimeRange nor in the previous one)
88
- var numberOfSegmentToDelete = inventoryIndex - indexBefore;
90
+ const numberOfSegmentToDelete = inventoryIndex - indexBefore;
89
91
  if (numberOfSegmentToDelete > 0) {
90
- var lastDeletedSegment = // last garbage-collected segment
92
+ const lastDeletedSegment = // last garbage-collected segment
91
93
  inventory[indexBefore + numberOfSegmentToDelete - 1];
92
94
  lastDeletedSegmentInfos = {
93
- end: takeFirstSet(lastDeletedSegment.bufferedEnd, lastDeletedSegment.end),
95
+ end: (0, take_first_set_1.default)(lastDeletedSegment.bufferedEnd, lastDeletedSegment.end),
94
96
  precizeEnd: lastDeletedSegment.precizeEnd,
95
97
  };
96
- log.debug("SI: ".concat(numberOfSegmentToDelete, " segments GCed."), bufferType);
97
- var removed = inventory.splice(indexBefore, numberOfSegmentToDelete);
98
- for (var _i = 0, removed_1 = removed; _i < removed_1.length; _i++) {
99
- var seg = removed_1[_i];
98
+ log_1.default.debug(`SI: ${numberOfSegmentToDelete} segments GCed.`, bufferType);
99
+ const removed = inventory.splice(indexBefore, numberOfSegmentToDelete);
100
+ for (const seg of removed) {
100
101
  if (seg.bufferedStart === undefined && seg.bufferedEnd === undefined) {
101
102
  this._bufferedHistory.addBufferedSegment(seg.infos, null);
102
103
  }
@@ -109,7 +110,7 @@ var SegmentInventory = /** @class */ (function () {
109
110
  // If the current segment is actually completely outside that range (it
110
111
  // is contained in one of the next one), skip that part.
111
112
  if (rangeEnd -
112
- takeFirstSet(thisSegment.bufferedStart, thisSegment.start)
113
+ (0, take_first_set_1.default)(thisSegment.bufferedStart, thisSegment.start)
113
114
  >= MINIMUM_SEGMENT_SIZE) {
114
115
  guessBufferedStartFromRangeStart(thisSegment, rangeStart, lastDeletedSegmentInfos, bufferType);
115
116
  if (inventoryIndex === inventory.length - 1) {
@@ -120,32 +121,32 @@ var SegmentInventory = /** @class */ (function () {
120
121
  }
121
122
  thisSegment = inventory[++inventoryIndex];
122
123
  // Make contiguous until first segment outside that range
123
- var thisSegmentStart = takeFirstSet(thisSegment.bufferedStart, thisSegment.start);
124
- var thisSegmentEnd = takeFirstSet(thisSegment.bufferedEnd, thisSegment.end);
125
- var nextRangeStart = i < rangesLength - 1 ? buffered.start(i + 1) :
124
+ let thisSegmentStart = (0, take_first_set_1.default)(thisSegment.bufferedStart, thisSegment.start);
125
+ let thisSegmentEnd = (0, take_first_set_1.default)(thisSegment.bufferedEnd, thisSegment.end);
126
+ const nextRangeStart = i < rangesLength - 1 ? buffered.start(i + 1) :
126
127
  undefined;
127
128
  while (thisSegment !== undefined &&
128
129
  (rangeEnd - thisSegmentStart) >= MINIMUM_SEGMENT_SIZE &&
129
130
  (nextRangeStart === undefined ||
130
131
  rangeEnd - thisSegmentStart >= thisSegmentEnd - nextRangeStart)) {
131
- var prevSegment = inventory[inventoryIndex - 1];
132
+ const prevSegment = inventory[inventoryIndex - 1];
132
133
  // those segments are contiguous, we have no way to infer their real
133
134
  // end
134
135
  if (prevSegment.bufferedEnd === undefined) {
135
136
  prevSegment.bufferedEnd = thisSegment.precizeStart ? thisSegment.start :
136
137
  prevSegment.end;
137
- log.debug("SI: calculating buffered end of contiguous segment", bufferType, prevSegment.bufferedEnd, prevSegment.end);
138
+ log_1.default.debug("SI: calculating buffered end of contiguous segment", bufferType, prevSegment.bufferedEnd, prevSegment.end);
138
139
  }
139
140
  thisSegment.bufferedStart = prevSegment.bufferedEnd;
140
141
  thisSegment = inventory[++inventoryIndex];
141
142
  if (thisSegment !== undefined) {
142
- thisSegmentStart = takeFirstSet(thisSegment.bufferedStart, thisSegment.start);
143
- thisSegmentEnd = takeFirstSet(thisSegment.bufferedEnd, thisSegment.end);
143
+ thisSegmentStart = (0, take_first_set_1.default)(thisSegment.bufferedStart, thisSegment.start);
144
+ thisSegmentEnd = (0, take_first_set_1.default)(thisSegment.bufferedEnd, thisSegment.end);
144
145
  }
145
146
  }
146
147
  }
147
148
  // update the bufferedEnd of the last segment in that range
148
- var lastSegmentInRange = inventory[inventoryIndex - 1];
149
+ const lastSegmentInRange = inventory[inventoryIndex - 1];
149
150
  if (lastSegmentInRange !== undefined) {
150
151
  guessBufferedEndFromRangeEnd(lastSegmentInRange, rangeEnd, bufferType);
151
152
  }
@@ -153,20 +154,19 @@ var SegmentInventory = /** @class */ (function () {
153
154
  // if we still have segments left, they are not affiliated to any range.
154
155
  // They might have been garbage collected, delete them from here.
155
156
  if (thisSegment != null) {
156
- log.debug("SI: last segments have been GCed", bufferType, inventoryIndex, inventory.length);
157
- var removed = inventory.splice(inventoryIndex, inventory.length - inventoryIndex);
158
- for (var _a = 0, removed_2 = removed; _a < removed_2.length; _a++) {
159
- var seg = removed_2[_a];
157
+ log_1.default.debug("SI: last segments have been GCed", bufferType, inventoryIndex, inventory.length);
158
+ const removed = inventory.splice(inventoryIndex, inventory.length - inventoryIndex);
159
+ for (const seg of removed) {
160
160
  if (seg.bufferedStart === undefined && seg.bufferedEnd === undefined) {
161
161
  this._bufferedHistory.addBufferedSegment(seg.infos, null);
162
162
  }
163
163
  }
164
164
  }
165
- if (bufferType !== undefined && log.hasLevel("DEBUG")) {
166
- log.debug("SI: current ".concat(bufferType, " inventory timeline:\n") +
165
+ if (bufferType !== undefined && log_1.default.hasLevel("DEBUG")) {
166
+ log_1.default.debug(`SI: current ${bufferType} inventory timeline:\n` +
167
167
  prettyPrintInventory(this._inventory));
168
168
  }
169
- };
169
+ }
170
170
  /**
171
171
  * Add a new chunk in the inventory.
172
172
  *
@@ -174,25 +174,29 @@ var SegmentInventory = /** @class */ (function () {
174
174
  * segment have been inserted, you should call the `completeSegment` method.
175
175
  * @param {Object} chunkInformation
176
176
  */
177
- SegmentInventory.prototype.insertChunk = function (_a) {
178
- var period = _a.period, adaptation = _a.adaptation, representation = _a.representation, segment = _a.segment, chunkSize = _a.chunkSize, start = _a.start, end = _a.end;
177
+ insertChunk({ period, adaptation, representation, segment, chunkSize, start, end }) {
179
178
  if (segment.isInit) {
180
179
  return;
181
180
  }
182
- var bufferType = adaptation.type;
181
+ const bufferType = adaptation.type;
183
182
  if (start >= end) {
184
- log.warn("SI: Invalid chunked inserted: starts before it ends", bufferType, start, end);
183
+ log_1.default.warn("SI: Invalid chunked inserted: starts before it ends", bufferType, start, end);
185
184
  return;
186
185
  }
187
- var inventory = this._inventory;
188
- var newSegment = { partiallyPushed: true, chunkSize: chunkSize, splitted: false, start: start, end: end, precizeStart: false,
186
+ const inventory = this._inventory;
187
+ const newSegment = { partiallyPushed: true,
188
+ chunkSize,
189
+ splitted: false,
190
+ start,
191
+ end,
192
+ precizeStart: false,
189
193
  precizeEnd: false,
190
194
  bufferedStart: undefined,
191
195
  bufferedEnd: undefined,
192
- infos: { segment: segment, period: period, adaptation: adaptation, representation: representation } };
196
+ infos: { segment, period, adaptation, representation } };
193
197
  // begin by the end as in most use cases this will be faster
194
- for (var i = inventory.length - 1; i >= 0; i--) {
195
- var segmentI = inventory[i];
198
+ for (let i = inventory.length - 1; i >= 0; i--) {
199
+ const segmentI = inventory[i];
196
200
  if ((segmentI.start) <= start) {
197
201
  if ((segmentI.end) <= start) {
198
202
  // our segment is after, push it after this one
@@ -206,7 +210,7 @@ var SegmentInventory = /** @class */ (function () {
206
210
  // prevSegment : |------|
207
211
  // newSegment : |======|
208
212
  // ===> : |------| |======|
209
- log.debug("SI: Pushing segment strictly after previous one.", bufferType, start, segmentI.end);
213
+ log_1.default.debug("SI: Pushing segment strictly after previous one.", bufferType, start, segmentI.end);
210
214
  this._inventory.splice(i + 1, 0, newSegment);
211
215
  i += 2; // Go to segment immediately after newSegment
212
216
  while (i < inventory.length && inventory[i].start < newSegment.end) {
@@ -219,7 +223,7 @@ var SegmentInventory = /** @class */ (function () {
219
223
  // newSegment : |======|
220
224
  // nextSegment : |----|
221
225
  // ===> : |------|======|-|
222
- log.debug("SI: Segment pushed updates the start of the next one", bufferType, newSegment.end, inventory[i].start);
226
+ log_1.default.debug("SI: Segment pushed updates the start of the next one", bufferType, newSegment.end, inventory[i].start);
223
227
  inventory[i].start = newSegment.end;
224
228
  inventory[i].bufferedStart = undefined;
225
229
  inventory[i].precizeStart = inventory[i].precizeStart &&
@@ -240,7 +244,7 @@ var SegmentInventory = /** @class */ (function () {
240
244
  // newSegment : |======|
241
245
  // nextSegment : |----|
242
246
  // ===> : |------|======|
243
- log.debug("SI: Segment pushed removes the next one", bufferType, start, end, inventory[i].start, inventory[i].end);
247
+ log_1.default.debug("SI: Segment pushed removes the next one", bufferType, start, end, inventory[i].start, inventory[i].end);
244
248
  inventory.splice(i, 1);
245
249
  }
246
250
  return;
@@ -259,7 +263,7 @@ var SegmentInventory = /** @class */ (function () {
259
263
  // prevSegment : |-------|
260
264
  // newSegment : |==========|
261
265
  // ===> : |==========|
262
- log.debug("SI: Segment pushed replace another one", bufferType, start, end, segmentI.end);
266
+ log_1.default.debug("SI: Segment pushed replace another one", bufferType, start, end, segmentI.end);
263
267
  this._inventory.splice(i, 1, newSegment);
264
268
  i += 1; // Go to segment immediately after newSegment
265
269
  while (i < inventory.length && inventory[i].start < newSegment.end) {
@@ -271,7 +275,7 @@ var SegmentInventory = /** @class */ (function () {
271
275
  // newSegment : |======|
272
276
  // nextSegment : |----|
273
277
  // ===> : |======|--|
274
- log.debug("SI: Segment pushed updates the start of the next one", bufferType, newSegment.end, inventory[i].start);
278
+ log_1.default.debug("SI: Segment pushed updates the start of the next one", bufferType, newSegment.end, inventory[i].start);
275
279
  inventory[i].start = newSegment.end;
276
280
  inventory[i].bufferedStart = undefined;
277
281
  inventory[i].precizeStart = inventory[i].precizeStart &&
@@ -290,7 +294,7 @@ var SegmentInventory = /** @class */ (function () {
290
294
  // newSegment : |======|
291
295
  // nextSegment : |----|
292
296
  // ===> : |======|
293
- log.debug("SI: Segment pushed removes the next one", bufferType, start, end, inventory[i].start, inventory[i].end);
297
+ log_1.default.debug("SI: Segment pushed removes the next one", bufferType, start, end, inventory[i].start, inventory[i].end);
294
298
  inventory.splice(i, 1);
295
299
  }
296
300
  return;
@@ -305,7 +309,7 @@ var SegmentInventory = /** @class */ (function () {
305
309
  // prevSegment : |------------|
306
310
  // newSegment : |==========|
307
311
  // ===> : |==========|-|
308
- log.debug("SI: Segment pushed ends before another with the same start", bufferType, start, end, segmentI.end);
312
+ log_1.default.debug("SI: Segment pushed ends before another with the same start", bufferType, start, end, segmentI.end);
309
313
  inventory.splice(i, 0, newSegment);
310
314
  segmentI.start = newSegment.end;
311
315
  segmentI.bufferedStart = undefined;
@@ -328,7 +332,7 @@ var SegmentInventory = /** @class */ (function () {
328
332
  // prevSegment : |-------|
329
333
  // newSegment : |====|
330
334
  // ===> : |--|====|
331
- log.debug("SI: Segment pushed updates end of previous one", bufferType, start, end, segmentI.start, segmentI.end);
335
+ log_1.default.debug("SI: Segment pushed updates end of previous one", bufferType, start, end, segmentI.start, segmentI.end);
332
336
  this._inventory.splice(i + 1, 0, newSegment);
333
337
  segmentI.end = newSegment.start;
334
338
  segmentI.bufferedEnd = undefined;
@@ -344,7 +348,7 @@ var SegmentInventory = /** @class */ (function () {
344
348
  // newSegment : |======|
345
349
  // nextSegment : |----|
346
350
  // ===> : |======|--|
347
- log.debug("SI: Segment pushed updates the start of the next one", bufferType, newSegment.end, inventory[i].start);
351
+ log_1.default.debug("SI: Segment pushed updates the start of the next one", bufferType, newSegment.end, inventory[i].start);
348
352
  inventory[i].start = newSegment.end;
349
353
  inventory[i].bufferedStart = undefined;
350
354
  inventory[i].precizeStart = inventory[i].precizeStart &&
@@ -363,7 +367,7 @@ var SegmentInventory = /** @class */ (function () {
363
367
  // newSegment : |======|
364
368
  // nextSegment : |----|
365
369
  // ===> : |======|
366
- log.debug("SI: Segment pushed removes the next one", bufferType, start, end, inventory[i].start, inventory[i].end);
370
+ log_1.default.debug("SI: Segment pushed removes the next one", bufferType, start, end, inventory[i].start, inventory[i].end);
367
371
  inventory.splice(i, 1);
368
372
  }
369
373
  return;
@@ -377,8 +381,8 @@ var SegmentInventory = /** @class */ (function () {
377
381
  // prevSegment : |---------|
378
382
  // newSegment : |====|
379
383
  // ===> : |--|====|-|
380
- log.warn("SI: Segment pushed is contained in a previous one", bufferType, start, end, segmentI.start, segmentI.end);
381
- var nextSegment = { partiallyPushed: segmentI.partiallyPushed,
384
+ log_1.default.warn("SI: Segment pushed is contained in a previous one", bufferType, start, end, segmentI.start, segmentI.end);
385
+ const nextSegment = { partiallyPushed: segmentI.partiallyPushed,
382
386
  /**
383
387
  * Note: this sadly means we're doing as if
384
388
  * that chunk is present two times.
@@ -411,9 +415,9 @@ var SegmentInventory = /** @class */ (function () {
411
415
  }
412
416
  // if we got here, we are at the first segment
413
417
  // check bounds of the previous first segment
414
- var firstSegment = this._inventory[0];
418
+ const firstSegment = this._inventory[0];
415
419
  if (firstSegment === undefined) { // we do not have any segment yet
416
- log.debug("SI: first segment pushed", bufferType, start, end);
420
+ log_1.default.debug("SI: first segment pushed", bufferType, start, end);
417
421
  this._inventory.push(newSegment);
418
422
  return;
419
423
  }
@@ -429,7 +433,7 @@ var SegmentInventory = /** @class */ (function () {
429
433
  // firstSegment : |----|
430
434
  // newSegment : |====|
431
435
  // ===> : |====| |----|
432
- log.debug("SI: Segment pushed comes before all previous ones", bufferType, start, end, firstSegment.start);
436
+ log_1.default.debug("SI: Segment pushed comes before all previous ones", bufferType, start, end, firstSegment.start);
433
437
  this._inventory.splice(0, 0, newSegment);
434
438
  }
435
439
  else if (firstSegment.end <= end) {
@@ -444,7 +448,7 @@ var SegmentInventory = /** @class */ (function () {
444
448
  // firstSegment : |-----|
445
449
  // newSegment : |=======|
446
450
  // ===> : |=======|
447
- log.debug("SI: Segment pushed starts before and completely " +
451
+ log_1.default.debug("SI: Segment pushed starts before and completely " +
448
452
  "recovers the previous first one", bufferType, start, end, firstSegment.start, firstSegment.end);
449
453
  this._inventory.splice(0, 1, newSegment);
450
454
  while (inventory.length > 1 && inventory[1].start < newSegment.end) {
@@ -456,7 +460,7 @@ var SegmentInventory = /** @class */ (function () {
456
460
  // newSegment : |======|
457
461
  // nextSegment : |----|
458
462
  // ===> : |======|--|
459
- log.debug("SI: Segment pushed updates the start of the next one", bufferType, newSegment.end, inventory[1].start);
463
+ log_1.default.debug("SI: Segment pushed updates the start of the next one", bufferType, newSegment.end, inventory[1].start);
460
464
  inventory[1].start = newSegment.end;
461
465
  inventory[1].bufferedStart = undefined;
462
466
  inventory[1].precizeStart = newSegment.precizeEnd;
@@ -474,7 +478,7 @@ var SegmentInventory = /** @class */ (function () {
474
478
  // newSegment : |======|
475
479
  // nextSegment : |----|
476
480
  // ===> : |======|
477
- log.debug("SI: Segment pushed removes the next one", bufferType, start, end, inventory[1].start, inventory[1].end);
481
+ log_1.default.debug("SI: Segment pushed removes the next one", bufferType, start, end, inventory[1].start, inventory[1].end);
478
482
  inventory.splice(1, 1);
479
483
  }
480
484
  return;
@@ -487,54 +491,54 @@ var SegmentInventory = /** @class */ (function () {
487
491
  // firstSegment : |------|
488
492
  // newSegment : |======|
489
493
  // ===> : |======|--|
490
- log.debug("SI: Segment pushed start of the next one", bufferType, start, end, firstSegment.start, firstSegment.end);
494
+ log_1.default.debug("SI: Segment pushed start of the next one", bufferType, start, end, firstSegment.start, firstSegment.end);
491
495
  firstSegment.start = end;
492
496
  firstSegment.bufferedStart = undefined;
493
497
  firstSegment.precizeStart = newSegment.precizeEnd;
494
498
  this._inventory.splice(0, 0, newSegment);
495
499
  return;
496
500
  }
497
- };
501
+ }
498
502
  /**
499
503
  * Indicate that inserted chunks can now be considered as a complete segment.
500
504
  * Take in argument the same content than what was given to `insertChunk` for
501
505
  * the corresponding chunks.
502
506
  * @param {Object} content
503
507
  */
504
- SegmentInventory.prototype.completeSegment = function (content, newBuffered) {
508
+ completeSegment(content, newBuffered) {
505
509
  if (content.segment.isInit) {
506
510
  return;
507
511
  }
508
- var inventory = this._inventory;
509
- var resSegments = [];
510
- for (var i = 0; i < inventory.length; i++) {
511
- if (areSameContent(inventory[i].infos, content)) {
512
- var splitted = false;
512
+ const inventory = this._inventory;
513
+ const resSegments = [];
514
+ for (let i = 0; i < inventory.length; i++) {
515
+ if ((0, manifest_1.areSameContent)(inventory[i].infos, content)) {
516
+ let splitted = false;
513
517
  if (resSegments.length > 0) {
514
518
  splitted = true;
515
519
  if (resSegments.length === 1) {
516
- log.warn("SI: Completed Segment is splitted.", content.segment.id, content.segment.time, content.segment.end);
520
+ log_1.default.warn("SI: Completed Segment is splitted.", content.segment.id, content.segment.time, content.segment.end);
517
521
  resSegments[0].splitted = true;
518
522
  }
519
523
  }
520
- var firstI = i;
521
- var segmentSize = inventory[i].chunkSize;
524
+ const firstI = i;
525
+ let segmentSize = inventory[i].chunkSize;
522
526
  i += 1;
523
527
  while (i < inventory.length &&
524
- areSameContent(inventory[i].infos, content)) {
525
- var chunkSize = inventory[i].chunkSize;
528
+ (0, manifest_1.areSameContent)(inventory[i].infos, content)) {
529
+ const chunkSize = inventory[i].chunkSize;
526
530
  if (segmentSize !== undefined && chunkSize !== undefined) {
527
531
  segmentSize += chunkSize;
528
532
  }
529
533
  i++;
530
534
  }
531
- var lastI = i - 1;
532
- var length_1 = lastI - firstI;
533
- var lastEnd = inventory[lastI].end;
534
- var lastBufferedEnd = inventory[lastI].bufferedEnd;
535
- if (length_1 > 0) {
536
- this._inventory.splice(firstI + 1, length_1);
537
- i -= length_1;
535
+ const lastI = i - 1;
536
+ const length = lastI - firstI;
537
+ const lastEnd = inventory[lastI].end;
538
+ const lastBufferedEnd = inventory[lastI].bufferedEnd;
539
+ if (length > 0) {
540
+ this._inventory.splice(firstI + 1, length);
541
+ i -= length;
538
542
  }
539
543
  this._inventory[firstI].partiallyPushed = false;
540
544
  this._inventory[firstI].chunkSize = segmentSize;
@@ -545,22 +549,21 @@ var SegmentInventory = /** @class */ (function () {
545
549
  }
546
550
  }
547
551
  if (resSegments.length === 0) {
548
- log.warn("SI: Completed Segment not found", content.segment.id, content.segment.time);
552
+ log_1.default.warn("SI: Completed Segment not found", content.segment.id, content.segment.time);
549
553
  }
550
554
  else {
551
555
  this.synchronizeBuffered(newBuffered);
552
- for (var _i = 0, resSegments_1 = resSegments; _i < resSegments_1.length; _i++) {
553
- var seg = resSegments_1[_i];
556
+ for (const seg of resSegments) {
554
557
  if (seg.bufferedStart !== undefined && seg.bufferedEnd !== undefined) {
555
558
  this._bufferedHistory.addBufferedSegment(seg.infos, { start: seg.bufferedStart,
556
559
  end: seg.bufferedEnd });
557
560
  }
558
561
  else {
559
- log.debug("SI: buffered range not known after sync. Skipping history.", seg.start, seg.end);
562
+ log_1.default.debug("SI: buffered range not known after sync. Skipping history.", seg.start, seg.end);
560
563
  }
561
564
  }
562
565
  }
563
- };
566
+ }
564
567
  /**
565
568
  * Returns the whole inventory.
566
569
  *
@@ -568,9 +571,9 @@ var SegmentInventory = /** @class */ (function () {
568
571
  * you might want to call `synchronizeBuffered` before calling this method.
569
572
  * @returns {Array.<Object>}
570
573
  */
571
- SegmentInventory.prototype.getInventory = function () {
574
+ getInventory() {
572
575
  return this._inventory;
573
- };
576
+ }
574
577
  /**
575
578
  * Returns a recent history of registered operations performed and event
576
579
  * received linked to the segment given in argument.
@@ -584,12 +587,11 @@ var SegmentInventory = /** @class */ (function () {
584
587
  * @param {Object} context
585
588
  * @returns {Array.<Object>}
586
589
  */
587
- SegmentInventory.prototype.getHistoryFor = function (context) {
590
+ getHistoryFor(context) {
588
591
  return this._bufferedHistory.getHistoryFor(context);
589
- };
590
- return SegmentInventory;
591
- }());
592
- export default SegmentInventory;
592
+ }
593
+ }
594
+ exports.default = SegmentInventory;
593
595
  /**
594
596
  * Returns `true` if the buffered start of the given chunk looks coherent enough
595
597
  * relatively to what is announced in the Manifest.
@@ -601,9 +603,9 @@ function bufferedStartLooksCoherent(thisSegment) {
601
603
  thisSegment.partiallyPushed) {
602
604
  return false;
603
605
  }
604
- var start = thisSegment.start, end = thisSegment.end;
605
- var duration = end - start;
606
- var _a = config.getCurrent(), MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE = _a.MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE, MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE = _a.MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE;
606
+ const { start, end } = thisSegment;
607
+ const duration = end - start;
608
+ const { MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE, MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE } = config_1.default.getCurrent();
607
609
  return Math.abs(start - thisSegment.bufferedStart) <=
608
610
  MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE &&
609
611
  (thisSegment.bufferedEnd === undefined ||
@@ -622,9 +624,9 @@ function bufferedEndLooksCoherent(thisSegment) {
622
624
  thisSegment.partiallyPushed) {
623
625
  return false;
624
626
  }
625
- var start = thisSegment.start, end = thisSegment.end;
626
- var duration = end - start;
627
- var _a = config.getCurrent(), MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE = _a.MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE, MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE = _a.MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE;
627
+ const { start, end } = thisSegment;
628
+ const duration = end - start;
629
+ const { MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE, MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE } = config_1.default.getCurrent();
628
630
  return Math.abs(end - thisSegment.bufferedEnd) <=
629
631
  MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE &&
630
632
  thisSegment.bufferedStart != null &&
@@ -640,10 +642,10 @@ function bufferedEndLooksCoherent(thisSegment) {
640
642
  * @param {Object} lastDeletedSegmentInfos
641
643
  */
642
644
  function guessBufferedStartFromRangeStart(firstSegmentInRange, rangeStart, lastDeletedSegmentInfos, bufferType) {
643
- var MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE = config.getCurrent().MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE;
645
+ const { MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE } = config_1.default.getCurrent();
644
646
  if (firstSegmentInRange.bufferedStart !== undefined) {
645
647
  if (firstSegmentInRange.bufferedStart < rangeStart) {
646
- log.debug("SI: Segment partially GCed at the start", bufferType, firstSegmentInRange.bufferedStart, rangeStart);
648
+ log_1.default.debug("SI: Segment partially GCed at the start", bufferType, firstSegmentInRange.bufferedStart, rangeStart);
647
649
  firstSegmentInRange.bufferedStart = rangeStart;
648
650
  }
649
651
  if (!firstSegmentInRange.precizeStart &&
@@ -653,7 +655,7 @@ function guessBufferedStartFromRangeStart(firstSegmentInRange, rangeStart, lastD
653
655
  }
654
656
  }
655
657
  else if (firstSegmentInRange.precizeStart) {
656
- log.debug("SI: buffered start is precize start", bufferType, firstSegmentInRange.start);
658
+ log_1.default.debug("SI: buffered start is precize start", bufferType, firstSegmentInRange.start);
657
659
  firstSegmentInRange.bufferedStart = firstSegmentInRange.start;
658
660
  }
659
661
  else if (lastDeletedSegmentInfos !== null &&
@@ -661,7 +663,7 @@ function guessBufferedStartFromRangeStart(firstSegmentInRange, rangeStart, lastD
661
663
  (lastDeletedSegmentInfos.precizeEnd ||
662
664
  firstSegmentInRange.start - lastDeletedSegmentInfos.end <=
663
665
  MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE)) {
664
- log.debug("SI: buffered start is end of previous segment", bufferType, rangeStart, firstSegmentInRange.start, lastDeletedSegmentInfos.end);
666
+ log_1.default.debug("SI: buffered start is end of previous segment", bufferType, rangeStart, firstSegmentInRange.start, lastDeletedSegmentInfos.end);
665
667
  firstSegmentInRange.bufferedStart = lastDeletedSegmentInfos.end;
666
668
  if (bufferedStartLooksCoherent(firstSegmentInRange)) {
667
669
  firstSegmentInRange.start = lastDeletedSegmentInfos.end;
@@ -670,7 +672,7 @@ function guessBufferedStartFromRangeStart(firstSegmentInRange, rangeStart, lastD
670
672
  }
671
673
  else if (firstSegmentInRange.start - rangeStart <=
672
674
  MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE) {
673
- log.debug("SI: found true buffered start", bufferType, rangeStart, firstSegmentInRange.start);
675
+ log_1.default.debug("SI: found true buffered start", bufferType, rangeStart, firstSegmentInRange.start);
674
676
  firstSegmentInRange.bufferedStart = rangeStart;
675
677
  if (bufferedStartLooksCoherent(firstSegmentInRange)) {
676
678
  firstSegmentInRange.start = rangeStart;
@@ -678,11 +680,11 @@ function guessBufferedStartFromRangeStart(firstSegmentInRange, rangeStart, lastD
678
680
  }
679
681
  }
680
682
  else if (rangeStart < firstSegmentInRange.start) {
681
- log.debug("SI: range start too far from expected start", bufferType, rangeStart, firstSegmentInRange.start);
683
+ log_1.default.debug("SI: range start too far from expected start", bufferType, rangeStart, firstSegmentInRange.start);
682
684
  firstSegmentInRange.bufferedStart = firstSegmentInRange.start;
683
685
  }
684
686
  else {
685
- log.debug("SI: Segment appears immediately garbage collected at the start", bufferType, firstSegmentInRange.bufferedStart, rangeStart);
687
+ log_1.default.debug("SI: Segment appears immediately garbage collected at the start", bufferType, firstSegmentInRange.bufferedStart, rangeStart);
686
688
  firstSegmentInRange.bufferedStart = rangeStart;
687
689
  }
688
690
  }
@@ -694,10 +696,10 @@ function guessBufferedStartFromRangeStart(firstSegmentInRange, rangeStart, lastD
694
696
  * @param {string} bufferType
695
697
  */
696
698
  function guessBufferedEndFromRangeEnd(lastSegmentInRange, rangeEnd, bufferType) {
697
- var MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE = config.getCurrent().MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE;
699
+ const { MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE } = config_1.default.getCurrent();
698
700
  if (lastSegmentInRange.bufferedEnd !== undefined) {
699
701
  if (lastSegmentInRange.bufferedEnd > rangeEnd) {
700
- log.debug("SI: Segment partially GCed at the end", bufferType, lastSegmentInRange.bufferedEnd, rangeEnd);
702
+ log_1.default.debug("SI: Segment partially GCed at the end", bufferType, lastSegmentInRange.bufferedEnd, rangeEnd);
701
703
  lastSegmentInRange.bufferedEnd = rangeEnd;
702
704
  }
703
705
  if (!lastSegmentInRange.precizeEnd &&
@@ -708,12 +710,12 @@ function guessBufferedEndFromRangeEnd(lastSegmentInRange, rangeEnd, bufferType)
708
710
  }
709
711
  }
710
712
  else if (lastSegmentInRange.precizeEnd) {
711
- log.debug("SI: buffered end is precize end", bufferType, lastSegmentInRange.end);
713
+ log_1.default.debug("SI: buffered end is precize end", bufferType, lastSegmentInRange.end);
712
714
  lastSegmentInRange.bufferedEnd = lastSegmentInRange.end;
713
715
  }
714
716
  else if (rangeEnd - lastSegmentInRange.end <=
715
717
  MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE) {
716
- log.debug("SI: found true buffered end", bufferType, rangeEnd, lastSegmentInRange.end);
718
+ log_1.default.debug("SI: found true buffered end", bufferType, rangeEnd, lastSegmentInRange.end);
717
719
  lastSegmentInRange.bufferedEnd = rangeEnd;
718
720
  if (bufferedEndLooksCoherent(lastSegmentInRange)) {
719
721
  lastSegmentInRange.end = rangeEnd;
@@ -721,11 +723,11 @@ function guessBufferedEndFromRangeEnd(lastSegmentInRange, rangeEnd, bufferType)
721
723
  }
722
724
  }
723
725
  else if (rangeEnd > lastSegmentInRange.end) {
724
- log.debug("SI: range end too far from expected end", bufferType, rangeEnd, lastSegmentInRange.end);
726
+ log_1.default.debug("SI: range end too far from expected end", bufferType, rangeEnd, lastSegmentInRange.end);
725
727
  lastSegmentInRange.bufferedEnd = lastSegmentInRange.end;
726
728
  }
727
729
  else {
728
- log.debug("SI: Segment appears immediately garbage collected at the end", bufferType, lastSegmentInRange.bufferedEnd, rangeEnd);
730
+ log_1.default.debug("SI: Segment appears immediately garbage collected at the end", bufferType, lastSegmentInRange.bufferedEnd, rangeEnd);
729
731
  lastSegmentInRange.bufferedEnd = rangeEnd;
730
732
  }
731
733
  }
@@ -762,31 +764,30 @@ function guessBufferedEndFromRangeEnd(lastSegmentInRange, rangeEnd, bufferType)
762
764
  * @returns {string}
763
765
  */
764
766
  function prettyPrintInventory(inventory) {
765
- var _a;
766
- var roundingError = 1 / 60;
767
- var encounteredReps = {};
768
- var letters = [];
769
- var lastChunk = null;
770
- var lastLetter = null;
767
+ const roundingError = 1 / 60;
768
+ const encounteredReps = {};
769
+ const letters = [];
770
+ let lastChunk = null;
771
+ let lastLetter = null;
771
772
  function generateNewLetter(infos) {
772
- var currentLetter = String.fromCharCode(letters.length + 65);
773
+ const currentLetter = String.fromCharCode(letters.length + 65);
773
774
  letters.push({ letter: currentLetter,
774
775
  periodId: infos.period.id,
775
776
  representationId: infos.representation.id,
776
777
  bitrate: infos.representation.bitrate });
777
778
  return currentLetter;
778
779
  }
779
- var str = "";
780
- for (var i = 0; i < inventory.length; i++) {
781
- var chunk = inventory[i];
780
+ let str = "";
781
+ for (let i = 0; i < inventory.length; i++) {
782
+ const chunk = inventory[i];
782
783
  if (chunk.bufferedStart !== undefined && chunk.bufferedEnd !== undefined) {
783
- var periodId = chunk.infos.period.id;
784
- var representationId = chunk.infos.representation.id;
785
- var encounteredPeriod = encounteredReps[periodId];
786
- var currentLetter = void 0;
784
+ const periodId = chunk.infos.period.id;
785
+ const representationId = chunk.infos.representation.id;
786
+ const encounteredPeriod = encounteredReps[periodId];
787
+ let currentLetter;
787
788
  if (encounteredPeriod === undefined) {
788
789
  currentLetter = generateNewLetter(chunk.infos);
789
- encounteredReps[periodId] = (_a = {}, _a[representationId] = currentLetter, _a);
790
+ encounteredReps[periodId] = { [representationId]: currentLetter };
790
791
  }
791
792
  else if (encounteredPeriod[representationId] === undefined) {
792
793
  currentLetter = generateNewLetter(chunk.infos);
@@ -796,17 +797,17 @@ function prettyPrintInventory(inventory) {
796
797
  currentLetter = encounteredPeriod[representationId];
797
798
  }
798
799
  if (lastChunk === null) {
799
- str += "".concat(chunk.bufferedStart.toFixed(2), "|").concat(currentLetter, "|");
800
+ str += `${chunk.bufferedStart.toFixed(2)}|${currentLetter}|`;
800
801
  }
801
802
  else if (lastLetter === currentLetter) {
802
803
  if (lastChunk.bufferedEnd + roundingError < chunk.bufferedStart) {
803
- str += "".concat(lastChunk.bufferedEnd.toFixed(2), " ~ ") +
804
- "".concat(chunk.bufferedStart.toFixed(2), "|").concat(currentLetter, "|");
804
+ str += `${lastChunk.bufferedEnd.toFixed(2)} ~ ` +
805
+ `${chunk.bufferedStart.toFixed(2)}|${currentLetter}|`;
805
806
  }
806
807
  }
807
808
  else {
808
- str += "".concat(lastChunk.bufferedEnd.toFixed(2), " ~ ") +
809
- "".concat(chunk.bufferedStart.toFixed(2), "|").concat(currentLetter, "|");
809
+ str += `${lastChunk.bufferedEnd.toFixed(2)} ~ ` +
810
+ `${chunk.bufferedStart.toFixed(2)}|${currentLetter}|`;
810
811
  }
811
812
  lastChunk = chunk;
812
813
  lastLetter = currentLetter;
@@ -815,11 +816,11 @@ function prettyPrintInventory(inventory) {
815
816
  if (lastChunk !== null) {
816
817
  str += String(lastChunk.end.toFixed(2));
817
818
  }
818
- letters.forEach(function (letterInfo) {
819
+ letters.forEach(letterInfo => {
819
820
  var _a;
820
- str += "\n[".concat(letterInfo.letter, "] ") +
821
- "P: ".concat(letterInfo.periodId, " || R: ").concat(letterInfo.representationId) +
822
- "(".concat((_a = letterInfo.bitrate) !== null && _a !== void 0 ? _a : "unknown bitrate", ")");
821
+ str += `\n[${letterInfo.letter}] ` +
822
+ `P: ${letterInfo.periodId} || R: ${letterInfo.representationId}` +
823
+ `(${(_a = letterInfo.bitrate) !== null && _a !== void 0 ? _a : "unknown bitrate"})`;
823
824
  });
824
825
  return str;
825
826
  }