rx-player 3.26.3-dev.2022021400 → 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 (340) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/FILES.md +5 -4
  3. package/VERSION +1 -1
  4. package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
  5. package/dist/_esm5.processed/compat/browser_detection.js +4 -2
  6. package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
  7. package/dist/_esm5.processed/compat/eme/close_session.js +144 -36
  8. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
  9. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +21 -22
  10. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +53 -34
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +43 -41
  12. package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
  13. package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
  14. package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
  15. package/dist/_esm5.processed/compat/eme/load_session.js +68 -17
  16. package/dist/_esm5.processed/compat/event_listeners.js +2 -1
  17. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
  18. package/dist/_esm5.processed/config.d.ts +166 -1080
  19. package/dist/_esm5.processed/config.js +17 -1119
  20. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
  21. package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
  22. package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
  23. package/dist/_esm5.processed/core/api/index.d.ts +2 -1
  24. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +2 -1
  25. package/dist/_esm5.processed/core/api/option_utils.d.ts +3 -1
  26. package/dist/_esm5.processed/core/api/option_utils.js +19 -6
  27. package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
  28. package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
  29. package/dist/_esm5.processed/core/api/public_api.js +72 -33
  30. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -49
  31. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +25 -65
  32. package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
  33. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +104 -0
  34. package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
  35. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +41 -0
  36. package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
  37. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +866 -0
  38. package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
  39. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
  40. package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
  41. package/dist/_esm5.processed/core/decrypt/create_session.js +174 -0
  42. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.d.ts +21 -0
  43. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
  44. package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
  45. package/dist/_esm5.processed/core/decrypt/find_key_system.js +300 -0
  46. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
  47. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
  48. package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
  49. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
  50. package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
  51. package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
  52. package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
  53. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
  54. package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
  55. package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
  56. package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
  57. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
  58. package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +119 -241
  59. package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
  60. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
  61. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
  62. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
  63. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
  64. package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
  65. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +85 -0
  66. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
  67. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
  68. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
  69. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
  70. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
  71. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
  72. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
  73. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
  74. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
  75. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
  76. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
  77. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
  78. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
  79. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +303 -0
  80. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
  81. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
  82. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
  83. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
  84. package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
  85. package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
  86. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
  87. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
  88. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +2 -2
  89. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +1 -1
  90. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  91. package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
  92. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +1 -1
  93. package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
  94. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +4 -2
  95. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
  96. package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
  97. package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
  98. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
  99. package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
  100. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
  101. package/dist/_esm5.processed/core/init/types.d.ts +2 -4
  102. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
  103. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
  104. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
  105. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
  106. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
  107. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
  108. package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
  109. package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
  110. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
  111. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
  112. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
  113. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +1 -1
  114. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +2 -1
  115. package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
  116. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +2 -2
  117. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
  118. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
  119. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
  120. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
  121. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
  122. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
  123. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
  124. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
  125. package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
  126. package/dist/_esm5.processed/default_config.d.ts +1114 -0
  127. package/dist/_esm5.processed/default_config.js +1145 -0
  128. package/dist/_esm5.processed/experimental/index.d.ts +2 -0
  129. package/dist/_esm5.processed/experimental/index.js +2 -0
  130. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
  131. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +1 -1
  132. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +1 -2
  133. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +1 -2
  134. package/dist/_esm5.processed/features/features_object.js +1 -1
  135. package/dist/_esm5.processed/features/initialize_features.js +1 -1
  136. package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
  137. package/dist/_esm5.processed/features/list/eme.js +5 -5
  138. package/dist/_esm5.processed/features/types.d.ts +3 -3
  139. package/dist/_esm5.processed/manifest/manifest.d.ts +1 -14
  140. package/dist/_esm5.processed/manifest/manifest.js +10 -74
  141. package/dist/_esm5.processed/manifest/representation.d.ts +35 -3
  142. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
  143. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
  144. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +1 -1
  145. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +87 -75
  146. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
  147. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
  148. package/dist/_esm5.processed/public_types.d.ts +2 -2
  149. package/dist/_esm5.processed/transports/dash/image_pipelines.js +3 -0
  150. package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
  151. package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
  152. package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
  153. package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
  154. package/dist/_esm5.processed/transports/smooth/pipelines.js +68 -10
  155. package/dist/_esm5.processed/transports/types.d.ts +22 -0
  156. package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
  157. package/dist/_esm5.processed/utils/deep_merge.js +53 -0
  158. package/dist/_esm5.processed/utils/reference.d.ts +29 -0
  159. package/dist/_esm5.processed/utils/reference.js +72 -24
  160. package/dist/_esm5.processed/utils/request/fetch.js +1 -2
  161. package/dist/_esm5.processed/utils/request/xhr.js +1 -1
  162. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
  163. package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
  164. package/dist/_esm5.processed/utils/task_canceller.js +3 -3
  165. package/dist/rx-player.js +5002 -3033
  166. package/dist/rx-player.min.js +1 -1
  167. package/dummy +1 -0
  168. package/{dist/_esm5.processed/core/eme/dispose_eme.d.ts → experimental/index.d.ts} +1 -4
  169. package/{dist/_esm5.processed/core/eme/dispose_media_keys.d.ts → experimental/index.js} +1 -6
  170. package/package.json +32 -34
  171. package/scripts/build/templates/experimental/index.d.ts +16 -0
  172. package/scripts/build/templates/experimental/index.js +16 -0
  173. package/sonar-project.properties +1 -1
  174. package/src/README.md +6 -6
  175. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
  176. package/src/compat/browser_detection.ts +4 -2
  177. package/src/compat/eme/close_session.ts +90 -56
  178. package/src/compat/eme/custom_media_keys/index.ts +21 -38
  179. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +63 -46
  180. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +51 -49
  181. package/src/compat/eme/generate_key_request.ts +25 -33
  182. package/src/compat/eme/load_session.ts +29 -31
  183. package/src/compat/event_listeners.ts +2 -1
  184. package/src/compat/should_favour_custom_safari_EME.ts +5 -2
  185. package/src/config.ts +17 -1210
  186. package/src/core/README.md +1 -1
  187. package/src/core/abr/bandwidth_estimator.ts +4 -4
  188. package/src/core/abr/network_analyzer.ts +5 -6
  189. package/src/core/api/__tests__/get_player_state.test.ts +3 -3
  190. package/src/core/api/__tests__/option_utils.test.ts +17 -17
  191. package/src/core/api/get_player_state.ts +1 -1
  192. package/src/core/api/index.ts +3 -0
  193. package/src/core/api/option_utils.ts +37 -20
  194. package/src/core/api/playback_observer.ts +12 -8
  195. package/src/core/api/public_api.ts +151 -111
  196. package/src/core/decrypt/README.md +22 -0
  197. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
  198. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
  199. package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
  200. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
  201. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
  202. package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +31 -93
  203. package/src/core/{eme → decrypt}/attach_media_keys.ts +49 -56
  204. package/src/core/decrypt/clear_on_stop.ts +48 -0
  205. package/src/core/decrypt/content_decryptor.ts +1158 -0
  206. package/src/core/decrypt/create_or_load_session.ts +130 -0
  207. package/src/core/decrypt/create_session.ts +175 -0
  208. package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
  209. package/src/core/{eme → decrypt}/find_key_system.ts +112 -122
  210. package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
  211. package/src/core/decrypt/get_media_keys.ts +145 -0
  212. package/src/core/{eme → decrypt}/index.ts +11 -8
  213. package/src/core/decrypt/init_media_keys.ts +51 -0
  214. package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
  215. package/src/core/decrypt/set_server_certificate.ts +104 -0
  216. package/src/core/{eme → decrypt}/types.ts +128 -258
  217. package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
  218. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
  219. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
  220. package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
  221. package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
  222. package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +20 -20
  223. package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
  224. package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
  225. package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
  226. package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
  227. package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
  228. package/src/core/decrypt/utils/key_session_record.ts +175 -0
  229. package/src/core/decrypt/utils/loaded_sessions_store.ts +318 -0
  230. package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
  231. package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
  232. package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
  233. package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
  234. package/src/core/fetchers/manifest/manifest_fetcher.ts +4 -4
  235. package/src/core/fetchers/segment/segment_fetcher.ts +4 -4
  236. package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
  237. package/src/core/init/.initialize_media_source.ts.un~ +0 -0
  238. package/src/core/init/get_initial_time.ts +2 -1
  239. package/src/core/init/initialize_directfile.ts +17 -20
  240. package/src/core/init/initialize_media_source.ts +42 -105
  241. package/src/core/init/link_drm_and_content.ts +176 -0
  242. package/src/core/init/manifest_update_scheduler.ts +5 -3
  243. package/src/core/init/stall_avoider.ts +6 -5
  244. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
  245. package/src/core/init/types.ts +1 -39
  246. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
  247. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +3 -4
  248. package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
  249. package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
  250. package/src/core/stream/events_generators.ts +9 -4
  251. package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
  252. package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
  253. package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
  254. package/src/core/stream/period/period_stream.ts +5 -2
  255. package/src/core/stream/representation/force_garbage_collection.ts +2 -2
  256. package/src/core/stream/representation/get_buffer_status.ts +28 -16
  257. package/src/core/stream/representation/get_needed_segments.ts +124 -28
  258. package/src/core/stream/representation/get_segment_priority.ts +1 -2
  259. package/src/core/stream/representation/push_media_segment.ts +3 -2
  260. package/src/core/stream/representation/representation_stream.ts +30 -7
  261. package/src/core/stream/types.ts +1 -1
  262. package/src/default_config.ts +1241 -0
  263. package/src/experimental/index.ts +5 -0
  264. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
  265. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +2 -1
  266. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
  267. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +4 -4
  268. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +1 -2
  269. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +1 -2
  270. package/src/features/__tests__/initialize_features.test.ts +2 -2
  271. package/src/features/features_object.ts +1 -1
  272. package/src/features/initialize_features.ts +1 -1
  273. package/src/features/list/__tests__/eme.test.ts +5 -5
  274. package/src/features/list/eme.ts +5 -5
  275. package/src/features/types.ts +3 -10
  276. package/src/manifest/manifest.ts +6 -76
  277. package/src/manifest/representation.ts +36 -3
  278. package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
  279. package/src/parsers/manifest/dash/common/indexes/template.ts +1 -2
  280. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +1 -1
  281. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +109 -64
  282. package/src/parsers/manifest/dash/common/parse_mpd.ts +1 -2
  283. package/src/parsers/manifest/smooth/create_parser.ts +1 -0
  284. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
  285. package/src/public_types.ts +5 -1
  286. package/src/transports/dash/image_pipelines.ts +3 -0
  287. package/src/transports/dash/segment_parser.ts +5 -0
  288. package/src/transports/dash/text_parser.ts +8 -0
  289. package/src/transports/local/segment_parser.ts +4 -0
  290. package/src/transports/local/text_parser.ts +8 -0
  291. package/src/transports/smooth/pipelines.ts +22 -9
  292. package/src/transports/types.ts +22 -0
  293. package/src/utils/__tests__/deep_merge.test.ts +48 -0
  294. package/src/utils/deep_merge.ts +46 -0
  295. package/src/utils/reference.ts +116 -23
  296. package/src/utils/request/fetch.ts +1 -2
  297. package/src/utils/request/xhr.ts +2 -1
  298. package/src/utils/rx-from_cancellable_promise.ts +7 -2
  299. package/src/utils/task_canceller.ts +6 -4
  300. package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
  301. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
  302. package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
  303. package/dist/_esm5.processed/core/eme/create_session.js +0 -126
  304. package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
  305. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
  306. package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
  307. package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
  308. package/dist/_esm5.processed/core/eme/find_key_system.js +0 -253
  309. package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
  310. package/dist/_esm5.processed/core/eme/get_session.js +0 -68
  311. package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
  312. package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
  313. package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
  314. package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
  315. package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
  316. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
  317. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
  318. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
  319. package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
  320. package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
  321. package/src/core/eme/README.md +0 -26
  322. package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
  323. package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
  324. package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
  325. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
  326. package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
  327. package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
  328. package/src/core/eme/clear_eme_session.ts +0 -62
  329. package/src/core/eme/create_session.ts +0 -187
  330. package/src/core/eme/dispose_eme.ts +0 -25
  331. package/src/core/eme/dispose_media_keys.ts +0 -46
  332. package/src/core/eme/eme_manager.ts +0 -387
  333. package/src/core/eme/get_media_keys.ts +0 -141
  334. package/src/core/eme/get_session.ts +0 -135
  335. package/src/core/eme/init_media_keys.ts +0 -106
  336. package/src/core/eme/set_server_certificate.ts +0 -115
  337. package/src/core/eme/utils/close_session.ts +0 -113
  338. package/src/core/eme/utils/init_data_store.ts +0 -234
  339. package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
  340. package/src/core/init/create_eme_manager.ts +0 -95
@@ -0,0 +1,5 @@
1
+ import configHandler from "../config";
2
+
3
+ export {
4
+ configHandler as config,
5
+ };
@@ -24,6 +24,7 @@ export default function pushData(
24
24
  adaptation: Adaptation;
25
25
  representation: Representation;
26
26
  segment: ISegment;
27
+ chunkSize: number | undefined;
27
28
  start: number;
28
29
  end: number; },
29
30
  parsed: ISegmentParserParsedMediaChunk<Uint8Array | ArrayBuffer>,
@@ -249,7 +249,8 @@ export default class VideoThumbnailLoader {
249
249
  if (end === undefined) {
250
250
  end = start + (segment.duration / segment.timescale);
251
251
  }
252
- const inventoryInfos = objectAssign({ segment,
252
+ const inventoryInfos = objectAssign({ chunkSize: data.chunkSize,
253
+ segment,
253
254
  start,
254
255
  end }, contentInfos);
255
256
  return pushData(inventoryInfos,
@@ -20,11 +20,8 @@
20
20
  /* eslint-disable @typescript-eslint/no-unsafe-call */
21
21
  /* eslint-disable @typescript-eslint/no-unsafe-assignment */
22
22
  /* eslint-disable @typescript-eslint/no-unsafe-return */
23
+ /* eslint-disable no-restricted-properties */
23
24
 
24
- import {
25
- map,
26
- of as observableOf,
27
- } from "rxjs";
28
25
  import { ProberStatus } from "../../types";
29
26
 
30
27
 
@@ -81,7 +78,7 @@ describe("MediaCapabilitiesProber probers - DRMInfos", () => {
81
78
  },
82
79
  };
83
80
  const mockRequestMediaKeySystemAccess = jest.fn(() => {
84
- return observableOf({
81
+ return Promise.resolve({
85
82
  getConfiguration: () => ({}),
86
83
  });
87
84
  });
@@ -114,11 +111,7 @@ describe("MediaCapabilitiesProber probers - DRMInfos", () => {
114
111
  };
115
112
  const mockRequestMediaKeySystemAccess = jest.fn(
116
113
  () => {
117
- return observableOf(null).pipe(
118
- map(() => {
119
- throw new Error();
120
- })
121
- );
114
+ return Promise.reject(new Error());
122
115
  }
123
116
  );
124
117
  jest.mock("../../../../../compat", () => ({
@@ -20,8 +20,8 @@
20
20
  /* eslint-disable @typescript-eslint/no-unsafe-call */
21
21
  /* eslint-disable @typescript-eslint/no-unsafe-assignment */
22
22
  /* eslint-disable @typescript-eslint/no-unsafe-return */
23
+ /* eslint-disable no-restricted-properties */
23
24
 
24
- import { of as observableOf } from "rxjs";
25
25
  import PPromise from "../../../../../utils/promise";
26
26
  import { ProberStatus } from "../../types";
27
27
 
@@ -60,7 +60,7 @@ describe("MediaCapabilitiesProber probers - HDCPPolicy", () => {
60
60
  return PPromise.resolve({});
61
61
  });
62
62
  const mockRequestMediaKeySystemAcces = jest.fn(() => {
63
- return observableOf({
63
+ return Promise.resolve({
64
64
  createMediaKeys: mockCreateMediaKeys,
65
65
  });
66
66
  });
@@ -90,7 +90,7 @@ describe("MediaCapabilitiesProber probers - HDCPPolicy", () => {
90
90
  });
91
91
  });
92
92
  const mockRequestMediaKeySystemAcces = jest.fn(() => {
93
- return observableOf({
93
+ return Promise.resolve({
94
94
  createMediaKeys: mockCreateMediaKeys,
95
95
  });
96
96
  });
@@ -120,7 +120,7 @@ describe("MediaCapabilitiesProber probers - HDCPPolicy", () => {
120
120
  });
121
121
  });
122
122
  const mockRequestMediaKeySystemAcces = jest.fn(() => {
123
- return observableOf({
123
+ return Promise.resolve({
124
124
  createMediaKeys: mockCreateMediaKeys,
125
125
  });
126
126
  });
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { lastValueFrom } from "rxjs";
18
17
  import { requestMediaKeySystemAccess } from "../../../../compat";
19
18
  import PPromise from "../../../../utils/promise";
20
19
  import log from "../log";
@@ -55,7 +54,7 @@ export default function probeDRMInfos(
55
54
  return PPromise.resolve([ProberStatus.NotSupported, result]);
56
55
  }
57
56
 
58
- return lastValueFrom(requestMediaKeySystemAccess(type, [configuration]))
57
+ return requestMediaKeySystemAccess(type, [configuration])
59
58
  .then((keySystemAccess) => {
60
59
  result.compatibleConfiguration = keySystemAccess.getConfiguration();
61
60
  const status : [ProberStatus, ICompatibleKeySystem?] =
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { lastValueFrom } from "rxjs";
18
17
  import { requestMediaKeySystemAccess } from "../../../../compat";
19
18
  import PPromise from "../../../../utils/promise";
20
19
  import {
@@ -61,7 +60,7 @@ export default function probeHDCPPolicy(
61
60
  }],
62
61
  };
63
62
 
64
- return lastValueFrom(requestMediaKeySystemAccess(keySystem, [drmConfig]))
63
+ return requestMediaKeySystemAccess(keySystem, [drmConfig])
65
64
  .then((mediaKeysSystemAccess) => {
66
65
  return mediaKeysSystemAccess.createMediaKeys().then((mediaKeys) => {
67
66
  if (!("getStatusForPolicy" in mediaKeys)) {
@@ -93,7 +93,7 @@ describe("Features - initializeFeaturesObject", () => {
93
93
  nativeTextTracksParsers: {},
94
94
  htmlTextTracksBuffer: null,
95
95
  htmlTextTracksParsers: {},
96
- emeManager: null,
96
+ ContentDecryptor: null,
97
97
  directfile: null,
98
98
  };
99
99
  jest.mock("../features_object", () => ({
@@ -113,7 +113,7 @@ describe("Features - initializeFeaturesObject", () => {
113
113
  js: require("../../parsers/manifest/dash/js-parser").default,
114
114
  wasm: null,
115
115
  },
116
- emeManager: require("../../core/eme/index").default,
116
+ ContentDecryptor: require("../../core/decrypt/index").default,
117
117
  directfile: {
118
118
  initDirectFile: require("../../core/init/initialize_directfile").default,
119
119
  mediaElementTrackChoiceManager:
@@ -23,7 +23,7 @@ import { IFeaturesObject } from "./types";
23
23
  const features : IFeaturesObject = { dashParsers: { wasm: null,
24
24
  js: null },
25
25
  directfile: null,
26
- emeManager: null,
26
+ ContentDecryptor: null,
27
27
  htmlTextTracksBuffer: null,
28
28
  htmlTextTracksParsers: {},
29
29
  imageBuffer: null,
@@ -27,7 +27,7 @@ import features from "./features_object";
27
27
  */
28
28
  export default function initializeFeaturesObject() : void {
29
29
  if (__FEATURES__.EME === __FEATURES__.IS_ENABLED as number) {
30
- features.emeManager = require("../core/eme/index.ts").default;
30
+ features.ContentDecryptor = require("../core/decrypt/index.ts").default;
31
31
  }
32
32
 
33
33
  if (__FEATURES__.BIF_PARSER === __FEATURES__.IS_ENABLED as number) {
@@ -17,20 +17,20 @@
17
17
  /* eslint-disable @typescript-eslint/no-unsafe-member-access */
18
18
  /* eslint-disable @typescript-eslint/no-unsafe-argument */
19
19
 
20
- import emeManager from "../../../core/eme";
20
+ import ContentDecryptor from "../../../core/decrypt";
21
21
  import addEMEFeature from "../eme";
22
22
 
23
- jest.mock("../../../core/eme", () => ({
23
+ jest.mock("../../../core/decrypt", () => ({
24
24
  __esModule: true as const,
25
25
  default: jest.fn(),
26
26
  }));
27
27
 
28
28
  describe("Features list - EME", () => {
29
- it("should add EME in the current features", () => {
29
+ it("should add the ContentDecryptor in the current features", () => {
30
30
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
31
  const featureObject : any = {};
32
32
  addEMEFeature(featureObject);
33
- expect(featureObject).toEqual({ emeManager });
34
- expect(featureObject.emeManager).toBe(emeManager);
33
+ expect(featureObject).toEqual({ ContentDecryptor });
34
+ expect(featureObject.ContentDecryptor).toBe(ContentDecryptor);
35
35
  });
36
36
  });
@@ -14,16 +14,16 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import EMEManager from "../../core/eme";
17
+ import ContentDecryptor from "../../core/decrypt";
18
18
  import { IFeaturesObject } from "../types";
19
19
 
20
20
  /**
21
21
  * Add ability to play encrypted contents
22
22
  * @param {Object} features
23
23
  */
24
- function addEMEManagerFeature(features : IFeaturesObject) : void {
25
- features.emeManager = EMEManager;
24
+ function addEMEFeature(features : IFeaturesObject) : void {
25
+ features.ContentDecryptor = ContentDecryptor;
26
26
  }
27
27
 
28
- export { addEMEManagerFeature as EME };
29
- export default addEMEManagerFeature;
28
+ export { addEMEFeature as EME };
29
+ export default addEMEFeature;
@@ -17,11 +17,7 @@
17
17
  import { Observable } from "rxjs";
18
18
  // eslint-disable-next-line max-len
19
19
  import MediaElementTrackChoiceManager from "../core/api/media_element_track_choice_manager";
20
- import {
21
- IContentProtection,
22
- IEMEManagerEvent,
23
- IKeySystemOption,
24
- } from "../core/eme";
20
+ import type ContentDecryptor from "../core/decrypt";
25
21
  import {
26
22
  IDirectfileEvent,
27
23
  IDirectFileOptions,
@@ -41,10 +37,7 @@ import { ITransportFunction } from "../transports";
41
37
  export type IDirectFileInit = (args : IDirectFileOptions) =>
42
38
  Observable<IDirectfileEvent>;
43
39
 
44
- export type IEMEManager = (mediaElement : HTMLMediaElement,
45
- keySystems: IKeySystemOption[],
46
- contentProtections$ : Observable<IContentProtection>) =>
47
- Observable<IEMEManagerEvent>;
40
+ export type IContentDecryptorClass = typeof ContentDecryptor;
48
41
 
49
42
  export type IHTMLTextTracksBuffer =
50
43
  new(mediaElement : HTMLMediaElement,
@@ -89,7 +82,7 @@ export interface IFeaturesObject {
89
82
  directfile : { initDirectFile: IDirectFileInit;
90
83
  mediaElementTrackChoiceManager : IMediaElementTrackChoiceManager; } |
91
84
  null;
92
- emeManager : IEMEManager|null;
85
+ ContentDecryptor : IContentDecryptorClass|null;
93
86
  htmlTextTracksBuffer : IHTMLTextTracksBuffer|null;
94
87
  htmlTextTracksParsers : Partial<Record<string, IHTMLTextTracksParserFn>>;
95
88
  imageBuffer : IImageBuffer|null;
@@ -14,13 +14,11 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { IInitializationDataInfo } from "../core/eme";
18
17
  import {
19
18
  ICustomError,
20
19
  MediaError,
21
20
  } from "../errors";
22
21
  import { IParsedManifest } from "../parsers/manifest";
23
- import areArraysOfNumbersEqual from "../utils/are_arrays_of_numbers_equal";
24
22
  import arrayFind from "../utils/array_find";
25
23
  import EventEmitter from "../utils/event_emitter";
26
24
  import idGenerator from "../utils/id_generator";
@@ -502,73 +500,10 @@ export default class Manifest extends EventEmitter<IManifestEvents> {
502
500
  * changes performed.
503
501
  * @param {Object} keyUpdates
504
502
  */
505
- public updateDeciperabilitiesBasedOnKeyIds(
506
- { whitelistedKeyIds,
507
- blacklistedKeyIDs } : { whitelistedKeyIds : Uint8Array[];
508
- blacklistedKeyIDs : Uint8Array[]; }
503
+ public updateRepresentationsDeciperability(
504
+ isDecipherableCb : (rep : Representation) => boolean | undefined
509
505
  ) : void {
510
- const updates = updateDeciperability(this, (representation) => {
511
- if (representation.decipherable === false ||
512
- representation.contentProtections === undefined)
513
- {
514
- return representation.decipherable;
515
- }
516
- const contentKIDs = representation.contentProtections.keyIds;
517
- for (let i = 0; i < contentKIDs.length; i++) {
518
- const elt = contentKIDs[i];
519
- for (let j = 0; j < blacklistedKeyIDs.length; j++) {
520
- if (areArraysOfNumbersEqual(blacklistedKeyIDs[j], elt.keyId)) {
521
- return false;
522
- }
523
- }
524
- for (let j = 0; j < whitelistedKeyIds.length; j++) {
525
- if (areArraysOfNumbersEqual(whitelistedKeyIds[j], elt.keyId)) {
526
- return true;
527
- }
528
- }
529
- }
530
- return representation.decipherable;
531
- });
532
-
533
- if (updates.length > 0) {
534
- this.trigger("decipherabilityUpdate", updates);
535
- }
536
- }
537
-
538
- /**
539
- * Look in the Manifest for Representations linked to the given content
540
- * protection initialization data and mark them as being impossible to
541
- * decrypt.
542
- * Then trigger a "decipherabilityUpdate" event to notify everyone of the
543
- * changes performed.
544
- * @param {Object} initData
545
- */
546
- public addUndecipherableProtectionData(initData : IInitializationDataInfo) : void {
547
- const updates = updateDeciperability(this, (representation) => {
548
- if (representation.decipherable === false) {
549
- return false;
550
- }
551
- const segmentProtections = representation.contentProtections?.initData ?? [];
552
- for (let i = 0; i < segmentProtections.length; i++) {
553
- if (initData.type === undefined ||
554
- segmentProtections[i].type === initData.type)
555
- {
556
- const containedInitData = initData.values.every(undecipherableVal => {
557
- return segmentProtections[i].values.some(currVal => {
558
- return (undecipherableVal.systemId === undefined ||
559
- currVal.systemId === undecipherableVal.systemId) &&
560
- areArraysOfNumbersEqual(currVal.data,
561
- undecipherableVal.data);
562
- });
563
- });
564
- if (containedInitData) {
565
- return false;
566
- }
567
- }
568
- }
569
- return representation.decipherable;
570
- });
571
-
506
+ const updates = updateDeciperability(this, isDecipherableCb);
572
507
  if (updates.length > 0) {
573
508
  this.trigger("decipherabilityUpdate", updates);
574
509
  }
@@ -795,14 +730,9 @@ function updateDeciperability(
795
730
  isDecipherable : (rep : Representation) => boolean | undefined
796
731
  ) : IDecipherabilityUpdateElement[] {
797
732
  const updates : IDecipherabilityUpdateElement[] = [];
798
- for (let i = 0; i < manifest.periods.length; i++) {
799
- const period = manifest.periods[i];
800
- const adaptations = period.getAdaptations();
801
- for (let j = 0; j < adaptations.length; j++) {
802
- const adaptation = adaptations[j];
803
- const representations = adaptation.representations;
804
- for (let k = 0; k < representations.length; k++) {
805
- const representation = representations[k];
733
+ for (const period of manifest.periods) {
734
+ for (const adaptation of period.getAdaptations()) {
735
+ for (const representation of adaptation.representations) {
806
736
  const result = isDecipherable(representation);
807
737
  if (result !== representation.decipherable) {
808
738
  updates.push({ manifest, period, adaptation, representation });
@@ -15,7 +15,6 @@
15
15
  */
16
16
 
17
17
  import { isCodecSupported } from "../compat";
18
- import { IContentProtection } from "../core/eme";
19
18
  import log from "../log";
20
19
  import {
21
20
  IContentProtections,
@@ -166,7 +165,7 @@ class Representation {
166
165
  * @param {string} drmSystemId - The hexa-encoded DRM system ID
167
166
  * @returns {Array.<Object>}
168
167
  */
169
- public getEncryptionData(drmSystemId : string) : IContentProtection[] {
168
+ public getEncryptionData(drmSystemId : string) : IRepresentationProtectionData[] {
170
169
  const allInitData = this.getAllEncryptionData();
171
170
  const filtered = [];
172
171
  for (let i = 0; i < allInitData.length; i++) {
@@ -216,7 +215,7 @@ class Representation {
216
215
  * after parsing this Representation's initialization segment, if one exists.
217
216
  * @returns {Array.<Object>}
218
217
  */
219
- public getAllEncryptionData() : IContentProtection[] {
218
+ public getAllEncryptionData() : IRepresentationProtectionData[] {
220
219
  if (this.contentProtections === undefined ||
221
220
  this.contentProtections.initData.length === 0)
222
221
  {
@@ -297,4 +296,38 @@ class Representation {
297
296
  }
298
297
  }
299
298
 
299
+ /** Protection data as returned by a Representation. */
300
+ export interface IRepresentationProtectionData {
301
+ /**
302
+ * Initialization data type.
303
+ * String describing the format of the initialization data sent through this
304
+ * event.
305
+ * https://www.w3.org/TR/eme-initdata-registry/
306
+ */
307
+ type: string;
308
+ /**
309
+ * The key ids linked to those initialization data.
310
+ * This should be the key ids for the key concerned by the media which have
311
+ * the present initialization data.
312
+ *
313
+ * `undefined` when not known (different from an empty array - which would
314
+ * just mean that there's no key id involved).
315
+ */
316
+ keyIds : Uint8Array[] | undefined;
317
+ /** Every initialization data for that type. */
318
+ values: Array<{
319
+ /**
320
+ * Hex encoded system id, which identifies the key system.
321
+ * https://dashif.org/identifiers/content_protection/
322
+ */
323
+ systemId: string;
324
+ /**
325
+ * The initialization data itself for that type and systemId.
326
+ * For example, with "cenc" initialization data found in an ISOBMFF file,
327
+ * this will be the whole PSSH box.
328
+ */
329
+ data: Uint8Array;
330
+ }>;
331
+ }
332
+
300
333
  export default Representation;
@@ -16,7 +16,6 @@
16
16
 
17
17
  import config from "../../../../../config";
18
18
 
19
- const { DEFAULT_MAXIMUM_TIME_ROUNDING_ERROR } = config;
20
19
 
21
20
  /**
22
21
  * In Javascript, numbers are encoded in a way that a floating number may be
@@ -36,7 +35,7 @@ export default function isPeriodFulfilled(
36
35
  periodEnd: number
37
36
  ): boolean {
38
37
  const scaledRoundingError =
39
- DEFAULT_MAXIMUM_TIME_ROUNDING_ERROR * timescale;
38
+ config.getCurrent().DEFAULT_MAXIMUM_TIME_ROUNDING_ERROR * timescale;
40
39
  return (lastSegmentEnd + scaledRoundingError) >= periodEnd;
41
40
  }
42
41
 
@@ -29,7 +29,6 @@ import {
29
29
  createIndexURLs,
30
30
  } from "./tokens";
31
31
 
32
- const { MINIMUM_SEGMENT_SIZE } = config;
33
32
 
34
33
  /**
35
34
  * Index property defined for a SegmentTemplate RepresentationIndex
@@ -533,7 +532,7 @@ export default class TemplateRepresentationIndex implements IRepresentationIndex
533
532
  // segment that there actually is due to a very little difference between
534
533
  // the period's duration and a multiple of a segment's duration.
535
534
  // Check that we're within a good margin
536
- const minimumDuration = MINIMUM_SEGMENT_SIZE * timescale;
535
+ const minimumDuration = config.getCurrent().MINIMUM_SEGMENT_SIZE * timescale;
537
536
  if (maximumTime - regularLastSegmentStart > minimumDuration ||
538
537
  numberIndexedToZero === 0)
539
538
  {
@@ -47,7 +47,6 @@ import constructTimelineFromElements from "./construct_timeline_from_elements";
47
47
  // eslint-disable-next-line max-len
48
48
  import constructTimelineFromPreviousTimeline from "./construct_timeline_from_previous_timeline";
49
49
 
50
- const { MIN_DASH_S_ELEMENTS_TO_PARSE_UNSAFELY } = config;
51
50
 
52
51
  /**
53
52
  * Index property defined for a SegmentTimeline RepresentationIndex
@@ -606,6 +605,7 @@ export default class TimelineRepresentationIndex implements IRepresentationIndex
606
605
  const newElements = this._parseTimeline();
607
606
  this._parseTimeline = null; // Free memory
608
607
 
608
+ const { MIN_DASH_S_ELEMENTS_TO_PARSE_UNSAFELY } = config.getCurrent();
609
609
  if (this._unsafelyBaseOnPreviousIndex === null ||
610
610
  newElements.length < MIN_DASH_S_ELEMENTS_TO_PARSE_UNSAFELY)
611
611
  {