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
@@ -0,0 +1,108 @@
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 { ICustomMediaKeys, ICustomMediaKeySession } from "../../../compat";
17
+ import { IProcessedProtectionData } from "../types";
18
+ import KeySessionRecord from "./key_session_record";
19
+ /**
20
+ * Create and store MediaKeySessions linked to a single MediaKeys
21
+ * instance.
22
+ *
23
+ * Keep track of sessionTypes and of the initialization data each
24
+ * MediaKeySession is created for.
25
+ * @class LoadedSessionsStore
26
+ */
27
+ export default class LoadedSessionsStore {
28
+ /** MediaKeys instance on which the MediaKeySessions are created. */
29
+ private readonly _mediaKeys;
30
+ /** Store unique MediaKeySession information per initialization data. */
31
+ private _storage;
32
+ /**
33
+ * Create a new LoadedSessionsStore, which will store information about
34
+ * loaded MediaKeySessions on the given MediaKeys instance.
35
+ * @param {MediaKeys} mediaKeys
36
+ */
37
+ constructor(mediaKeys: MediaKeys | ICustomMediaKeys);
38
+ /**
39
+ * Create a new MediaKeySession and store it in this store.
40
+ * @param {Object} initializationData
41
+ * @param {string} sessionType
42
+ * @returns {Object}
43
+ */
44
+ createSession(initData: IProcessedProtectionData, sessionType: MediaKeySessionType): IStoredSessionEntry;
45
+ /**
46
+ * Find a stored entry compatible with the initialization data given and moves
47
+ * this entry at the end of the `LoadedSessionsStore`''s storage, returned by
48
+ * its `getAll` method.
49
+ *
50
+ * This can be used for example to tell when a previously-stored
51
+ * entry is re-used to then be able to implement a caching replacement
52
+ * algorithm based on the least-recently-used values by just evicting the first
53
+ * values returned by `getAll`.
54
+ * @param {Object} initializationData
55
+ * @returns {Object|null}
56
+ */
57
+ reuse(initializationData: IProcessedProtectionData): IStoredSessionEntry | null;
58
+ /**
59
+ * Close a MediaKeySession and remove its related stored information from the
60
+ * `LoadedSessionsStore`.
61
+ * Emit when done.
62
+ * @param {Object} mediaKeySession
63
+ * @returns {Promise}
64
+ */
65
+ closeSession(mediaKeySession: MediaKeySession | ICustomMediaKeySession): Promise<boolean>;
66
+ /**
67
+ * Returns the number of stored MediaKeySessions in this LoadedSessionsStore.
68
+ * @returns {number}
69
+ */
70
+ getLength(): number;
71
+ /**
72
+ * Returns information about all stored MediaKeySession, in the order in which
73
+ * the MediaKeySession have been created.
74
+ * @returns {Array.<Object>}
75
+ */
76
+ getAll(): IStoredSessionEntry[];
77
+ /**
78
+ * Close all sessions in this store.
79
+ * Emit `null` when done.
80
+ * @returns {Promise}
81
+ */
82
+ closeAllSessions(): Promise<void>;
83
+ private getIndex;
84
+ }
85
+ /** Information linked to a `MediaKeySession` created by the `LoadedSessionsStore`. */
86
+ export interface IStoredSessionEntry {
87
+ /**
88
+ * The `KeySessionRecord` linked to the MediaKeySession.
89
+ * It keeps track of all key ids that are currently known to be associated to
90
+ * the MediaKeySession.
91
+ *
92
+ * Initially only assiociated with the initialization data given, you may want
93
+ * to add to it other key ids if you find out that there are also linked to
94
+ * that session.
95
+ *
96
+ * Regrouping all those key ids into the `KeySessionRecord` in that way allows
97
+ * the `LoadedSessionsStore` to perform compatibility checks when future
98
+ * initialization data is encountered.
99
+ */
100
+ keySessionRecord: KeySessionRecord;
101
+ /** The MediaKeySession created. */
102
+ mediaKeySession: MediaKeySession | ICustomMediaKeySession;
103
+ /**
104
+ * The MediaKeySessionType (e.g. "temporary" or "persistent-license") with
105
+ * which the MediaKeySession was created.
106
+ */
107
+ sessionType: MediaKeySessionType;
108
+ }
@@ -0,0 +1,302 @@
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
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
23
+ });
24
+ };
25
+ var __generator = (this && this.__generator) || function (thisArg, body) {
26
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
27
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
28
+ function verb(n) { return function (v) { return step([n, v]); }; }
29
+ function step(op) {
30
+ if (f) throw new TypeError("Generator is already executing.");
31
+ while (_) try {
32
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
33
+ if (y = 0, t) op = [op[0] & 2, t.value];
34
+ switch (op[0]) {
35
+ case 0: case 1: t = op; break;
36
+ case 4: _.label++; return { value: op[1], done: false };
37
+ case 5: _.label++; y = op[1]; op = [0]; continue;
38
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
39
+ default:
40
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
41
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
42
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
43
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
44
+ if (t[2]) _.ops.pop();
45
+ _.trys.pop(); continue;
46
+ }
47
+ op = body.call(thisArg, _);
48
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
49
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
50
+ }
51
+ };
52
+ import { closeSession, } from "../../../compat";
53
+ import { onKeyMessage$, onKeyStatusesChange$, } from "../../../compat/event_listeners";
54
+ import config from "../../../config";
55
+ import log from "../../../log";
56
+ import isNullOrUndefined from "../../../utils/is_null_or_undefined";
57
+ import KeySessionRecord from "./key_session_record";
58
+ /**
59
+ * Create and store MediaKeySessions linked to a single MediaKeys
60
+ * instance.
61
+ *
62
+ * Keep track of sessionTypes and of the initialization data each
63
+ * MediaKeySession is created for.
64
+ * @class LoadedSessionsStore
65
+ */
66
+ var LoadedSessionsStore = /** @class */ (function () {
67
+ /**
68
+ * Create a new LoadedSessionsStore, which will store information about
69
+ * loaded MediaKeySessions on the given MediaKeys instance.
70
+ * @param {MediaKeys} mediaKeys
71
+ */
72
+ function LoadedSessionsStore(mediaKeys) {
73
+ this._mediaKeys = mediaKeys;
74
+ this._storage = [];
75
+ }
76
+ /**
77
+ * Create a new MediaKeySession and store it in this store.
78
+ * @param {Object} initializationData
79
+ * @param {string} sessionType
80
+ * @returns {Object}
81
+ */
82
+ LoadedSessionsStore.prototype.createSession = function (initData, sessionType) {
83
+ var _this = this;
84
+ var keySessionRecord = new KeySessionRecord(initData);
85
+ var mediaKeySession = this._mediaKeys.createSession(sessionType);
86
+ var entry = { mediaKeySession: mediaKeySession, sessionType: sessionType, keySessionRecord: keySessionRecord };
87
+ if (!isNullOrUndefined(mediaKeySession.closed)) {
88
+ mediaKeySession.closed
89
+ .then(function () {
90
+ var index = _this.getIndex(keySessionRecord);
91
+ if (index >= 0 &&
92
+ _this._storage[index].mediaKeySession === mediaKeySession) {
93
+ _this._storage.splice(index, 1);
94
+ }
95
+ })
96
+ .catch(function (e) {
97
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
98
+ log.warn("DRM-LSS: MediaKeySession.closed rejected: ".concat(e));
99
+ });
100
+ }
101
+ log.debug("DRM-LSS: Add MediaKeySession", entry.sessionType);
102
+ this._storage.push({ keySessionRecord: keySessionRecord, mediaKeySession: mediaKeySession, sessionType: sessionType });
103
+ return entry;
104
+ };
105
+ /**
106
+ * Find a stored entry compatible with the initialization data given and moves
107
+ * this entry at the end of the `LoadedSessionsStore`''s storage, returned by
108
+ * its `getAll` method.
109
+ *
110
+ * This can be used for example to tell when a previously-stored
111
+ * entry is re-used to then be able to implement a caching replacement
112
+ * algorithm based on the least-recently-used values by just evicting the first
113
+ * values returned by `getAll`.
114
+ * @param {Object} initializationData
115
+ * @returns {Object|null}
116
+ */
117
+ LoadedSessionsStore.prototype.reuse = function (initializationData) {
118
+ for (var i = this._storage.length - 1; i >= 0; i--) {
119
+ var stored = this._storage[i];
120
+ if (stored.keySessionRecord.isCompatibleWith(initializationData)) {
121
+ this._storage.splice(i, 1);
122
+ this._storage.push(stored);
123
+ return { keySessionRecord: stored.keySessionRecord,
124
+ mediaKeySession: stored.mediaKeySession,
125
+ sessionType: stored.sessionType };
126
+ }
127
+ }
128
+ return null;
129
+ };
130
+ /**
131
+ * Close a MediaKeySession and remove its related stored information from the
132
+ * `LoadedSessionsStore`.
133
+ * Emit when done.
134
+ * @param {Object} mediaKeySession
135
+ * @returns {Promise}
136
+ */
137
+ LoadedSessionsStore.prototype.closeSession = function (mediaKeySession) {
138
+ return __awaiter(this, void 0, void 0, function () {
139
+ var entry, _i, _a, stored;
140
+ return __generator(this, function (_b) {
141
+ switch (_b.label) {
142
+ case 0:
143
+ for (_i = 0, _a = this._storage; _i < _a.length; _i++) {
144
+ stored = _a[_i];
145
+ if (stored.mediaKeySession === mediaKeySession) {
146
+ entry = stored;
147
+ break;
148
+ }
149
+ }
150
+ if (entry === undefined) {
151
+ log.warn("DRM-LSS: No MediaKeySession found with " +
152
+ "the given initData and initDataType");
153
+ return [2 /*return*/, Promise.resolve(false)];
154
+ }
155
+ return [4 /*yield*/, safelyCloseMediaKeySession(entry.mediaKeySession)];
156
+ case 1:
157
+ _b.sent();
158
+ return [2 /*return*/, Promise.resolve(true)];
159
+ }
160
+ });
161
+ });
162
+ };
163
+ /**
164
+ * Returns the number of stored MediaKeySessions in this LoadedSessionsStore.
165
+ * @returns {number}
166
+ */
167
+ LoadedSessionsStore.prototype.getLength = function () {
168
+ return this._storage.length;
169
+ };
170
+ /**
171
+ * Returns information about all stored MediaKeySession, in the order in which
172
+ * the MediaKeySession have been created.
173
+ * @returns {Array.<Object>}
174
+ */
175
+ LoadedSessionsStore.prototype.getAll = function () {
176
+ return this._storage;
177
+ };
178
+ /**
179
+ * Close all sessions in this store.
180
+ * Emit `null` when done.
181
+ * @returns {Promise}
182
+ */
183
+ LoadedSessionsStore.prototype.closeAllSessions = function () {
184
+ return __awaiter(this, void 0, void 0, function () {
185
+ var allEntries, closingProms;
186
+ return __generator(this, function (_a) {
187
+ switch (_a.label) {
188
+ case 0:
189
+ allEntries = this._storage;
190
+ log.debug("DRM-LSS: Closing all current MediaKeySessions", allEntries.length);
191
+ // re-initialize the storage, so that new interactions with the
192
+ // `LoadedSessionsStore` do not rely on MediaKeySessions we're in the
193
+ // process of removing
194
+ this._storage = [];
195
+ closingProms = allEntries
196
+ .map(function (entry) { return safelyCloseMediaKeySession(entry.mediaKeySession); });
197
+ return [4 /*yield*/, Promise.all(closingProms)];
198
+ case 1:
199
+ _a.sent();
200
+ return [2 /*return*/];
201
+ }
202
+ });
203
+ });
204
+ };
205
+ LoadedSessionsStore.prototype.getIndex = function (record) {
206
+ for (var i = 0; i < this._storage.length; i++) {
207
+ var stored = this._storage[i];
208
+ if (stored.keySessionRecord === record) {
209
+ return i;
210
+ }
211
+ }
212
+ return -1;
213
+ };
214
+ return LoadedSessionsStore;
215
+ }());
216
+ export default LoadedSessionsStore;
217
+ /**
218
+ * Close a MediaKeySession with multiple attempts if needed and do not throw if
219
+ * this action throws an error.
220
+ * Emits then complete when done.
221
+ * @param {MediaKeySession} mediaKeySession
222
+ * @returns {Observable}
223
+ */
224
+ function safelyCloseMediaKeySession(mediaKeySession) {
225
+ return recursivelyTryToCloseMediaKeySession(0);
226
+ /**
227
+ * Perform a new attempt at closing the MediaKeySession.
228
+ * If this operation fails due to a not-"callable" (an EME term)
229
+ * MediaKeySession, retry based on either a timer or on MediaKeySession
230
+ * events, whichever comes first.
231
+ * Emits then complete when done.
232
+ * @param {number} retryNb - The attempt number starting at 0.
233
+ * @returns {Observable}
234
+ */
235
+ function recursivelyTryToCloseMediaKeySession(retryNb) {
236
+ return __awaiter(this, void 0, void 0, function () {
237
+ var err_1, _a, EME_SESSION_CLOSING_MAX_RETRY, EME_SESSION_CLOSING_INITIAL_DELAY, EME_SESSION_CLOSING_MAX_DELAY, nextRetryNb, delay_1, ksChangeSub_1, ksChangeProm, ksMsgSub_1, ksMsgProm, sleepTimer_1, sleepProm;
238
+ return __generator(this, function (_b) {
239
+ switch (_b.label) {
240
+ case 0:
241
+ log.debug("DRM: Trying to close a MediaKeySession", mediaKeySession.sessionId, retryNb);
242
+ _b.label = 1;
243
+ case 1:
244
+ _b.trys.push([1, 3, , 5]);
245
+ return [4 /*yield*/, closeSession(mediaKeySession)];
246
+ case 2:
247
+ _b.sent();
248
+ log.debug("DRM: Succeeded to close MediaKeySession");
249
+ return [2 /*return*/, undefined];
250
+ case 3:
251
+ err_1 = _b.sent();
252
+ // Unitialized MediaKeySession may not close properly until their
253
+ // corresponding `generateRequest` or `load` call are handled by the
254
+ // browser.
255
+ // In that case the EME specification tells us that the browser is
256
+ // supposed to reject the `close` call with an InvalidStateError.
257
+ if (!(err_1 instanceof Error) || err_1.name !== "InvalidStateError" ||
258
+ mediaKeySession.sessionId !== "") {
259
+ return [2 /*return*/, failToCloseSession(err_1)];
260
+ }
261
+ _a = config.getCurrent(), EME_SESSION_CLOSING_MAX_RETRY = _a.EME_SESSION_CLOSING_MAX_RETRY, EME_SESSION_CLOSING_INITIAL_DELAY = _a.EME_SESSION_CLOSING_INITIAL_DELAY, EME_SESSION_CLOSING_MAX_DELAY = _a.EME_SESSION_CLOSING_MAX_DELAY;
262
+ nextRetryNb = retryNb + 1;
263
+ if (nextRetryNb > EME_SESSION_CLOSING_MAX_RETRY) {
264
+ return [2 /*return*/, failToCloseSession(err_1)];
265
+ }
266
+ delay_1 = Math.min(Math.pow(2, retryNb) * EME_SESSION_CLOSING_INITIAL_DELAY, EME_SESSION_CLOSING_MAX_DELAY);
267
+ log.warn("DRM: attempt to close a mediaKeySession failed, " +
268
+ "scheduling retry...", delay_1);
269
+ ksChangeProm = new Promise(function (res) {
270
+ ksChangeSub_1 = onKeyStatusesChange$(mediaKeySession).subscribe(res);
271
+ });
272
+ ksMsgProm = new Promise(function (res) {
273
+ ksMsgSub_1 = onKeyMessage$(mediaKeySession).subscribe(res);
274
+ });
275
+ sleepProm = new Promise(function (res) {
276
+ sleepTimer_1 = window.setTimeout(res, delay_1);
277
+ });
278
+ return [4 /*yield*/, Promise.race([ksChangeProm, ksMsgProm, sleepProm])];
279
+ case 4:
280
+ _b.sent();
281
+ ksChangeSub_1 === null || ksChangeSub_1 === void 0 ? void 0 : ksChangeSub_1.unsubscribe();
282
+ ksMsgSub_1 === null || ksMsgSub_1 === void 0 ? void 0 : ksMsgSub_1.unsubscribe();
283
+ clearTimeout(sleepTimer_1);
284
+ return [2 /*return*/, recursivelyTryToCloseMediaKeySession(nextRetryNb)];
285
+ case 5: return [2 /*return*/];
286
+ }
287
+ });
288
+ });
289
+ }
290
+ /**
291
+ * Log error anouncing that we could not close the MediaKeySession and emits
292
+ * then complete through Observable.
293
+ * TODO Emit warning?
294
+ * @returns {Observable}
295
+ */
296
+ function failToCloseSession(err) {
297
+ log.error("DRM: Could not close MediaKeySession: " +
298
+ (err instanceof Error ? err.toString() :
299
+ "Unknown error"));
300
+ return Promise.resolve(null);
301
+ }
302
+ }
@@ -13,10 +13,10 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { ICustomMediaKeys, ICustomMediaKeySystemAccess } from "../../compat";
17
- import { IKeySystemOption } from "./types";
18
- import LoadedSessionsStore from "./utils/loaded_sessions_store";
19
- /** EME-related state that can be associated to a single HTMLMediaElement. */
16
+ import { ICustomMediaKeys, ICustomMediaKeySystemAccess } from "../../../compat";
17
+ import { IKeySystemOption } from "../types";
18
+ import LoadedSessionsStore from "./loaded_sessions_store";
19
+ /** DRM-related state that can be associated to a single HTMLMediaElement. */
20
20
  export interface IMediaElementMediaKeysInfos {
21
21
  /** Last keySystemOptions used with that HTMLMediaElement. */
22
22
  keySystemOptions: IKeySystemOption;
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { ICustomMediaKeySession } from "../../../compat";
17
- import { IInitializationDataInfo, IPersistentSessionInfo, IPersistentSessionStorage } from "../types";
17
+ import { IProcessedProtectionData, IPersistentSessionInfo, IPersistentSessionStorage } from "../types";
18
18
  /**
19
19
  * Set representing persisted licenses. Depends on a simple local-
20
20
  * storage implementation with a `save`/`load` synchronous interface
@@ -45,11 +45,11 @@ export default class PersistentSessionsStore {
45
45
  getAll(): IPersistentSessionInfo[];
46
46
  /**
47
47
  * Retrieve an entry based on its initialization data.
48
- * @param {Uint8Array} initData
48
+ * @param {Object} initData
49
49
  * @param {string|undefined} initDataType
50
50
  * @returns {Object|null}
51
51
  */
52
- get(initData: IInitializationDataInfo): IPersistentSessionInfo | null;
52
+ get(initData: IProcessedProtectionData): IPersistentSessionInfo | null;
53
53
  /**
54
54
  * Like `get`, but also move the corresponding value at the end of the store
55
55
  * (as returned by `getAll`) if found.
@@ -61,21 +61,20 @@ export default class PersistentSessionsStore {
61
61
  * @param {string|undefined} initDataType
62
62
  * @returns {*}
63
63
  */
64
- getAndReuse(initData: IInitializationDataInfo): IPersistentSessionInfo | null;
64
+ getAndReuse(initData: IProcessedProtectionData): IPersistentSessionInfo | null;
65
65
  /**
66
66
  * Add a new entry in the PersistentSessionsStore.
67
67
  * @param {Uint8Array} initData
68
68
  * @param {string|undefined} initDataType
69
69
  * @param {MediaKeySession} session
70
70
  */
71
- add(initData: IInitializationDataInfo, session: MediaKeySession | ICustomMediaKeySession): void;
71
+ add(initData: IProcessedProtectionData, keyIds: Uint8Array[] | undefined, session: MediaKeySession | ICustomMediaKeySession): void;
72
72
  /**
73
- * Delete stored MediaKeySession information based on its initialization
74
- * data.
73
+ * Delete stored MediaKeySession information based on its session id.
75
74
  * @param {Uint8Array} initData
76
75
  * @param {string|undefined} initDataType
77
76
  */
78
- delete(initData: IInitializationDataInfo): void;
77
+ delete(sessionId: string): void;
79
78
  deleteOldSessions(sessionsToDelete: number): void;
80
79
  /**
81
80
  * Delete all saved entries.
@@ -84,8 +83,7 @@ export default class PersistentSessionsStore {
84
83
  /**
85
84
  * Retrieve index of an entry.
86
85
  * Returns `-1` if not found.
87
- * @param {Uint8Array} initData
88
- * @param {string|undefined} initDataType
86
+ * @param {Object} initData
89
87
  * @returns {number}
90
88
  */
91
89
  private _getIndex;
@@ -93,12 +91,4 @@ export default class PersistentSessionsStore {
93
91
  * Use the given storage to store the current entries.
94
92
  */
95
93
  private _save;
96
- /**
97
- * Format given initializationData's values so they are ready to be stored:
98
- * - sort them by systemId, so they are faster to compare
99
- * - add hash for each initialization data encountered.
100
- * @param {Array.<Object>} initialValues
101
- * @returns {Array.<Object>}
102
- */
103
- private _formatValuesForStore;
104
94
  }