rx-player 3.26.2 → 3.27.0-dev.20220317

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (500) hide show
  1. package/.github/workflows/perfs.yml +22 -0
  2. package/CHANGELOG.md +33 -1
  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 +144 -36
  9. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
  10. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +27 -24
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +53 -34
  12. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +43 -41
  13. package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
  14. package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
  15. package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
  16. package/dist/_esm5.processed/compat/eme/load_session.js +68 -17
  17. package/dist/_esm5.processed/compat/event_listeners.js +2 -1
  18. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
  19. package/dist/_esm5.processed/config.d.ts +166 -1080
  20. package/dist/_esm5.processed/config.js +17 -1119
  21. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
  22. package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
  23. package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
  24. package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +1 -1
  25. package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
  26. package/dist/_esm5.processed/core/abr/pending_requests_store.js +3 -5
  27. package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +1 -1
  28. package/dist/_esm5.processed/core/abr/representation_estimator.js +2 -2
  29. package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
  30. package/dist/_esm5.processed/core/api/index.d.ts +2 -1
  31. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +6 -0
  32. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +22 -4
  33. package/dist/_esm5.processed/core/api/option_utils.d.ts +3 -1
  34. package/dist/_esm5.processed/core/api/option_utils.js +19 -6
  35. package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
  36. package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
  37. package/dist/_esm5.processed/core/api/public_api.js +72 -33
  38. package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +6 -6
  39. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -51
  40. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +30 -75
  41. package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
  42. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +104 -0
  43. package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
  44. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +41 -0
  45. package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
  46. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +866 -0
  47. package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
  48. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
  49. package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
  50. package/dist/_esm5.processed/core/decrypt/create_session.js +174 -0
  51. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.d.ts +21 -0
  52. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
  53. package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
  54. package/dist/_esm5.processed/core/decrypt/find_key_system.js +300 -0
  55. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
  56. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
  57. package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
  58. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
  59. package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
  60. package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
  61. package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
  62. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
  63. package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
  64. package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
  65. package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
  66. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
  67. package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +120 -242
  68. package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
  69. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
  70. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
  71. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
  72. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
  73. package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
  74. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +85 -0
  75. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
  76. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
  77. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
  78. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
  79. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
  80. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
  81. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
  82. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
  83. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
  84. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
  85. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
  86. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
  87. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
  88. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +303 -0
  89. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
  90. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
  91. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
  92. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
  93. package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
  94. package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
  95. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
  96. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
  97. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +4 -4
  98. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -3
  99. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +2 -2
  100. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +6 -2
  101. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  102. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +1 -1
  103. package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
  104. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +3 -3
  105. package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
  106. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +5 -3
  107. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
  108. package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
  109. package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
  110. package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
  111. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
  112. package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
  113. package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
  114. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
  115. package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +2 -2
  116. package/dist/_esm5.processed/core/init/types.d.ts +2 -4
  117. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
  118. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +3 -3
  119. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
  120. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +32 -31
  121. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +4 -4
  122. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
  123. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
  124. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
  125. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
  126. package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
  127. package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
  128. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
  129. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
  130. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
  131. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +1 -1
  132. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +2 -1
  133. package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
  134. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +5 -6
  135. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
  136. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
  137. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
  138. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
  139. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
  140. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
  141. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
  142. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
  143. package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
  144. package/dist/_esm5.processed/default_config.d.ts +1114 -0
  145. package/dist/_esm5.processed/default_config.js +1145 -0
  146. package/dist/_esm5.processed/errors/request_error.js +3 -1
  147. package/dist/_esm5.processed/experimental/index.d.ts +2 -0
  148. package/dist/_esm5.processed/experimental/index.js +2 -0
  149. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
  150. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
  151. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +2 -4
  152. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
  153. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
  154. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +1 -2
  155. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +1 -2
  156. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
  157. package/dist/_esm5.processed/features/features_object.js +1 -1
  158. package/dist/_esm5.processed/features/initialize_features.js +1 -1
  159. package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
  160. package/dist/_esm5.processed/features/list/eme.js +5 -5
  161. package/dist/_esm5.processed/features/types.d.ts +3 -3
  162. package/dist/_esm5.processed/manifest/adaptation.d.ts +2 -2
  163. package/dist/_esm5.processed/manifest/adaptation.js +3 -1
  164. package/dist/_esm5.processed/manifest/manifest.d.ts +10 -23
  165. package/dist/_esm5.processed/manifest/manifest.js +10 -74
  166. package/dist/_esm5.processed/manifest/period.d.ts +3 -3
  167. package/dist/_esm5.processed/manifest/representation.d.ts +37 -5
  168. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +18 -18
  169. package/dist/_esm5.processed/manifest/types.d.ts +3 -3
  170. package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
  171. package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
  172. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +6 -6
  173. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
  174. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -2
  175. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
  176. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +14 -14
  177. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +17 -17
  178. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
  179. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
  180. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +28 -20
  181. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +20 -5
  182. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  183. package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
  184. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -35
  185. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +109 -96
  186. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +8 -8
  187. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
  188. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +18 -27
  189. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +25 -23
  190. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +21 -15
  191. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +19 -19
  192. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -38
  193. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +8 -8
  194. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +30 -30
  195. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +3 -3
  196. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -1
  197. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
  198. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
  199. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
  200. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
  201. package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
  202. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
  203. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +15 -5
  204. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +2 -2
  205. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.d.ts +11 -1
  206. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +31 -19
  207. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
  208. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
  209. package/dist/_esm5.processed/public_types.d.ts +2 -2
  210. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +2 -1
  211. package/dist/_esm5.processed/transports/dash/image_pipelines.js +4 -1
  212. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
  213. package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
  214. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
  215. package/dist/_esm5.processed/transports/dash/segment_loader.js +2 -2
  216. package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +1 -1
  217. package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
  218. package/dist/_esm5.processed/transports/dash/text_loader.d.ts +1 -1
  219. package/dist/_esm5.processed/transports/dash/text_loader.js +1 -1
  220. package/dist/_esm5.processed/transports/dash/text_parser.d.ts +1 -1
  221. package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
  222. package/dist/_esm5.processed/transports/local/segment_loader.d.ts +1 -2
  223. package/dist/_esm5.processed/transports/local/segment_loader.js +1 -1
  224. package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
  225. package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
  226. package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +1 -1
  227. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
  228. package/dist/_esm5.processed/transports/smooth/pipelines.js +69 -11
  229. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +0 -1
  230. package/dist/_esm5.processed/transports/smooth/segment_loader.js +2 -2
  231. package/dist/_esm5.processed/transports/types.d.ts +58 -30
  232. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
  233. package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +1 -1
  234. package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -1
  235. package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
  236. package/dist/_esm5.processed/utils/cast_to_observable.js +1 -1
  237. package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
  238. package/dist/_esm5.processed/utils/deep_merge.js +53 -0
  239. package/dist/_esm5.processed/utils/reference.d.ts +29 -0
  240. package/dist/_esm5.processed/utils/reference.js +72 -24
  241. package/dist/_esm5.processed/utils/request/fetch.d.ts +4 -5
  242. package/dist/_esm5.processed/utils/request/fetch.js +8 -6
  243. package/dist/_esm5.processed/utils/request/xhr.d.ts +6 -6
  244. package/dist/_esm5.processed/utils/request/xhr.js +3 -2
  245. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +1 -2
  246. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
  247. package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
  248. package/dist/_esm5.processed/utils/task_canceller.js +3 -3
  249. package/dist/rx-player.js +5242 -3190
  250. package/dist/rx-player.min.js +1 -1
  251. package/dummy +1 -0
  252. package/{dist/_esm5.processed/core/eme/dispose_eme.d.ts → experimental/index.d.ts} +1 -4
  253. package/{dist/_esm5.processed/core/eme/dispose_media_keys.d.ts → experimental/index.js} +1 -6
  254. package/package.json +33 -36
  255. package/scripts/build/templates/experimental/index.d.ts +16 -0
  256. package/scripts/build/templates/experimental/index.js +16 -0
  257. package/scripts/doc-generator/generate_header_html.js +6 -7
  258. package/scripts/doc-generator/generate_page_html.js +3 -4
  259. package/scripts/doc-generator/generate_page_list_html.js +4 -5
  260. package/scripts/doc-generator/generate_sidebar_html.js +4 -7
  261. package/scripts/doc-generator/utils.js +0 -11
  262. package/scripts/generate_demo_list.js +3 -3
  263. package/scripts/generate_documentation_list.js +3 -3
  264. package/scripts/launch_static_server.js +127 -67
  265. package/scripts/run_standalone_demo.js +1 -0
  266. package/scripts/start_demo_web_server.js +1 -0
  267. package/sonar-project.properties +1 -1
  268. package/src/README.md +6 -6
  269. package/src/compat/__tests__/fullscreen.test.ts +7 -7
  270. package/src/compat/__tests__/is_vtt_cue.test.ts +1 -1
  271. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
  272. package/src/compat/browser_detection.ts +4 -2
  273. package/src/compat/eme/close_session.ts +90 -56
  274. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
  275. package/src/compat/eme/custom_media_keys/index.ts +28 -41
  276. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +63 -46
  277. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +51 -49
  278. package/src/compat/eme/generate_key_request.ts +25 -33
  279. package/src/compat/eme/load_session.ts +29 -31
  280. package/src/compat/event_listeners.ts +2 -1
  281. package/src/compat/should_favour_custom_safari_EME.ts +5 -2
  282. package/src/config.ts +17 -1210
  283. package/src/core/README.md +1 -1
  284. package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
  285. package/src/core/abr/bandwidth_estimator.ts +4 -4
  286. package/src/core/abr/buffer_based_chooser.ts +85 -20
  287. package/src/core/abr/network_analyzer.ts +6 -7
  288. package/src/core/abr/pending_requests_store.ts +3 -5
  289. package/src/core/abr/representation_estimator.ts +6 -3
  290. package/src/core/api/__tests__/get_player_state.test.ts +3 -3
  291. package/src/core/api/__tests__/option_utils.test.ts +17 -17
  292. package/src/core/api/get_player_state.ts +1 -1
  293. package/src/core/api/index.ts +3 -0
  294. package/src/core/api/media_element_track_choice_manager.ts +22 -3
  295. package/src/core/api/option_utils.ts +37 -20
  296. package/src/core/api/playback_observer.ts +12 -8
  297. package/src/core/api/public_api.ts +152 -112
  298. package/src/core/api/track_choice_manager.ts +10 -9
  299. package/src/core/decrypt/README.md +22 -0
  300. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
  301. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
  302. package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
  303. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
  304. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
  305. package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +36 -103
  306. package/src/core/{eme → decrypt}/attach_media_keys.ts +49 -56
  307. package/src/core/decrypt/clear_on_stop.ts +48 -0
  308. package/src/core/decrypt/content_decryptor.ts +1158 -0
  309. package/src/core/decrypt/create_or_load_session.ts +130 -0
  310. package/src/core/decrypt/create_session.ts +175 -0
  311. package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
  312. package/src/core/{eme → decrypt}/find_key_system.ts +126 -134
  313. package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
  314. package/src/core/decrypt/get_media_keys.ts +145 -0
  315. package/src/core/{eme → decrypt}/index.ts +11 -8
  316. package/src/core/decrypt/init_media_keys.ts +51 -0
  317. package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
  318. package/src/core/decrypt/set_server_certificate.ts +104 -0
  319. package/src/core/{eme → decrypt}/types.ts +129 -259
  320. package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
  321. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
  322. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
  323. package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
  324. package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
  325. package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +20 -20
  326. package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
  327. package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
  328. package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
  329. package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
  330. package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
  331. package/src/core/decrypt/utils/key_session_record.ts +175 -0
  332. package/src/core/decrypt/utils/loaded_sessions_store.ts +318 -0
  333. package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
  334. package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
  335. package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
  336. package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
  337. package/src/core/fetchers/manifest/manifest_fetcher.ts +9 -9
  338. package/src/core/fetchers/segment/segment_fetcher.ts +10 -7
  339. package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
  340. package/src/core/fetchers/utils/try_urls_with_backoff.ts +1 -1
  341. package/src/core/init/.initialize_media_source.ts.un~ +0 -0
  342. package/src/core/init/get_initial_time.ts +2 -1
  343. package/src/core/init/initialize_directfile.ts +19 -22
  344. package/src/core/init/initialize_media_source.ts +43 -106
  345. package/src/core/init/link_drm_and_content.ts +176 -0
  346. package/src/core/init/manifest_update_scheduler.ts +12 -10
  347. package/src/core/init/stall_avoider.ts +6 -5
  348. package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
  349. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
  350. package/src/core/init/stream_events_emitter/types.ts +2 -2
  351. package/src/core/init/types.ts +1 -39
  352. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
  353. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +6 -7
  354. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +32 -31
  355. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
  356. package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
  357. package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
  358. package/src/core/stream/events_generators.ts +9 -4
  359. package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
  360. package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
  361. package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
  362. package/src/core/stream/period/period_stream.ts +5 -2
  363. package/src/core/stream/representation/force_garbage_collection.ts +5 -7
  364. package/src/core/stream/representation/get_buffer_status.ts +28 -16
  365. package/src/core/stream/representation/get_needed_segments.ts +124 -28
  366. package/src/core/stream/representation/get_segment_priority.ts +1 -2
  367. package/src/core/stream/representation/push_media_segment.ts +3 -2
  368. package/src/core/stream/representation/representation_stream.ts +30 -7
  369. package/src/core/stream/types.ts +1 -1
  370. package/src/default_config.ts +1241 -0
  371. package/src/errors/request_error.ts +4 -1
  372. package/src/experimental/index.ts +5 -0
  373. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
  374. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +5 -7
  375. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
  376. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +4 -4
  377. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +1 -1
  378. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
  379. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +1 -2
  380. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +1 -2
  381. package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
  382. package/src/features/__tests__/initialize_features.test.ts +2 -2
  383. package/src/features/features_object.ts +1 -1
  384. package/src/features/initialize_features.ts +1 -1
  385. package/src/features/list/__tests__/eme.test.ts +5 -5
  386. package/src/features/list/eme.ts +5 -5
  387. package/src/features/types.ts +3 -10
  388. package/src/manifest/adaptation.ts +6 -4
  389. package/src/manifest/manifest.ts +16 -86
  390. package/src/manifest/period.ts +3 -3
  391. package/src/manifest/representation.ts +38 -5
  392. package/src/manifest/representation_index/types.ts +18 -18
  393. package/src/manifest/types.ts +3 -3
  394. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
  395. package/src/parsers/manifest/dash/common/get_hdr_information.ts +1 -1
  396. package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
  397. package/src/parsers/manifest/dash/common/indexes/base.ts +6 -6
  398. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +4 -2
  399. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +2 -2
  400. package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
  401. package/src/parsers/manifest/dash/common/indexes/list.ts +14 -14
  402. package/src/parsers/manifest/dash/common/indexes/template.ts +18 -18
  403. package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
  404. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +51 -23
  405. package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
  406. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
  407. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +167 -134
  408. package/src/parsers/manifest/dash/common/parse_mpd.ts +9 -10
  409. package/src/parsers/manifest/dash/common/parse_periods.ts +80 -79
  410. package/src/parsers/manifest/dash/common/parse_representation_index.ts +83 -75
  411. package/src/parsers/manifest/dash/common/parse_representations.ts +44 -63
  412. package/src/parsers/manifest/dash/node_parser_types.ts +30 -30
  413. package/src/parsers/manifest/dash/parsers_types.ts +3 -3
  414. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -1
  415. package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +4 -4
  416. package/src/parsers/manifest/smooth/create_parser.ts +24 -21
  417. package/src/parsers/manifest/smooth/representation_index.ts +14 -14
  418. package/src/parsers/manifest/types.ts +28 -28
  419. package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +31 -33
  420. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +15 -6
  421. package/src/parsers/manifest/utils/index_helpers.ts +2 -2
  422. package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
  423. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
  424. package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
  425. package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
  426. package/src/public_types.ts +5 -1
  427. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +2 -2
  428. package/src/transports/dash/image_pipelines.ts +4 -1
  429. package/src/transports/dash/init_segment_loader.ts +1 -1
  430. package/src/transports/dash/manifest_parser.ts +1 -1
  431. package/src/transports/dash/segment_loader.ts +7 -7
  432. package/src/transports/dash/segment_parser.ts +8 -1
  433. package/src/transports/dash/text_loader.ts +2 -2
  434. package/src/transports/dash/text_parser.ts +11 -1
  435. package/src/transports/local/segment_loader.ts +4 -4
  436. package/src/transports/local/segment_parser.ts +4 -0
  437. package/src/transports/local/text_parser.ts +8 -0
  438. package/src/transports/metaplaylist/manifest_loader.ts +1 -1
  439. package/src/transports/metaplaylist/pipelines.ts +1 -1
  440. package/src/transports/smooth/pipelines.ts +29 -16
  441. package/src/transports/smooth/segment_loader.ts +8 -8
  442. package/src/transports/types.ts +59 -30
  443. package/src/transports/utils/call_custom_manifest_loader.ts +6 -6
  444. package/src/transports/utils/generate_manifest_loader.ts +1 -1
  445. package/src/utils/__tests__/deep_merge.test.ts +48 -0
  446. package/src/utils/__tests__/flat_map.test.ts +12 -7
  447. package/src/utils/cancellable_sleep.ts +1 -1
  448. package/src/utils/cast_to_observable.ts +1 -2
  449. package/src/utils/deep_merge.ts +46 -0
  450. package/src/utils/reference.ts +116 -23
  451. package/src/utils/request/fetch.ts +17 -15
  452. package/src/utils/request/xhr.ts +11 -8
  453. package/src/utils/rx-from_cancellable_promise.ts +8 -4
  454. package/src/utils/task_canceller.ts +6 -4
  455. package/tsconfig.json +1 -2
  456. package/tsconfig.modules.json +1 -2
  457. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
  458. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
  459. package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
  460. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
  461. package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
  462. package/dist/_esm5.processed/core/eme/create_session.js +0 -126
  463. package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
  464. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
  465. package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
  466. package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
  467. package/dist/_esm5.processed/core/eme/find_key_system.js +0 -243
  468. package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
  469. package/dist/_esm5.processed/core/eme/get_session.js +0 -68
  470. package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
  471. package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
  472. package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
  473. package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
  474. package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
  475. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
  476. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
  477. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
  478. package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
  479. package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
  480. package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
  481. package/src/core/eme/README.md +0 -26
  482. package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
  483. package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
  484. package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
  485. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
  486. package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
  487. package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
  488. package/src/core/eme/clear_eme_session.ts +0 -62
  489. package/src/core/eme/create_session.ts +0 -187
  490. package/src/core/eme/dispose_eme.ts +0 -25
  491. package/src/core/eme/dispose_media_keys.ts +0 -46
  492. package/src/core/eme/eme_manager.ts +0 -387
  493. package/src/core/eme/get_media_keys.ts +0 -141
  494. package/src/core/eme/get_session.ts +0 -135
  495. package/src/core/eme/init_media_keys.ts +0 -106
  496. package/src/core/eme/set_server_certificate.ts +0 -115
  497. package/src/core/eme/utils/close_session.ts +0 -113
  498. package/src/core/eme/utils/init_data_store.ts +0 -234
  499. package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
  500. package/src/core/init/create_eme_manager.ts +0 -95
@@ -0,0 +1,22 @@
1
+ name: Performance tests
2
+ on:
3
+ pull_request:
4
+ types: [ labeled ]
5
+
6
+ jobs:
7
+ perf-tests:
8
+ if: ${{ github.event.label.name == 'Performance checks' }}
9
+ runs-on: [ubuntu-latest]
10
+ steps:
11
+ - uses: actions/checkout@v2
12
+ - name: Use Node.js ${{ matrix.node-version }}
13
+ uses: actions/setup-node@v2
14
+ with:
15
+ node-version: ${{ matrix.node-version }}
16
+ cache: 'npm'
17
+ # needed for integration & memory tests codecs support
18
+ - run: sudo add-apt-repository multiverse && sudo apt update && sudo apt install -y ubuntu-restricted-extras
19
+ - run: npm install
20
+ - run: export DISPLAY=:99
21
+ - run: sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 & # optional
22
+ - run: node tests/performance/run.js
package/CHANGELOG.md CHANGED
@@ -1,6 +1,38 @@
1
1
  # Changelog
2
2
 
3
- ## v3.26.2 (2022-01-XX)
3
+ ## v3.27.0-dev.2022031700 (2022-03-17)
4
+
5
+ ### Features
6
+
7
+ - Add a `maxVideoBufferSize` constructor option and `{get,set}MaxVideoBufferSize` methods to limit the size of loaded video data buffered at the same time [#1041, #1054]
8
+ - DRM: Add a `"periods"` mode to the `keySystems[].singleLicensePer` `loadVideo` option, allowing to obtain decryption license for groups of Periods allowing a compromise between optimization, features and compatibility [#1028, #1061]
9
+
10
+ ### Bug fixes
11
+
12
+ - subtitles: Fix rare issue where subtitles could be skipped due to a rounding error [#1064]
13
+ - DASH: fix issue where the wrong segments would be requested on $Number$-based MPD with a SegmentTimeline older than the `timeShiftBufferDepth` [#1052, #1060]
14
+ - directfile: disable all audio tracks before enabling one to work-around Safari issue on MacOS Monterey [#1067]
15
+ - avoid performing a small seek when changing the audio track [#1080]
16
+ - api: allow switching to RELOADING state synchronously after LOADED [#1083]
17
+ - Safari Mobile: Improve decryption support on Safari mobile by relying on the vendored `WebKitMediaKeys` API [#1072]
18
+ - avoid unnecessary warning logs when loading some initialization segments [#1049]
19
+ - TypeScript: Add forgotten TypeScript types in the exposed segment and manifest loader APIs [#1057]
20
+ - DRM: Avoid decryption issues when a license is persisted in a `singleLicensePer` `"init-data"` mode but loaded in a `"content"` mode [#1031, #1042]
21
+
22
+ ### Other improvements
23
+
24
+ - DASH: always consider that the non-last Period is finished when it contains SegmentTimeline elements [#1047]
25
+ - add better buffer cleaning logic on a browser's `QuotaExceededError` to better handle memory limitations [#1065]
26
+ - DASH: Prioritize selectionPriority attribute over a "main" Role when ordering AdaptationSets [#1082]
27
+ - directfile/Safari: use the `getStartDate` method in `getWallClockTime` when available to obtain true offseted times when playing HLS contents on Safari [#1055]
28
+ - avoid mistakenly relying on pinkie's Promise implementation when a native one is already available [#1058]
29
+ - DRM: Improve DRM Session caches performance when `singleLicensePer` is set to `"content"`
30
+ - TypeScript: Add IBitrateEstimate, IPositionUpdate and IPlayerState types to the exported types [#1084]
31
+ - tests: add performance tests, to better catch and avoid performance regressions [#1053, #1062]
32
+ - DRM: Refactor DRM logic for better maintainability. DRM-linked logs are now prefixed by `DRM:` instead of `EME:` like previously [#1042]
33
+
34
+
35
+ ## v3.26.2 (2022-01-11)
4
36
 
5
37
  ### Bug fixes
6
38
 
package/FILES.md CHANGED
@@ -25,7 +25,7 @@ a single directory or subdirectory, in alphabetical order.
25
25
  - [src/core/abr/: The adaptive bitrate code](#core-abr)
26
26
  - [src/core/api/: The API definition](#core-api)
27
27
  - [src/core/stream/: Load the right segments](#core-stream)
28
- - [src/core/eme/: Encryption management](#core-eme)
28
+ - [src/core/decrypt/: Decryption management](#core-decrypt)
29
29
  - [src/core/fetchers/: The fetchers](#core-fetchers)
30
30
  - [src/core/segment_buffers/: The Media buffers](#core-sb)
31
31
  - [src/core/init/: Media streaming logic](#core-init)
@@ -240,10 +240,11 @@ The code there calculate which segments should be downloaded, ask for their
240
240
  download and push the segments into the `SegmentBuffers`.
241
241
 
242
242
 
243
- <a name="core-eme"></a>
244
- ### src/core/eme/: Encryption management #######################################
243
+ <a name="core-decrypt"></a>
244
+ ### src/core/decrypt/: Decryption management ###################################
245
245
 
246
- Defines functions allowing to handle encrypted contents through the EME APIs.
246
+ Defines functions allowing to handle encrypted contents through the EME browser
247
+ APIs.
247
248
 
248
249
 
249
250
  <a name="core-fetchers"></a>
package/VERSION CHANGED
@@ -1 +1 @@
1
- 3.26.2
1
+ 3.27.0-dev.2022031700
@@ -19,6 +19,8 @@ declare const isEdgeChromium: boolean;
19
19
  declare const isFirefox: boolean;
20
20
  declare const isSamsungBrowser: boolean;
21
21
  declare const isTizen: boolean;
22
- declare const isSafari: boolean;
22
+ /** `true` on Safari on a PC platform (i.e. not iPhone / iPad etc.) */
23
+ declare const isSafariDesktop: boolean;
24
+ /** `true` on Safari on an iPhone, iPad & iPod platform */
23
25
  declare const isSafariMobile: boolean;
24
- export { isEdgeChromium, isIE11, isIEOrEdge, isFirefox, isSafari, isSafariMobile, isSamsungBrowser, isTizen, };
26
+ export { isEdgeChromium, isIE11, isIEOrEdge, isFirefox, isSafariDesktop, isSafariMobile, isSamsungBrowser, isTizen, };
@@ -34,10 +34,12 @@ var isSamsungBrowser = !isNode &&
34
34
  /SamsungBrowser/.test(navigator.userAgent);
35
35
  var isTizen = !isNode &&
36
36
  /Tizen/.test(navigator.userAgent);
37
- var isSafari = !isNode && (Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor") >= 0 ||
37
+ /** `true` on Safari on a PC platform (i.e. not iPhone / iPad etc.) */
38
+ var isSafariDesktop = !isNode && (Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor") >= 0 ||
38
39
  ((_b = (_a = window.safari) === null || _a === void 0 ? void 0 : _a.pushNotification) === null || _b === void 0 ? void 0 : _b.toString()) ===
39
40
  "[object SafariRemoteNotification]");
41
+ /** `true` on Safari on an iPhone, iPad & iPod platform */
40
42
  var isSafariMobile = !isNode &&
41
43
  typeof navigator.platform === "string" &&
42
44
  /iPad|iPhone|iPod/.test(navigator.platform);
43
- export { isEdgeChromium, isIE11, isIEOrEdge, isFirefox, isSafari, isSafariMobile, isSamsungBrowser, isTizen, };
45
+ export { isEdgeChromium, isIE11, isIEOrEdge, isFirefox, isSafariDesktop, isSafariMobile, isSamsungBrowser, isTizen, };
@@ -13,12 +13,18 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { Observable } from "rxjs";
17
16
  import { ICustomMediaKeySession } from "./custom_media_keys";
18
17
  /**
19
- * Close session and returns and observable that emits when
20
- * the session is closed.
18
+ * Close the given `MediaKeySession` and returns a Promise resolving when the
19
+ * session is closed.
20
+ * This promise does not reject, even if we're unable to close the
21
+ * `MediaKeySession`.
22
+ *
23
+ * Note that there is a lot of browser issues linked to the impossibility to
24
+ * either close a MediaKeySession or to know if a MediaKeySession was closed.
25
+ * Due to this, the returned Promise might take some time before resolving on
26
+ * some devices.
21
27
  * @param {MediaKeySession|Object} session
22
- * @returns {Observable}
28
+ * @returns {Promise.<undefined>}
23
29
  */
24
- export default function closeSession$(session: MediaKeySession | ICustomMediaKeySession): Observable<unknown>;
30
+ export default function closeSession(session: MediaKeySession | ICustomMediaKeySession): Promise<void>;
@@ -13,43 +13,151 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { catchError, map, mergeMap, of as observableOf, race as observableRace, timer as observableTimer, } from "rxjs";
17
- import castToObservable from "../../utils/cast_to_observable";
16
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
23
+ });
24
+ };
25
+ var __generator = (this && this.__generator) || function (thisArg, body) {
26
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
27
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
28
+ function verb(n) { return function (v) { return step([n, v]); }; }
29
+ function step(op) {
30
+ if (f) throw new TypeError("Generator is already executing.");
31
+ while (_) try {
32
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
33
+ if (y = 0, t) op = [op[0] & 2, t.value];
34
+ switch (op[0]) {
35
+ case 0: case 1: t = op; break;
36
+ case 4: _.label++; return { value: op[1], done: false };
37
+ case 5: _.label++; y = op[1]; op = [0]; continue;
38
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
39
+ default:
40
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
41
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
42
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
43
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
44
+ if (t[2]) _.ops.pop();
45
+ _.trys.pop(); continue;
46
+ }
47
+ op = body.call(thisArg, _);
48
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
49
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
50
+ }
51
+ };
52
+ import log from "../../log";
53
+ import cancellableSleep from "../../utils/cancellable_sleep";
54
+ import PPromise from "../../utils/promise";
55
+ import TaskCanceller, { CancellationError, } from "../../utils/task_canceller";
18
56
  /**
19
- * Close session and returns and observable that emits when
20
- * the session is closed.
57
+ * Close the given `MediaKeySession` and returns a Promise resolving when the
58
+ * session is closed.
59
+ * This promise does not reject, even if we're unable to close the
60
+ * `MediaKeySession`.
61
+ *
62
+ * Note that there is a lot of browser issues linked to the impossibility to
63
+ * either close a MediaKeySession or to know if a MediaKeySession was closed.
64
+ * Due to this, the returned Promise might take some time before resolving on
65
+ * some devices.
21
66
  * @param {MediaKeySession|Object} session
22
- * @returns {Observable}
67
+ * @returns {Promise.<undefined>}
23
68
  */
24
- export default function closeSession$(session) {
25
- return observableRace(castToObservable(session.close()),
26
- // If the session is not closed after 1000ms, try
27
- // to call another method on session to guess if
28
- // session is closed or not.
29
- observableTimer(1000).pipe(mergeMap(function () {
30
- var tryToUpdateSession$ = castToObservable(session.update(new Uint8Array(1)));
31
- return tryToUpdateSession$.pipe(
32
- // Update has resolved, so we can't know if session is closed
33
- map(function () {
34
- throw new Error("Compat: Couldn't know if session is " +
35
- "closed");
36
- }), catchError(function (err) {
37
- // The caught error can tell if session is closed
38
- // (Chrome may throw this error)
39
- if (err instanceof Error &&
40
- err.message === "The session is already closed.") {
41
- return observableOf(null);
42
- }
43
- // The `closed` promise may resolve, even if `close()` result has not
44
- // (it may happen on Firefox). Wait for it and timeout after 1 second.
45
- // TODO There is a subtle TypeScript issue there that made casting to
46
- // a type-compatible type mandatory. If a more elegant solution can
47
- // be found, it should be preffered.
48
- var sessionIsClosed$ = castToObservable(session.closed);
49
- return observableRace(sessionIsClosed$, observableTimer(1000).pipe(map(function () {
50
- throw new Error("Compat: Couldn't know if session is " +
51
- "closed");
52
- })));
53
- }));
54
- })));
69
+ export default function closeSession(session) {
70
+ var timeoutCanceller = new TaskCanceller();
71
+ return PPromise.race([
72
+ session.close()
73
+ .then(function () { timeoutCanceller.cancel(); }),
74
+ // The `closed` promise may resolve, even if `close()` result has not
75
+ // (seen at some point on Firefox).
76
+ session.closed
77
+ .then(function () { timeoutCanceller.cancel(); }),
78
+ waitTimeoutAndCheck(),
79
+ ]);
80
+ /**
81
+ * If the session is not closed after 1000ms, try to communicate with the
82
+ * MediaKeySession and check if an error is returned.
83
+ * This is needed because on some browsers with poor EME implementation,
84
+ * knowing when a MediaKeySession is closed is actually a hard task.
85
+ *
86
+ * The returned Promise will never reject.
87
+ * @returns {Promise.<undefined>}
88
+ */
89
+ function waitTimeoutAndCheck() {
90
+ return __awaiter(this, void 0, void 0, function () {
91
+ var err_1, message;
92
+ return __generator(this, function (_a) {
93
+ switch (_a.label) {
94
+ case 0:
95
+ _a.trys.push([0, 3, , 4]);
96
+ return [4 /*yield*/, cancellableSleep(1000, timeoutCanceller.signal)];
97
+ case 1:
98
+ _a.sent();
99
+ return [4 /*yield*/, tryUpdatingSession()];
100
+ case 2:
101
+ _a.sent();
102
+ return [3 /*break*/, 4];
103
+ case 3:
104
+ err_1 = _a.sent();
105
+ if (err_1 instanceof CancellationError) { // cancelled == session closed
106
+ return [2 /*return*/];
107
+ }
108
+ message = err_1 instanceof Error ?
109
+ err_1.message :
110
+ "Unknown error made it impossible to close the session";
111
+ log.error("DRM: ".concat(message));
112
+ return [3 /*break*/, 4];
113
+ case 4: return [2 /*return*/];
114
+ }
115
+ });
116
+ });
117
+ }
118
+ /**
119
+ * Try to update `MediaKeySession` and check its error if it failed.
120
+ * If we still don't know whether it closed yet, wait a second
121
+ * timeout then quit.
122
+ *
123
+ * The returned Promise resolves if the `MediaKeySession` seems closed and
124
+ * rejects if we couldn't know or it doesn't.
125
+ * @returns {Promise.<undefined>}
126
+ */
127
+ function tryUpdatingSession() {
128
+ return __awaiter(this, void 0, void 0, function () {
129
+ var err_2;
130
+ return __generator(this, function (_a) {
131
+ switch (_a.label) {
132
+ case 0:
133
+ _a.trys.push([0, 2, , 4]);
134
+ return [4 /*yield*/, session.update(new Uint8Array(1))];
135
+ case 1:
136
+ _a.sent();
137
+ return [3 /*break*/, 4];
138
+ case 2:
139
+ err_2 = _a.sent();
140
+ if (timeoutCanceller.isUsed) { // Reminder: cancelled == session closed
141
+ return [2 /*return*/];
142
+ }
143
+ // The caught error can tell if session is closed
144
+ // (Chrome may throw this error)
145
+ // I know... Checking the error message is not the best practice ever.
146
+ if (err_2 instanceof Error &&
147
+ err_2.message === "The session is already closed.") {
148
+ return [2 /*return*/];
149
+ }
150
+ return [4 /*yield*/, cancellableSleep(1000, timeoutCanceller.signal)];
151
+ case 3:
152
+ _a.sent();
153
+ return [3 /*break*/, 4];
154
+ case 4:
155
+ if (timeoutCanceller.isUsed) { // Reminder: cancelled == session closed
156
+ return [2 /*return*/];
157
+ }
158
+ throw new Error("Compat: Couldn't know if session is closed");
159
+ }
160
+ });
161
+ });
162
+ }
55
163
  }
@@ -13,18 +13,16 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { Observable } from "rxjs";
17
16
  import CustomMediaKeySystemAccess from "./../custom_key_system_access";
18
17
  import { ICustomMediaKeys, ICustomMediaKeySession } from "./types";
19
18
  /** Generic implementation of the navigator.requestMediaKeySystemAccess API. */
20
- declare type ICompatRequestMediaKeySystemAccessFn = (keyType: string, config: MediaKeySystemConfiguration[]) => Observable<MediaKeySystemAccess | CustomMediaKeySystemAccess>;
21
- declare let requestMediaKeySystemAccess: null | ICompatRequestMediaKeySystemAccessFn;
19
+ declare type ICompatRequestMediaKeySystemAccessFn = (keyType: string, config: MediaKeySystemConfiguration[]) => Promise<MediaKeySystemAccess | CustomMediaKeySystemAccess>;
20
+ declare let requestMediaKeySystemAccess: ICompatRequestMediaKeySystemAccessFn | null;
22
21
  /**
23
22
  * Set the given MediaKeys on the given HTMLMediaElement.
24
23
  * Emits null when done then complete.
25
24
  * @param {HTMLMediaElement} elt
26
25
  * @param {Object} mediaKeys
27
- * @returns {Observable}
28
26
  */
29
- declare function setMediaKeys(elt: HTMLMediaElement, mediaKeys: MediaKeys | ICustomMediaKeys | null): Observable<unknown>;
27
+ declare let setMediaKeys: ((elt: HTMLMediaElement, mediaKeys: MediaKeys | ICustomMediaKeys | null) => unknown);
30
28
  export { requestMediaKeySystemAccess, setMediaKeys, ICustomMediaKeys, ICustomMediaKeySession, };
@@ -13,10 +13,9 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { defer as observableDefer, of as observableOf, throwError as observableThrow, } from "rxjs";
16
+ import PPromise from "pinkie";
17
17
  import { MediaError } from "../../../errors";
18
18
  import assert from "../../../utils/assert";
19
- import castToObservable from "../../../utils/cast_to_observable";
20
19
  import { isIE11 } from "../../browser_detection";
21
20
  import isNode from "../../is_node";
22
21
  import shouldFavourCustomSafariEME from "../../should_favour_custom_safari_EME";
@@ -27,7 +26,13 @@ import getOldKitWebKitMediaKeyCallbacks, { isOldWebkitMediaElement, } from "./ol
27
26
  import getWebKitMediaKeysCallbacks from "./webkit_media_keys";
28
27
  import { WebKitMediaKeysConstructor } from "./webkit_media_keys_constructor";
29
28
  var requestMediaKeySystemAccess = null;
30
- var _setMediaKeys = function defaultSetMediaKeys(mediaElement, mediaKeys) {
29
+ /**
30
+ * Set the given MediaKeys on the given HTMLMediaElement.
31
+ * Emits null when done then complete.
32
+ * @param {HTMLMediaElement} elt
33
+ * @param {Object} mediaKeys
34
+ */
35
+ var setMediaKeys = function defaultSetMediaKeys(mediaElement, mediaKeys) {
31
36
  var elt = mediaElement;
32
37
  /* eslint-disable @typescript-eslint/unbound-method */
33
38
  if (typeof elt.setMediaKeys === "function") {
@@ -58,8 +63,12 @@ var _setMediaKeys = function defaultSetMediaKeys(mediaElement, mediaKeys) {
58
63
  */
59
64
  if (isNode ||
60
65
  (navigator.requestMediaKeySystemAccess != null && !shouldFavourCustomSafariEME())) {
61
- requestMediaKeySystemAccess = function (a, b) {
62
- return castToObservable(navigator.requestMediaKeySystemAccess(a, b));
66
+ requestMediaKeySystemAccess = function () {
67
+ var args = [];
68
+ for (var _i = 0; _i < arguments.length; _i++) {
69
+ args[_i] = arguments[_i];
70
+ }
71
+ return navigator.requestMediaKeySystemAccess.apply(navigator, args);
63
72
  };
64
73
  }
65
74
  else {
@@ -70,26 +79,26 @@ else {
70
79
  var callbacks = getOldKitWebKitMediaKeyCallbacks();
71
80
  isTypeSupported_1 = callbacks.isTypeSupported;
72
81
  createCustomMediaKeys_1 = callbacks.createCustomMediaKeys;
73
- _setMediaKeys = callbacks.setMediaKeys;
82
+ setMediaKeys = callbacks.setMediaKeys;
74
83
  // This is for WebKit with prefixed EME api
75
84
  }
76
85
  else if (WebKitMediaKeysConstructor !== undefined) {
77
86
  var callbacks = getWebKitMediaKeysCallbacks();
78
87
  isTypeSupported_1 = callbacks.isTypeSupported;
79
88
  createCustomMediaKeys_1 = callbacks.createCustomMediaKeys;
80
- _setMediaKeys = callbacks.setMediaKeys;
89
+ setMediaKeys = callbacks.setMediaKeys;
81
90
  }
82
91
  else if (isIE11 && MSMediaKeysConstructor !== undefined) {
83
92
  var callbacks = getIE11MediaKeysCallbacks();
84
93
  isTypeSupported_1 = callbacks.isTypeSupported;
85
94
  createCustomMediaKeys_1 = callbacks.createCustomMediaKeys;
86
- _setMediaKeys = callbacks.setMediaKeys;
95
+ setMediaKeys = callbacks.setMediaKeys;
87
96
  }
88
97
  else if (MozMediaKeysConstructor !== undefined) {
89
98
  var callbacks = getMozMediaKeysCallbacks();
90
99
  isTypeSupported_1 = callbacks.isTypeSupported;
91
100
  createCustomMediaKeys_1 = callbacks.createCustomMediaKeys;
92
- _setMediaKeys = callbacks.setMediaKeys;
101
+ setMediaKeys = callbacks.setMediaKeys;
93
102
  }
94
103
  else {
95
104
  var MK_1 = window.MediaKeys;
@@ -117,7 +126,7 @@ else {
117
126
  }
118
127
  requestMediaKeySystemAccess = function (keyType, keySystemConfigurations) {
119
128
  if (!isTypeSupported_1(keyType)) {
120
- return observableThrow(function () { return new Error("Unsupported key type"); });
129
+ return PPromise.reject(new Error("Unsupported key type"));
121
130
  }
122
131
  for (var i = 0; i < keySystemConfigurations.length; i++) {
123
132
  var keySystemConfiguration = keySystemConfigurations[i];
@@ -129,29 +138,23 @@ else {
129
138
  supported = supported && (distinctiveIdentifier !== "required");
130
139
  if (supported) {
131
140
  var keySystemConfigurationResponse = {
132
- videoCapabilities: videoCapabilities,
133
- audioCapabilities: audioCapabilities,
134
141
  initDataTypes: ["cenc"],
135
142
  distinctiveIdentifier: "not-allowed",
136
143
  persistentState: "required",
137
144
  sessionTypes: ["temporary", "persistent-license"],
138
145
  };
146
+ if (videoCapabilities !== undefined) {
147
+ keySystemConfigurationResponse.videoCapabilities = videoCapabilities;
148
+ }
149
+ if (audioCapabilities !== undefined) {
150
+ keySystemConfigurationResponse.audioCapabilities = audioCapabilities;
151
+ }
139
152
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
140
153
  var customMediaKeys = createCustomMediaKeys_1(keyType);
141
- return observableOf(new CustomMediaKeySystemAccess(keyType, customMediaKeys, keySystemConfigurationResponse));
154
+ return PPromise.resolve(new CustomMediaKeySystemAccess(keyType, customMediaKeys, keySystemConfigurationResponse));
142
155
  }
143
156
  }
144
- return observableThrow(function () { return new Error("Unsupported configuration"); });
157
+ return PPromise.reject(new Error("Unsupported configuration"));
145
158
  };
146
159
  }
147
- /**
148
- * Set the given MediaKeys on the given HTMLMediaElement.
149
- * Emits null when done then complete.
150
- * @param {HTMLMediaElement} elt
151
- * @param {Object} mediaKeys
152
- * @returns {Observable}
153
- */
154
- function setMediaKeys(elt, mediaKeys) {
155
- return observableDefer(function () { return castToObservable(_setMediaKeys(elt, mediaKeys)); });
156
- }
157
160
  export { requestMediaKeySystemAccess, setMediaKeys, };
@@ -28,12 +28,11 @@ var __extends = (this && this.__extends) || (function () {
28
28
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
29
29
  };
30
30
  })();
31
- import { merge as observableMerge, Subject, takeUntil, } from "rxjs";
32
31
  import { base64ToBytes } from "../../../utils/base64";
33
32
  import EventEmitter from "../../../utils/event_emitter";
33
+ import noop from "../../../utils/noop";
34
34
  import PPromise from "../../../utils/promise";
35
35
  import { utf8ToStr } from "../../../utils/string_parsing";
36
- import * as events from "../../event_listeners";
37
36
  /**
38
37
  * Returns true if the given media element has old webkit methods
39
38
  * corresponding to the IOldWebkitHTMLMediaElement interface.
@@ -44,50 +43,59 @@ export function isOldWebkitMediaElement(element) {
44
43
  return typeof element
45
44
  .webkitGenerateKeyRequest === "function";
46
45
  }
46
+ /**
47
+ * MediaKeySession implementation for older versions of WebKit relying on APIs
48
+ * such as `webkitGenerateKeyRequest` `webkitAddKey` to be called on the
49
+ * HTMLMediaElement.
50
+ * @class OldWebkitMediaKeySession
51
+ */
47
52
  var OldWebkitMediaKeySession = /** @class */ (function (_super) {
48
53
  __extends(OldWebkitMediaKeySession, _super);
49
54
  function OldWebkitMediaKeySession(mediaElement, keySystem) {
50
55
  var _this = _super.call(this) || this;
51
- _this._closeSession$ = new Subject();
52
56
  _this._vid = mediaElement;
53
57
  _this._key = keySystem;
54
58
  _this.sessionId = "";
59
+ _this._closeSession = noop; // Just here to make TypeScript happy
55
60
  _this.closed = new PPromise(function (resolve) {
56
- _this._closeSession$.subscribe(resolve);
61
+ _this._closeSession = resolve;
57
62
  });
58
63
  _this.keyStatuses = new Map();
59
64
  _this.expiration = NaN;
60
- observableMerge(events.onKeyMessage$(mediaElement), events.onKeyAdded$(mediaElement), events.onKeyError$(mediaElement))
61
- .pipe(takeUntil(_this._closeSession$))
62
- .subscribe(function (evt) { return _this.trigger(evt.type, evt); });
63
- _this.update = function (license) {
64
- return new PPromise(function (resolve, reject) {
65
- try {
66
- if (_this._key.indexOf("clearkey") >= 0) {
67
- var licenseTypedArray = license instanceof ArrayBuffer ? new Uint8Array(license) :
68
- license;
69
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
70
- /* eslint-disable @typescript-eslint/no-unsafe-argument */
71
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
72
- var json = JSON.parse(utf8ToStr(licenseTypedArray));
73
- var key = base64ToBytes(json.keys[0].k);
74
- var kid = base64ToBytes(json.keys[0].kid);
75
- /* eslint-enable @typescript-eslint/no-unsafe-member-access */
76
- /* eslint-enable @typescript-eslint/no-unsafe-argument */
77
- /* eslint-enable @typescript-eslint/no-unsafe-assignment */
78
- resolve(_this._vid.webkitAddKey(_this._key, key, kid, /* sessionId */ ""));
79
- }
80
- else {
81
- resolve(_this._vid.webkitAddKey(_this._key, license, null, /* sessionId */ ""));
82
- }
83
- }
84
- catch (err) {
85
- reject(err);
86
- }
87
- });
65
+ _this._onSessionRelatedEvent = function (evt) {
66
+ _this.trigger(evt.type, evt);
88
67
  };
68
+ ["keymessage", "message", "keyadded", "ready", "keyerror", "error"]
69
+ .forEach(function (evt) { return mediaElement.addEventListener(evt, _this._onSessionRelatedEvent); });
89
70
  return _this;
90
71
  }
72
+ OldWebkitMediaKeySession.prototype.update = function (license) {
73
+ var _this = this;
74
+ return new PPromise(function (resolve, reject) {
75
+ try {
76
+ if (_this._key.indexOf("clearkey") >= 0) {
77
+ var licenseTypedArray = license instanceof ArrayBuffer ? new Uint8Array(license) :
78
+ license;
79
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
80
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
81
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
82
+ var json = JSON.parse(utf8ToStr(licenseTypedArray));
83
+ var key = base64ToBytes(json.keys[0].k);
84
+ var kid = base64ToBytes(json.keys[0].kid);
85
+ /* eslint-enable @typescript-eslint/no-unsafe-member-access */
86
+ /* eslint-enable @typescript-eslint/no-unsafe-argument */
87
+ /* eslint-enable @typescript-eslint/no-unsafe-assignment */
88
+ resolve(_this._vid.webkitAddKey(_this._key, key, kid, /* sessionId */ ""));
89
+ }
90
+ else {
91
+ resolve(_this._vid.webkitAddKey(_this._key, license, null, /* sessionId */ ""));
92
+ }
93
+ }
94
+ catch (err) {
95
+ reject(err);
96
+ }
97
+ });
98
+ };
91
99
  OldWebkitMediaKeySession.prototype.generateRequest = function (_initDataType, initData) {
92
100
  var _this = this;
93
101
  return new PPromise(function (resolve) {
@@ -98,17 +106,28 @@ var OldWebkitMediaKeySession = /** @class */ (function (_super) {
98
106
  OldWebkitMediaKeySession.prototype.close = function () {
99
107
  var _this = this;
100
108
  return new PPromise(function (resolve) {
101
- _this._closeSession$.next();
102
- _this._closeSession$.complete();
109
+ _this._unbindSession();
110
+ _this._closeSession();
103
111
  resolve();
104
112
  });
105
113
  };
114
+ /**
115
+ * Load a Persistent MediaKeySession.
116
+ * Do nothing here because this implementation doesn't handle them.
117
+ * @returns {Promise.<boolean>}
118
+ */
106
119
  OldWebkitMediaKeySession.prototype.load = function () {
120
+ // Not implemented. Always return false as in "no session with that id".
107
121
  return PPromise.resolve(false);
108
122
  };
109
123
  OldWebkitMediaKeySession.prototype.remove = function () {
110
124
  return PPromise.resolve();
111
125
  };
126
+ OldWebkitMediaKeySession.prototype._unbindSession = function () {
127
+ var _this = this;
128
+ ["keymessage", "message", "keyadded", "ready", "keyerror", "error"]
129
+ .forEach(function (evt) { return _this._vid.removeEventListener(evt, _this._onSessionRelatedEvent); });
130
+ };
112
131
  return OldWebkitMediaKeySession;
113
132
  }(EventEmitter));
114
133
  var OldWebKitCustomMediaKeys = /** @class */ (function () {