rx-player 3.26.2 → 3.27.0-dev.20220317

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 (500) hide show
  1. package/.github/workflows/perfs.yml +22 -0
  2. package/CHANGELOG.md +33 -1
  3. package/FILES.md +5 -4
  4. package/VERSION +1 -1
  5. package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
  6. package/dist/_esm5.processed/compat/browser_detection.js +4 -2
  7. package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
  8. package/dist/_esm5.processed/compat/eme/close_session.js +144 -36
  9. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
  10. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +27 -24
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +53 -34
  12. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +43 -41
  13. package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
  14. package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
  15. package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
  16. package/dist/_esm5.processed/compat/eme/load_session.js +68 -17
  17. package/dist/_esm5.processed/compat/event_listeners.js +2 -1
  18. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
  19. package/dist/_esm5.processed/config.d.ts +166 -1080
  20. package/dist/_esm5.processed/config.js +17 -1119
  21. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
  22. package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
  23. package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
  24. package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +1 -1
  25. package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
  26. package/dist/_esm5.processed/core/abr/pending_requests_store.js +3 -5
  27. package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +1 -1
  28. package/dist/_esm5.processed/core/abr/representation_estimator.js +2 -2
  29. package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
  30. package/dist/_esm5.processed/core/api/index.d.ts +2 -1
  31. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +6 -0
  32. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +22 -4
  33. package/dist/_esm5.processed/core/api/option_utils.d.ts +3 -1
  34. package/dist/_esm5.processed/core/api/option_utils.js +19 -6
  35. package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
  36. package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
  37. package/dist/_esm5.processed/core/api/public_api.js +72 -33
  38. package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +6 -6
  39. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -51
  40. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +30 -75
  41. package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
  42. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +104 -0
  43. package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
  44. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +41 -0
  45. package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
  46. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +866 -0
  47. package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
  48. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
  49. package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
  50. package/dist/_esm5.processed/core/decrypt/create_session.js +174 -0
  51. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.d.ts +21 -0
  52. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
  53. package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
  54. package/dist/_esm5.processed/core/decrypt/find_key_system.js +300 -0
  55. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
  56. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
  57. package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
  58. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
  59. package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
  60. package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
  61. package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
  62. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
  63. package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
  64. package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
  65. package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
  66. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
  67. package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +120 -242
  68. package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
  69. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
  70. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
  71. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
  72. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
  73. package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
  74. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +85 -0
  75. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
  76. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
  77. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
  78. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
  79. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
  80. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
  81. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
  82. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
  83. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
  84. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
  85. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
  86. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
  87. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
  88. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +303 -0
  89. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
  90. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
  91. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
  92. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
  93. package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
  94. package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
  95. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
  96. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
  97. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +4 -4
  98. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -3
  99. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +2 -2
  100. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +6 -2
  101. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  102. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +1 -1
  103. package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
  104. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +3 -3
  105. package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
  106. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +5 -3
  107. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
  108. package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
  109. package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
  110. package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
  111. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
  112. package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
  113. package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
  114. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
  115. package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +2 -2
  116. package/dist/_esm5.processed/core/init/types.d.ts +2 -4
  117. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
  118. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +3 -3
  119. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
  120. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +32 -31
  121. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +4 -4
  122. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
  123. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
  124. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
  125. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
  126. package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
  127. package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
  128. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
  129. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
  130. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
  131. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +1 -1
  132. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +2 -1
  133. package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
  134. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +5 -6
  135. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
  136. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
  137. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
  138. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
  139. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
  140. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
  141. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
  142. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
  143. package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
  144. package/dist/_esm5.processed/default_config.d.ts +1114 -0
  145. package/dist/_esm5.processed/default_config.js +1145 -0
  146. package/dist/_esm5.processed/errors/request_error.js +3 -1
  147. package/dist/_esm5.processed/experimental/index.d.ts +2 -0
  148. package/dist/_esm5.processed/experimental/index.js +2 -0
  149. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
  150. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
  151. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +2 -4
  152. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
  153. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
  154. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +1 -2
  155. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +1 -2
  156. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
  157. package/dist/_esm5.processed/features/features_object.js +1 -1
  158. package/dist/_esm5.processed/features/initialize_features.js +1 -1
  159. package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
  160. package/dist/_esm5.processed/features/list/eme.js +5 -5
  161. package/dist/_esm5.processed/features/types.d.ts +3 -3
  162. package/dist/_esm5.processed/manifest/adaptation.d.ts +2 -2
  163. package/dist/_esm5.processed/manifest/adaptation.js +3 -1
  164. package/dist/_esm5.processed/manifest/manifest.d.ts +10 -23
  165. package/dist/_esm5.processed/manifest/manifest.js +10 -74
  166. package/dist/_esm5.processed/manifest/period.d.ts +3 -3
  167. package/dist/_esm5.processed/manifest/representation.d.ts +37 -5
  168. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +18 -18
  169. package/dist/_esm5.processed/manifest/types.d.ts +3 -3
  170. package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
  171. package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
  172. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +6 -6
  173. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
  174. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -2
  175. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
  176. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +14 -14
  177. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +17 -17
  178. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
  179. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
  180. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +28 -20
  181. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +20 -5
  182. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  183. package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
  184. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -35
  185. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +109 -96
  186. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +8 -8
  187. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
  188. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +18 -27
  189. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +25 -23
  190. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +21 -15
  191. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +19 -19
  192. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -38
  193. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +8 -8
  194. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +30 -30
  195. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +3 -3
  196. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -1
  197. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
  198. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
  199. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
  200. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
  201. package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
  202. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
  203. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +15 -5
  204. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +2 -2
  205. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.d.ts +11 -1
  206. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +31 -19
  207. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
  208. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
  209. package/dist/_esm5.processed/public_types.d.ts +2 -2
  210. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +2 -1
  211. package/dist/_esm5.processed/transports/dash/image_pipelines.js +4 -1
  212. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
  213. package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
  214. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
  215. package/dist/_esm5.processed/transports/dash/segment_loader.js +2 -2
  216. package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +1 -1
  217. package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
  218. package/dist/_esm5.processed/transports/dash/text_loader.d.ts +1 -1
  219. package/dist/_esm5.processed/transports/dash/text_loader.js +1 -1
  220. package/dist/_esm5.processed/transports/dash/text_parser.d.ts +1 -1
  221. package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
  222. package/dist/_esm5.processed/transports/local/segment_loader.d.ts +1 -2
  223. package/dist/_esm5.processed/transports/local/segment_loader.js +1 -1
  224. package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
  225. package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
  226. package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +1 -1
  227. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
  228. package/dist/_esm5.processed/transports/smooth/pipelines.js +69 -11
  229. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +0 -1
  230. package/dist/_esm5.processed/transports/smooth/segment_loader.js +2 -2
  231. package/dist/_esm5.processed/transports/types.d.ts +58 -30
  232. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
  233. package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +1 -1
  234. package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -1
  235. package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
  236. package/dist/_esm5.processed/utils/cast_to_observable.js +1 -1
  237. package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
  238. package/dist/_esm5.processed/utils/deep_merge.js +53 -0
  239. package/dist/_esm5.processed/utils/reference.d.ts +29 -0
  240. package/dist/_esm5.processed/utils/reference.js +72 -24
  241. package/dist/_esm5.processed/utils/request/fetch.d.ts +4 -5
  242. package/dist/_esm5.processed/utils/request/fetch.js +8 -6
  243. package/dist/_esm5.processed/utils/request/xhr.d.ts +6 -6
  244. package/dist/_esm5.processed/utils/request/xhr.js +3 -2
  245. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +1 -2
  246. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
  247. package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
  248. package/dist/_esm5.processed/utils/task_canceller.js +3 -3
  249. package/dist/rx-player.js +5242 -3190
  250. package/dist/rx-player.min.js +1 -1
  251. package/dummy +1 -0
  252. package/{dist/_esm5.processed/core/eme/dispose_eme.d.ts → experimental/index.d.ts} +1 -4
  253. package/{dist/_esm5.processed/core/eme/dispose_media_keys.d.ts → experimental/index.js} +1 -6
  254. package/package.json +33 -36
  255. package/scripts/build/templates/experimental/index.d.ts +16 -0
  256. package/scripts/build/templates/experimental/index.js +16 -0
  257. package/scripts/doc-generator/generate_header_html.js +6 -7
  258. package/scripts/doc-generator/generate_page_html.js +3 -4
  259. package/scripts/doc-generator/generate_page_list_html.js +4 -5
  260. package/scripts/doc-generator/generate_sidebar_html.js +4 -7
  261. package/scripts/doc-generator/utils.js +0 -11
  262. package/scripts/generate_demo_list.js +3 -3
  263. package/scripts/generate_documentation_list.js +3 -3
  264. package/scripts/launch_static_server.js +127 -67
  265. package/scripts/run_standalone_demo.js +1 -0
  266. package/scripts/start_demo_web_server.js +1 -0
  267. package/sonar-project.properties +1 -1
  268. package/src/README.md +6 -6
  269. package/src/compat/__tests__/fullscreen.test.ts +7 -7
  270. package/src/compat/__tests__/is_vtt_cue.test.ts +1 -1
  271. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
  272. package/src/compat/browser_detection.ts +4 -2
  273. package/src/compat/eme/close_session.ts +90 -56
  274. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
  275. package/src/compat/eme/custom_media_keys/index.ts +28 -41
  276. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +63 -46
  277. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +51 -49
  278. package/src/compat/eme/generate_key_request.ts +25 -33
  279. package/src/compat/eme/load_session.ts +29 -31
  280. package/src/compat/event_listeners.ts +2 -1
  281. package/src/compat/should_favour_custom_safari_EME.ts +5 -2
  282. package/src/config.ts +17 -1210
  283. package/src/core/README.md +1 -1
  284. package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
  285. package/src/core/abr/bandwidth_estimator.ts +4 -4
  286. package/src/core/abr/buffer_based_chooser.ts +85 -20
  287. package/src/core/abr/network_analyzer.ts +6 -7
  288. package/src/core/abr/pending_requests_store.ts +3 -5
  289. package/src/core/abr/representation_estimator.ts +6 -3
  290. package/src/core/api/__tests__/get_player_state.test.ts +3 -3
  291. package/src/core/api/__tests__/option_utils.test.ts +17 -17
  292. package/src/core/api/get_player_state.ts +1 -1
  293. package/src/core/api/index.ts +3 -0
  294. package/src/core/api/media_element_track_choice_manager.ts +22 -3
  295. package/src/core/api/option_utils.ts +37 -20
  296. package/src/core/api/playback_observer.ts +12 -8
  297. package/src/core/api/public_api.ts +152 -112
  298. package/src/core/api/track_choice_manager.ts +10 -9
  299. package/src/core/decrypt/README.md +22 -0
  300. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
  301. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
  302. package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
  303. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
  304. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
  305. package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +36 -103
  306. package/src/core/{eme → decrypt}/attach_media_keys.ts +49 -56
  307. package/src/core/decrypt/clear_on_stop.ts +48 -0
  308. package/src/core/decrypt/content_decryptor.ts +1158 -0
  309. package/src/core/decrypt/create_or_load_session.ts +130 -0
  310. package/src/core/decrypt/create_session.ts +175 -0
  311. package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
  312. package/src/core/{eme → decrypt}/find_key_system.ts +126 -134
  313. package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
  314. package/src/core/decrypt/get_media_keys.ts +145 -0
  315. package/src/core/{eme → decrypt}/index.ts +11 -8
  316. package/src/core/decrypt/init_media_keys.ts +51 -0
  317. package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
  318. package/src/core/decrypt/set_server_certificate.ts +104 -0
  319. package/src/core/{eme → decrypt}/types.ts +129 -259
  320. package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
  321. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
  322. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
  323. package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
  324. package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
  325. package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +20 -20
  326. package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
  327. package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
  328. package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
  329. package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
  330. package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
  331. package/src/core/decrypt/utils/key_session_record.ts +175 -0
  332. package/src/core/decrypt/utils/loaded_sessions_store.ts +318 -0
  333. package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
  334. package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
  335. package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
  336. package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
  337. package/src/core/fetchers/manifest/manifest_fetcher.ts +9 -9
  338. package/src/core/fetchers/segment/segment_fetcher.ts +10 -7
  339. package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
  340. package/src/core/fetchers/utils/try_urls_with_backoff.ts +1 -1
  341. package/src/core/init/.initialize_media_source.ts.un~ +0 -0
  342. package/src/core/init/get_initial_time.ts +2 -1
  343. package/src/core/init/initialize_directfile.ts +19 -22
  344. package/src/core/init/initialize_media_source.ts +43 -106
  345. package/src/core/init/link_drm_and_content.ts +176 -0
  346. package/src/core/init/manifest_update_scheduler.ts +12 -10
  347. package/src/core/init/stall_avoider.ts +6 -5
  348. package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
  349. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
  350. package/src/core/init/stream_events_emitter/types.ts +2 -2
  351. package/src/core/init/types.ts +1 -39
  352. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
  353. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +6 -7
  354. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +32 -31
  355. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
  356. package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
  357. package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
  358. package/src/core/stream/events_generators.ts +9 -4
  359. package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
  360. package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
  361. package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
  362. package/src/core/stream/period/period_stream.ts +5 -2
  363. package/src/core/stream/representation/force_garbage_collection.ts +5 -7
  364. package/src/core/stream/representation/get_buffer_status.ts +28 -16
  365. package/src/core/stream/representation/get_needed_segments.ts +124 -28
  366. package/src/core/stream/representation/get_segment_priority.ts +1 -2
  367. package/src/core/stream/representation/push_media_segment.ts +3 -2
  368. package/src/core/stream/representation/representation_stream.ts +30 -7
  369. package/src/core/stream/types.ts +1 -1
  370. package/src/default_config.ts +1241 -0
  371. package/src/errors/request_error.ts +4 -1
  372. package/src/experimental/index.ts +5 -0
  373. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
  374. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +5 -7
  375. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
  376. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +4 -4
  377. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +1 -1
  378. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
  379. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +1 -2
  380. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +1 -2
  381. package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
  382. package/src/features/__tests__/initialize_features.test.ts +2 -2
  383. package/src/features/features_object.ts +1 -1
  384. package/src/features/initialize_features.ts +1 -1
  385. package/src/features/list/__tests__/eme.test.ts +5 -5
  386. package/src/features/list/eme.ts +5 -5
  387. package/src/features/types.ts +3 -10
  388. package/src/manifest/adaptation.ts +6 -4
  389. package/src/manifest/manifest.ts +16 -86
  390. package/src/manifest/period.ts +3 -3
  391. package/src/manifest/representation.ts +38 -5
  392. package/src/manifest/representation_index/types.ts +18 -18
  393. package/src/manifest/types.ts +3 -3
  394. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
  395. package/src/parsers/manifest/dash/common/get_hdr_information.ts +1 -1
  396. package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
  397. package/src/parsers/manifest/dash/common/indexes/base.ts +6 -6
  398. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +4 -2
  399. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +2 -2
  400. package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
  401. package/src/parsers/manifest/dash/common/indexes/list.ts +14 -14
  402. package/src/parsers/manifest/dash/common/indexes/template.ts +18 -18
  403. package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
  404. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +51 -23
  405. package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
  406. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
  407. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +167 -134
  408. package/src/parsers/manifest/dash/common/parse_mpd.ts +9 -10
  409. package/src/parsers/manifest/dash/common/parse_periods.ts +80 -79
  410. package/src/parsers/manifest/dash/common/parse_representation_index.ts +83 -75
  411. package/src/parsers/manifest/dash/common/parse_representations.ts +44 -63
  412. package/src/parsers/manifest/dash/node_parser_types.ts +30 -30
  413. package/src/parsers/manifest/dash/parsers_types.ts +3 -3
  414. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -1
  415. package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +4 -4
  416. package/src/parsers/manifest/smooth/create_parser.ts +24 -21
  417. package/src/parsers/manifest/smooth/representation_index.ts +14 -14
  418. package/src/parsers/manifest/types.ts +28 -28
  419. package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +31 -33
  420. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +15 -6
  421. package/src/parsers/manifest/utils/index_helpers.ts +2 -2
  422. package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
  423. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
  424. package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
  425. package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
  426. package/src/public_types.ts +5 -1
  427. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +2 -2
  428. package/src/transports/dash/image_pipelines.ts +4 -1
  429. package/src/transports/dash/init_segment_loader.ts +1 -1
  430. package/src/transports/dash/manifest_parser.ts +1 -1
  431. package/src/transports/dash/segment_loader.ts +7 -7
  432. package/src/transports/dash/segment_parser.ts +8 -1
  433. package/src/transports/dash/text_loader.ts +2 -2
  434. package/src/transports/dash/text_parser.ts +11 -1
  435. package/src/transports/local/segment_loader.ts +4 -4
  436. package/src/transports/local/segment_parser.ts +4 -0
  437. package/src/transports/local/text_parser.ts +8 -0
  438. package/src/transports/metaplaylist/manifest_loader.ts +1 -1
  439. package/src/transports/metaplaylist/pipelines.ts +1 -1
  440. package/src/transports/smooth/pipelines.ts +29 -16
  441. package/src/transports/smooth/segment_loader.ts +8 -8
  442. package/src/transports/types.ts +59 -30
  443. package/src/transports/utils/call_custom_manifest_loader.ts +6 -6
  444. package/src/transports/utils/generate_manifest_loader.ts +1 -1
  445. package/src/utils/__tests__/deep_merge.test.ts +48 -0
  446. package/src/utils/__tests__/flat_map.test.ts +12 -7
  447. package/src/utils/cancellable_sleep.ts +1 -1
  448. package/src/utils/cast_to_observable.ts +1 -2
  449. package/src/utils/deep_merge.ts +46 -0
  450. package/src/utils/reference.ts +116 -23
  451. package/src/utils/request/fetch.ts +17 -15
  452. package/src/utils/request/xhr.ts +11 -8
  453. package/src/utils/rx-from_cancellable_promise.ts +8 -4
  454. package/src/utils/task_canceller.ts +6 -4
  455. package/tsconfig.json +1 -2
  456. package/tsconfig.modules.json +1 -2
  457. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
  458. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
  459. package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
  460. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
  461. package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
  462. package/dist/_esm5.processed/core/eme/create_session.js +0 -126
  463. package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
  464. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
  465. package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
  466. package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
  467. package/dist/_esm5.processed/core/eme/find_key_system.js +0 -243
  468. package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
  469. package/dist/_esm5.processed/core/eme/get_session.js +0 -68
  470. package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
  471. package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
  472. package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
  473. package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
  474. package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
  475. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
  476. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
  477. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
  478. package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
  479. package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
  480. package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
  481. package/src/core/eme/README.md +0 -26
  482. package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
  483. package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
  484. package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
  485. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
  486. package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
  487. package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
  488. package/src/core/eme/clear_eme_session.ts +0 -62
  489. package/src/core/eme/create_session.ts +0 -187
  490. package/src/core/eme/dispose_eme.ts +0 -25
  491. package/src/core/eme/dispose_media_keys.ts +0 -46
  492. package/src/core/eme/eme_manager.ts +0 -387
  493. package/src/core/eme/get_media_keys.ts +0 -141
  494. package/src/core/eme/get_session.ts +0 -135
  495. package/src/core/eme/init_media_keys.ts +0 -106
  496. package/src/core/eme/set_server_certificate.ts +0 -115
  497. package/src/core/eme/utils/close_session.ts +0 -113
  498. package/src/core/eme/utils/init_data_store.ts +0 -234
  499. package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
  500. package/src/core/init/create_eme_manager.ts +0 -95
@@ -48,8 +48,8 @@ var TextTrackCuesStore = /** @class */ (function () {
48
48
  var ret = [];
49
49
  // begins at the end as most of the time the player will ask for the last
50
50
  // CuesGroup
51
- for (var i = cuesBuffer.length - 1; i >= 0; i--) {
52
- var segment = cuesBuffer[i];
51
+ for (var cueIdx = cuesBuffer.length - 1; cueIdx >= 0; cueIdx--) {
52
+ var segment = cuesBuffer[cueIdx];
53
53
  if (time < segment.end && time >= segment.start) {
54
54
  var cues = segment.cues;
55
55
  for (var j = 0; j < cues.length; j++) {
@@ -75,10 +75,10 @@ var TextTrackCuesStore = /** @class */ (function () {
75
75
  }
76
76
  var to = Math.max(from, _to);
77
77
  var cuesBuffer = this._cuesBuffer;
78
- for (var i = 0; i < cuesBuffer.length; i++) {
79
- if (cuesBuffer[i].end > from) {
78
+ for (var cueIdx = 0; cueIdx < cuesBuffer.length; cueIdx++) {
79
+ if (cuesBuffer[cueIdx].end > from) {
80
80
  // this cuesInfos is concerned by the remove
81
- var startCuesInfos = cuesBuffer[i];
81
+ var startCuesInfos = cuesBuffer[cueIdx];
82
82
  if (startCuesInfos.start >= to) {
83
83
  // our cuesInfos is strictly after this interval, we have nothing to do
84
84
  return;
@@ -93,8 +93,8 @@ var TextTrackCuesStore = /** @class */ (function () {
93
93
  else {
94
94
  // from -> to is in the middle part of startCuesInfos
95
95
  var _a = removeCuesInfosBetween(startCuesInfos, from, to), cuesInfos1 = _a[0], cuesInfos2 = _a[1];
96
- this._cuesBuffer[i] = cuesInfos1;
97
- cuesBuffer.splice(i + 1, 0, cuesInfos2);
96
+ this._cuesBuffer[cueIdx] = cuesInfos1;
97
+ cuesBuffer.splice(cueIdx + 1, 0, cuesInfos2);
98
98
  }
99
99
  // No cuesInfos can be concerned after this one, we can quit
100
100
  return;
@@ -102,8 +102,8 @@ var TextTrackCuesStore = /** @class */ (function () {
102
102
  // Else remove all part after `from`
103
103
  if (startCuesInfos.start >= from) {
104
104
  // all the segment is concerned
105
- cuesBuffer.splice(i, 1);
106
- i--; // one less element, we have to decrement the loop
105
+ cuesBuffer.splice(cueIdx, 1);
106
+ cueIdx--; // one less element, we have to decrement the loop
107
107
  }
108
108
  else {
109
109
  // only the end is concerned
@@ -187,8 +187,8 @@ var TextTrackCuesStore = /** @class */ (function () {
187
187
  cuesBuffer.splice(indexOfNextCue, 0, cuesInfosToInsert);
188
188
  }
189
189
  }
190
- for (var i = 0; i < cuesBuffer.length; i++) {
191
- var cuesInfos = cuesBuffer[i];
190
+ for (var cueIdx = 0; cueIdx < cuesBuffer.length; cueIdx++) {
191
+ var cuesInfos = cuesBuffer[cueIdx];
192
192
  if (start < cuesInfos.end) {
193
193
  if (areNearlyEqual(start, cuesInfos.start)) {
194
194
  if (areNearlyEqual(end, cuesInfos.end)) {
@@ -198,7 +198,7 @@ var TextTrackCuesStore = /** @class */ (function () {
198
198
  // Result: |AAAAA|
199
199
  // Which means:
200
200
  // 1. replace the current cue with ours
201
- cuesBuffer[i] = cuesInfosToInsert;
201
+ cuesBuffer[cueIdx] = cuesInfosToInsert;
202
202
  return;
203
203
  }
204
204
  else if (end < cuesInfos.end) {
@@ -212,7 +212,7 @@ var TextTrackCuesStore = /** @class */ (function () {
212
212
  // 3. add ours before the current one
213
213
  cuesInfos.cues = getCuesAfter(cuesInfos.cues, end);
214
214
  cuesInfos.start = end;
215
- cuesBuffer.splice(i, 0, cuesInfosToInsert);
215
+ cuesBuffer.splice(cueIdx, 0, cuesInfosToInsert);
216
216
  return;
217
217
  }
218
218
  // our cue goes beyond the current one:
@@ -222,10 +222,10 @@ var TextTrackCuesStore = /** @class */ (function () {
222
222
  // Here we have to delete any cuesInfos which end before ours end,
223
223
  // and see about the following one.
224
224
  do {
225
- cuesBuffer.splice(i, 1);
226
- cuesInfos = cuesBuffer[i];
225
+ cuesBuffer.splice(cueIdx, 1);
226
+ cuesInfos = cuesBuffer[cueIdx];
227
227
  } while (cuesInfos !== undefined && end > cuesInfos.end);
228
- onIndexOfNextCueFound(i);
228
+ onIndexOfNextCueFound(cueIdx);
229
229
  return;
230
230
  }
231
231
  else if (start < cuesInfos.start) {
@@ -236,7 +236,7 @@ var TextTrackCuesStore = /** @class */ (function () {
236
236
  // Result: |AAAAAAA| |BBBB|
237
237
  // Which means:
238
238
  // - add ours before the current one
239
- cuesBuffer.splice(i, 0, cuesInfosToInsert);
239
+ cuesBuffer.splice(cueIdx, 0, cuesInfosToInsert);
240
240
  return;
241
241
  }
242
242
  else if (areNearlyEqual(end, cuesInfos.start)) {
@@ -248,7 +248,7 @@ var TextTrackCuesStore = /** @class */ (function () {
248
248
  // - update start time of the current one to be sure
249
249
  // - add ours before the current one
250
250
  cuesInfos.start = end;
251
- cuesBuffer.splice(i, 0, cuesInfosToInsert);
251
+ cuesBuffer.splice(cueIdx, 0, cuesInfosToInsert);
252
252
  return;
253
253
  }
254
254
  else if (areNearlyEqual(end, cuesInfos.end)) {
@@ -256,7 +256,7 @@ var TextTrackCuesStore = /** @class */ (function () {
256
256
  // the current one: |BBBB|
257
257
  // Result: |AAAAAAA|
258
258
  // Replace
259
- cuesBuffer.splice(i, 1, cuesInfosToInsert);
259
+ cuesBuffer.splice(cueIdx, 1, cuesInfosToInsert);
260
260
  return;
261
261
  }
262
262
  else if (end < cuesInfos.end) {
@@ -265,17 +265,17 @@ var TextTrackCuesStore = /** @class */ (function () {
265
265
  // Result: |AAAAAAABB|
266
266
  cuesInfos.cues = getCuesAfter(cuesInfos.cues, end);
267
267
  cuesInfos.start = end;
268
- cuesBuffer.splice(i, 0, cuesInfosToInsert);
268
+ cuesBuffer.splice(cueIdx, 0, cuesInfosToInsert);
269
269
  return;
270
270
  }
271
271
  // ours: |AAAAAAA|
272
272
  // the current one: |BBB|...
273
273
  // Result: |AAAAAAA|...
274
274
  do {
275
- cuesBuffer.splice(i, 1);
276
- cuesInfos = cuesBuffer[i];
275
+ cuesBuffer.splice(cueIdx, 1);
276
+ cuesInfos = cuesBuffer[cueIdx];
277
277
  } while (cuesInfos !== undefined && end > cuesInfos.end);
278
- onIndexOfNextCueFound(i);
278
+ onIndexOfNextCueFound(cueIdx);
279
279
  return;
280
280
  }
281
281
  // else -> start > cuesInfos.start
@@ -285,7 +285,7 @@ var TextTrackCuesStore = /** @class */ (function () {
285
285
  // Result: |BBAAAAAA|
286
286
  cuesInfos.cues = getCuesBefore(cuesInfos.cues, start);
287
287
  cuesInfos.end = start;
288
- cuesBuffer.splice(i + 1, 0, cuesInfosToInsert);
288
+ cuesBuffer.splice(cueIdx + 1, 0, cuesInfosToInsert);
289
289
  return;
290
290
  }
291
291
  else if (cuesInfos.end > end) {
@@ -293,9 +293,9 @@ var TextTrackCuesStore = /** @class */ (function () {
293
293
  // the current one: |BBBBBBBBBBB|
294
294
  // Result: |BBAAAAAABBB|
295
295
  var _a = removeCuesInfosBetween(cuesInfos, start, end), cuesInfos1 = _a[0], cuesInfos2 = _a[1];
296
- this._cuesBuffer[i] = cuesInfos1;
297
- cuesBuffer.splice(i + 1, 0, cuesInfosToInsert);
298
- cuesBuffer.splice(i + 2, 0, cuesInfos2);
296
+ this._cuesBuffer[cueIdx] = cuesInfos1;
297
+ cuesBuffer.splice(cueIdx + 1, 0, cuesInfosToInsert);
298
+ cuesBuffer.splice(cueIdx + 2, 0, cuesInfos2);
299
299
  return;
300
300
  }
301
301
  else {
@@ -304,12 +304,13 @@ var TextTrackCuesStore = /** @class */ (function () {
304
304
  // Result: |BBAAAAAA|...
305
305
  cuesInfos.cues = getCuesBefore(cuesInfos.cues, start);
306
306
  cuesInfos.end = start;
307
- cuesInfos = cuesBuffer[i + 1];
307
+ var nextCueIdx = cueIdx + 1;
308
+ cuesInfos = cuesBuffer[nextCueIdx];
308
309
  while (cuesInfos !== undefined && end > cuesInfos.end) {
309
- cuesBuffer.splice(i, 1);
310
- cuesInfos = cuesBuffer[i];
310
+ cuesBuffer.splice(nextCueIdx, 1);
311
+ cuesInfos = cuesBuffer[nextCueIdx];
311
312
  }
312
- onIndexOfNextCueFound(i);
313
+ onIndexOfNextCueFound(nextCueIdx);
313
314
  return;
314
315
  }
315
316
  }
@@ -26,7 +26,7 @@ export default class NativeTextSegmentBuffer extends SegmentBuffer {
26
26
  readonly bufferType: "text";
27
27
  private readonly _videoElement;
28
28
  private readonly _track;
29
- private readonly _trackElement?;
29
+ private readonly _trackElement;
30
30
  private _buffered;
31
31
  /**
32
32
  * @param {HTMLMediaElement} videoElement
@@ -74,9 +74,9 @@ export interface INativeTextTracksBufferSegmentData {
74
74
  * This is mostly needed for "sami" subtitles, to know which cues can / should
75
75
  * be parsed.
76
76
  */
77
- language?: string;
77
+ language?: string | undefined;
78
78
  /** start time from which the segment apply, in seconds. */
79
- start?: number;
79
+ start?: number | undefined;
80
80
  /** end time until which the segment apply, in seconds. */
81
- end?: number;
81
+ end?: number | undefined;
82
82
  }
@@ -18,6 +18,20 @@ import { IBufferedHistoryEntry } from "./buffered_history";
18
18
  import { IChunkContext } from "./types";
19
19
  /** Information stored on a single chunk by the SegmentInventory. */
20
20
  export interface IBufferedChunk {
21
+ /**
22
+ * Complete size of the pushed chunk, in bytes.
23
+ * Note that this does not always reflect the memory imprint of the segment in
24
+ * memory:
25
+ *
26
+ * 1. It's the size of the original container file. A browser receiving that
27
+ * segment might then transform it under another form that may be more or
28
+ * less voluminous.
29
+ *
30
+ * 2. It's the size of the full chunk. In some scenarios only a sub-part of
31
+ * that chunk is actually considered (examples: when using append
32
+ * windows, when another chunk overlap that one etc.).
33
+ */
34
+ chunkSize: number | undefined;
21
35
  /**
22
36
  * Last inferred end in the media buffer this chunk ends at, in seconds.
23
37
  *
@@ -94,6 +108,8 @@ export interface IInsertedChunkInfos {
94
108
  representation: Representation;
95
109
  /** The Segment that chunk is linked to. */
96
110
  segment: ISegment;
111
+ /** Estimated size of the full pushed chunk, in bytes. */
112
+ chunkSize: number | undefined;
97
113
  /**
98
114
  * Start time, in seconds, this chunk most probably begins from after being
99
115
  * pushed.
@@ -153,7 +169,7 @@ export default class SegmentInventory {
153
169
  * segment have been inserted, you should call the `completeSegment` method.
154
170
  * @param {Object} chunkInformation
155
171
  */
156
- insertChunk({ period, adaptation, representation, segment, start, end }: IInsertedChunkInfos): void;
172
+ insertChunk({ period, adaptation, representation, segment, chunkSize, start, end }: IInsertedChunkInfos): void;
157
173
  /**
158
174
  * Indicate that inserted chunks can now be considered as a complete segment.
159
175
  * Take in argument the same content than what was given to `insertChunk` for
@@ -18,7 +18,6 @@ import log from "../../../log";
18
18
  import { areSameContent, } from "../../../manifest";
19
19
  import takeFirstSet from "../../../utils/take_first_set";
20
20
  import BufferedHistory from "./buffered_history";
21
- var BUFFERED_HISTORY_RETENTION_TIME = config.BUFFERED_HISTORY_RETENTION_TIME, BUFFERED_HISTORY_MAXIMUM_ENTRIES = config.BUFFERED_HISTORY_MAXIMUM_ENTRIES, MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE = config.MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE, MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE = config.MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE, MINIMUM_SEGMENT_SIZE = config.MINIMUM_SEGMENT_SIZE;
22
21
  /**
23
22
  * Keep track of every chunk downloaded and currently in the linked media
24
23
  * buffer.
@@ -30,6 +29,7 @@ var BUFFERED_HISTORY_RETENTION_TIME = config.BUFFERED_HISTORY_RETENTION_TIME, BU
30
29
  */
31
30
  var SegmentInventory = /** @class */ (function () {
32
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;
33
33
  this._inventory = [];
34
34
  this._bufferedHistory = new BufferedHistory(BUFFERED_HISTORY_RETENTION_TIME, BUFFERED_HISTORY_MAXIMUM_ENTRIES);
35
35
  }
@@ -55,6 +55,7 @@ var SegmentInventory = /** @class */ (function () {
55
55
  var inventory = this._inventory;
56
56
  var inventoryIndex = 0; // Current index considered.
57
57
  var thisSegment = inventory[0]; // Current segmentInfos considered
58
+ var MINIMUM_SEGMENT_SIZE = config.getCurrent().MINIMUM_SEGMENT_SIZE;
58
59
  /** Type of buffer considered, used for logs */
59
60
  var bufferType = thisSegment === null || thisSegment === void 0 ? void 0 : thisSegment.infos.adaptation.type;
60
61
  var rangesLength = buffered.length;
@@ -162,7 +163,7 @@ var SegmentInventory = /** @class */ (function () {
162
163
  * @param {Object} chunkInformation
163
164
  */
164
165
  SegmentInventory.prototype.insertChunk = function (_a) {
165
- var period = _a.period, adaptation = _a.adaptation, representation = _a.representation, segment = _a.segment, start = _a.start, end = _a.end;
166
+ var period = _a.period, adaptation = _a.adaptation, representation = _a.representation, segment = _a.segment, chunkSize = _a.chunkSize, start = _a.start, end = _a.end;
166
167
  if (segment.isInit) {
167
168
  return;
168
169
  }
@@ -172,8 +173,7 @@ var SegmentInventory = /** @class */ (function () {
172
173
  return;
173
174
  }
174
175
  var inventory = this._inventory;
175
- var newSegment = { partiallyPushed: true,
176
- splitted: false, start: start, end: end, precizeStart: false,
176
+ var newSegment = { partiallyPushed: true, chunkSize: chunkSize, splitted: false, start: start, end: end, precizeStart: false,
177
177
  precizeEnd: false,
178
178
  bufferedStart: undefined,
179
179
  bufferedEnd: undefined,
@@ -365,8 +365,15 @@ var SegmentInventory = /** @class */ (function () {
365
365
  // prevSegment : |---------|
366
366
  // newSegment : |====|
367
367
  // ===> : |--|====|-|
368
- log.debug("SI: Segment pushed is contained in a previous one", bufferType, start, end, segmentI.start, segmentI.end);
368
+ log.warn("SI: Segment pushed is contained in a previous one", bufferType, start, end, segmentI.start, segmentI.end);
369
369
  var nextSegment = { partiallyPushed: segmentI.partiallyPushed,
370
+ /**
371
+ * Note: this sadly means we're doing as if
372
+ * that chunk is present two times.
373
+ * Thankfully, this scenario should be
374
+ * fairly rare.
375
+ */
376
+ chunkSize: segmentI.chunkSize,
370
377
  splitted: true,
371
378
  start: newSegment.end,
372
379
  end: segmentI.end,
@@ -499,9 +506,14 @@ var SegmentInventory = /** @class */ (function () {
499
506
  }
500
507
  }
501
508
  var firstI = i;
509
+ var segmentSize = inventory[i].chunkSize;
502
510
  i += 1;
503
511
  while (i < inventory.length &&
504
512
  areSameContent(inventory[i].infos, content)) {
513
+ var chunkSize = inventory[i].chunkSize;
514
+ if (segmentSize !== undefined && chunkSize !== undefined) {
515
+ segmentSize += chunkSize;
516
+ }
505
517
  i++;
506
518
  }
507
519
  var lastI = i - 1;
@@ -513,6 +525,7 @@ var SegmentInventory = /** @class */ (function () {
513
525
  i -= length_1;
514
526
  }
515
527
  this._inventory[firstI].partiallyPushed = false;
528
+ this._inventory[firstI].chunkSize = segmentSize;
516
529
  this._inventory[firstI].end = lastEnd;
517
530
  this._inventory[firstI].bufferedEnd = lastBufferedEnd;
518
531
  this._inventory[firstI].splitted = splitted;
@@ -577,6 +590,7 @@ function bufferedStartLooksCoherent(thisSegment) {
577
590
  }
578
591
  var start = thisSegment.start, end = thisSegment.end;
579
592
  var duration = end - start;
593
+ 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;
580
594
  return Math.abs(start - thisSegment.bufferedStart) <=
581
595
  MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE &&
582
596
  (thisSegment.bufferedEnd === undefined ||
@@ -597,6 +611,7 @@ function bufferedEndLooksCoherent(thisSegment) {
597
611
  }
598
612
  var start = thisSegment.start, end = thisSegment.end;
599
613
  var duration = end - start;
614
+ 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;
600
615
  return Math.abs(end - thisSegment.bufferedEnd) <=
601
616
  MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE &&
602
617
  thisSegment.bufferedStart != null &&
@@ -612,6 +627,7 @@ function bufferedEndLooksCoherent(thisSegment) {
612
627
  * @param {Object} lastDeletedSegmentInfos
613
628
  */
614
629
  function guessBufferedStartFromRangeStart(firstSegmentInRange, rangeStart, lastDeletedSegmentInfos, bufferType) {
630
+ var MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE = config.getCurrent().MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE;
615
631
  if (firstSegmentInRange.bufferedStart !== undefined) {
616
632
  if (firstSegmentInRange.bufferedStart < rangeStart) {
617
633
  log.debug("SI: Segment partially GCed at the start", bufferType, firstSegmentInRange.bufferedStart, rangeStart);
@@ -664,6 +680,7 @@ function guessBufferedStartFromRangeStart(firstSegmentInRange, rangeStart, lastD
664
680
  * @param {Object} infos
665
681
  */
666
682
  function guessBufferedEndFromRangeEnd(lastSegmentInRange, rangeEnd, bufferType) {
683
+ var MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE = config.getCurrent().MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE;
667
684
  if (lastSegmentInRange.bufferedEnd !== undefined) {
668
685
  if (lastSegmentInRange.bufferedEnd > rangeEnd) {
669
686
  log.debug("SI: Segment partially GCed at the end", bufferType, lastSegmentInRange.bufferedEnd, rangeEnd);
@@ -76,6 +76,7 @@ export interface IAdaptationStreamArguments {
76
76
  * this AdaptationStream won't try to download new segments.
77
77
  */
78
78
  wantedBufferAhead: IReadOnlySharedReference<number>;
79
+ maxVideoBufferSize: IReadOnlySharedReference<number>;
79
80
  }
80
81
  /**
81
82
  * Various specific stream "options" which tweak the behavior of the
@@ -132,4 +133,4 @@ export interface IAdaptationStreamOptions {
132
133
  * @param {Object} args
133
134
  * @returns {Observable}
134
135
  */
135
- export default function AdaptationStream({ abrManager, playbackObserver, content, options, segmentBuffer, segmentFetcherCreator, wantedBufferAhead, }: IAdaptationStreamArguments): Observable<IAdaptationStreamEvent>;
136
+ export default function AdaptationStream({ abrManager, playbackObserver, content, options, segmentBuffer, segmentFetcherCreator, wantedBufferAhead, maxVideoBufferSize, }: IAdaptationStreamArguments): Observable<IAdaptationStreamEvent>;
@@ -32,7 +32,6 @@ import EVENTS from "../events_generators";
32
32
  import reloadAfterSwitch from "../reload_after_switch";
33
33
  import RepresentationStream from "../representation";
34
34
  import createRepresentationEstimator from "./create_representation_estimator";
35
- var DELTA_POSITION_AFTER_RELOAD = config.DELTA_POSITION_AFTER_RELOAD;
36
35
  /**
37
36
  * Create new AdaptationStream Observable, which task will be to download the
38
37
  * media data for a given Adaptation (i.e. "track").
@@ -48,7 +47,7 @@ var DELTA_POSITION_AFTER_RELOAD = config.DELTA_POSITION_AFTER_RELOAD;
48
47
  * @returns {Observable}
49
48
  */
50
49
  export default function AdaptationStream(_a) {
51
- var abrManager = _a.abrManager, playbackObserver = _a.playbackObserver, content = _a.content, options = _a.options, segmentBuffer = _a.segmentBuffer, segmentFetcherCreator = _a.segmentFetcherCreator, wantedBufferAhead = _a.wantedBufferAhead;
50
+ var abrManager = _a.abrManager, playbackObserver = _a.playbackObserver, content = _a.content, options = _a.options, segmentBuffer = _a.segmentBuffer, segmentFetcherCreator = _a.segmentFetcherCreator, wantedBufferAhead = _a.wantedBufferAhead, maxVideoBufferSize = _a.maxVideoBufferSize;
52
51
  var directManualBitrateSwitching = options.manualBitrateSwitchingMode === "direct";
53
52
  var manifest = content.manifest, period = content.period, adaptation = content.adaptation;
54
53
  /**
@@ -120,6 +119,7 @@ export default function AdaptationStream(_a) {
120
119
  if (directManualBitrateSwitching &&
121
120
  fromEstimate.manual &&
122
121
  !isFirstEstimate) {
122
+ var DELTA_POSITION_AFTER_RELOAD = config.getCurrent().DELTA_POSITION_AFTER_RELOAD;
123
123
  return reloadAfterSwitch(period, adaptation.type, playbackObserver, DELTA_POSITION_AFTER_RELOAD.bitrateSwitch);
124
124
  }
125
125
  /**
@@ -187,9 +187,12 @@ export default function AdaptationStream(_a) {
187
187
  1;
188
188
  bufferGoalRatioMap[representation.id] = bufferGoalRatio;
189
189
  var bufferGoal$ = wantedBufferAhead.asObservable().pipe(map(function (wba) { return wba * bufferGoalRatio; }));
190
+ // eslint-disable-next-line max-len
191
+ var maxBufferSize$ = adaptation.type === "video" ? maxVideoBufferSize.asObservable() :
192
+ observableOf(Infinity);
190
193
  log.info("Stream: changing representation", adaptation.type, representation.id, representation.bitrate);
191
194
  return RepresentationStream({ playbackObserver: playbackObserver, content: { representation: representation, adaptation: adaptation, period: period, manifest: manifest }, segmentBuffer: segmentBuffer, segmentFetcher: segmentFetcher, terminate$: terminateCurrentStream$,
192
- options: { bufferGoal$: bufferGoal$, drmSystemId: options.drmSystemId, fastSwitchThreshold$: fastSwitchThreshold$ } })
195
+ options: { bufferGoal$: bufferGoal$, maxBufferSize$: maxBufferSize$, drmSystemId: options.drmSystemId, fastSwitchThreshold$: fastSwitchThreshold$ } })
193
196
  .pipe(catchError(function (err) {
194
197
  var formattedError = formatError(err, {
195
198
  defaultCode: "NONE",
@@ -15,8 +15,8 @@
15
15
  */
16
16
  import { Subject } from "rxjs";
17
17
  import { ICustomError } from "../../errors";
18
- import { Adaptation, ISegment, Period, Representation } from "../../manifest";
19
- import { IContentProtection } from "../eme";
18
+ import Manifest, { Adaptation, ISegment, Period, Representation } from "../../manifest";
19
+ import { IRepresentationProtectionData } from "../../manifest/representation";
20
20
  import { IBufferType } from "../segment_buffers";
21
21
  import { IActivePeriodChangedEvent, IAdaptationChangeEvent, IBitrateEstimationChangeEvent, ICompletedStreamEvent, IEncryptionDataEncounteredEvent, IEndOfStreamEvent, ILockedStreamEvent, INeedsBufferFlushEvent, INeedsDecipherabilityFlush, INeedsMediaSourceReload, IPeriodStreamClearedEvent, IPeriodStreamReadyEvent, IRepresentationChangeEvent, IResumeStreamEvent, IStreamEventAddedSegment, IStreamManifestMightBeOutOfSync, IStreamNeedsManifestRefresh, IStreamTerminatingEvent, IStreamWarningEvent, IWaitingMediaSourceReloadInternalEvent } from "./types";
22
22
  declare const EVENTS: {
@@ -52,7 +52,12 @@ declare const EVENTS: {
52
52
  needsDecipherabilityFlush(position: number, autoPlay: boolean, duration: number): INeedsDecipherabilityFlush;
53
53
  periodStreamReady(type: IBufferType, period: Period, adaptation$: Subject<Adaptation | null>): IPeriodStreamReadyEvent;
54
54
  periodStreamCleared(type: IBufferType, period: Period): IPeriodStreamClearedEvent;
55
- encryptionDataEncountered(initDataInfo: IContentProtection): IEncryptionDataEncounteredEvent;
55
+ encryptionDataEncountered(reprProtData: IRepresentationProtectionData, content: {
56
+ manifest: Manifest;
57
+ period: Period;
58
+ adaptation: Adaptation;
59
+ representation: Representation;
60
+ }): IEncryptionDataEncounteredEvent;
56
61
  representationChange(type: IBufferType, period: Period, representation: Representation): IRepresentationChangeEvent;
57
62
  streamTerminating(): IStreamTerminatingEvent;
58
63
  resumeStream(): IResumeStreamEvent;
@@ -13,6 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import objectAssign from "../../utils/object_assign";
16
17
  var EVENTS = {
17
18
  activePeriodChanged: function (period) {
18
19
  return { type: "activePeriodChanged",
@@ -84,9 +85,9 @@ var EVENTS = {
84
85
  return { type: "periodStreamCleared",
85
86
  value: { type: type, period: period } };
86
87
  },
87
- encryptionDataEncountered: function (initDataInfo) {
88
+ encryptionDataEncountered: function (reprProtData, content) {
88
89
  return { type: "encryption-data-encountered",
89
- value: initDataInfo };
90
+ value: objectAssign({ content: content }, reprProtData) };
90
91
  },
91
92
  representationChange: function (type, period, representation) {
92
93
  return { type: "representationChange",
@@ -26,6 +26,7 @@ export declare type IStreamOrchestratorPlaybackObservation = IPeriodStreamPlayba
26
26
  /** Options tweaking the behavior of the StreamOrchestrator. */
27
27
  export declare type IStreamOrchestratorOptions = IPeriodStreamOptions & {
28
28
  wantedBufferAhead: IReadOnlySharedReference<number>;
29
+ maxVideoBufferSize: IReadOnlySharedReference<number>;
29
30
  maxBufferAhead: IReadOnlySharedReference<number>;
30
31
  maxBufferBehind: IReadOnlySharedReference<number>;
31
32
  };
@@ -37,7 +37,6 @@ import PeriodStream from "../period";
37
37
  import ActivePeriodEmitter from "./active_period_emitter";
38
38
  import areStreamsComplete from "./are_streams_complete";
39
39
  import getBlacklistedRanges from "./get_blacklisted_ranges";
40
- var MAXIMUM_MAX_BUFFER_AHEAD = config.MAXIMUM_MAX_BUFFER_AHEAD, MAXIMUM_MAX_BUFFER_BEHIND = config.MAXIMUM_MAX_BUFFER_BEHIND;
41
40
  /**
42
41
  * Create and manage the various Stream Observables needed for the content to
43
42
  * play:
@@ -65,7 +64,8 @@ var MAXIMUM_MAX_BUFFER_AHEAD = config.MAXIMUM_MAX_BUFFER_AHEAD, MAXIMUM_MAX_BUFF
65
64
  */
66
65
  export default function StreamOrchestrator(content, playbackObserver, abrManager, segmentBuffersStore, segmentFetcherCreator, options) {
67
66
  var manifest = content.manifest, initialPeriod = content.initialPeriod;
68
- var maxBufferAhead = options.maxBufferAhead, maxBufferBehind = options.maxBufferBehind, wantedBufferAhead = options.wantedBufferAhead;
67
+ var maxBufferAhead = options.maxBufferAhead, maxBufferBehind = options.maxBufferBehind, wantedBufferAhead = options.wantedBufferAhead, maxVideoBufferSize = options.maxVideoBufferSize;
68
+ var _a = config.getCurrent(), MAXIMUM_MAX_BUFFER_AHEAD = _a.MAXIMUM_MAX_BUFFER_AHEAD, MAXIMUM_MAX_BUFFER_BEHIND = _a.MAXIMUM_MAX_BUFFER_BEHIND;
69
69
  // Keep track of a unique BufferGarbageCollector created per
70
70
  // SegmentBuffer.
71
71
  var garbageCollectors = new WeakMapMemory(function (segmentBuffer) {
@@ -315,7 +315,7 @@ export default function StreamOrchestrator(content, playbackObserver, abrManager
315
315
  );
316
316
  // Will emit when the current Stream should be destroyed.
317
317
  var killCurrentStream$ = observableMerge(endOfCurrentStream$, destroyAll$);
318
- var periodStream$ = PeriodStream({ abrManager: abrManager, bufferType: bufferType, content: { manifest: manifest, period: basePeriod }, garbageCollectors: garbageCollectors, segmentFetcherCreator: segmentFetcherCreator, segmentBuffersStore: segmentBuffersStore, options: options, playbackObserver: playbackObserver, wantedBufferAhead: wantedBufferAhead }).pipe(mergeMap(function (evt) {
318
+ var periodStream$ = PeriodStream({ abrManager: abrManager, bufferType: bufferType, content: { manifest: manifest, period: basePeriod }, garbageCollectors: garbageCollectors, segmentFetcherCreator: segmentFetcherCreator, segmentBuffersStore: segmentBuffersStore, options: options, playbackObserver: playbackObserver, wantedBufferAhead: wantedBufferAhead, maxVideoBufferSize: maxVideoBufferSize }).pipe(mergeMap(function (evt) {
319
319
  if (evt.type === "stream-status") {
320
320
  if (evt.value.hasFinishedLoading) {
321
321
  var nextPeriod = manifest.getPeriodAfter(basePeriod);
@@ -31,7 +31,8 @@ export default function createEmptyAdaptationStream(playbackObserver, wantedBuff
31
31
  var hasFinishedLoading = false;
32
32
  var wantedBufferAhead$ = wantedBufferAhead.asObservable();
33
33
  var observation$ = playbackObserver.observe(true);
34
- return observableCombineLatest([observation$, wantedBufferAhead$]).pipe(mergeMap(function (_a) {
34
+ return observableCombineLatest([observation$,
35
+ wantedBufferAhead$]).pipe(mergeMap(function (_a) {
35
36
  var observation = _a[0], wba = _a[1];
36
37
  var position = observation.position;
37
38
  if (period.end !== undefined && position + wba >= period.end) {
@@ -16,7 +16,6 @@
16
16
  import config from "../../../config";
17
17
  import areCodecsCompatible from "../../../utils/are_codecs_compatible";
18
18
  import { convertToRanges, excludeFromRanges, isTimeInRange, isTimeInRanges, keepRangeIntersection, } from "../../../utils/ranges";
19
- var ADAPTATION_SWITCH_BUFFER_PADDINGS = config.ADAPTATION_SWITCH_BUFFER_PADDINGS;
20
19
  /**
21
20
  * Find out what to do when switching Adaptation, based on the current
22
21
  * situation.
@@ -92,6 +91,7 @@ export default function getAdaptationSwitchStrategy(segmentBuffer, period, adapt
92
91
  }
93
92
  // Next, exclude data around current position to avoid decoding issues
94
93
  var bufferType = adaptation.type;
94
+ var ADAPTATION_SWITCH_BUFFER_PADDINGS = config.getCurrent().ADAPTATION_SWITCH_BUFFER_PADDINGS;
95
95
  /** Ranges that won't be cleaned from the current buffer. */
96
96
  var paddingBefore = ADAPTATION_SWITCH_BUFFER_PADDINGS[bufferType].before;
97
97
  if (paddingBefore == null) {
@@ -60,6 +60,7 @@ export interface IPeriodStreamArguments {
60
60
  playbackObserver: IReadOnlyPlaybackObserver<IPeriodStreamPlaybackObservation>;
61
61
  options: IPeriodStreamOptions;
62
62
  wantedBufferAhead: IReadOnlySharedReference<number>;
63
+ maxVideoBufferSize: IReadOnlySharedReference<number>;
63
64
  }
64
65
  /** Options tweaking the behavior of the PeriodStream. */
65
66
  export declare type IPeriodStreamOptions = IAdaptationStreamOptions & {
@@ -89,4 +90,4 @@ export declare type IPeriodStreamOptions = IAdaptationStreamOptions & {
89
90
  * @param {Object} args
90
91
  * @returns {Observable}
91
92
  */
92
- export default function PeriodStream({ abrManager, bufferType, content, garbageCollectors, playbackObserver, segmentFetcherCreator, segmentBuffersStore, options, wantedBufferAhead, }: IPeriodStreamArguments): Observable<IPeriodStreamEvent>;
93
+ export default function PeriodStream({ abrManager, bufferType, content, garbageCollectors, playbackObserver, segmentFetcherCreator, segmentBuffersStore, options, wantedBufferAhead, maxVideoBufferSize, }: IPeriodStreamArguments): Observable<IPeriodStreamEvent>;
@@ -25,7 +25,6 @@ import EVENTS from "../events_generators";
25
25
  import reloadAfterSwitch from "../reload_after_switch";
26
26
  import createEmptyStream from "./create_empty_adaptation_stream";
27
27
  import getAdaptationSwitchStrategy from "./get_adaptation_switch_strategy";
28
- var DELTA_POSITION_AFTER_RELOAD = config.DELTA_POSITION_AFTER_RELOAD;
29
28
  /**
30
29
  * Create single PeriodStream Observable:
31
30
  * - Lazily create (or reuse) a SegmentBuffer for the given type.
@@ -37,7 +36,7 @@ var DELTA_POSITION_AFTER_RELOAD = config.DELTA_POSITION_AFTER_RELOAD;
37
36
  * @returns {Observable}
38
37
  */
39
38
  export default function PeriodStream(_a) {
40
- var abrManager = _a.abrManager, bufferType = _a.bufferType, content = _a.content, garbageCollectors = _a.garbageCollectors, playbackObserver = _a.playbackObserver, segmentFetcherCreator = _a.segmentFetcherCreator, segmentBuffersStore = _a.segmentBuffersStore, options = _a.options, wantedBufferAhead = _a.wantedBufferAhead;
39
+ var abrManager = _a.abrManager, bufferType = _a.bufferType, content = _a.content, garbageCollectors = _a.garbageCollectors, playbackObserver = _a.playbackObserver, segmentFetcherCreator = _a.segmentFetcherCreator, segmentBuffersStore = _a.segmentBuffersStore, options = _a.options, wantedBufferAhead = _a.wantedBufferAhead, maxVideoBufferSize = _a.maxVideoBufferSize;
41
40
  var period = content.period;
42
41
  // Emits the chosen Adaptation for the current type.
43
42
  // `null` when no Adaptation is chosen (e.g. no subtitles)
@@ -50,6 +49,7 @@ export default function PeriodStream(_a) {
50
49
  * This value contains this relative position, in seconds.
51
50
  * @see reloadAfterSwitch
52
51
  */
52
+ var DELTA_POSITION_AFTER_RELOAD = config.getCurrent().DELTA_POSITION_AFTER_RELOAD;
53
53
  var relativePosAfterSwitch = switchNb === 0 ? 0 :
54
54
  bufferType === "audio" ? DELTA_POSITION_AFTER_RELOAD.trackSwitch.audio :
55
55
  bufferType === "video" ? DELTA_POSITION_AFTER_RELOAD.trackSwitch.video :
@@ -118,7 +118,7 @@ export default function PeriodStream(_a) {
118
118
  function createAdaptationStream(adaptation, segmentBuffer) {
119
119
  var manifest = content.manifest;
120
120
  var adaptationPlaybackObserver = createAdaptationStreamPlaybackObserver(playbackObserver, segmentBuffer);
121
- return AdaptationStream({ abrManager: abrManager, content: { manifest: manifest, period: period, adaptation: adaptation }, options: options, playbackObserver: adaptationPlaybackObserver, segmentBuffer: segmentBuffer, segmentFetcherCreator: segmentFetcherCreator, wantedBufferAhead: wantedBufferAhead }).pipe(catchError(function (error) {
121
+ return AdaptationStream({ abrManager: abrManager, content: { manifest: manifest, period: period, adaptation: adaptation }, options: options, playbackObserver: adaptationPlaybackObserver, segmentBuffer: segmentBuffer, segmentFetcherCreator: segmentFetcherCreator, wantedBufferAhead: wantedBufferAhead, maxVideoBufferSize: maxVideoBufferSize }).pipe(catchError(function (error) {
122
122
  // Stream linked to a non-native media buffer should not impact the
123
123
  // stability of the player. ie: if a text buffer sends an error, we want
124
124
  // to continue playing without any subtitles
@@ -17,8 +17,6 @@ import { concatAll, defer as observableDefer, from as observableFrom, } from "rx
17
17
  import config from "../../../config";
18
18
  import log from "../../../log";
19
19
  import { getInnerAndOuterTimeRanges } from "../../../utils/ranges";
20
- var GC_GAP_CALM = config.BUFFER_GC_GAPS.CALM;
21
- var GC_GAP_BEEFY = config.BUFFER_GC_GAPS.BEEFY;
22
20
  /**
23
21
  * Run the garbage collector.
24
22
  *
@@ -31,6 +29,8 @@ var GC_GAP_BEEFY = config.BUFFER_GC_GAPS.BEEFY;
31
29
  */
32
30
  export default function forceGarbageCollection(currentPosition, bufferingQueue) {
33
31
  return observableDefer(function () {
32
+ var GC_GAP_CALM = config.getCurrent().BUFFER_GC_GAPS.CALM;
33
+ var GC_GAP_BEEFY = config.getCurrent().BUFFER_GC_GAPS.BEEFY;
34
34
  log.warn("Stream: Running garbage collector");
35
35
  var buffered = bufferingQueue.getBufferedRanges();
36
36
  var cleanedupRanges = selectGCedRanges(currentPosition, buffered, GC_GAP_CALM);
@@ -63,18 +63,17 @@ function selectGCedRanges(position, buffered, gcGap) {
63
63
  var cleanedupRanges = [];
64
64
  // start by trying to remove all ranges that do not contain the
65
65
  // current time and respect the gcGap
66
- // respect the gcGap? FIXME?
67
66
  for (var i = 0; i < outerRanges.length; i++) {
68
67
  var outerRange = outerRanges[i];
69
- if (position - gcGap < outerRange.end) {
68
+ if (position - gcGap > outerRange.end) {
70
69
  cleanedupRanges.push(outerRange);
71
70
  }
72
- else if (position + gcGap > outerRange.start) {
71
+ else if (position + gcGap < outerRange.start) {
73
72
  cleanedupRanges.push(outerRange);
74
73
  }
75
74
  }
76
75
  // try to clean up some space in the current range
77
- if (innerRange != null) {
76
+ if (innerRange !== null) {
78
77
  log.debug("Stream: GC removing part of inner range", cleanedupRanges);
79
78
  if (position - gcGap > innerRange.start) {
80
79
  cleanedupRanges.push({ start: innerRange.start,
@@ -42,6 +42,11 @@ export interface IBufferStatus {
42
42
  * on which segments should be loaded.
43
43
  */
44
44
  shouldRefreshManifest: boolean;
45
+ /**
46
+ * If 'true', the buffer memory is saturated before being able to download
47
+ * at least MIN_REQUIRED_BUFFER_AHEAD ( default : 10sec )
48
+ */
49
+ isBufferFull: boolean;
45
50
  }
46
51
  /**
47
52
  * Checks on the current buffered data for the given type and Period
@@ -62,4 +67,4 @@ export default function getBufferStatus(content: {
62
67
  manifest: Manifest;
63
68
  period: Period;
64
69
  representation: Representation;
65
- }, wantedStartPosition: number, playbackObserver: IReadOnlyPlaybackObserver<unknown>, fastSwitchThreshold: number | undefined, bufferGoal: number, segmentBuffer: SegmentBuffer): IBufferStatus;
70
+ }, wantedStartPosition: number, playbackObserver: IReadOnlyPlaybackObserver<unknown>, fastSwitchThreshold: number | undefined, bufferGoal: number, maxBufferSize: number, segmentBuffer: SegmentBuffer): IBufferStatus;