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
@@ -28,12 +28,10 @@ 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";
34
- import PPromise from "../../../utils/promise";
33
+ import noop from "../../../utils/noop";
35
34
  import { utf8ToStr } from "../../../utils/string_parsing";
36
- import * as events from "../../event_listeners";
37
35
  /**
38
36
  * Returns true if the given media element has old webkit methods
39
37
  * corresponding to the IOldWebkitHTMLMediaElement interface.
@@ -44,70 +42,90 @@ export function isOldWebkitMediaElement(element) {
44
42
  return typeof element
45
43
  .webkitGenerateKeyRequest === "function";
46
44
  }
45
+ /**
46
+ * MediaKeySession implementation for older versions of WebKit relying on APIs
47
+ * such as `webkitGenerateKeyRequest` `webkitAddKey` to be called on the
48
+ * HTMLMediaElement.
49
+ * @class OldWebkitMediaKeySession
50
+ */
47
51
  var OldWebkitMediaKeySession = /** @class */ (function (_super) {
48
52
  __extends(OldWebkitMediaKeySession, _super);
49
53
  function OldWebkitMediaKeySession(mediaElement, keySystem) {
50
54
  var _this = _super.call(this) || this;
51
- _this._closeSession$ = new Subject();
52
55
  _this._vid = mediaElement;
53
56
  _this._key = keySystem;
54
57
  _this.sessionId = "";
55
- _this.closed = new PPromise(function (resolve) {
56
- _this._closeSession$.subscribe(resolve);
58
+ _this._closeSession = noop; // Just here to make TypeScript happy
59
+ _this.closed = new Promise(function (resolve) {
60
+ _this._closeSession = resolve;
57
61
  });
58
62
  _this.keyStatuses = new Map();
59
63
  _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
- });
64
+ _this._onSessionRelatedEvent = function (evt) {
65
+ _this.trigger(evt.type, evt);
88
66
  };
67
+ ["keymessage", "message", "keyadded", "ready", "keyerror", "error"]
68
+ .forEach(function (evt) { return mediaElement.addEventListener(evt, _this._onSessionRelatedEvent); });
89
69
  return _this;
90
70
  }
71
+ OldWebkitMediaKeySession.prototype.update = function (license) {
72
+ var _this = this;
73
+ return new Promise(function (resolve, reject) {
74
+ try {
75
+ if (_this._key.indexOf("clearkey") >= 0) {
76
+ var licenseTypedArray = license instanceof ArrayBuffer ? new Uint8Array(license) :
77
+ license;
78
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
79
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
80
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
81
+ var json = JSON.parse(utf8ToStr(licenseTypedArray));
82
+ var key = base64ToBytes(json.keys[0].k);
83
+ var kid = base64ToBytes(json.keys[0].kid);
84
+ /* eslint-enable @typescript-eslint/no-unsafe-member-access */
85
+ /* eslint-enable @typescript-eslint/no-unsafe-argument */
86
+ /* eslint-enable @typescript-eslint/no-unsafe-assignment */
87
+ resolve(_this._vid.webkitAddKey(_this._key, key, kid, /* sessionId */ ""));
88
+ }
89
+ else {
90
+ resolve(_this._vid.webkitAddKey(_this._key, license, null, /* sessionId */ ""));
91
+ }
92
+ }
93
+ catch (err) {
94
+ reject(err);
95
+ }
96
+ });
97
+ };
91
98
  OldWebkitMediaKeySession.prototype.generateRequest = function (_initDataType, initData) {
92
99
  var _this = this;
93
- return new PPromise(function (resolve) {
100
+ return new Promise(function (resolve) {
94
101
  _this._vid.webkitGenerateKeyRequest(_this._key, initData);
95
102
  resolve();
96
103
  });
97
104
  };
98
105
  OldWebkitMediaKeySession.prototype.close = function () {
99
106
  var _this = this;
100
- return new PPromise(function (resolve) {
101
- _this._closeSession$.next();
102
- _this._closeSession$.complete();
107
+ return new Promise(function (resolve) {
108
+ _this._unbindSession();
109
+ _this._closeSession();
103
110
  resolve();
104
111
  });
105
112
  };
113
+ /**
114
+ * Load a Persistent MediaKeySession.
115
+ * Do nothing here because this implementation doesn't handle them.
116
+ * @returns {Promise.<boolean>}
117
+ */
106
118
  OldWebkitMediaKeySession.prototype.load = function () {
107
- return PPromise.resolve(false);
119
+ // Not implemented. Always return false as in "no session with that id".
120
+ return Promise.resolve(false);
108
121
  };
109
122
  OldWebkitMediaKeySession.prototype.remove = function () {
110
- return PPromise.resolve();
123
+ return Promise.resolve();
124
+ };
125
+ OldWebkitMediaKeySession.prototype._unbindSession = function () {
126
+ var _this = this;
127
+ ["keymessage", "message", "keyadded", "ready", "keyerror", "error"]
128
+ .forEach(function (evt) { return _this._vid.removeEventListener(evt, _this._onSessionRelatedEvent); });
111
129
  };
112
130
  return OldWebkitMediaKeySession;
113
131
  }(EventEmitter));
@@ -28,10 +28,8 @@ 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 EventEmitter from "../../../utils/event_emitter";
33
- import PPromise from "../../../utils/promise";
34
- import * as events from "../../event_listeners";
32
+ import noop from "../../../utils/noop";
35
33
  import getWebKitFairplayInitData from "../get_webkit_fairplay_initdata";
36
34
  import { WebKitMediaKeysConstructor, } from "./webkit_media_keys_constructor";
37
35
  /**
@@ -74,57 +72,44 @@ var WebkitMediaKeySession = /** @class */ (function (_super) {
74
72
  function WebkitMediaKeySession(mediaElement, keyType, serverCertificate) {
75
73
  var _this = _super.call(this) || this;
76
74
  _this._serverCertificate = serverCertificate;
77
- _this._closeSession$ = new Subject();
78
75
  _this._videoElement = mediaElement;
79
76
  _this._keyType = keyType;
80
- _this.closed = new PPromise(function (resolve) {
81
- _this._closeSession$.subscribe(resolve);
77
+ _this._unbindSession = noop;
78
+ _this._closeSession = noop; // Just here to make TypeScript happy
79
+ _this.closed = new Promise(function (resolve) {
80
+ _this._closeSession = resolve;
82
81
  });
83
82
  _this.keyStatuses = new Map();
84
83
  _this.expiration = NaN;
85
- _this.update = function (license) {
86
- return new PPromise(function (resolve, reject) {
87
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
88
- if (_this._nativeSession === undefined ||
89
- _this._nativeSession.update === undefined ||
90
- typeof _this._nativeSession.update !== "function") {
91
- return reject("Unavailable WebKit key session.");
92
- }
93
- try {
94
- var uInt8Arraylicense = void 0;
95
- if (license instanceof ArrayBuffer) {
96
- uInt8Arraylicense = new Uint8Array(license);
97
- }
98
- else if (license instanceof Uint8Array) {
99
- uInt8Arraylicense = license;
100
- }
101
- else {
102
- uInt8Arraylicense = new Uint8Array(license.buffer);
103
- }
104
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
105
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
106
- resolve(_this._nativeSession.update(uInt8Arraylicense));
107
- /* eslint-enable @typescript-eslint/no-unsafe-member-access */
108
- }
109
- catch (err) {
110
- reject(err);
111
- }
112
- /* eslint-enable @typescript-eslint/no-unsafe-member-access */
113
- });
84
+ _this._onEvent = function (evt) {
85
+ _this.trigger(evt.type, evt);
114
86
  };
115
87
  return _this;
116
88
  }
117
- WebkitMediaKeySession.prototype.listenEvent = function (session) {
89
+ WebkitMediaKeySession.prototype.update = function (license) {
118
90
  var _this = this;
119
- observableMerge(events.onKeyMessage$(session), events.onKeyAdded$(session), events.onKeyError$(session))
120
- .pipe(takeUntil(this._closeSession$))
121
- .subscribe(function (evt) {
122
- _this.trigger(evt.type, evt);
91
+ return new Promise(function (resolve, reject) {
92
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
93
+ if (_this._nativeSession === undefined ||
94
+ _this._nativeSession.update === undefined ||
95
+ typeof _this._nativeSession.update !== "function") {
96
+ return reject("Unavailable WebKit key session.");
97
+ }
98
+ try {
99
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
100
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
101
+ resolve(_this._nativeSession.update(license));
102
+ /* eslint-enable @typescript-eslint/no-unsafe-member-access */
103
+ }
104
+ catch (err) {
105
+ reject(err);
106
+ }
107
+ /* eslint-enable @typescript-eslint/no-unsafe-member-access */
123
108
  });
124
109
  };
125
110
  WebkitMediaKeySession.prototype.generateRequest = function (_initDataType, initData) {
126
111
  var _this = this;
127
- return new PPromise(function (resolve) {
112
+ return new Promise(function (resolve) {
128
113
  var _a;
129
114
  var elt = _this._videoElement;
130
115
  if (((_a = elt.webkitKeys) === null || _a === void 0 ? void 0 : _a.createSession) === undefined) {
@@ -144,7 +129,7 @@ var WebkitMediaKeySession = /** @class */ (function (_super) {
144
129
  if (keySession === undefined || keySession === null) {
145
130
  throw new Error("Impossible to get the key sessions");
146
131
  }
147
- _this.listenEvent(keySession);
132
+ _this._listenEvent(keySession);
148
133
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
149
134
  _this._nativeSession = keySession;
150
135
  resolve();
@@ -152,9 +137,9 @@ var WebkitMediaKeySession = /** @class */ (function (_super) {
152
137
  };
153
138
  WebkitMediaKeySession.prototype.close = function () {
154
139
  var _this = this;
155
- return new PPromise(function (resolve, reject) {
156
- _this._closeSession$.next();
157
- _this._closeSession$.complete();
140
+ return new Promise(function (resolve, reject) {
141
+ _this._unbindSession();
142
+ _this._closeSession();
158
143
  if (_this._nativeSession === undefined) {
159
144
  reject("No session to close.");
160
145
  return;
@@ -166,10 +151,10 @@ var WebkitMediaKeySession = /** @class */ (function (_super) {
166
151
  });
167
152
  };
168
153
  WebkitMediaKeySession.prototype.load = function () {
169
- return PPromise.resolve(false);
154
+ return Promise.resolve(false);
170
155
  };
171
156
  WebkitMediaKeySession.prototype.remove = function () {
172
- return PPromise.resolve();
157
+ return Promise.resolve();
173
158
  };
174
159
  Object.defineProperty(WebkitMediaKeySession.prototype, "sessionId", {
175
160
  get: function () {
@@ -183,6 +168,22 @@ var WebkitMediaKeySession = /** @class */ (function (_super) {
183
168
  enumerable: false,
184
169
  configurable: true
185
170
  });
171
+ WebkitMediaKeySession.prototype._listenEvent = function (session) {
172
+ var _this = this;
173
+ this._unbindSession(); // If previous session was linked
174
+ /* eslint-disable @typescript-eslint/no-unsafe-call */
175
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
176
+ /* eslint-disable @typescript-eslint/no-unsafe-return */
177
+ ["keymessage", "message", "keyadded", "ready", "keyerror", "error"]
178
+ .forEach(function (evt) { return session.addEventListener(evt, _this._onEvent); });
179
+ this._unbindSession = function () {
180
+ ["keymessage", "message", "keyadded", "ready", "keyerror", "error"]
181
+ .forEach(function (evt) { return session.removeEventListener(evt, _this._onEvent); });
182
+ };
183
+ /* eslint-disable @typescript-eslint/no-unsafe-return */
184
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
185
+ /* eslint-enable @typescript-eslint/no-unsafe-call */
186
+ };
186
187
  return WebkitMediaKeySession;
187
188
  }(EventEmitter));
188
189
  var WebKitCustomMediaKeys = /** @class */ (function () {
@@ -209,7 +210,7 @@ var WebKitCustomMediaKeys = /** @class */ (function () {
209
210
  };
210
211
  WebKitCustomMediaKeys.prototype.setServerCertificate = function (serverCertificate) {
211
212
  this._serverCertificate = serverCertificate;
212
- return PPromise.resolve();
213
+ return Promise.resolve();
213
214
  };
214
215
  return WebKitCustomMediaKeys;
215
216
  }());
@@ -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 { Observable } from "rxjs";
17
16
  import { ICustomMediaKeySession } from "./custom_media_keys";
18
17
  /**
19
18
  * Modify "initialization data" sent to a `generateKeyRequest` EME call to
@@ -52,6 +51,6 @@ export declare function patchInitData(initData: Uint8Array): Uint8Array;
52
51
  * "encrypted" event for the corresponding request.
53
52
  * @param {string} sessionType - Type of session you want to generate. Consult
54
53
  * EME Specification for more information on session types.
55
- * @returns {Observable} - Emit when done. Errors if fails.
54
+ * @returns {Promise} - Emit when done. Errors if fails.
56
55
  */
57
- export default function generateKeyRequest(session: MediaKeySession | ICustomMediaKeySession, initializationDataType: string | undefined, initializationData: Uint8Array): Observable<unknown>;
56
+ export default function generateKeyRequest(session: MediaKeySession | ICustomMediaKeySession, initializationDataType: string | undefined, initializationData: Uint8Array): Promise<unknown>;
@@ -13,11 +13,9 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { catchError, defer as observableDefer, } from "rxjs";
17
16
  import log from "../../log";
18
17
  import { getNextBoxOffsets } from "../../parsers/containers/isobmff";
19
18
  import { be4toi, concat, } from "../../utils/byte_parsing";
20
- import castToObservable from "../../utils/cast_to_observable";
21
19
  import { PSSH_TO_INTEGER } from "./constants";
22
20
  /**
23
21
  * Modify "initialization data" sent to a `generateKeyRequest` EME call to
@@ -122,32 +120,30 @@ export function patchInitData(initData) {
122
120
  * "encrypted" event for the corresponding request.
123
121
  * @param {string} sessionType - Type of session you want to generate. Consult
124
122
  * EME Specification for more information on session types.
125
- * @returns {Observable} - Emit when done. Errors if fails.
123
+ * @returns {Promise} - Emit when done. Errors if fails.
126
124
  */
127
125
  export default function generateKeyRequest(session, initializationDataType, initializationData) {
128
- return observableDefer(function () {
129
- log.debug("Compat: Calling generateRequest on the MediaKeySession");
130
- var patchedInit;
131
- try {
132
- patchedInit = patchInitData(initializationData);
133
- }
134
- catch (_e) {
135
- patchedInit = initializationData;
126
+ log.debug("Compat: Calling generateRequest on the MediaKeySession");
127
+ var patchedInit;
128
+ try {
129
+ patchedInit = patchInitData(initializationData);
130
+ }
131
+ catch (_e) {
132
+ patchedInit = initializationData;
133
+ }
134
+ var initDataType = initializationDataType !== null && initializationDataType !== void 0 ? initializationDataType : "";
135
+ return session.generateRequest(initDataType, patchedInit)
136
+ .catch(function (error) {
137
+ if (initDataType !== "" || !(error instanceof TypeError)) {
138
+ throw error;
136
139
  }
137
- var initDataType = initializationDataType !== null && initializationDataType !== void 0 ? initializationDataType : "";
138
- return castToObservable(session.generateRequest(initDataType, patchedInit))
139
- .pipe(catchError(function (error) {
140
- if (initDataType !== "" || !(error instanceof TypeError)) {
141
- throw error;
142
- }
143
- // On newer EME versions of the specification, the initialization data
144
- // type given to generateRequest cannot be an empty string (it returns
145
- // a rejected promise with a TypeError in that case).
146
- // Retry with a default "cenc" value for initialization data type if
147
- // we're in that condition.
148
- log.warn("Compat: error while calling `generateRequest` with an empty " +
149
- "initialization data type. Retrying with a default \"cenc\" value.", error);
150
- return castToObservable(session.generateRequest("cenc", patchedInit));
151
- }));
140
+ // On newer EME versions of the specification, the initialization data
141
+ // type given to generateRequest cannot be an empty string (it returns
142
+ // a rejected promise with a TypeError in that case).
143
+ // Retry with a default "cenc" value for initialization data type if
144
+ // we're in that condition.
145
+ log.warn("Compat: error while calling `generateRequest` with an empty " +
146
+ "initialization data type. Retrying with a default \"cenc\" value.", error);
147
+ return session.generateRequest("cenc", patchedInit);
152
148
  });
153
149
  }
@@ -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 { Observable } from "rxjs";
17
16
  import { ICustomMediaKeySession } from "./custom_media_keys";
18
17
  /**
19
18
  * Load a persistent session, based on its `sessionId`, on the given
@@ -29,4 +28,4 @@ import { ICustomMediaKeySession } from "./custom_media_keys";
29
28
  * @param {string} sessionId
30
29
  * @returns {Observable}
31
30
  */
32
- export default function loadSession(session: MediaKeySession | ICustomMediaKeySession, sessionId: string): Observable<boolean>;
31
+ export default function loadSession(session: MediaKeySession | ICustomMediaKeySession, sessionId: string): Promise<boolean>;
@@ -13,11 +13,43 @@
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, map, mergeMap, of as observableOf, race as observableRace, take, timer as observableTimer, } from "rxjs";
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
+ };
17
52
  import log from "../../log";
18
- import castToObservable from "../../utils/cast_to_observable";
19
- import tryCatch from "../../utils/rx-try_catch";
20
- import { onKeyStatusesChange$ } from "../event_listeners";
21
53
  var EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES = 100;
22
54
  /**
23
55
  * Load a persistent session, based on its `sessionId`, on the given
@@ -34,17 +66,35 @@ var EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES = 100;
34
66
  * @returns {Observable}
35
67
  */
36
68
  export default function loadSession(session, sessionId) {
37
- return observableDefer(function () {
38
- log.info("Compat/EME: Load persisted session", sessionId);
39
- return tryCatch(function () { return castToObservable(session.load(sessionId)); }, undefined);
40
- }).pipe(mergeMap(function (isLoaded) {
41
- if (!isLoaded || session.keyStatuses.size > 0) {
42
- return observableOf(isLoaded);
43
- }
44
- // A browser race condition can exist, seen for example in some
45
- // Chromium/Chrome versions where the `keyStatuses` property from a loaded
46
- // MediaKeySession would not be populated directly as the load answer but
47
- // asynchronously after.
48
- return observableRace(observableTimer(EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES), onKeyStatusesChange$(session)).pipe(take(1), map(function () { return isLoaded; }));
49
- }));
69
+ return __awaiter(this, void 0, void 0, function () {
70
+ var isLoaded;
71
+ return __generator(this, function (_a) {
72
+ switch (_a.label) {
73
+ case 0:
74
+ log.info("Compat/DRM: Load persisted session", sessionId);
75
+ return [4 /*yield*/, session.load(sessionId)];
76
+ case 1:
77
+ isLoaded = _a.sent();
78
+ if (!isLoaded || session.keyStatuses.size > 0) {
79
+ return [2 /*return*/, isLoaded];
80
+ }
81
+ // A browser race condition can exist, seen for example in some
82
+ // Chromium/Chrome versions where the `keyStatuses` property from a loaded
83
+ // MediaKeySession would not be populated directly as the load answer but
84
+ // asynchronously after.
85
+ return [2 /*return*/, new Promise(function (resolve) {
86
+ session.addEventListener("keystatuseschange", resolveWithLoadedStatus);
87
+ var timeout = setTimeout(resolveWithLoadedStatus, EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES);
88
+ function resolveWithLoadedStatus() {
89
+ cleanUp();
90
+ resolve(isLoaded);
91
+ }
92
+ function cleanUp() {
93
+ clearTimeout(timeout);
94
+ session.removeEventListener("keystatuseschange", resolveWithLoadedStatus);
95
+ }
96
+ })];
97
+ }
98
+ });
99
+ });
50
100
  }
@@ -24,7 +24,6 @@ import isNonEmptyString from "../utils/is_non_empty_string";
24
24
  import isNode from "./is_node";
25
25
  import shouldFavourCustomSafariEME from "./should_favour_custom_safari_EME";
26
26
  var BROWSER_PREFIXES = ["", "webkit", "moz", "ms"];
27
- var INACTIVITY_DELAY = config.INACTIVITY_DELAY;
28
27
  var pixelRatio = isNode ||
29
28
  window.devicePixelRatio == null ||
30
29
  window.devicePixelRatio === 0 ? 1 :
@@ -140,6 +139,7 @@ function visibilityChange() {
140
139
  * @returns {Observable}
141
140
  */
142
141
  function isPageActive() {
142
+ var INACTIVITY_DELAY = config.getCurrent().INACTIVITY_DELAY;
143
143
  return visibilityChange().pipe(switchMap(function (x) {
144
144
  if (!x) {
145
145
  return observableOf(x).pipe(delay(INACTIVITY_DELAY));
@@ -195,6 +195,7 @@ function onPictureInPictureEvent$(elt) {
195
195
  * @returns {Observable}
196
196
  */
197
197
  function isVideoVisible(pip$) {
198
+ var INACTIVITY_DELAY = config.getCurrent().INACTIVITY_DELAY;
198
199
  return observableCombineLatest([visibilityChange(), pip$]).pipe(switchMap(function (_a) {
199
200
  var isVisible = _a[0], pip = _a[1];
200
201
  if (pip.isEnabled || isVisible) {
@@ -13,7 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { isSafari } from "./browser_detection";
16
+ import { isSafariDesktop, isSafariMobile, } from "./browser_detection";
17
17
  import { WebKitMediaKeysConstructor, } from "./eme/custom_media_keys/webkit_media_keys_constructor";
18
18
  /**
19
19
  * On Safari 12.1, it seems that since fairplay CDM implementation
@@ -23,5 +23,5 @@ import { WebKitMediaKeysConstructor, } from "./eme/custom_media_keys/webkit_medi
23
23
  * @returns {boolean}
24
24
  */
25
25
  export default function shouldFavourCustomSafariEME() {
26
- return isSafari && WebKitMediaKeysConstructor !== undefined;
26
+ return (isSafariDesktop || isSafariMobile) && WebKitMediaKeysConstructor !== undefined;
27
27
  }