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
@@ -1,182 +0,0 @@
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
-
17
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
18
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
19
- /* eslint-disable @typescript-eslint/no-var-requires */
20
- /* eslint-disable @typescript-eslint/no-unsafe-call */
21
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
22
- /* eslint-disable @typescript-eslint/no-unsafe-return */
23
-
24
- import {
25
- of as observableOf,
26
- skip,
27
- take,
28
- tap,
29
- throwError,
30
- } from "rxjs";
31
-
32
- describe("core - eme - initMediaKeys", () => {
33
- beforeEach(() => {
34
- jest.resetModules();
35
- });
36
-
37
- it("should emit `created-media-keys` event once MediaKeys has been created", done => {
38
- const fakeResult = { mediaKeySystemAccess: { a: 5, keySystem: "toto" },
39
- mediaKeys: { b: 4 },
40
- stores: { loadedSessionsStore: { c: 3 },
41
- persistentSessionsStore: { d: 2 } },
42
- options: { e: 1 } };
43
- const spyGetMediaKeysInfos = jest.fn(() => {
44
- return observableOf(fakeResult);
45
- });
46
- jest.mock("../get_media_keys", () => ({
47
- __esModule: true as const,
48
- default: spyGetMediaKeysInfos,
49
- }));
50
- const spyAttachMediaKeys = jest.fn(() => {
51
- return observableOf(undefined);
52
- });
53
- const spyDisableOldMediaKeys = jest.fn(() => {
54
- return observableOf(undefined);
55
- });
56
- jest.mock("../attach_media_keys", () => ({
57
- __esModule: true as const,
58
- default: spyAttachMediaKeys,
59
- disableOldMediaKeys: spyDisableOldMediaKeys,
60
- }));
61
- const initMediaKeys = require("../init_media_keys").default;
62
-
63
- const mediaElement = document.createElement("video");
64
- const keySystemsConfigs = [{ l: 4 }, { d: 12 }];
65
- initMediaKeys(mediaElement, keySystemsConfigs)
66
- .pipe(take(1))
67
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
- .subscribe((result : { type : string; value : any }) => {
69
- expect(result.type).toEqual("created-media-keys");
70
- expect(result.value.mediaKeys).toEqual(fakeResult.mediaKeys);
71
- expect(result.value.mediaKeySystemAccess)
72
- .toEqual(fakeResult.mediaKeySystemAccess);
73
- expect(result.value.stores).toEqual(fakeResult.stores);
74
- expect(result.value.options).toEqual(fakeResult.options);
75
- expect(typeof result.value.canAttachMediaKeys.setValue === "function")
76
- .toBeTruthy();
77
-
78
- expect(spyGetMediaKeysInfos).toHaveBeenCalledTimes(1);
79
- expect(spyGetMediaKeysInfos)
80
- .toHaveBeenCalledWith(mediaElement, keySystemsConfigs);
81
-
82
- expect(spyAttachMediaKeys).toHaveBeenCalledTimes(0);
83
- done();
84
- });
85
- });
86
-
87
- it("should return MediaKeys information after media keys has been attached", (done) => {
88
- const fakeResult = { mediaKeySystemAccess: { a: 5, keySystem: "toto" },
89
- mediaKeys: { b: 4 },
90
- stores: { loadedSessionsStore: { c: 3 },
91
- persistentSessionsStore: { d: 2 } },
92
- options: { e: 1 } };
93
- const spyGetMediaKeysInfos = jest.fn(() => {
94
- return observableOf(fakeResult);
95
- });
96
- jest.mock("../get_media_keys", () => ({
97
- __esModule: true as const,
98
- default: spyGetMediaKeysInfos,
99
- }));
100
- const spyAttachMediaKeys = jest.fn(() => {
101
- return observableOf(undefined);
102
- });
103
- const spyDisableOldMediaKeys = jest.fn(() => {
104
- return observableOf(undefined);
105
- });
106
- jest.mock("../attach_media_keys", () => ({
107
- __esModule: true as const,
108
- default: spyAttachMediaKeys,
109
- disableOldMediaKeys: spyDisableOldMediaKeys,
110
- }));
111
- const initMediaKeys = require("../init_media_keys").default;
112
-
113
- const mediaElement = document.createElement("video");
114
- const keySystemsConfigs = [{ l: 4 }, { d: 12 }];
115
- initMediaKeys(mediaElement, keySystemsConfigs)
116
- .pipe(
117
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
118
- tap((evt: { type : string; value : any }) => {
119
- if (evt.type === "created-media-keys") {
120
- evt.value.canAttachMediaKeys.setValue(true);
121
- }
122
- }),
123
- skip(1)
124
- )
125
- .subscribe((result : unknown) => {
126
- expect(result).toEqual({
127
- type: "attached-media-keys",
128
- value: fakeResult,
129
- });
130
-
131
- expect(spyGetMediaKeysInfos).toHaveBeenCalledTimes(1);
132
- expect(spyGetMediaKeysInfos)
133
- .toHaveBeenCalledWith(mediaElement, keySystemsConfigs);
134
-
135
- expect(spyAttachMediaKeys).toHaveBeenCalledTimes(1);
136
- expect(spyAttachMediaKeys)
137
- .toHaveBeenCalledWith(
138
- mediaElement,
139
- { mediaKeySystemAccess: fakeResult.mediaKeySystemAccess,
140
- mediaKeys: fakeResult.mediaKeys,
141
- loadedSessionsStore: fakeResult.stores.loadedSessionsStore,
142
- keySystemOptions: fakeResult.options });
143
- done();
144
- });
145
- });
146
-
147
- it("Should throw if getMediaKeys throws", (done) => {
148
- const err = new Error("a");
149
- const spyGetMediaKeysInfos = jest.fn(() => throwError(() => err));
150
- jest.mock("../get_media_keys", () => ({
151
- __esModule: true as const,
152
- default: spyGetMediaKeysInfos,
153
- }));
154
- const spyAttachMediaKeys = jest.fn(() => {
155
- return observableOf(undefined);
156
- });
157
- const spyDisableOldMediaKeys = jest.fn(() => {
158
- return observableOf(undefined);
159
- });
160
- jest.mock("../attach_media_keys", () => ({
161
- __esModule: true as const,
162
- default: spyAttachMediaKeys,
163
- disableOldMediaKeys: spyDisableOldMediaKeys,
164
- }));
165
- const initMediaKeys = require("../init_media_keys").default;
166
-
167
- const mediaElement = document.createElement("video");
168
- const keySystemsConfigs = [{ l: 4 }, { d: 12 }];
169
- initMediaKeys(mediaElement, keySystemsConfigs)
170
- .subscribe(null, (e : Error) => {
171
- expect(e).toBe(err);
172
-
173
- expect(spyGetMediaKeysInfos).toHaveBeenCalledTimes(1);
174
- expect(spyGetMediaKeysInfos)
175
- .toHaveBeenCalledWith(mediaElement, keySystemsConfigs);
176
-
177
- expect(spyAttachMediaKeys).not.toHaveBeenCalled();
178
- done();
179
- });
180
- });
181
-
182
- });
@@ -1,96 +0,0 @@
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
-
17
- import {
18
- EMPTY,
19
- mapTo,
20
- merge as observableMerge,
21
- Observable,
22
- startWith,
23
- } from "rxjs";
24
- import { ICustomMediaKeySession } from "../../compat";
25
- import { IInitializationDataInfo } from "./types";
26
- import LoadedSessionsStore from "./utils/loaded_sessions_store";
27
-
28
- /**
29
- * Event emitted when an old MediaKeySession has been closed to respect the
30
- * maximum limit of concurrent MediaKeySession active.
31
- */
32
- export interface ICleanedOldSessionEvent {
33
- type : "cleaned-old-session";
34
- value : {
35
- /** The MediaKeySession cleaned. */
36
- mediaKeySession : MediaKeySession |
37
- ICustomMediaKeySession;
38
- /** The type of MediaKeySession (e.g. "temporary"). */
39
- sessionType : MediaKeySessionType;
40
- /** Initialization data assiociated to this MediaKeySession. */
41
- initializationData : IInitializationDataInfo;
42
- };
43
- }
44
-
45
- /**
46
- * Event emitted when we are beginning to close an old MediaKeySession to
47
- * respect the maximum limit of concurrent MediaKeySession active.
48
- */
49
- export interface ICleaningOldSessionEvent {
50
- type : "cleaning-old-session";
51
- value : {
52
- /** The MediaKeySession that we are currently cleaning. */
53
- mediaKeySession : MediaKeySession |
54
- ICustomMediaKeySession;
55
- /** The type of MediaKeySession (e.g. "temporary"). */
56
- sessionType : MediaKeySessionType;
57
- /** Initialization data assiociated to this MediaKeySession. */
58
- initializationData : IInitializationDataInfo;
59
- };
60
- }
61
-
62
- /**
63
- * Close sessions from the loadedSessionsStore to allow at maximum `limit`
64
- * stored MediaKeySessions in it.
65
- *
66
- * Emit event when a MediaKeySession begin to be closed and another when the
67
- * MediaKeySession is closed.
68
- * @param {Object} loadedSessionsStore
69
- * @returns {Observable}
70
- */
71
- export default function cleanOldLoadedSessions(
72
- loadedSessionsStore : LoadedSessionsStore,
73
- limit : number
74
- ) : Observable<ICleaningOldSessionEvent | ICleanedOldSessionEvent> {
75
- if (limit < 0 || limit >= loadedSessionsStore.getLength()) {
76
- return EMPTY;
77
- }
78
-
79
- const cleaningOldSessions$ : Array<Observable<ICleanedOldSessionEvent |
80
- ICleaningOldSessionEvent>> = [];
81
- const entries = loadedSessionsStore
82
- .getAll()
83
- .slice(); // clone
84
- const toDelete = entries.length - limit;
85
- for (let i = 0; i < toDelete; i++) {
86
- const entry = entries[i];
87
- const cleaning$ = loadedSessionsStore
88
- .closeSession(entry.initializationData)
89
- .pipe(mapTo({ type: "cleaned-old-session" as const,
90
- value: entry }),
91
- startWith({ type: "cleaning-old-session" as const,
92
- value: entry }));
93
- cleaningOldSessions$.push(cleaning$);
94
- }
95
- return observableMerge(...cleaningOldSessions$);
96
- }
@@ -1,62 +0,0 @@
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
-
17
- import {
18
- defer as observableDefer,
19
- EMPTY,
20
- ignoreElements ,
21
- Observable,
22
- } from "rxjs";
23
- import { shouldUnsetMediaKeys } from "../../compat/";
24
- import log from "../../log";
25
- import disposeMediaKeys from "./dispose_media_keys";
26
- import MediaKeysInfosStore from "./media_keys_infos_store";
27
-
28
- /**
29
- * Clear EME ressources that should be cleared when the current content stops
30
- * its playback.
31
- * @param {HTMLMediaElement} mediaElement
32
- * @returns {Observable}
33
- */
34
- export default function clearEMESession(
35
- mediaElement : HTMLMediaElement
36
- ) : Observable<never> {
37
- return observableDefer(() => {
38
- log.info("EME: Clearing-up EME session.");
39
- if (shouldUnsetMediaKeys()) {
40
- log.info("EME: disposing current MediaKeys.");
41
- return disposeMediaKeys(mediaElement)
42
- .pipe(ignoreElements());
43
- }
44
-
45
- const currentState = MediaKeysInfosStore.getState(mediaElement);
46
- if (currentState !== null &&
47
- currentState.keySystemOptions.closeSessionsOnStop === true)
48
- {
49
- log.info("EME: closing all current sessions.");
50
- return currentState.loadedSessionsStore.closeAllSessions()
51
- // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
52
- // first type parameter as `any` instead of the perfectly fine `unknown`,
53
- // leading to linter issues, as it forbids the usage of `any`.
54
- // This is why we're disabling the eslint rule.
55
- /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
56
- .pipe(ignoreElements());
57
- }
58
- log.info("EME: Nothing to clear. Returning right away. No state =",
59
- currentState === null);
60
- return EMPTY;
61
- });
62
- }
@@ -1,187 +0,0 @@
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
-
17
- import {
18
- catchError,
19
- defer as observableDefer,
20
- map,
21
- mergeMap,
22
- Observable,
23
- of as observableOf,
24
- } from "rxjs";
25
- import {
26
- ICustomMediaKeySession,
27
- loadSession,
28
- } from "../../compat";
29
- import log from "../../log";
30
- import {
31
- IInitializationDataInfo,
32
- IMediaKeySessionStores,
33
- } from "./types";
34
- import isSessionUsable from "./utils/is_session_usable";
35
- import LoadedSessionsStore from "./utils/loaded_sessions_store";
36
- import PersistentSessionsStore from "./utils/persistent_sessions_store";
37
-
38
- export interface INewSessionCreatedEvent {
39
- type : "created-session";
40
- value : { mediaKeySession : MediaKeySession |
41
- ICustomMediaKeySession;
42
- sessionType : MediaKeySessionType; };
43
- }
44
-
45
- export interface IPersistentSessionRecoveryEvent {
46
- type : "loaded-persistent-session";
47
- value : { mediaKeySession : MediaKeySession |
48
- ICustomMediaKeySession;
49
- sessionType : MediaKeySessionType; };
50
- }
51
-
52
- export type ICreateSessionEvent = INewSessionCreatedEvent |
53
- IPersistentSessionRecoveryEvent;
54
-
55
- /**
56
- * Create a new Session on the given MediaKeys, corresponding to the given
57
- * initializationData.
58
- * If session creating fails, remove the oldest MediaKeySession loaded and
59
- * retry.
60
- *
61
- * /!\ This only creates new sessions.
62
- * It will fail if loadedSessionsStore already has a MediaKeySession with
63
- * the given initializationData.
64
- * @param {Uint8Array} initData
65
- * @param {string|undefined} initDataType
66
- * @param {Object} mediaKeysInfos
67
- * @returns {Observable}
68
- */
69
- export default function createSession(
70
- stores : IMediaKeySessionStores,
71
- initializationData : IInitializationDataInfo,
72
- wantedSessionType : MediaKeySessionType
73
- ) : Observable<ICreateSessionEvent> {
74
- return observableDefer(() => {
75
- const { loadedSessionsStore,
76
- persistentSessionsStore } = stores;
77
-
78
- if (wantedSessionType === "temporary") {
79
- return createTemporarySession(loadedSessionsStore, initializationData);
80
- } else if (persistentSessionsStore === null) {
81
- log.warn("EME: Cannot create persistent MediaKeySession, " +
82
- "PersistentSessionsStore not created.");
83
- return createTemporarySession(loadedSessionsStore, initializationData);
84
- }
85
- return createAndTryToRetrievePersistentSession(loadedSessionsStore,
86
- persistentSessionsStore,
87
- initializationData);
88
- });
89
- }
90
-
91
- /**
92
- * Create a new temporary MediaKeySession linked to the given initData and
93
- * initDataType.
94
- * @param {Object} loadedSessionsStore
95
- * @param {Object} initData
96
- * @returns {Observable}
97
- */
98
- function createTemporarySession(
99
- loadedSessionsStore : LoadedSessionsStore,
100
- initData : IInitializationDataInfo
101
- ) : Observable<INewSessionCreatedEvent> {
102
- return observableDefer(() => {
103
- log.info("EME: Creating a new temporary session");
104
- const session = loadedSessionsStore.createSession(initData, "temporary");
105
- return observableOf({ type: "created-session" as const,
106
- value: { mediaKeySession: session,
107
- sessionType: "temporary" as const } });
108
- });
109
- }
110
-
111
- /**
112
- * Create a persistent MediaKeySession and try to load on it a previous
113
- * MediaKeySession linked to the same initData and initDataType.
114
- * @param {Object} loadedSessionsStore
115
- * @param {Object} persistentSessionsStore
116
- * @param {Object} initData
117
- * @returns {Observable}
118
- */
119
- function createAndTryToRetrievePersistentSession(
120
- loadedSessionsStore : LoadedSessionsStore,
121
- persistentSessionsStore : PersistentSessionsStore,
122
- initData : IInitializationDataInfo
123
- ) : Observable<INewSessionCreatedEvent | IPersistentSessionRecoveryEvent> {
124
- return observableDefer(() => {
125
- log.info("EME: Creating persistent MediaKeySession");
126
-
127
- const session = loadedSessionsStore
128
- .createSession(initData, "persistent-license");
129
- const storedEntry = persistentSessionsStore.getAndReuse(initData);
130
-
131
- if (storedEntry === null) {
132
- return observableOf({ type: "created-session" as const,
133
- value: { mediaKeySession: session,
134
- sessionType: "persistent-license" as const } });
135
- }
136
-
137
- /**
138
- * Helper function to close and restart the current persistent session
139
- * considered, and re-create it from scratch.
140
- * @returns {Observable}
141
- */
142
- const recreatePersistentSession = () : Observable<INewSessionCreatedEvent> => {
143
- log.info("EME: Removing previous persistent session.");
144
- if (persistentSessionsStore.get(initData) !== null) {
145
- persistentSessionsStore.delete(initData);
146
- }
147
- return loadedSessionsStore.closeSession(initData)
148
- .pipe(map(() => {
149
- const newSession = loadedSessionsStore.createSession(initData,
150
- "persistent-license");
151
- return { type: "created-session" as const,
152
- value: { mediaKeySession: newSession,
153
- sessionType: "persistent-license" } };
154
- }));
155
- };
156
-
157
- return loadSession(session, storedEntry.sessionId).pipe(
158
- mergeMap((hasLoadedSession) : Observable<ICreateSessionEvent> => {
159
- if (!hasLoadedSession) {
160
- log.warn("EME: No data stored for the loaded session");
161
- persistentSessionsStore.delete(initData);
162
- return observableOf({ type: "created-session" as const,
163
- value: { mediaKeySession: session,
164
- sessionType: "persistent-license" } });
165
- }
166
-
167
- if (hasLoadedSession && isSessionUsable(session)) {
168
- persistentSessionsStore.add(initData, session);
169
- log.info("EME: Succeeded to load persistent session.");
170
- return observableOf({ type: "loaded-persistent-session" as const,
171
- value: { mediaKeySession: session,
172
- sessionType: "persistent-license" } });
173
- }
174
-
175
- // Unusable persistent session: recreate a new session from scratch.
176
- log.warn("EME: Previous persistent session not usable anymore.");
177
- return recreatePersistentSession();
178
- }),
179
- catchError((err : unknown) : Observable<INewSessionCreatedEvent> => {
180
- log.warn("EME: Unable to load persistent session: " +
181
- (err instanceof Error ? err.toString() :
182
- "Unknown Error"));
183
- return recreatePersistentSession();
184
- })
185
- );
186
- });
187
- }
@@ -1,25 +0,0 @@
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
-
17
- import noop from "../../utils/noop";
18
- import disposeMediaKeys from "./dispose_media_keys";
19
-
20
- /**
21
- * Free up all ressources taken by the EME management.
22
- */
23
- export default function disposeEME(mediaElement : HTMLMediaElement) : void {
24
- disposeMediaKeys(mediaElement).subscribe(noop);
25
- }
@@ -1,46 +0,0 @@
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
-
17
- import {
18
- defer as observableDefer,
19
- mergeMap,
20
- Observable,
21
- of as observableOf,
22
- } from "rxjs";
23
- import { setMediaKeys } from "../../compat";
24
- import log from "../../log";
25
- import MediaKeysInfosStore from "./media_keys_infos_store";
26
-
27
- /**
28
- * @param {Object} mediaKeysInfos
29
- * @returns {Observable}
30
- */
31
- export default function disposeMediaKeys(
32
- mediaElement : HTMLMediaElement
33
- ) : Observable<unknown> {
34
- return observableDefer(() => {
35
- const currentState = MediaKeysInfosStore.getState(mediaElement);
36
- if (currentState === null) {
37
- return observableOf(null);
38
- }
39
-
40
- log.info("EME: Disposing of the current MediaKeys");
41
- const { loadedSessionsStore } = currentState;
42
- MediaKeysInfosStore.clearState(mediaElement);
43
- return loadedSessionsStore.closeAllSessions()
44
- .pipe(mergeMap(() => setMediaKeys(mediaElement, null)));
45
- });
46
- }