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
@@ -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
- }