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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/.eslintrc.js +0 -4
  2. package/CHANGELOG.md +17 -2
  3. package/FILES.md +5 -4
  4. package/VERSION +1 -1
  5. package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
  6. package/dist/_esm5.processed/compat/browser_detection.js +4 -2
  7. package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
  8. package/dist/_esm5.processed/compat/eme/close_session.js +143 -36
  9. package/dist/_esm5.processed/compat/eme/custom_key_system_access.d.ts +15 -0
  10. package/dist/_esm5.processed/compat/eme/custom_key_system_access.js +1 -17
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +6 -7
  12. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
  13. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +20 -22
  14. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +58 -40
  15. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +49 -48
  16. package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
  17. package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
  18. package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
  19. package/dist/_esm5.processed/compat/eme/load_session.js +67 -17
  20. package/dist/_esm5.processed/compat/event_listeners.js +2 -1
  21. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
  22. package/dist/_esm5.processed/config.d.ts +166 -1080
  23. package/dist/_esm5.processed/config.js +17 -1119
  24. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
  25. package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
  26. package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
  27. package/dist/_esm5.processed/core/api/index.d.ts +2 -1
  28. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +2 -1
  29. package/dist/_esm5.processed/core/api/option_utils.d.ts +6 -3
  30. package/dist/_esm5.processed/core/api/option_utils.js +21 -7
  31. package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
  32. package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
  33. package/dist/_esm5.processed/core/api/public_api.js +73 -35
  34. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -49
  35. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +25 -65
  36. package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
  37. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +103 -0
  38. package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
  39. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +40 -0
  40. package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
  41. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +865 -0
  42. package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
  43. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
  44. package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
  45. package/dist/_esm5.processed/core/decrypt/create_session.js +173 -0
  46. package/dist/_esm5.processed/core/{eme/dispose_media_keys.d.ts → decrypt/dispose_decryption_resources.d.ts} +4 -4
  47. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
  48. package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
  49. package/dist/_esm5.processed/core/decrypt/find_key_system.js +299 -0
  50. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
  51. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
  52. package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
  53. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
  54. package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
  55. package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
  56. package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
  57. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
  58. package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
  59. package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
  60. package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
  61. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
  62. package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +119 -241
  63. package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
  64. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
  65. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
  66. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
  67. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
  68. package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
  69. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +84 -0
  70. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
  71. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
  72. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
  73. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
  74. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
  75. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
  76. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
  77. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
  78. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
  79. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
  80. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
  81. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
  82. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
  83. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +302 -0
  84. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
  85. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
  86. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
  87. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
  88. package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
  89. package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
  90. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
  91. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
  92. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -5
  93. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +1 -1
  94. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  95. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +2 -3
  96. package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
  97. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +1 -1
  98. package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
  99. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +6 -3
  100. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
  101. package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
  102. package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
  103. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
  104. package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
  105. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
  106. package/dist/_esm5.processed/core/init/types.d.ts +2 -4
  107. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
  108. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
  109. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
  110. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
  111. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
  112. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
  113. package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
  114. package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
  115. package/dist/_esm5.processed/core/stream/index.d.ts +1 -0
  116. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
  117. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
  118. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
  119. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.d.ts +15 -11
  120. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +6 -3
  121. package/dist/_esm5.processed/core/stream/period/index.d.ts +1 -0
  122. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +5 -12
  123. package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
  124. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +2 -2
  125. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
  126. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
  127. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
  128. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
  129. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
  130. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
  131. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
  132. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
  133. package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
  134. package/dist/_esm5.processed/default_config.d.ts +1114 -0
  135. package/dist/_esm5.processed/default_config.js +1145 -0
  136. package/dist/_esm5.processed/experimental/index.d.ts +2 -0
  137. package/dist/_esm5.processed/experimental/index.js +2 -0
  138. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
  139. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +6 -7
  140. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.js +2 -3
  141. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +15 -0
  142. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -2
  143. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +3 -5
  144. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +3 -5
  145. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +1 -2
  146. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.js +1 -2
  147. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.js +1 -2
  148. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -2
  149. package/dist/_esm5.processed/features/features_object.js +1 -1
  150. package/dist/_esm5.processed/features/initialize_features.js +1 -1
  151. package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
  152. package/dist/_esm5.processed/features/list/eme.js +5 -5
  153. package/dist/_esm5.processed/features/types.d.ts +3 -3
  154. package/dist/_esm5.processed/manifest/manifest.d.ts +1 -14
  155. package/dist/_esm5.processed/manifest/manifest.js +10 -74
  156. package/dist/_esm5.processed/manifest/representation.d.ts +35 -3
  157. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
  158. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
  159. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +1 -1
  160. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +87 -75
  161. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
  162. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +4 -5
  163. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
  164. package/dist/_esm5.processed/public_types.d.ts +3 -2
  165. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +1 -2
  166. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +4 -3
  167. package/dist/_esm5.processed/transports/dash/image_pipelines.js +60 -11
  168. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -2
  169. package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
  170. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +1 -1
  171. package/dist/_esm5.processed/transports/dash/segment_loader.js +3 -4
  172. package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
  173. package/dist/_esm5.processed/transports/dash/text_loader.js +1 -2
  174. package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
  175. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -3
  176. package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
  177. package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
  178. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +2 -3
  179. package/dist/_esm5.processed/transports/smooth/pipelines.js +71 -14
  180. package/dist/_esm5.processed/transports/smooth/segment_loader.js +3 -4
  181. package/dist/_esm5.processed/transports/types.d.ts +22 -0
  182. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -2
  183. package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -2
  184. package/dist/_esm5.processed/utils/cast_to_observable.js +1 -3
  185. package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
  186. package/dist/_esm5.processed/utils/deep_merge.js +53 -0
  187. package/dist/_esm5.processed/utils/reference.d.ts +29 -0
  188. package/dist/_esm5.processed/utils/reference.js +72 -24
  189. package/dist/_esm5.processed/utils/request/fetch.js +1 -2
  190. package/dist/_esm5.processed/utils/request/xhr.js +2 -3
  191. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
  192. package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
  193. package/dist/_esm5.processed/utils/task_canceller.js +3 -3
  194. package/dist/rx-player.js +4936 -3340
  195. package/dist/rx-player.min.js +1 -1
  196. package/dummy +1 -0
  197. package/{dist/_esm5.processed/utils/promise.d.ts → experimental/index.d.ts} +1 -2
  198. package/{dist/_esm5.processed/utils/promise.js → experimental/index.js} +1 -3
  199. package/package.json +32 -35
  200. package/{src/typings/pinkie.d.ts → scripts/build/templates/experimental/index.d.ts} +1 -4
  201. package/scripts/build/templates/experimental/index.js +16 -0
  202. package/scripts/update-version +2 -2
  203. package/sonar-project.properties +1 -1
  204. package/src/README.md +6 -6
  205. package/src/compat/__tests__/play.test.ts +2 -4
  206. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
  207. package/src/compat/browser_detection.ts +4 -2
  208. package/src/compat/eme/close_session.ts +89 -56
  209. package/src/compat/eme/custom_key_system_access.ts +1 -2
  210. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +6 -7
  211. package/src/compat/eme/custom_media_keys/index.ts +20 -38
  212. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +68 -52
  213. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +57 -56
  214. package/src/compat/eme/generate_key_request.ts +25 -33
  215. package/src/compat/eme/load_session.ts +28 -31
  216. package/src/compat/event_listeners.ts +2 -1
  217. package/src/compat/should_favour_custom_safari_EME.ts +5 -2
  218. package/src/config.ts +17 -1210
  219. package/src/core/README.md +1 -1
  220. package/src/core/abr/bandwidth_estimator.ts +4 -4
  221. package/src/core/abr/network_analyzer.ts +5 -6
  222. package/src/core/api/__tests__/get_player_state.test.ts +3 -3
  223. package/src/core/api/__tests__/option_utils.test.ts +29 -17
  224. package/src/core/api/get_player_state.ts +1 -1
  225. package/src/core/api/index.ts +3 -0
  226. package/src/core/api/option_utils.ts +42 -23
  227. package/src/core/api/playback_observer.ts +12 -8
  228. package/src/core/api/public_api.ts +152 -113
  229. package/src/core/decrypt/README.md +22 -0
  230. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
  231. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
  232. package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
  233. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
  234. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
  235. package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +31 -93
  236. package/src/core/{eme → decrypt}/attach_media_keys.ts +48 -56
  237. package/src/core/decrypt/clear_on_stop.ts +47 -0
  238. package/src/core/decrypt/content_decryptor.ts +1157 -0
  239. package/src/core/decrypt/create_or_load_session.ts +130 -0
  240. package/src/core/decrypt/create_session.ts +174 -0
  241. package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
  242. package/src/core/{eme → decrypt}/find_key_system.ts +111 -122
  243. package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
  244. package/src/core/decrypt/get_media_keys.ts +145 -0
  245. package/src/core/{eme → decrypt}/index.ts +11 -8
  246. package/src/core/decrypt/init_media_keys.ts +51 -0
  247. package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
  248. package/src/core/decrypt/set_server_certificate.ts +104 -0
  249. package/src/core/{eme → decrypt}/types.ts +128 -258
  250. package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
  251. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
  252. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
  253. package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
  254. package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
  255. package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +19 -20
  256. package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
  257. package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
  258. package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
  259. package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
  260. package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
  261. package/src/core/decrypt/utils/key_session_record.ts +175 -0
  262. package/src/core/decrypt/utils/loaded_sessions_store.ts +317 -0
  263. package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
  264. package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
  265. package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
  266. package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
  267. package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -7
  268. package/src/core/fetchers/segment/segment_fetcher.ts +4 -4
  269. package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
  270. package/src/core/fetchers/utils/try_urls_with_backoff.ts +2 -3
  271. package/src/core/init/.initialize_media_source.ts.un~ +0 -0
  272. package/src/core/init/get_initial_time.ts +2 -1
  273. package/src/core/init/initialize_directfile.ts +17 -20
  274. package/src/core/init/initialize_media_source.ts +44 -106
  275. package/src/core/init/link_drm_and_content.ts +176 -0
  276. package/src/core/init/manifest_update_scheduler.ts +5 -3
  277. package/src/core/init/stall_avoider.ts +6 -5
  278. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
  279. package/src/core/init/types.ts +1 -39
  280. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
  281. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +3 -4
  282. package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
  283. package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
  284. package/src/core/stream/events_generators.ts +9 -4
  285. package/src/core/stream/index.ts +1 -0
  286. package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
  287. package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
  288. package/src/core/stream/period/get_adaptation_switch_strategy.ts +25 -15
  289. package/src/core/stream/period/index.ts +1 -0
  290. package/src/core/stream/period/period_stream.ts +10 -16
  291. package/src/core/stream/representation/force_garbage_collection.ts +2 -2
  292. package/src/core/stream/representation/get_buffer_status.ts +28 -16
  293. package/src/core/stream/representation/get_needed_segments.ts +124 -28
  294. package/src/core/stream/representation/get_segment_priority.ts +1 -2
  295. package/src/core/stream/representation/push_media_segment.ts +3 -2
  296. package/src/core/stream/representation/representation_stream.ts +30 -7
  297. package/src/core/stream/types.ts +1 -1
  298. package/src/default_config.ts +1241 -0
  299. package/src/experimental/index.ts +5 -0
  300. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
  301. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +7 -7
  302. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
  303. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +9 -10
  304. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +2 -4
  305. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +2 -3
  306. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +1 -2
  307. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +3 -5
  308. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +3 -5
  309. package/src/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.ts +1 -2
  310. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.ts +1 -2
  311. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts +1 -2
  312. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.ts +1 -2
  313. package/src/features/__tests__/initialize_features.test.ts +2 -2
  314. package/src/features/features_object.ts +1 -1
  315. package/src/features/initialize_features.ts +1 -1
  316. package/src/features/list/__tests__/eme.test.ts +5 -5
  317. package/src/features/list/eme.ts +5 -5
  318. package/src/features/types.ts +3 -10
  319. package/src/manifest/manifest.ts +6 -76
  320. package/src/manifest/representation.ts +36 -3
  321. package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
  322. package/src/parsers/manifest/dash/common/indexes/template.ts +1 -2
  323. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +1 -1
  324. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +109 -64
  325. package/src/parsers/manifest/dash/common/parse_mpd.ts +1 -2
  326. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +4 -5
  327. package/src/parsers/manifest/smooth/create_parser.ts +1 -0
  328. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
  329. package/src/public_types.ts +6 -1
  330. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +1 -2
  331. package/src/transports/dash/image_pipelines.ts +15 -14
  332. package/src/transports/dash/init_segment_loader.ts +1 -2
  333. package/src/transports/dash/manifest_parser.ts +2 -3
  334. package/src/transports/dash/segment_loader.ts +4 -5
  335. package/src/transports/dash/segment_parser.ts +5 -0
  336. package/src/transports/dash/text_loader.ts +2 -3
  337. package/src/transports/dash/text_parser.ts +8 -0
  338. package/src/transports/local/segment_loader.ts +2 -3
  339. package/src/transports/local/segment_parser.ts +4 -0
  340. package/src/transports/local/text_parser.ts +8 -0
  341. package/src/transports/metaplaylist/pipelines.ts +2 -3
  342. package/src/transports/smooth/pipelines.ts +26 -14
  343. package/src/transports/smooth/segment_loader.ts +5 -6
  344. package/src/transports/types.ts +22 -0
  345. package/src/transports/utils/call_custom_manifest_loader.ts +1 -2
  346. package/src/utils/__tests__/deep_merge.test.ts +48 -0
  347. package/src/utils/cancellable_sleep.ts +1 -2
  348. package/src/utils/cast_to_observable.ts +0 -2
  349. package/src/utils/deep_merge.ts +46 -0
  350. package/src/utils/reference.ts +116 -23
  351. package/src/utils/request/fetch.ts +1 -2
  352. package/src/utils/request/xhr.ts +3 -3
  353. package/src/utils/rx-from_cancellable_promise.ts +7 -2
  354. package/src/utils/task_canceller.ts +6 -4
  355. package/tsconfig.json +0 -1
  356. package/tsconfig.modules.json +0 -1
  357. package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
  358. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
  359. package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
  360. package/dist/_esm5.processed/core/eme/create_session.js +0 -126
  361. package/dist/_esm5.processed/core/eme/dispose_eme.d.ts +0 -19
  362. package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
  363. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
  364. package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
  365. package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
  366. package/dist/_esm5.processed/core/eme/find_key_system.js +0 -253
  367. package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
  368. package/dist/_esm5.processed/core/eme/get_session.js +0 -68
  369. package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
  370. package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
  371. package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
  372. package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
  373. package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
  374. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
  375. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
  376. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
  377. package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
  378. package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
  379. package/src/core/eme/README.md +0 -26
  380. package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
  381. package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
  382. package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
  383. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
  384. package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
  385. package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
  386. package/src/core/eme/clear_eme_session.ts +0 -62
  387. package/src/core/eme/create_session.ts +0 -187
  388. package/src/core/eme/dispose_eme.ts +0 -25
  389. package/src/core/eme/dispose_media_keys.ts +0 -46
  390. package/src/core/eme/eme_manager.ts +0 -387
  391. package/src/core/eme/get_media_keys.ts +0 -141
  392. package/src/core/eme/get_session.ts +0 -135
  393. package/src/core/eme/init_media_keys.ts +0 -106
  394. package/src/core/eme/set_server_certificate.ts +0 -115
  395. package/src/core/eme/utils/close_session.ts +0 -113
  396. package/src/core/eme/utils/init_data_store.ts +0 -234
  397. package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
  398. package/src/core/init/create_eme_manager.ts +0 -95
  399. package/src/utils/__tests__/promise.test.ts +0 -23
  400. package/src/utils/promise.ts +0 -20
@@ -0,0 +1,5 @@
1
+ import configHandler from "../config";
2
+
3
+ export {
4
+ configHandler as config,
5
+ };
@@ -24,6 +24,7 @@ export default function pushData(
24
24
  adaptation: Adaptation;
25
25
  representation: Representation;
26
26
  segment: ISegment;
27
+ chunkSize: number | undefined;
27
28
  start: number;
28
29
  end: number; },
29
30
  parsed: ISegmentParserParsedMediaChunk<Uint8Array | ArrayBuffer>,
@@ -35,7 +35,6 @@ import createSegmentFetcher, {
35
35
  import log from "../../../log";
36
36
  import { ISegment } from "../../../manifest";
37
37
  import objectAssign from "../../../utils/object_assign";
38
- import PPromise from "../../../utils/promise";
39
38
  import { freeRequest } from "./create_request";
40
39
  import getCompleteSegmentId from "./get_complete_segment_id";
41
40
  import getContentInfos from "./get_content_infos";
@@ -110,13 +109,13 @@ export default class VideoThumbnailLoader {
110
109
 
111
110
  const manifest = this._player.getManifest();
112
111
  if (manifest === null) {
113
- return PPromise.reject(
112
+ return Promise.reject(
114
113
  new VideoThumbnailLoaderError("NO_MANIFEST",
115
114
  "No manifest available."));
116
115
  }
117
116
  const contentInfos = getContentInfos(time, manifest);
118
117
  if (contentInfos === null) {
119
- return PPromise.reject(
118
+ return Promise.reject(
120
119
  new VideoThumbnailLoaderError("NO_TRACK",
121
120
  "Couldn't find track for this time."));
122
121
  }
@@ -125,7 +124,7 @@ export default class VideoThumbnailLoader {
125
124
  .representation.index.getSegments(time, MIN_NEEDED_DATA_AFTER_TIME);
126
125
 
127
126
  if (segments.length === 0) {
128
- return PPromise.reject(
127
+ return Promise.reject(
129
128
  new VideoThumbnailLoaderError("NO_THUMBNAIL",
130
129
  "Couldn't find thumbnail for the given time."));
131
130
  }
@@ -147,7 +146,7 @@ export default class VideoThumbnailLoader {
147
146
  if (segments.length === 0) {
148
147
  this._videoElement.currentTime = time;
149
148
  log.debug("VTL: Thumbnails already loaded.", time);
150
- return PPromise.resolve(time);
149
+ return Promise.resolve(time);
151
150
  }
152
151
 
153
152
  log.debug("VTL: Found thumbnail for time", time, segments);
@@ -193,7 +192,7 @@ export default class VideoThumbnailLoader {
193
192
  "VideoThumbnailLoaderError: No " +
194
193
  "imported loader for this transport type: " +
195
194
  contentInfos.manifest.transport);
196
- return PPromise.reject(error);
195
+ return Promise.reject(error);
197
196
  }
198
197
  const killTask$ = new Subject<void>();
199
198
  const abortError$ = killTask$.pipe(
@@ -249,7 +248,8 @@ export default class VideoThumbnailLoader {
249
248
  if (end === undefined) {
250
249
  end = start + (segment.duration / segment.timescale);
251
250
  }
252
- const inventoryInfos = objectAssign({ segment,
251
+ const inventoryInfos = objectAssign({ chunkSize: data.chunkSize,
252
+ segment,
253
253
  start,
254
254
  end }, contentInfos);
255
255
  return pushData(inventoryInfos,
@@ -20,11 +20,8 @@
20
20
  /* eslint-disable @typescript-eslint/no-unsafe-call */
21
21
  /* eslint-disable @typescript-eslint/no-unsafe-assignment */
22
22
  /* eslint-disable @typescript-eslint/no-unsafe-return */
23
+ /* eslint-disable no-restricted-properties */
23
24
 
24
- import {
25
- map,
26
- of as observableOf,
27
- } from "rxjs";
28
25
  import { ProberStatus } from "../../types";
29
26
 
30
27
 
@@ -81,7 +78,7 @@ describe("MediaCapabilitiesProber probers - DRMInfos", () => {
81
78
  },
82
79
  };
83
80
  const mockRequestMediaKeySystemAccess = jest.fn(() => {
84
- return observableOf({
81
+ return Promise.resolve({
85
82
  getConfiguration: () => ({}),
86
83
  });
87
84
  });
@@ -114,11 +111,7 @@ describe("MediaCapabilitiesProber probers - DRMInfos", () => {
114
111
  };
115
112
  const mockRequestMediaKeySystemAccess = jest.fn(
116
113
  () => {
117
- return observableOf(null).pipe(
118
- map(() => {
119
- throw new Error();
120
- })
121
- );
114
+ return Promise.reject(new Error());
122
115
  }
123
116
  );
124
117
  jest.mock("../../../../../compat", () => ({
@@ -20,9 +20,8 @@
20
20
  /* eslint-disable @typescript-eslint/no-unsafe-call */
21
21
  /* eslint-disable @typescript-eslint/no-unsafe-assignment */
22
22
  /* eslint-disable @typescript-eslint/no-unsafe-return */
23
+ /* eslint-disable no-restricted-properties */
23
24
 
24
- import { of as observableOf } from "rxjs";
25
- import PPromise from "../../../../../utils/promise";
26
25
  import { ProberStatus } from "../../types";
27
26
 
28
27
 
@@ -57,10 +56,10 @@ describe("MediaCapabilitiesProber probers - HDCPPolicy", () => {
57
56
 
58
57
  it("should resolve with `Unknown` if no getStatusForPolicy API", (done) => {
59
58
  const mockCreateMediaKeys = jest.fn(() => {
60
- return PPromise.resolve({});
59
+ return Promise.resolve({});
61
60
  });
62
61
  const mockRequestMediaKeySystemAcces = jest.fn(() => {
63
- return observableOf({
62
+ return Promise.resolve({
64
63
  createMediaKeys: mockCreateMediaKeys,
65
64
  });
66
65
  });
@@ -85,12 +84,12 @@ describe("MediaCapabilitiesProber probers - HDCPPolicy", () => {
85
84
 
86
85
  it("should resolve with `Supported` if policy is supported", (done) => {
87
86
  const mockCreateMediaKeys = jest.fn(() => {
88
- return PPromise.resolve({
89
- getStatusForPolicy: () => PPromise.resolve("usable"),
87
+ return Promise.resolve({
88
+ getStatusForPolicy: () => Promise.resolve("usable"),
90
89
  });
91
90
  });
92
91
  const mockRequestMediaKeySystemAcces = jest.fn(() => {
93
- return observableOf({
92
+ return Promise.resolve({
94
93
  createMediaKeys: mockCreateMediaKeys,
95
94
  });
96
95
  });
@@ -115,12 +114,12 @@ describe("MediaCapabilitiesProber probers - HDCPPolicy", () => {
115
114
 
116
115
  it("should resolve with `NotSupported` if policy is not supported", (done) => {
117
116
  const mockCreateMediaKeys = jest.fn(() => {
118
- return PPromise.resolve({
119
- getStatusForPolicy: () => PPromise.resolve("not-usable"),
117
+ return Promise.resolve({
118
+ getStatusForPolicy: () => Promise.resolve("not-usable"),
120
119
  });
121
120
  });
122
121
  const mockRequestMediaKeySystemAcces = jest.fn(() => {
123
- return observableOf({
122
+ return Promise.resolve({
124
123
  createMediaKeys: mockCreateMediaKeys,
125
124
  });
126
125
  });
@@ -23,8 +23,6 @@
23
23
  /* eslint-disable @typescript-eslint/strict-boolean-expressions */
24
24
  /* eslint-disable @typescript-eslint/no-explicit-any */
25
25
 
26
- import PPromise from "../../../../../utils/promise";
27
-
28
26
  import probeDecodingInfos from "../../probers/decodingInfo";
29
27
  import {
30
28
  IMediaConfiguration,
@@ -42,9 +40,9 @@ const origMediaCapabilities = (navigator as any).mediaCapabilities;
42
40
  function stubDecodingInfo(isSupported: boolean, mustReject?: boolean) {
43
41
  const decodingInfoStub = jest.fn(() => {
44
42
  if (mustReject === true) {
45
- return PPromise.reject();
43
+ return Promise.reject();
46
44
  } else {
47
- return PPromise.resolve({
45
+ return Promise.resolve({
48
46
  supported: isSupported,
49
47
  });
50
48
  }
@@ -15,7 +15,6 @@
15
15
  */
16
16
 
17
17
  import arrayFind from "../../../../utils/array_find";
18
- import PPromise from "../../../../utils/promise";
19
18
  import log from "../log";
20
19
  import {
21
20
  ICompatibleKeySystem,
@@ -79,7 +78,7 @@ const mediaCapabilitiesProber = {
79
78
  */
80
79
  getStatusForHDCP(hdcp: string) : Promise<string> {
81
80
  if (hdcp === undefined || hdcp.length === 0) {
82
- return PPromise.reject("MediaCapabilitiesProbers >>> Bad Arguments: " +
81
+ return Promise.reject("MediaCapabilitiesProbers >>> Bad Arguments: " +
83
82
  "No HDCP Policy specified.");
84
83
  }
85
84
  const config = {
@@ -152,7 +151,7 @@ const mediaCapabilitiesProber = {
152
151
  })
153
152
  );
154
153
  });
155
- return PPromise.all(promises)
154
+ return Promise.all(promises)
156
155
  .then((configs) => {
157
156
  // TODO I added those lines to work-around a type issue but does it
158
157
  // really correspond to the original intent? I find it hard to
@@ -13,7 +13,6 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import PPromise from "../../../../utils/promise";
17
16
  import getProbedConfiguration, { ICapabilitiesTypes } from "../capabilities";
18
17
  import log from "../log";
19
18
  import probers, {
@@ -102,7 +101,7 @@ function probeMediaConfiguration(
102
101
  }
103
102
  }
104
103
 
105
- return PPromise.all(promises).then(() => {
104
+ return Promise.all(promises).then(() => {
106
105
  if (globalStatus === undefined) {
107
106
  globalStatus = ProberStatus.Unknown;
108
107
  }
@@ -14,9 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { lastValueFrom } from "rxjs";
18
17
  import { requestMediaKeySystemAccess } from "../../../../compat";
19
- import PPromise from "../../../../utils/promise";
20
18
  import log from "../log";
21
19
  import {
22
20
  ICompatibleKeySystem,
@@ -38,7 +36,7 @@ export default function probeDRMInfos(
38
36
  ): Promise<[ProberStatus, ICompatibleKeySystem?]> {
39
37
  const keySystem = mediaConfig.keySystem;
40
38
  if (keySystem == null || keySystem.type == null) {
41
- return PPromise.reject("MediaCapabilitiesProber >>> API_CALL: " +
39
+ return Promise.reject("MediaCapabilitiesProber >>> API_CALL: " +
42
40
  "Missing a type argument to request a media key system access.");
43
41
  }
44
42
 
@@ -52,10 +50,10 @@ export default function probeDRMInfos(
52
50
  "Your browser has no API to request a media key system access.");
53
51
  // In that case, the API lack means that no EME workflow may be started.
54
52
  // So, the DRM configuration is not supported.
55
- return PPromise.resolve([ProberStatus.NotSupported, result]);
53
+ return Promise.resolve([ProberStatus.NotSupported, result]);
56
54
  }
57
55
 
58
- return lastValueFrom(requestMediaKeySystemAccess(type, [configuration]))
56
+ return requestMediaKeySystemAccess(type, [configuration])
59
57
  .then((keySystemAccess) => {
60
58
  result.compatibleConfiguration = keySystemAccess.getConfiguration();
61
59
  const status : [ProberStatus, ICompatibleKeySystem?] =
@@ -14,9 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { lastValueFrom } from "rxjs";
18
17
  import { requestMediaKeySystemAccess } from "../../../../compat";
19
- import PPromise from "../../../../utils/promise";
20
18
  import {
21
19
  IMediaConfiguration,
22
20
  ProberStatus,
@@ -39,11 +37,11 @@ export default function probeHDCPPolicy(
39
37
  config: IMediaConfiguration
40
38
  ): Promise<[ProberStatus]> {
41
39
  if (requestMediaKeySystemAccess == null) {
42
- return PPromise.reject("MediaCapabilitiesProber >>> API_CALL: " +
40
+ return Promise.reject("MediaCapabilitiesProber >>> API_CALL: " +
43
41
  "API not available");
44
42
  }
45
43
  if (config.hdcp == null) {
46
- return PPromise.reject("MediaCapabilitiesProber >>> API_CALL: " +
44
+ return Promise.reject("MediaCapabilitiesProber >>> API_CALL: " +
47
45
  "Missing policy argument for calling getStatusForPolicy.");
48
46
  }
49
47
 
@@ -61,7 +59,7 @@ export default function probeHDCPPolicy(
61
59
  }],
62
60
  };
63
61
 
64
- return lastValueFrom(requestMediaKeySystemAccess(keySystem, [drmConfig]))
62
+ return requestMediaKeySystemAccess(keySystem, [drmConfig])
65
63
  .then((mediaKeysSystemAccess) => {
66
64
  return mediaKeysSystemAccess.createMediaKeys().then((mediaKeys) => {
67
65
  if (!("getStatusForPolicy" in mediaKeys)) {
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import PPromise from "../../../../utils/promise";
18
17
  import {
19
18
  IMediaConfiguration,
20
19
  ProberStatus,
@@ -31,7 +30,7 @@ export interface IDecodingInfos {
31
30
  * @returns {Promise}
32
31
  */
33
32
  function isMediaCapabilitiesAPIAvailable(): Promise<void> {
34
- return new PPromise((resolve) => {
33
+ return new Promise((resolve) => {
35
34
  if (!("mediaCapabilities" in navigator)) {
36
35
  throw new Error("MediaCapabilitiesProber >>> API_CALL: " +
37
36
  "MediaCapabilities API not available");
@@ -15,7 +15,6 @@
15
15
  */
16
16
 
17
17
  import { MediaSource_ } from "../../../../compat";
18
- import PPromise from "../../../../utils/promise";
19
18
  import {
20
19
  IMediaConfiguration,
21
20
  ProberStatus,
@@ -28,7 +27,7 @@ import {
28
27
  export default function probeContentType(
29
28
  config: IMediaConfiguration
30
29
  ): Promise<[ProberStatus]> {
31
- return new PPromise((resolve) => {
30
+ return new Promise((resolve) => {
32
31
  if (MediaSource_ == null) {
33
32
  throw new Error("MediaCapabilitiesProber >>> API_CALL: " +
34
33
  "MediaSource API not available");
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import PPromise from "../../../../../utils/promise";
18
17
  import {
19
18
  IMediaConfiguration,
20
19
  ProberStatus,
@@ -33,7 +32,7 @@ export type ISupportWithFeatures = ""|"Maybe"|"Not Supported"|"Probably";
33
32
  * @returns {Promise}
34
33
  */
35
34
  function isTypeSupportedWithFeaturesAPIAvailable(): Promise<void> {
36
- return new PPromise((resolve) => {
35
+ return new Promise((resolve) => {
37
36
  if (!("MSMediaKeys" in window)) {
38
37
  throw new Error("MediaCapabilitiesProber >>> API_CALL: " +
39
38
  "MSMediaKeys API not available");
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import PPromise from "../../../../utils/promise";
18
17
  import {
19
18
  IMediaConfiguration,
20
19
  ProberStatus,
@@ -27,7 +26,7 @@ import {
27
26
  export default function probeMatchMedia(
28
27
  config: IMediaConfiguration
29
28
  ): Promise<[ProberStatus]> {
30
- return new PPromise((resolve) => {
29
+ return new Promise((resolve) => {
31
30
  /* eslint-disable @typescript-eslint/unbound-method */
32
31
  if (typeof window.matchMedia !== "function") {
33
32
  /* eslint-enable @typescript-eslint/unbound-method */
@@ -93,7 +93,7 @@ describe("Features - initializeFeaturesObject", () => {
93
93
  nativeTextTracksParsers: {},
94
94
  htmlTextTracksBuffer: null,
95
95
  htmlTextTracksParsers: {},
96
- emeManager: null,
96
+ ContentDecryptor: null,
97
97
  directfile: null,
98
98
  };
99
99
  jest.mock("../features_object", () => ({
@@ -113,7 +113,7 @@ describe("Features - initializeFeaturesObject", () => {
113
113
  js: require("../../parsers/manifest/dash/js-parser").default,
114
114
  wasm: null,
115
115
  },
116
- emeManager: require("../../core/eme/index").default,
116
+ ContentDecryptor: require("../../core/decrypt/index").default,
117
117
  directfile: {
118
118
  initDirectFile: require("../../core/init/initialize_directfile").default,
119
119
  mediaElementTrackChoiceManager:
@@ -23,7 +23,7 @@ import { IFeaturesObject } from "./types";
23
23
  const features : IFeaturesObject = { dashParsers: { wasm: null,
24
24
  js: null },
25
25
  directfile: null,
26
- emeManager: null,
26
+ ContentDecryptor: null,
27
27
  htmlTextTracksBuffer: null,
28
28
  htmlTextTracksParsers: {},
29
29
  imageBuffer: null,
@@ -27,7 +27,7 @@ import features from "./features_object";
27
27
  */
28
28
  export default function initializeFeaturesObject() : void {
29
29
  if (__FEATURES__.EME === __FEATURES__.IS_ENABLED as number) {
30
- features.emeManager = require("../core/eme/index.ts").default;
30
+ features.ContentDecryptor = require("../core/decrypt/index.ts").default;
31
31
  }
32
32
 
33
33
  if (__FEATURES__.BIF_PARSER === __FEATURES__.IS_ENABLED as number) {
@@ -17,20 +17,20 @@
17
17
  /* eslint-disable @typescript-eslint/no-unsafe-member-access */
18
18
  /* eslint-disable @typescript-eslint/no-unsafe-argument */
19
19
 
20
- import emeManager from "../../../core/eme";
20
+ import ContentDecryptor from "../../../core/decrypt";
21
21
  import addEMEFeature from "../eme";
22
22
 
23
- jest.mock("../../../core/eme", () => ({
23
+ jest.mock("../../../core/decrypt", () => ({
24
24
  __esModule: true as const,
25
25
  default: jest.fn(),
26
26
  }));
27
27
 
28
28
  describe("Features list - EME", () => {
29
- it("should add EME in the current features", () => {
29
+ it("should add the ContentDecryptor in the current features", () => {
30
30
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
31
  const featureObject : any = {};
32
32
  addEMEFeature(featureObject);
33
- expect(featureObject).toEqual({ emeManager });
34
- expect(featureObject.emeManager).toBe(emeManager);
33
+ expect(featureObject).toEqual({ ContentDecryptor });
34
+ expect(featureObject.ContentDecryptor).toBe(ContentDecryptor);
35
35
  });
36
36
  });
@@ -14,16 +14,16 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import EMEManager from "../../core/eme";
17
+ import ContentDecryptor from "../../core/decrypt";
18
18
  import { IFeaturesObject } from "../types";
19
19
 
20
20
  /**
21
21
  * Add ability to play encrypted contents
22
22
  * @param {Object} features
23
23
  */
24
- function addEMEManagerFeature(features : IFeaturesObject) : void {
25
- features.emeManager = EMEManager;
24
+ function addEMEFeature(features : IFeaturesObject) : void {
25
+ features.ContentDecryptor = ContentDecryptor;
26
26
  }
27
27
 
28
- export { addEMEManagerFeature as EME };
29
- export default addEMEManagerFeature;
28
+ export { addEMEFeature as EME };
29
+ export default addEMEFeature;
@@ -17,11 +17,7 @@
17
17
  import { Observable } from "rxjs";
18
18
  // eslint-disable-next-line max-len
19
19
  import MediaElementTrackChoiceManager from "../core/api/media_element_track_choice_manager";
20
- import {
21
- IContentProtection,
22
- IEMEManagerEvent,
23
- IKeySystemOption,
24
- } from "../core/eme";
20
+ import type ContentDecryptor from "../core/decrypt";
25
21
  import {
26
22
  IDirectfileEvent,
27
23
  IDirectFileOptions,
@@ -41,10 +37,7 @@ import { ITransportFunction } from "../transports";
41
37
  export type IDirectFileInit = (args : IDirectFileOptions) =>
42
38
  Observable<IDirectfileEvent>;
43
39
 
44
- export type IEMEManager = (mediaElement : HTMLMediaElement,
45
- keySystems: IKeySystemOption[],
46
- contentProtections$ : Observable<IContentProtection>) =>
47
- Observable<IEMEManagerEvent>;
40
+ export type IContentDecryptorClass = typeof ContentDecryptor;
48
41
 
49
42
  export type IHTMLTextTracksBuffer =
50
43
  new(mediaElement : HTMLMediaElement,
@@ -89,7 +82,7 @@ export interface IFeaturesObject {
89
82
  directfile : { initDirectFile: IDirectFileInit;
90
83
  mediaElementTrackChoiceManager : IMediaElementTrackChoiceManager; } |
91
84
  null;
92
- emeManager : IEMEManager|null;
85
+ ContentDecryptor : IContentDecryptorClass|null;
93
86
  htmlTextTracksBuffer : IHTMLTextTracksBuffer|null;
94
87
  htmlTextTracksParsers : Partial<Record<string, IHTMLTextTracksParserFn>>;
95
88
  imageBuffer : IImageBuffer|null;
@@ -14,13 +14,11 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { IInitializationDataInfo } from "../core/eme";
18
17
  import {
19
18
  ICustomError,
20
19
  MediaError,
21
20
  } from "../errors";
22
21
  import { IParsedManifest } from "../parsers/manifest";
23
- import areArraysOfNumbersEqual from "../utils/are_arrays_of_numbers_equal";
24
22
  import arrayFind from "../utils/array_find";
25
23
  import EventEmitter from "../utils/event_emitter";
26
24
  import idGenerator from "../utils/id_generator";
@@ -502,73 +500,10 @@ export default class Manifest extends EventEmitter<IManifestEvents> {
502
500
  * changes performed.
503
501
  * @param {Object} keyUpdates
504
502
  */
505
- public updateDeciperabilitiesBasedOnKeyIds(
506
- { whitelistedKeyIds,
507
- blacklistedKeyIDs } : { whitelistedKeyIds : Uint8Array[];
508
- blacklistedKeyIDs : Uint8Array[]; }
503
+ public updateRepresentationsDeciperability(
504
+ isDecipherableCb : (rep : Representation) => boolean | undefined
509
505
  ) : void {
510
- const updates = updateDeciperability(this, (representation) => {
511
- if (representation.decipherable === false ||
512
- representation.contentProtections === undefined)
513
- {
514
- return representation.decipherable;
515
- }
516
- const contentKIDs = representation.contentProtections.keyIds;
517
- for (let i = 0; i < contentKIDs.length; i++) {
518
- const elt = contentKIDs[i];
519
- for (let j = 0; j < blacklistedKeyIDs.length; j++) {
520
- if (areArraysOfNumbersEqual(blacklistedKeyIDs[j], elt.keyId)) {
521
- return false;
522
- }
523
- }
524
- for (let j = 0; j < whitelistedKeyIds.length; j++) {
525
- if (areArraysOfNumbersEqual(whitelistedKeyIds[j], elt.keyId)) {
526
- return true;
527
- }
528
- }
529
- }
530
- return representation.decipherable;
531
- });
532
-
533
- if (updates.length > 0) {
534
- this.trigger("decipherabilityUpdate", updates);
535
- }
536
- }
537
-
538
- /**
539
- * Look in the Manifest for Representations linked to the given content
540
- * protection initialization data and mark them as being impossible to
541
- * decrypt.
542
- * Then trigger a "decipherabilityUpdate" event to notify everyone of the
543
- * changes performed.
544
- * @param {Object} initData
545
- */
546
- public addUndecipherableProtectionData(initData : IInitializationDataInfo) : void {
547
- const updates = updateDeciperability(this, (representation) => {
548
- if (representation.decipherable === false) {
549
- return false;
550
- }
551
- const segmentProtections = representation.contentProtections?.initData ?? [];
552
- for (let i = 0; i < segmentProtections.length; i++) {
553
- if (initData.type === undefined ||
554
- segmentProtections[i].type === initData.type)
555
- {
556
- const containedInitData = initData.values.every(undecipherableVal => {
557
- return segmentProtections[i].values.some(currVal => {
558
- return (undecipherableVal.systemId === undefined ||
559
- currVal.systemId === undecipherableVal.systemId) &&
560
- areArraysOfNumbersEqual(currVal.data,
561
- undecipherableVal.data);
562
- });
563
- });
564
- if (containedInitData) {
565
- return false;
566
- }
567
- }
568
- }
569
- return representation.decipherable;
570
- });
571
-
506
+ const updates = updateDeciperability(this, isDecipherableCb);
572
507
  if (updates.length > 0) {
573
508
  this.trigger("decipherabilityUpdate", updates);
574
509
  }
@@ -795,14 +730,9 @@ function updateDeciperability(
795
730
  isDecipherable : (rep : Representation) => boolean | undefined
796
731
  ) : IDecipherabilityUpdateElement[] {
797
732
  const updates : IDecipherabilityUpdateElement[] = [];
798
- for (let i = 0; i < manifest.periods.length; i++) {
799
- const period = manifest.periods[i];
800
- const adaptations = period.getAdaptations();
801
- for (let j = 0; j < adaptations.length; j++) {
802
- const adaptation = adaptations[j];
803
- const representations = adaptation.representations;
804
- for (let k = 0; k < representations.length; k++) {
805
- const representation = representations[k];
733
+ for (const period of manifest.periods) {
734
+ for (const adaptation of period.getAdaptations()) {
735
+ for (const representation of adaptation.representations) {
806
736
  const result = isDecipherable(representation);
807
737
  if (result !== representation.decipherable) {
808
738
  updates.push({ manifest, period, adaptation, representation });
@@ -15,7 +15,6 @@
15
15
  */
16
16
 
17
17
  import { isCodecSupported } from "../compat";
18
- import { IContentProtection } from "../core/eme";
19
18
  import log from "../log";
20
19
  import {
21
20
  IContentProtections,
@@ -166,7 +165,7 @@ class Representation {
166
165
  * @param {string} drmSystemId - The hexa-encoded DRM system ID
167
166
  * @returns {Array.<Object>}
168
167
  */
169
- public getEncryptionData(drmSystemId : string) : IContentProtection[] {
168
+ public getEncryptionData(drmSystemId : string) : IRepresentationProtectionData[] {
170
169
  const allInitData = this.getAllEncryptionData();
171
170
  const filtered = [];
172
171
  for (let i = 0; i < allInitData.length; i++) {
@@ -216,7 +215,7 @@ class Representation {
216
215
  * after parsing this Representation's initialization segment, if one exists.
217
216
  * @returns {Array.<Object>}
218
217
  */
219
- public getAllEncryptionData() : IContentProtection[] {
218
+ public getAllEncryptionData() : IRepresentationProtectionData[] {
220
219
  if (this.contentProtections === undefined ||
221
220
  this.contentProtections.initData.length === 0)
222
221
  {
@@ -297,4 +296,38 @@ class Representation {
297
296
  }
298
297
  }
299
298
 
299
+ /** Protection data as returned by a Representation. */
300
+ export interface IRepresentationProtectionData {
301
+ /**
302
+ * Initialization data type.
303
+ * String describing the format of the initialization data sent through this
304
+ * event.
305
+ * https://www.w3.org/TR/eme-initdata-registry/
306
+ */
307
+ type: string;
308
+ /**
309
+ * The key ids linked to those initialization data.
310
+ * This should be the key ids for the key concerned by the media which have
311
+ * the present initialization data.
312
+ *
313
+ * `undefined` when not known (different from an empty array - which would
314
+ * just mean that there's no key id involved).
315
+ */
316
+ keyIds : Uint8Array[] | undefined;
317
+ /** Every initialization data for that type. */
318
+ values: Array<{
319
+ /**
320
+ * Hex encoded system id, which identifies the key system.
321
+ * https://dashif.org/identifiers/content_protection/
322
+ */
323
+ systemId: string;
324
+ /**
325
+ * The initialization data itself for that type and systemId.
326
+ * For example, with "cenc" initialization data found in an ISOBMFF file,
327
+ * this will be the whole PSSH box.
328
+ */
329
+ data: Uint8Array;
330
+ }>;
331
+ }
332
+
300
333
  export default Representation;