rx-player 3.26.3-dev.2022021400 → 3.27.0-dev.2022032100

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 (400) hide show
  1. package/.eslintrc.js +0 -4
  2. package/CHANGELOG.md +17 -2
  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 +143 -36
  9. package/dist/_esm5.processed/compat/eme/custom_key_system_access.d.ts +15 -0
  10. package/dist/_esm5.processed/compat/eme/custom_key_system_access.js +1 -17
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +6 -7
  12. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
  13. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +20 -22
  14. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +58 -40
  15. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +49 -48
  16. package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
  17. package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
  18. package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
  19. package/dist/_esm5.processed/compat/eme/load_session.js +67 -17
  20. package/dist/_esm5.processed/compat/event_listeners.js +2 -1
  21. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
  22. package/dist/_esm5.processed/config.d.ts +166 -1080
  23. package/dist/_esm5.processed/config.js +17 -1119
  24. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
  25. package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
  26. package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
  27. package/dist/_esm5.processed/core/api/index.d.ts +2 -1
  28. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +2 -1
  29. package/dist/_esm5.processed/core/api/option_utils.d.ts +6 -3
  30. package/dist/_esm5.processed/core/api/option_utils.js +21 -7
  31. package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
  32. package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
  33. package/dist/_esm5.processed/core/api/public_api.js +73 -35
  34. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -49
  35. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +25 -65
  36. package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
  37. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +103 -0
  38. package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
  39. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +40 -0
  40. package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
  41. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +865 -0
  42. package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
  43. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
  44. package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
  45. package/dist/_esm5.processed/core/decrypt/create_session.js +173 -0
  46. package/dist/_esm5.processed/core/{eme/dispose_media_keys.d.ts → decrypt/dispose_decryption_resources.d.ts} +4 -4
  47. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
  48. package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
  49. package/dist/_esm5.processed/core/decrypt/find_key_system.js +299 -0
  50. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
  51. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
  52. package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
  53. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
  54. package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
  55. package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
  56. package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
  57. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
  58. package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
  59. package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
  60. package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
  61. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
  62. package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +119 -241
  63. package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
  64. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
  65. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
  66. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
  67. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
  68. package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
  69. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +84 -0
  70. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
  71. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
  72. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
  73. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
  74. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
  75. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
  76. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
  77. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
  78. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
  79. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
  80. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
  81. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
  82. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
  83. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +302 -0
  84. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
  85. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
  86. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
  87. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
  88. package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
  89. package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
  90. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
  91. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
  92. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -5
  93. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +1 -1
  94. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  95. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +2 -3
  96. package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
  97. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +1 -1
  98. package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
  99. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +6 -3
  100. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
  101. package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
  102. package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
  103. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
  104. package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
  105. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
  106. package/dist/_esm5.processed/core/init/types.d.ts +2 -4
  107. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
  108. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
  109. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
  110. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
  111. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
  112. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
  113. package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
  114. package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
  115. package/dist/_esm5.processed/core/stream/index.d.ts +1 -0
  116. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
  117. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
  118. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
  119. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.d.ts +15 -11
  120. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +6 -3
  121. package/dist/_esm5.processed/core/stream/period/index.d.ts +1 -0
  122. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +5 -12
  123. package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
  124. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +2 -2
  125. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
  126. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
  127. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
  128. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
  129. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
  130. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
  131. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
  132. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
  133. package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
  134. package/dist/_esm5.processed/default_config.d.ts +1114 -0
  135. package/dist/_esm5.processed/default_config.js +1145 -0
  136. package/dist/_esm5.processed/experimental/index.d.ts +2 -0
  137. package/dist/_esm5.processed/experimental/index.js +2 -0
  138. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
  139. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +6 -7
  140. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.js +2 -3
  141. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +15 -0
  142. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -2
  143. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +3 -5
  144. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +3 -5
  145. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +1 -2
  146. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.js +1 -2
  147. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.js +1 -2
  148. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -2
  149. package/dist/_esm5.processed/features/features_object.js +1 -1
  150. package/dist/_esm5.processed/features/initialize_features.js +1 -1
  151. package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
  152. package/dist/_esm5.processed/features/list/eme.js +5 -5
  153. package/dist/_esm5.processed/features/types.d.ts +3 -3
  154. package/dist/_esm5.processed/manifest/manifest.d.ts +1 -14
  155. package/dist/_esm5.processed/manifest/manifest.js +10 -74
  156. package/dist/_esm5.processed/manifest/representation.d.ts +35 -3
  157. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
  158. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
  159. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +1 -1
  160. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +87 -75
  161. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
  162. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +4 -5
  163. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
  164. package/dist/_esm5.processed/public_types.d.ts +3 -2
  165. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +1 -2
  166. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +4 -3
  167. package/dist/_esm5.processed/transports/dash/image_pipelines.js +60 -11
  168. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -2
  169. package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
  170. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +1 -1
  171. package/dist/_esm5.processed/transports/dash/segment_loader.js +3 -4
  172. package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
  173. package/dist/_esm5.processed/transports/dash/text_loader.js +1 -2
  174. package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
  175. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -3
  176. package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
  177. package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
  178. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +2 -3
  179. package/dist/_esm5.processed/transports/smooth/pipelines.js +71 -14
  180. package/dist/_esm5.processed/transports/smooth/segment_loader.js +3 -4
  181. package/dist/_esm5.processed/transports/types.d.ts +22 -0
  182. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -2
  183. package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -2
  184. package/dist/_esm5.processed/utils/cast_to_observable.js +1 -3
  185. package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
  186. package/dist/_esm5.processed/utils/deep_merge.js +53 -0
  187. package/dist/_esm5.processed/utils/reference.d.ts +29 -0
  188. package/dist/_esm5.processed/utils/reference.js +72 -24
  189. package/dist/_esm5.processed/utils/request/fetch.js +1 -2
  190. package/dist/_esm5.processed/utils/request/xhr.js +2 -3
  191. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
  192. package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
  193. package/dist/_esm5.processed/utils/task_canceller.js +3 -3
  194. package/dist/rx-player.js +4936 -3340
  195. package/dist/rx-player.min.js +1 -1
  196. package/dummy +1 -0
  197. package/{dist/_esm5.processed/utils/promise.d.ts → experimental/index.d.ts} +1 -2
  198. package/{dist/_esm5.processed/utils/promise.js → experimental/index.js} +1 -3
  199. package/package.json +32 -35
  200. package/{src/typings/pinkie.d.ts → scripts/build/templates/experimental/index.d.ts} +1 -4
  201. package/scripts/build/templates/experimental/index.js +16 -0
  202. package/scripts/update-version +2 -2
  203. package/sonar-project.properties +1 -1
  204. package/src/README.md +6 -6
  205. package/src/compat/__tests__/play.test.ts +2 -4
  206. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
  207. package/src/compat/browser_detection.ts +4 -2
  208. package/src/compat/eme/close_session.ts +89 -56
  209. package/src/compat/eme/custom_key_system_access.ts +1 -2
  210. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +6 -7
  211. package/src/compat/eme/custom_media_keys/index.ts +20 -38
  212. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +68 -52
  213. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +57 -56
  214. package/src/compat/eme/generate_key_request.ts +25 -33
  215. package/src/compat/eme/load_session.ts +28 -31
  216. package/src/compat/event_listeners.ts +2 -1
  217. package/src/compat/should_favour_custom_safari_EME.ts +5 -2
  218. package/src/config.ts +17 -1210
  219. package/src/core/README.md +1 -1
  220. package/src/core/abr/bandwidth_estimator.ts +4 -4
  221. package/src/core/abr/network_analyzer.ts +5 -6
  222. package/src/core/api/__tests__/get_player_state.test.ts +3 -3
  223. package/src/core/api/__tests__/option_utils.test.ts +29 -17
  224. package/src/core/api/get_player_state.ts +1 -1
  225. package/src/core/api/index.ts +3 -0
  226. package/src/core/api/option_utils.ts +42 -23
  227. package/src/core/api/playback_observer.ts +12 -8
  228. package/src/core/api/public_api.ts +152 -113
  229. package/src/core/decrypt/README.md +22 -0
  230. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
  231. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
  232. package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
  233. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
  234. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
  235. package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +31 -93
  236. package/src/core/{eme → decrypt}/attach_media_keys.ts +48 -56
  237. package/src/core/decrypt/clear_on_stop.ts +47 -0
  238. package/src/core/decrypt/content_decryptor.ts +1157 -0
  239. package/src/core/decrypt/create_or_load_session.ts +130 -0
  240. package/src/core/decrypt/create_session.ts +174 -0
  241. package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
  242. package/src/core/{eme → decrypt}/find_key_system.ts +111 -122
  243. package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
  244. package/src/core/decrypt/get_media_keys.ts +145 -0
  245. package/src/core/{eme → decrypt}/index.ts +11 -8
  246. package/src/core/decrypt/init_media_keys.ts +51 -0
  247. package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
  248. package/src/core/decrypt/set_server_certificate.ts +104 -0
  249. package/src/core/{eme → decrypt}/types.ts +128 -258
  250. package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
  251. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
  252. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
  253. package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
  254. package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
  255. package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +19 -20
  256. package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
  257. package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
  258. package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
  259. package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
  260. package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
  261. package/src/core/decrypt/utils/key_session_record.ts +175 -0
  262. package/src/core/decrypt/utils/loaded_sessions_store.ts +317 -0
  263. package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
  264. package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
  265. package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
  266. package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
  267. package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -7
  268. package/src/core/fetchers/segment/segment_fetcher.ts +4 -4
  269. package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
  270. package/src/core/fetchers/utils/try_urls_with_backoff.ts +2 -3
  271. package/src/core/init/.initialize_media_source.ts.un~ +0 -0
  272. package/src/core/init/get_initial_time.ts +2 -1
  273. package/src/core/init/initialize_directfile.ts +17 -20
  274. package/src/core/init/initialize_media_source.ts +44 -106
  275. package/src/core/init/link_drm_and_content.ts +176 -0
  276. package/src/core/init/manifest_update_scheduler.ts +5 -3
  277. package/src/core/init/stall_avoider.ts +6 -5
  278. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
  279. package/src/core/init/types.ts +1 -39
  280. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
  281. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +3 -4
  282. package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
  283. package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
  284. package/src/core/stream/events_generators.ts +9 -4
  285. package/src/core/stream/index.ts +1 -0
  286. package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
  287. package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
  288. package/src/core/stream/period/get_adaptation_switch_strategy.ts +25 -15
  289. package/src/core/stream/period/index.ts +1 -0
  290. package/src/core/stream/period/period_stream.ts +10 -16
  291. package/src/core/stream/representation/force_garbage_collection.ts +2 -2
  292. package/src/core/stream/representation/get_buffer_status.ts +28 -16
  293. package/src/core/stream/representation/get_needed_segments.ts +124 -28
  294. package/src/core/stream/representation/get_segment_priority.ts +1 -2
  295. package/src/core/stream/representation/push_media_segment.ts +3 -2
  296. package/src/core/stream/representation/representation_stream.ts +30 -7
  297. package/src/core/stream/types.ts +1 -1
  298. package/src/default_config.ts +1241 -0
  299. package/src/experimental/index.ts +5 -0
  300. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
  301. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +7 -7
  302. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
  303. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +9 -10
  304. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +2 -4
  305. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +2 -3
  306. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +1 -2
  307. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +3 -5
  308. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +3 -5
  309. package/src/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.ts +1 -2
  310. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.ts +1 -2
  311. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts +1 -2
  312. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.ts +1 -2
  313. package/src/features/__tests__/initialize_features.test.ts +2 -2
  314. package/src/features/features_object.ts +1 -1
  315. package/src/features/initialize_features.ts +1 -1
  316. package/src/features/list/__tests__/eme.test.ts +5 -5
  317. package/src/features/list/eme.ts +5 -5
  318. package/src/features/types.ts +3 -10
  319. package/src/manifest/manifest.ts +6 -76
  320. package/src/manifest/representation.ts +36 -3
  321. package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
  322. package/src/parsers/manifest/dash/common/indexes/template.ts +1 -2
  323. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +1 -1
  324. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +109 -64
  325. package/src/parsers/manifest/dash/common/parse_mpd.ts +1 -2
  326. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +4 -5
  327. package/src/parsers/manifest/smooth/create_parser.ts +1 -0
  328. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
  329. package/src/public_types.ts +6 -1
  330. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +1 -2
  331. package/src/transports/dash/image_pipelines.ts +15 -14
  332. package/src/transports/dash/init_segment_loader.ts +1 -2
  333. package/src/transports/dash/manifest_parser.ts +2 -3
  334. package/src/transports/dash/segment_loader.ts +4 -5
  335. package/src/transports/dash/segment_parser.ts +5 -0
  336. package/src/transports/dash/text_loader.ts +2 -3
  337. package/src/transports/dash/text_parser.ts +8 -0
  338. package/src/transports/local/segment_loader.ts +2 -3
  339. package/src/transports/local/segment_parser.ts +4 -0
  340. package/src/transports/local/text_parser.ts +8 -0
  341. package/src/transports/metaplaylist/pipelines.ts +2 -3
  342. package/src/transports/smooth/pipelines.ts +26 -14
  343. package/src/transports/smooth/segment_loader.ts +5 -6
  344. package/src/transports/types.ts +22 -0
  345. package/src/transports/utils/call_custom_manifest_loader.ts +1 -2
  346. package/src/utils/__tests__/deep_merge.test.ts +48 -0
  347. package/src/utils/cancellable_sleep.ts +1 -2
  348. package/src/utils/cast_to_observable.ts +0 -2
  349. package/src/utils/deep_merge.ts +46 -0
  350. package/src/utils/reference.ts +116 -23
  351. package/src/utils/request/fetch.ts +1 -2
  352. package/src/utils/request/xhr.ts +3 -3
  353. package/src/utils/rx-from_cancellable_promise.ts +7 -2
  354. package/src/utils/task_canceller.ts +6 -4
  355. package/tsconfig.json +0 -1
  356. package/tsconfig.modules.json +0 -1
  357. package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
  358. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
  359. package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
  360. package/dist/_esm5.processed/core/eme/create_session.js +0 -126
  361. package/dist/_esm5.processed/core/eme/dispose_eme.d.ts +0 -19
  362. package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
  363. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
  364. package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
  365. package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
  366. package/dist/_esm5.processed/core/eme/find_key_system.js +0 -253
  367. package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
  368. package/dist/_esm5.processed/core/eme/get_session.js +0 -68
  369. package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
  370. package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
  371. package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
  372. package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
  373. package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
  374. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
  375. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
  376. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
  377. package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
  378. package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
  379. package/src/core/eme/README.md +0 -26
  380. package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
  381. package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
  382. package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
  383. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
  384. package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
  385. package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
  386. package/src/core/eme/clear_eme_session.ts +0 -62
  387. package/src/core/eme/create_session.ts +0 -187
  388. package/src/core/eme/dispose_eme.ts +0 -25
  389. package/src/core/eme/dispose_media_keys.ts +0 -46
  390. package/src/core/eme/eme_manager.ts +0 -387
  391. package/src/core/eme/get_media_keys.ts +0 -141
  392. package/src/core/eme/get_session.ts +0 -135
  393. package/src/core/eme/init_media_keys.ts +0 -106
  394. package/src/core/eme/set_server_certificate.ts +0 -115
  395. package/src/core/eme/utils/close_session.ts +0 -113
  396. package/src/core/eme/utils/init_data_store.ts +0 -234
  397. package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
  398. package/src/core/init/create_eme_manager.ts +0 -95
  399. package/src/utils/__tests__/promise.test.ts +0 -23
  400. package/src/utils/promise.ts +0 -20
@@ -13,7 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { combineLatest as observableCombineLatest, EMPTY, exhaustMap, filter, finalize, ignoreElements, map, merge as observableMerge, mergeMap, mergeScan, of as observableOf, share, shareReplay, startWith, Subject, switchMap, take, takeUntil, tap, } from "rxjs";
16
+ import { combineLatest as observableCombineLatest, filter, finalize, ignoreElements, map, merge as observableMerge, mergeMap, of as observableOf, share, shareReplay, startWith, Subject, switchMap, take, takeUntil, } from "rxjs";
17
17
  import { shouldReloadMediaSourceOnDecipherabilityUpdate } from "../../compat";
18
18
  import config from "../../config";
19
19
  import log from "../../log";
@@ -22,15 +22,14 @@ import { fromEvent } from "../../utils/event_emitter";
22
22
  import filterMap from "../../utils/filter_map";
23
23
  import objectAssign from "../../utils/object_assign";
24
24
  import ABRManager from "../abr";
25
- import { getCurrentKeySystem, } from "../eme";
26
- import createEMEManager from "./create_eme_manager";
25
+ import { getCurrentKeySystem, } from "../decrypt";
27
26
  import openMediaSource from "./create_media_source";
28
27
  import EVENTS from "./events_generators";
29
28
  import getInitialTime from "./get_initial_time";
29
+ import linkDrmAndContent from "./link_drm_and_content";
30
30
  import createMediaSourceLoader from "./load_on_media_source";
31
31
  import manifestUpdateScheduler from "./manifest_update_scheduler";
32
32
  import throwOnMediaError from "./throw_on_media_error";
33
- var OUT_OF_SYNC_MANIFEST_REFRESH_DELAY = config.OUT_OF_SYNC_MANIFEST_REFRESH_DELAY;
34
33
  /**
35
34
  * Begin content playback.
36
35
  *
@@ -43,7 +42,7 @@ var OUT_OF_SYNC_MANIFEST_REFRESH_DELAY = config.OUT_OF_SYNC_MANIFEST_REFRESH_DEL
43
42
  *
44
43
  * - download the content's Manifest and handle its refresh logic
45
44
  *
46
- * - Perform EME management if needed
45
+ * - Perform decryption if needed
47
46
  *
48
47
  * - ask for the choice of the wanted Adaptation through events (e.g. to
49
48
  * choose a language)
@@ -74,20 +73,21 @@ export default function InitializeOnMediaSource(_a) {
74
73
  * The MediaSource will be closed when subscriptions are down to 0.
75
74
  */
76
75
  var openMediaSource$ = openMediaSource(mediaElement).pipe(shareReplay({ refCount: true }));
77
- /** Send content protection data to the `EMEManager`. */
76
+ /** Send content protection initialization data. */
78
77
  var protectedSegments$ = new Subject();
79
- /** Create `EMEManager`, an observable which will handle content DRM. */
80
- var emeManager$ = createEMEManager(mediaElement, keySystems, protectedSegments$).pipe(
78
+ /** Initialize decryption capabilities and MediaSource. */
79
+ var drmEvents$ = linkDrmAndContent(mediaElement, keySystems, protectedSegments$, openMediaSource$)
80
+ .pipe(
81
81
  // Because multiple Observables here depend on this Observable as a source,
82
82
  // we prefer deferring Subscription until those Observables are themselves
83
83
  // all subscribed to.
84
- // This is needed because `emeManager$` might send events synchronously
84
+ // This is needed because `drmEvents$` might send events synchronously
85
85
  // on subscription. In that case, it might communicate those events directly
86
86
  // after the first Subscription is done, making the next subscription miss
87
87
  // out on those events, even if that second subscription is done
88
88
  // synchronously after the first one.
89
89
  // By calling `deferSubscriptions`, we ensure that subscription to
90
- // `emeManager$` effectively starts after a very short delay, thus
90
+ // `drmEvents$` effectively starts after a very short delay, thus
91
91
  // ensuring that no such race condition can occur.
92
92
  deferSubscriptions(), share());
93
93
  /**
@@ -95,53 +95,16 @@ export default function InitializeOnMediaSource(_a) {
95
95
  * through a throwing Observable.
96
96
  */
97
97
  var mediaError$ = throwOnMediaError(mediaElement);
98
- /**
99
- * Wait for the MediaKeys to have been created before opening the MediaSource,
100
- * after that second step is done, ask the EMEManager to attach the MediaKeys.
101
- * Steps are done in that specific order to avoid compatibility issues.
102
- *
103
- * This Observable will emit when ready both the MediaSource and useful
104
- * DRM-specific information.
105
- */
106
- var prepareMediaSource$ = emeManager$.pipe(mergeScan(function (acc, evt) {
107
- switch (evt.type) {
108
- case "eme-disabled":
109
- case "attached-media-keys":
110
- return observableOf({ isEmeReady: true,
111
- drmSystemId: acc.drmSystemId });
112
- case "created-media-keys":
113
- var drmSystemId_1 = evt.value.initializationDataSystemId;
114
- return openMediaSource$.pipe(mergeMap(function () {
115
- // Now that the MediaSource has been opened and linked to the media
116
- // element we can attach the MediaKeys instance to the latter.
117
- evt.value.canAttachMediaKeys.setValue(true);
118
- // If the `disableMediaKeysAttachmentLock` option has been set to
119
- // `true`, we should not wait until the MediaKeys instance has been
120
- // attached to start loading the content.
121
- // TODO we may want to keep keySystems option knowledge in the EME
122
- // code
123
- var shouldDisableLock = evt.value.options
124
- .disableMediaKeysAttachmentLock === true;
125
- return shouldDisableLock ? observableOf({ isEmeReady: true, drmSystemId: drmSystemId_1 }) :
126
- EMPTY;
127
- }), startWith({ isEmeReady: false, drmSystemId: drmSystemId_1 }));
128
- default:
129
- return EMPTY;
130
- }
131
- }, { isEmeReady: false, drmSystemId: undefined }), filter(function (emitted) { return emitted.isEmeReady; }), take(1), exhaustMap(function (_a) {
132
- var drmSystemId = _a.drmSystemId;
133
- return openMediaSource$
134
- .pipe(map(function (mediaSource) { return ({ mediaSource: mediaSource, drmSystemId: drmSystemId }); }));
135
- }));
98
+ var mediaSourceReady$ = drmEvents$.pipe(filter(function (evt) {
99
+ return evt.type === "decryption-ready" || evt.type === "decryption-disabled";
100
+ }), map(function (e) { return e.value; }), take(1));
136
101
  /** Load and play the content asked. */
137
- var loadContent$ = observableCombineLatest([manifest$,
138
- prepareMediaSource$]).pipe(mergeMap(function (_a) {
139
- var manifestEvt = _a[0], mediaSourceInfo = _a[1];
102
+ var loadContent$ = observableCombineLatest([manifest$, mediaSourceReady$]).pipe(mergeMap(function (_a) {
103
+ var manifestEvt = _a[0], _b = _a[1], drmSystemId = _b.drmSystemId, initialMediaSource = _b.mediaSource;
140
104
  if (manifestEvt.type === "warning") {
141
105
  return observableOf(manifestEvt);
142
106
  }
143
107
  var manifest = manifestEvt.manifest;
144
- var initialMediaSource = mediaSourceInfo.mediaSource, drmSystemId = mediaSourceInfo.drmSystemId;
145
108
  log.debug("Init: Calculating initial time");
146
109
  var initialTime = getInitialTime(manifest, lowLatencyMode, startAt);
147
110
  log.debug("Init: Initial time calculated:", initialTime);
@@ -162,22 +125,7 @@ export default function InitializeOnMediaSource(_a) {
162
125
  var manifestEvents$ = observableMerge(fromEvent(manifest, "manifestUpdate")
163
126
  .pipe(map(function () { return EVENTS.manifestUpdate(); })), fromEvent(manifest, "decipherabilityUpdate")
164
127
  .pipe(map(EVENTS.decipherabilityUpdate)));
165
- var setUndecipherableRepresentations$ = emeManager$.pipe(tap(function (evt) {
166
- if (evt.type === "keys-update") {
167
- manifest.updateDeciperabilitiesBasedOnKeyIds(evt.value);
168
- }
169
- else if (evt.type === "blacklist-protection-data") {
170
- log.info("Init: blacklisting Representations based on protection data.");
171
- manifest.addUndecipherableProtectionData(evt.value);
172
- }
173
- }),
174
- // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
175
- // first type parameter as `any` instead of the perfectly fine `unknown`,
176
- // leading to linter issues, as it forbids the usage of `any`.
177
- // This is why we're disabling the eslint rule.
178
- /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
179
- ignoreElements());
180
- return observableMerge(manifestEvents$, manifestUpdate$, setUndecipherableRepresentations$, recursiveLoad$)
128
+ return observableMerge(manifestEvents$, manifestUpdate$, recursiveLoad$)
181
129
  .pipe(startWith(EVENTS.manifestReady(manifest)), finalize(function () { scheduleRefresh$.complete(); }));
182
130
  /**
183
131
  * Load the content defined by the Manifest in the mediaSource given at the
@@ -199,6 +147,7 @@ export default function InitializeOnMediaSource(_a) {
199
147
  canUseUnsafeMode: true });
200
148
  return null;
201
149
  case "manifest-might-be-out-of-sync":
150
+ var OUT_OF_SYNC_MANIFEST_REFRESH_DELAY = config.getCurrent().OUT_OF_SYNC_MANIFEST_REFRESH_DELAY;
202
151
  scheduleRefresh$.next({
203
152
  completeRefresh: true,
204
153
  canUseUnsafeMode: false,
@@ -240,5 +189,5 @@ export default function InitializeOnMediaSource(_a) {
240
189
  return observableMerge(handleReloads$, currentLoad$);
241
190
  }
242
191
  }));
243
- return observableMerge(loadContent$, mediaError$, emeManager$);
192
+ return observableMerge(loadContent$, mediaError$, drmEvents$.pipe(ignoreElements()));
244
193
  }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Copyright 2015 CANAL+ Group
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Observable } from "rxjs";
17
+ import { IContentProtection, IKeySystemOption } from "../decrypt";
18
+ import { IWarningEvent } from "./types";
19
+ /**
20
+ * @param {HTMLMediaElement} mediaElement
21
+ * @param {Array.<Object>} keySystems
22
+ * @param {Observable<Object>} contentProtections$
23
+ * @param {Promise} linkingMedia$
24
+ * @returns {Observable}
25
+ */
26
+ export default function linkDrmAndContent<T>(mediaElement: HTMLMediaElement, keySystems: IKeySystemOption[], contentProtections$: Observable<IContentProtection>, linkingMedia$: Observable<T>): Observable<IContentDecryptorInitEvent<T>>;
27
+ export declare type IContentDecryptorInitEvent<T> = IDecryptionDisabledEvent<T> | IDecryptionReadyEvent<T> | IWarningEvent;
28
+ /**
29
+ * Event emitted after deciding that no decryption logic will be launched for
30
+ * the current content.
31
+ */
32
+ export interface IDecryptionDisabledEvent<T> {
33
+ type: "decryption-disabled";
34
+ value: {
35
+ /**
36
+ * Identify the current DRM's system ID.
37
+ * Here `undefined` as no decryption capability has been added.
38
+ */
39
+ drmSystemId: undefined;
40
+ /** The value outputed by the `linkingMedia$` Observable. */
41
+ mediaSource: T;
42
+ };
43
+ }
44
+ /**
45
+ * Event emitted when decryption capabilities have started and content can
46
+ * begin to be pushed on the HTMLMediaElement.
47
+ */
48
+ export interface IDecryptionReadyEvent<T> {
49
+ type: "decryption-ready";
50
+ value: {
51
+ /**
52
+ * Identify the current DRM's systemId as an hexadecimal string, so the
53
+ * RxPlayer may be able to (optionally) only send the corresponding
54
+ * encryption initialization data.
55
+ * `undefined` if unknown.
56
+ */
57
+ drmSystemId: string | undefined;
58
+ /** The value outputed by the `linkingMedia$` Observable. */
59
+ mediaSource: T;
60
+ };
61
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Copyright 2015 CANAL+ Group
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { map, merge as observableMerge, Observable, } from "rxjs";
17
+ import { events, hasEMEAPIs, } from "../../compat/";
18
+ import { EncryptedMediaError } from "../../errors";
19
+ import features from "../../features";
20
+ import log from "../../log";
21
+ import { ContentDecryptorState, } from "../decrypt";
22
+ var onEncrypted$ = events.onEncrypted$;
23
+ /**
24
+ * @param {HTMLMediaElement} mediaElement
25
+ * @param {Array.<Object>} keySystems
26
+ * @param {Observable<Object>} contentProtections$
27
+ * @param {Promise} linkingMedia$
28
+ * @returns {Observable}
29
+ */
30
+ export default function linkDrmAndContent(mediaElement, keySystems, contentProtections$, linkingMedia$) {
31
+ var encryptedEvents$ = observableMerge(onEncrypted$(mediaElement), contentProtections$);
32
+ if (features.ContentDecryptor == null) {
33
+ return observableMerge(encryptedEvents$.pipe(map(function () {
34
+ log.error("Init: Encrypted event but EME feature not activated");
35
+ throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR", "EME feature not activated.");
36
+ })), linkingMedia$.pipe(map(function (mediaSource) { return ({
37
+ type: "decryption-disabled",
38
+ value: { drmSystemId: undefined, mediaSource: mediaSource },
39
+ }); })));
40
+ }
41
+ if (keySystems.length === 0) {
42
+ return observableMerge(encryptedEvents$.pipe(map(function () {
43
+ log.error("Init: Ciphered media and no keySystem passed");
44
+ throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR", "Media is encrypted and no `keySystems` given");
45
+ })), linkingMedia$.pipe(map(function (mediaSource) { return ({
46
+ type: "decryption-disabled",
47
+ value: { drmSystemId: undefined, mediaSource: mediaSource },
48
+ }); })));
49
+ }
50
+ if (!hasEMEAPIs()) {
51
+ return observableMerge(encryptedEvents$.pipe(map(function () {
52
+ log.error("Init: Encrypted event but no EME API available");
53
+ throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR", "Encryption APIs not found.");
54
+ })), linkingMedia$.pipe(map(function (mediaSource) { return ({
55
+ type: "decryption-disabled",
56
+ value: { drmSystemId: undefined, mediaSource: mediaSource },
57
+ }); })));
58
+ }
59
+ log.debug("Init: Creating ContentDecryptor");
60
+ var ContentDecryptor = features.ContentDecryptor;
61
+ return new Observable(function (obs) {
62
+ var contentDecryptor = new ContentDecryptor(mediaElement, keySystems);
63
+ var mediaSub;
64
+ contentDecryptor.addEventListener("stateChange", function (state) {
65
+ if (state === ContentDecryptorState.WaitingForAttachment) {
66
+ contentDecryptor.removeEventListener("stateChange");
67
+ mediaSub = linkingMedia$.subscribe(function (mediaSource) {
68
+ contentDecryptor.addEventListener("stateChange", function (newState) {
69
+ if (newState === ContentDecryptorState.ReadyForContent) {
70
+ obs.next({ type: "decryption-ready",
71
+ value: { drmSystemId: contentDecryptor.systemId, mediaSource: mediaSource } });
72
+ contentDecryptor.removeEventListener("stateChange");
73
+ }
74
+ });
75
+ contentDecryptor.attach();
76
+ });
77
+ }
78
+ });
79
+ contentDecryptor.addEventListener("error", function (e) {
80
+ obs.error(e);
81
+ });
82
+ contentDecryptor.addEventListener("warning", function (w) {
83
+ obs.next({ type: "warning", value: w });
84
+ });
85
+ var protectionDataSub = contentProtections$.subscribe(function (data) {
86
+ contentDecryptor.onInitializationData(data);
87
+ });
88
+ return function () {
89
+ protectionDataSub.unsubscribe();
90
+ mediaSub === null || mediaSub === void 0 ? void 0 : mediaSub.unsubscribe();
91
+ contentDecryptor.dispose();
92
+ };
93
+ });
94
+ }
@@ -17,7 +17,6 @@ import { defer as observableDefer, EMPTY, from as observableFrom, map, merge as
17
17
  import config from "../../config";
18
18
  import log from "../../log";
19
19
  import throttle from "../../utils/rx-throttle";
20
- var FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY = config.FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY, MAX_CONSECUTIVE_MANIFEST_PARSING_IN_UNSAFE_MODE = config.MAX_CONSECUTIVE_MANIFEST_PARSING_IN_UNSAFE_MODE, MIN_MANIFEST_PARSING_TIME_TO_ENTER_UNSAFE_MODE = config.MIN_MANIFEST_PARSING_TIME_TO_ENTER_UNSAFE_MODE;
21
20
  /**
22
21
  * Refresh the Manifest at the right time.
23
22
  * @param {Object} manifestUpdateSchedulerArguments
@@ -56,6 +55,7 @@ export default function manifestUpdateScheduler(_a) {
56
55
  var totalUpdateTime = parsingTime !== undefined ?
57
56
  parsingTime + (updatingTime !== null && updatingTime !== void 0 ? updatingTime : 0) :
58
57
  undefined;
58
+ var _b = config.getCurrent(), MAX_CONSECUTIVE_MANIFEST_PARSING_IN_UNSAFE_MODE = _b.MAX_CONSECUTIVE_MANIFEST_PARSING_IN_UNSAFE_MODE, MIN_MANIFEST_PARSING_TIME_TO_ENTER_UNSAFE_MODE = _b.MIN_MANIFEST_PARSING_TIME_TO_ENTER_UNSAFE_MODE;
59
59
  /**
60
60
  * "unsafeMode" is a mode where we unlock advanced Manifest parsing
61
61
  * optimizations with the added risk to lose some information.
@@ -194,6 +194,7 @@ export default function manifestUpdateScheduler(_a) {
194
194
  var message = e instanceof Error ? e.message :
195
195
  "unknown error";
196
196
  log.warn("MUS: Attempt to update Manifest failed: ".concat(message), "Re-downloading the Manifest fully");
197
+ var FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY = config.getCurrent().FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY;
197
198
  return startManualRefreshTimer(FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY, minimumManifestUpdateInterval, newSendingTime)
198
199
  .pipe(mergeMap(function () {
199
200
  return refreshManifest({ completeRefresh: true, unsafeMode: false });
@@ -20,7 +20,6 @@ import { MediaError } from "../../errors";
20
20
  import log from "../../log";
21
21
  import { getNextRangeGap } from "../../utils/ranges";
22
22
  import EVENTS from "../stream/events_generators";
23
- var BUFFER_DISCONTINUITY_THRESHOLD = config.BUFFER_DISCONTINUITY_THRESHOLD, FORCE_DISCONTINUITY_SEEK_DELAY = config.FORCE_DISCONTINUITY_SEEK_DELAY, FREEZING_STALLED_DELAY = config.FREEZING_STALLED_DELAY, UNFREEZING_SEEK_DELAY = config.UNFREEZING_SEEK_DELAY, UNFREEZING_DELTA_POSITION = config.UNFREEZING_DELTA_POSITION;
24
23
  /**
25
24
  * Work-around rounding errors with floating points by setting an acceptable,
26
25
  * very short, deviation when checking equalities.
@@ -106,6 +105,7 @@ export default function StallAvoider(playbackObserver, manifest, lockedStream$,
106
105
  var stall$ = playbackObserver.observe(true).pipe(withLatestFrom(discontinuitiesStore$), map(function (_a) {
107
106
  var observation = _a[0], discontinuitiesStore = _a[1];
108
107
  var buffered = observation.buffered, position = observation.position, readyState = observation.readyState, rebuffering = observation.rebuffering, freezing = observation.freezing;
108
+ var _b = config.getCurrent(), BUFFER_DISCONTINUITY_THRESHOLD = _b.BUFFER_DISCONTINUITY_THRESHOLD, FORCE_DISCONTINUITY_SEEK_DELAY = _b.FORCE_DISCONTINUITY_SEEK_DELAY, FREEZING_STALLED_DELAY = _b.FREEZING_STALLED_DELAY, UNFREEZING_SEEK_DELAY = _b.UNFREEZING_SEEK_DELAY, UNFREEZING_DELTA_POSITION = _b.UNFREEZING_DELTA_POSITION;
109
109
  if (freezing !== null) {
110
110
  var now = performance.now();
111
111
  var referenceTimestamp = prevFreezingState === null ?
@@ -17,7 +17,6 @@ import { combineLatest as observableCombineLatest, concat as observableConcat, d
17
17
  import config from "../../../config";
18
18
  import { fromEvent } from "../../../utils/event_emitter";
19
19
  import refreshScheduledEventsList from "./refresh_scheduled_events_list";
20
- var STREAM_EVENT_EMITTER_POLL_INTERVAL = config.STREAM_EVENT_EMITTER_POLL_INTERVAL;
21
20
  /**
22
21
  * Tells if a stream event has a duration
23
22
  * @param {Object} evt
@@ -109,6 +108,7 @@ function streamEventsEmitter(manifest, mediaElement, observation$) {
109
108
  if (!hasEvents) {
110
109
  return EMPTY;
111
110
  }
111
+ var STREAM_EVENT_EMITTER_POLL_INTERVAL = config.getCurrent().STREAM_EVENT_EMITTER_POLL_INTERVAL;
112
112
  return observableCombineLatest([
113
113
  interval(STREAM_EVENT_EMITTER_POLL_INTERVAL).pipe(startWith(null)),
114
114
  observation$,
@@ -15,10 +15,8 @@
15
15
  */
16
16
  import { ICustomError } from "../../errors";
17
17
  import Manifest, { Adaptation, Period, Representation } from "../../manifest";
18
- import { IAttachedMediaKeysEvent, IBlacklistProtectionDataEvent, ICreatedMediaKeysEvent, IEncryptedEvent, IInitDataIgnoredEvent, IKeysUpdateEvent, INoUpdateEvent, ISessionMessageEvent, ISessionUpdatedEvent } from "../eme";
19
18
  import SegmentBuffersStore from "../segment_buffers";
20
19
  import { IActivePeriodChangedEvent, IAdaptationChangeEvent, IBitrateEstimationChangeEvent, ICompletedStreamEvent, IEncryptionDataEncounteredEvent, IInbandEventsEvent, INeedsBufferFlushEvent, INeedsDecipherabilityFlush, INeedsMediaSourceReload, IPeriodStreamClearedEvent, IPeriodStreamReadyEvent, IRepresentationChangeEvent, IStreamEventAddedSegment, IStreamManifestMightBeOutOfSync, IStreamNeedsManifestRefresh } from "../stream";
21
- import { IEMEDisabledEvent } from "./create_eme_manager";
22
20
  import { IStreamEventEvent, IStreamEventSkipEvent } from "./stream_events_emitter";
23
21
  /** Event sent after the Manifest has been loaded and parsed for the first time. */
24
22
  export interface IManifestReadyEvent {
@@ -91,6 +89,6 @@ export { IRepresentationChangeEvent };
91
89
  /** Events emitted by a `MediaSourceLoader`. */
92
90
  export declare type IMediaSourceLoaderEvent = IStalledEvent | IUnstalledEvent | ILoadedEvent | IWarningEvent | IStreamEventEvent | IStreamEventSkipEvent | IActivePeriodChangedEvent | IPeriodStreamClearedEvent | ICompletedStreamEvent | IPeriodStreamReadyEvent | INeedsMediaSourceReload | INeedsBufferFlushEvent | IAdaptationChangeEvent | IBitrateEstimationChangeEvent | INeedsDecipherabilityFlush | IRepresentationChangeEvent | IStreamEventAddedSegment<unknown> | IEncryptionDataEncounteredEvent | IStreamManifestMightBeOutOfSync | IStreamNeedsManifestRefresh | IInbandEventsEvent;
93
91
  /** Every events emitted by the `Init` module. */
94
- export declare type IInitEvent = IManifestReadyEvent | IManifestUpdateEvent | IReloadingMediaSourceEvent | IDecipherabilityUpdateEvent | IWarningEvent | IEMEDisabledEvent | IEncryptedEvent | ICreatedMediaKeysEvent | IAttachedMediaKeysEvent | IInitDataIgnoredEvent | ISessionMessageEvent | IKeysUpdateEvent | INoUpdateEvent | ISessionUpdatedEvent | IBlacklistProtectionDataEvent | IStalledEvent | IUnstalledEvent | ILoadedEvent | IStreamEventEvent | IStreamEventSkipEvent | IActivePeriodChangedEvent | IPeriodStreamClearedEvent | ICompletedStreamEvent | IPeriodStreamReadyEvent | IAdaptationChangeEvent | IBitrateEstimationChangeEvent | IRepresentationChangeEvent | IStreamEventAddedSegment<unknown> | IInbandEventsEvent;
92
+ export declare type IInitEvent = IManifestReadyEvent | IManifestUpdateEvent | IReloadingMediaSourceEvent | IDecipherabilityUpdateEvent | IWarningEvent | IStalledEvent | IUnstalledEvent | ILoadedEvent | IStreamEventEvent | IStreamEventSkipEvent | IActivePeriodChangedEvent | IPeriodStreamClearedEvent | ICompletedStreamEvent | IPeriodStreamReadyEvent | IAdaptationChangeEvent | IBitrateEstimationChangeEvent | IRepresentationChangeEvent | IStreamEventAddedSegment<unknown> | IInbandEventsEvent;
95
93
  /** Events emitted by the `Init` module for directfile contents. */
96
- export declare type IDirectfileEvent = IStalledEvent | IUnstalledEvent | ILoadedEvent | IWarningEvent | IEMEDisabledEvent | IEncryptedEvent | ICreatedMediaKeysEvent | IAttachedMediaKeysEvent | IInitDataIgnoredEvent | ISessionMessageEvent | IKeysUpdateEvent | INoUpdateEvent | ISessionUpdatedEvent | IBlacklistProtectionDataEvent;
94
+ export declare type IDirectfileEvent = IStalledEvent | IUnstalledEvent | ILoadedEvent | IWarningEvent;
@@ -39,7 +39,6 @@ import { toUint8Array } from "../../../../utils/byte_parsing";
39
39
  import hashBuffer from "../../../../utils/hash_buffer";
40
40
  import objectAssign from "../../../../utils/object_assign";
41
41
  import { SegmentBuffer, SegmentBufferOperation, } from "../types";
42
- var SOURCE_BUFFER_FLUSHING_INTERVAL = config.SOURCE_BUFFER_FLUSHING_INTERVAL;
43
42
  /**
44
43
  * Allows to push and remove new segments to a SourceBuffer in a FIFO queue (not
45
44
  * doing so can lead to browser Errors) while keeping an inventory of what has
@@ -69,6 +68,7 @@ var AudioVideoSegmentBuffer = /** @class */ (function (_super) {
69
68
  _this._pendingTask = null;
70
69
  _this._lastInitSegment = null;
71
70
  _this.codec = codec;
71
+ var SOURCE_BUFFER_FLUSHING_INTERVAL = config.getCurrent().SOURCE_BUFFER_FLUSHING_INTERVAL;
72
72
  // Some browsers (happened with firefox 66) sometimes "forget" to send us
73
73
  // `update` or `updateend` events.
74
74
  // In that case, we're completely unable to continue the queue here and
@@ -38,7 +38,6 @@ import parseTextTrackToElements from "./parsers";
38
38
  import TextTrackCuesStore from "./text_track_cues_store";
39
39
  import updateProportionalElements from "./update_proportional_elements";
40
40
  var onEnded$ = events.onEnded$, onSeeked$ = events.onSeeked$, onSeeking$ = events.onSeeking$;
41
- var MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL = config.MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL, TEXT_TRACK_SIZE_CHECKS_INTERVAL = config.TEXT_TRACK_SIZE_CHECKS_INTERVAL;
42
41
  /**
43
42
  * Generate the interval at which TextTrack HTML Cues should be refreshed.
44
43
  * @param {HTMLMediaElement} videoElement
@@ -48,6 +47,7 @@ function generateRefreshInterval(videoElement) {
48
47
  var seeking$ = onSeeking$(videoElement);
49
48
  var seeked$ = onSeeked$(videoElement);
50
49
  var ended$ = onEnded$(videoElement);
50
+ var MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL = config.getCurrent().MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL;
51
51
  var manualRefresh$ = observableMerge(seeked$, ended$);
52
52
  var autoRefresh$ = observableInterval(MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL)
53
53
  .pipe(startWith(null));
@@ -113,6 +113,7 @@ var HTMLTextSegmentBuffer = /** @class */ (function (_super) {
113
113
  _this._disableCurrentCues();
114
114
  return;
115
115
  }
116
+ var MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL = config.getCurrent().MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL;
116
117
  // to spread the time error, we divide the regular chosen interval.
117
118
  var time = Math.max(_this._videoElement.currentTime +
118
119
  (MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL / 1000) / 2, 0);
@@ -315,6 +316,7 @@ var HTMLTextSegmentBuffer = /** @class */ (function (_super) {
315
316
  var proportionalCues = this._currentCues
316
317
  .filter(function (cue) { return cue.resolution !== null; });
317
318
  if (proportionalCues.length > 0) {
319
+ var TEXT_TRACK_SIZE_CHECKS_INTERVAL = config.getCurrent().TEXT_TRACK_SIZE_CHECKS_INTERVAL;
318
320
  // update propertionally-sized elements periodically
319
321
  onHeightWidthChange(this._textTrackElement, TEXT_TRACK_SIZE_CHECKS_INTERVAL)
320
322
  .pipe(takeUntil(this._clearSizeUpdates$), takeUntil(this._destroy$))
@@ -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>;