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
@@ -16,12 +16,13 @@
16
16
  import log from "../../../log";
17
17
  import areArraysOfNumbersEqual from "../../../utils/are_arrays_of_numbers_equal";
18
18
  import { assertInterface } from "../../../utils/assert";
19
- import { base64ToBytes, bytesToBase64, } from "../../../utils/base64";
20
- import { concat } from "../../../utils/byte_parsing";
19
+ import { bytesToBase64 } from "../../../utils/base64";
21
20
  import hashBuffer from "../../../utils/hash_buffer";
22
21
  import isNonEmptyString from "../../../utils/is_non_empty_string";
23
22
  import isNullOrUndefined from "../../../utils/is_null_or_undefined";
24
23
  import areInitializationValuesCompatible from "./are_init_values_compatible";
24
+ import { areKeyIdsEqual } from "./key_id_comparison";
25
+ import SerializableBytes from "./serializable_bytes";
25
26
  /**
26
27
  * Throw if the given storage does not respect the right interface.
27
28
  * @param {Object} storage
@@ -29,37 +30,6 @@ import areInitializationValuesCompatible from "./are_init_values_compatible";
29
30
  function checkStorage(storage) {
30
31
  assertInterface(storage, { save: "function", load: "function" }, "licenseStorage");
31
32
  }
32
- /** Wrap initialization data and allow serialization of it into base64. */
33
- var InitDataContainer = /** @class */ (function () {
34
- /**
35
- * Create a new container, wrapping the initialization data given and allowing
36
- * linearization into base64.
37
- * @param {Uint8Array}
38
- */
39
- function InitDataContainer(initData) {
40
- this.initData = initData;
41
- }
42
- /**
43
- * Convert it to base64.
44
- * `toJSON` is specially interpreted by JavaScript engines to be able to rely
45
- * on it when calling `JSON.stringify` on it or any of its parent objects:
46
- * https://tc39.es/ecma262/#sec-serializejsonproperty
47
- * @returns {string}
48
- */
49
- InitDataContainer.prototype.toJSON = function () {
50
- return bytesToBase64(this.initData);
51
- };
52
- /**
53
- * Decode a base64 sequence representing an initialization data back to an
54
- * Uint8Array.
55
- * @param {string}
56
- * @returns {Uint8Array}
57
- */
58
- InitDataContainer.decode = function (base64) {
59
- return base64ToBytes(base64);
60
- };
61
- return InitDataContainer;
62
- }());
63
33
  /**
64
34
  * Set representing persisted licenses. Depends on a simple local-
65
35
  * storage implementation with a `save`/`load` synchronous interface
@@ -79,13 +49,14 @@ var PersistentSessionsStore = /** @class */ (function () {
79
49
  this._entries = [];
80
50
  this._storage = storage;
81
51
  try {
82
- this._entries = this._storage.load();
83
- if (!Array.isArray(this._entries)) {
84
- this._entries = [];
52
+ var entries = this._storage.load();
53
+ if (!Array.isArray(entries)) {
54
+ entries = [];
85
55
  }
56
+ this._entries = entries;
86
57
  }
87
58
  catch (e) {
88
- log.warn("EME-PSS: Could not get entries from license storage", e);
59
+ log.warn("DRM-PSS: Could not get entries from license storage", e);
89
60
  this.dispose();
90
61
  }
91
62
  }
@@ -106,7 +77,7 @@ var PersistentSessionsStore = /** @class */ (function () {
106
77
  };
107
78
  /**
108
79
  * Retrieve an entry based on its initialization data.
109
- * @param {Uint8Array} initData
80
+ * @param {Object} initData
110
81
  * @param {string|undefined} initDataType
111
82
  * @returns {Object|null}
112
83
  */
@@ -141,9 +112,9 @@ var PersistentSessionsStore = /** @class */ (function () {
141
112
  * @param {string|undefined} initDataType
142
113
  * @param {MediaKeySession} session
143
114
  */
144
- PersistentSessionsStore.prototype.add = function (initData, session) {
115
+ PersistentSessionsStore.prototype.add = function (initData, keyIds, session) {
145
116
  if (isNullOrUndefined(session) || !isNonEmptyString(session.sessionId)) {
146
- log.warn("EME-PSS: Invalid Persisten Session given.");
117
+ log.warn("DRM-PSS: Invalid Persisten Session given.");
147
118
  return;
148
119
  }
149
120
  var sessionId = session.sessionId;
@@ -152,32 +123,46 @@ var PersistentSessionsStore = /** @class */ (function () {
152
123
  return;
153
124
  }
154
125
  else if (currentEntry !== null) { // currentEntry has a different sessionId
155
- this.delete(initData);
126
+ this.delete(currentEntry.sessionId);
127
+ }
128
+ log.info("DRM-PSS: Add new session", sessionId);
129
+ var storedValues = prepareValuesForStore(initData.values.getFormattedValues());
130
+ if (keyIds === undefined) {
131
+ this._entries.push({ version: 3, sessionId: sessionId, values: storedValues,
132
+ initDataType: initData.type });
133
+ }
134
+ else {
135
+ this._entries.push({ version: 4, sessionId: sessionId, keyIds: keyIds.map(function (k) { return new SerializableBytes(k); }),
136
+ values: storedValues,
137
+ initDataType: initData.type });
156
138
  }
157
- log.info("EME-PSS: Add new session", sessionId);
158
- this._entries.push({ version: 3, sessionId: sessionId, values: this._formatValuesForStore(initData.values),
159
- initDataType: initData.type });
160
139
  this._save();
161
140
  };
162
141
  /**
163
- * Delete stored MediaKeySession information based on its initialization
164
- * data.
142
+ * Delete stored MediaKeySession information based on its session id.
165
143
  * @param {Uint8Array} initData
166
144
  * @param {string|undefined} initDataType
167
145
  */
168
- PersistentSessionsStore.prototype.delete = function (initData) {
169
- var index = this._getIndex(initData);
146
+ PersistentSessionsStore.prototype.delete = function (sessionId) {
147
+ var index = -1;
148
+ for (var i = 0; i < this._entries.length; i++) {
149
+ var entry_1 = this._entries[i];
150
+ if (entry_1.sessionId === sessionId) {
151
+ index = i;
152
+ break;
153
+ }
154
+ }
170
155
  if (index === -1) {
171
- log.warn("EME-PSS: initData to delete not found.");
156
+ log.warn("DRM-PSS: initData to delete not found.");
172
157
  return;
173
158
  }
174
159
  var entry = this._entries[index];
175
- log.warn("EME-PSS: Delete session from store", entry.sessionId);
160
+ log.warn("DRM-PSS: Delete session from store", entry.sessionId);
176
161
  this._entries.splice(index, 1);
177
162
  this._save();
178
163
  };
179
164
  PersistentSessionsStore.prototype.deleteOldSessions = function (sessionsToDelete) {
180
- log.info("EME-PSS: Deleting last ".concat(sessionsToDelete, " sessions."));
165
+ log.info("DRM-PSS: Deleting last ".concat(sessionsToDelete, " sessions."));
181
166
  if (sessionsToDelete <= 0) {
182
167
  return;
183
168
  }
@@ -185,7 +170,7 @@ var PersistentSessionsStore = /** @class */ (function () {
185
170
  this._entries.splice(0, sessionsToDelete);
186
171
  }
187
172
  else {
188
- log.warn("EME-PSS: Asked to remove more information that it contains", sessionsToDelete, this._entries.length);
173
+ log.warn("DRM-PSS: Asked to remove more information that it contains", sessionsToDelete, this._entries.length);
189
174
  this._entries = [];
190
175
  }
191
176
  this._save();
@@ -200,60 +185,103 @@ var PersistentSessionsStore = /** @class */ (function () {
200
185
  /**
201
186
  * Retrieve index of an entry.
202
187
  * Returns `-1` if not found.
203
- * @param {Uint8Array} initData
204
- * @param {string|undefined} initDataType
188
+ * @param {Object} initData
205
189
  * @returns {number}
206
190
  */
207
191
  PersistentSessionsStore.prototype._getIndex = function (initData) {
208
- var formatted = this._formatValuesForStore(initData.values);
209
192
  // Older versions of the format include a concatenation of all
210
193
  // initialization data and its hash.
211
- var concatInitData = concat.apply(void 0, initData.values.map(function (i) { return i.data; }));
212
- var concatInitDataHash = hashBuffer(concatInitData);
213
- for (var i = 0; i < this._entries.length; i++) {
214
- var entry = this._entries[i];
194
+ // This is only computed lazily, the first time it is needed.
195
+ var lazyConcatenatedData = null;
196
+ function getConcatenatedInitDataInfo() {
197
+ if (lazyConcatenatedData === null) {
198
+ var concatInitData = initData.values.constructRequestData();
199
+ lazyConcatenatedData = { initData: concatInitData,
200
+ initDataHash: hashBuffer(concatInitData) };
201
+ }
202
+ return lazyConcatenatedData;
203
+ }
204
+ var _loop_1 = function (i) {
205
+ var entry = this_1._entries[i];
215
206
  if (entry.initDataType === initData.type) {
216
207
  switch (entry.version) {
208
+ case 4:
209
+ if (initData.keyIds !== undefined) {
210
+ var foundCompatible = initData.keyIds.every(function (keyId) {
211
+ var keyIdB64 = bytesToBase64(keyId);
212
+ for (var _i = 0, _a = entry.keyIds; _i < _a.length; _i++) {
213
+ var entryKid = _a[_i];
214
+ if (typeof entryKid === "string") {
215
+ if (keyIdB64 === entryKid) {
216
+ return true;
217
+ }
218
+ }
219
+ else if (areKeyIdsEqual(entryKid.initData, keyId)) {
220
+ return true;
221
+ }
222
+ }
223
+ return false;
224
+ });
225
+ if (foundCompatible) {
226
+ return { value: i };
227
+ }
228
+ }
229
+ else {
230
+ var formatted_1 = initData.values.getFormattedValues();
231
+ if (areInitializationValuesCompatible(formatted_1, entry.values)) {
232
+ return { value: i };
233
+ }
234
+ }
235
+ break;
217
236
  case 3:
237
+ var formatted = initData.values.getFormattedValues();
218
238
  if (areInitializationValuesCompatible(formatted, entry.values)) {
219
- return i;
239
+ return { value: i };
220
240
  }
221
241
  break;
222
- case 2:
223
- if (entry.initDataHash === concatInitDataHash) {
242
+ case 2: {
243
+ var _a = getConcatenatedInitDataInfo(), concatInitData = _a.initData, concatHash = _a.initDataHash;
244
+ if (entry.initDataHash === concatHash) {
224
245
  try {
225
246
  var decodedInitData = typeof entry.initData === "string" ?
226
- InitDataContainer.decode(entry.initData) :
247
+ SerializableBytes.decode(entry.initData) :
227
248
  entry.initData.initData;
228
249
  if (areArraysOfNumbersEqual(decodedInitData, concatInitData)) {
229
- return i;
250
+ return { value: i };
230
251
  }
231
252
  }
232
253
  catch (e) {
233
- log.warn("EME-PSS: Could not decode initialization data.", e);
254
+ log.warn("DRM-PSS: Could not decode initialization data.", e);
234
255
  }
235
256
  }
236
257
  break;
237
- case 1:
238
- if (entry.initDataHash === concatInitDataHash) {
258
+ }
259
+ case 1: {
260
+ var _b = getConcatenatedInitDataInfo(), concatInitData = _b.initData, concatHash = _b.initDataHash;
261
+ if (entry.initDataHash === concatHash) {
239
262
  if (typeof entry.initData.length === "undefined") {
240
- // If length is undefined, it has been linearized. We could still
241
- // convert it back to an Uint8Array but this would necessitate some
242
- // ugly unreadable logic for a very very minor possibility.
243
- // Just consider that it is a match based on the hash.
244
- return i;
263
+ return { value: i };
245
264
  }
246
265
  else if (areArraysOfNumbersEqual(entry.initData, concatInitData)) {
247
- return i;
266
+ return { value: i };
248
267
  }
249
268
  }
250
269
  break;
251
- default:
252
- if (entry.initData === concatInitDataHash) {
253
- return i;
270
+ }
271
+ default: {
272
+ var concatHash = getConcatenatedInitDataInfo().initDataHash;
273
+ if (entry.initData === concatHash) {
274
+ return { value: i };
254
275
  }
276
+ }
255
277
  }
256
278
  }
279
+ };
280
+ var this_1 = this;
281
+ for (var i = 0; i < this._entries.length; i++) {
282
+ var state_1 = _loop_1(i);
283
+ if (typeof state_1 === "object")
284
+ return state_1.value;
257
285
  }
258
286
  return -1;
259
287
  };
@@ -265,29 +293,23 @@ var PersistentSessionsStore = /** @class */ (function () {
265
293
  this._storage.save(this._entries);
266
294
  }
267
295
  catch (e) {
268
- log.warn("EME-PSS: Could not save licenses in localStorage");
296
+ log.warn("DRM-PSS: Could not save licenses in localStorage");
269
297
  }
270
298
  };
271
- /**
272
- * Format given initializationData's values so they are ready to be stored:
273
- * - sort them by systemId, so they are faster to compare
274
- * - add hash for each initialization data encountered.
275
- * @param {Array.<Object>} initialValues
276
- * @returns {Array.<Object>}
277
- */
278
- PersistentSessionsStore.prototype._formatValuesForStore = function (initialValues) {
279
- return initialValues.slice()
280
- .sort(function (a, b) { return a.systemId === b.systemId ? 0 :
281
- a.systemId === undefined ? 1 :
282
- b.systemId === undefined ? -1 :
283
- a.systemId < b.systemId ? -1 :
284
- 1; })
285
- .map(function (_a) {
286
- var systemId = _a.systemId, data = _a.data;
287
- return ({ systemId: systemId, data: new InitDataContainer(data),
288
- hash: hashBuffer(data) });
289
- });
290
- };
291
299
  return PersistentSessionsStore;
292
300
  }());
293
301
  export default PersistentSessionsStore;
302
+ /**
303
+ * Format given initializationData's values so they are ready to be stored:
304
+ * - sort them by systemId, so they are faster to compare
305
+ * - add hash for each initialization data encountered.
306
+ * @param {Array.<Object>} initialValues
307
+ * @returns {Array.<Object>}
308
+ */
309
+ function prepareValuesForStore(initialValues) {
310
+ return initialValues
311
+ .map(function (_a) {
312
+ var systemId = _a.systemId, data = _a.data, hash = _a.hash;
313
+ return ({ systemId: systemId, hash: hash, data: new SerializableBytes(data) });
314
+ });
315
+ }
@@ -13,13 +13,16 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- /** Wrap initialization data and allow serialization of it into base64. */
17
- export default class InitDataContainer {
18
- /** The initData itself. */
16
+ /** Wrap byte-based data and allow serialization of it into base64. */
17
+ export default class SerializableBytes {
18
+ /**
19
+ * The data itself. Named `initData` for legacy reasons (cannot be changed
20
+ * because it has an impact on saved persistent session information.
21
+ */
19
22
  initData: Uint8Array;
20
23
  /**
21
- * Create a new container, wrapping the initialization data given and allowing
22
- * linearization into base64.
24
+ * Create a new `SerializableBytes`, wrapping the initialization data
25
+ * given and allowing serialization into base64.
23
26
  * @param {Uint8Array}
24
27
  */
25
28
  constructor(initData: Uint8Array);
@@ -14,14 +14,14 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { base64ToBytes, bytesToBase64, } from "../../../utils/base64";
17
- /** Wrap initialization data and allow serialization of it into base64. */
18
- var InitDataContainer = /** @class */ (function () {
17
+ /** Wrap byte-based data and allow serialization of it into base64. */
18
+ var SerializableBytes = /** @class */ (function () {
19
19
  /**
20
- * Create a new container, wrapping the initialization data given and allowing
21
- * linearization into base64.
20
+ * Create a new `SerializableBytes`, wrapping the initialization data
21
+ * given and allowing serialization into base64.
22
22
  * @param {Uint8Array}
23
23
  */
24
- function InitDataContainer(initData) {
24
+ function SerializableBytes(initData) {
25
25
  this.initData = initData;
26
26
  }
27
27
  /**
@@ -31,7 +31,7 @@ var InitDataContainer = /** @class */ (function () {
31
31
  * https://tc39.es/ecma262/#sec-serializejsonproperty
32
32
  * @returns {string}
33
33
  */
34
- InitDataContainer.prototype.toJSON = function () {
34
+ SerializableBytes.prototype.toJSON = function () {
35
35
  return bytesToBase64(this.initData);
36
36
  };
37
37
  /**
@@ -40,9 +40,9 @@ var InitDataContainer = /** @class */ (function () {
40
40
  * @param {string}
41
41
  * @returns {Uint8Array}
42
42
  */
43
- InitDataContainer.decode = function (base64) {
43
+ SerializableBytes.decode = function (base64) {
44
44
  return base64ToBytes(base64);
45
45
  };
46
- return InitDataContainer;
46
+ return SerializableBytes;
47
47
  }());
48
- export default InitDataContainer;
48
+ export default SerializableBytes;
@@ -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 { ICustomMediaKeys } from "../../compat";
16
+ import { ICustomMediaKeys } from "../../../compat";
17
17
  declare const _default: {
18
18
  /**
19
19
  * Tells the ServerCertificateStore that you begin to call the APIs to set a
@@ -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 hashBuffer from "../../utils/hash_buffer";
16
+ import hashBuffer from "../../../utils/hash_buffer";
17
17
  /**
18
18
  * Keep track of server certificate which have been set for a MediaKeys.
19
19
  * As it is impossible for a MediaKeys to have his server certificate reset
@@ -27,10 +27,10 @@ export interface IManifestFetcherParsedResult {
27
27
  * The time (`performance.now()`) at which the request was started (at which
28
28
  * the JavaScript call was done).
29
29
  */
30
- sendingTime?: number;
30
+ sendingTime?: number | undefined;
31
31
  /** The time (`performance.now()`) at which the request was fully received. */
32
- receivedTime?: number;
33
- parsingTime?: number;
32
+ receivedTime?: number | undefined;
33
+ parsingTime?: number | undefined;
34
34
  }
35
35
  /** Emitted when a fetching or parsing minor error happened. */
36
36
  export interface IManifestFetcherWarningEvent {
@@ -51,7 +51,7 @@ export interface IManifestFetcherParserOptions {
51
51
  * If set, offset to add to `performance.now()` to obtain the current
52
52
  * server's time.
53
53
  */
54
- externalClockOffset?: number;
54
+ externalClockOffset?: number | undefined;
55
55
  /** The previous value of the Manifest (when updating). */
56
56
  previousManifest: Manifest | null;
57
57
  /**
@@ -49,16 +49,15 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
49
49
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
50
50
  }
51
51
  };
52
- import PPromise from "pinkie";
53
52
  import { Observable, } from "rxjs";
54
53
  import config from "../../../config";
55
54
  import { formatError, } from "../../../errors";
56
55
  import log from "../../../log";
57
56
  import assert from "../../../utils/assert";
57
+ import PPromise from "../../../utils/promise";
58
58
  import TaskCanceller from "../../../utils/task_canceller";
59
59
  import errorSelector from "../utils/error_selector";
60
60
  import { tryRequestPromiseWithBackoff, } from "../utils/try_urls_with_backoff";
61
- var DEFAULT_MAX_MANIFEST_REQUEST_RETRY = config.DEFAULT_MAX_MANIFEST_REQUEST_RETRY, DEFAULT_MAX_REQUESTS_RETRY_ON_OFFLINE = config.DEFAULT_MAX_REQUESTS_RETRY_ON_OFFLINE, INITIAL_BACKOFF_DELAY_BASE = config.INITIAL_BACKOFF_DELAY_BASE, MAX_BACKOFF_DELAY_BASE = config.MAX_BACKOFF_DELAY_BASE;
62
61
  /**
63
62
  * Class allowing to facilitate the task of loading and parsing a Manifest.
64
63
  * @class ManifestFetcher
@@ -318,7 +317,8 @@ var ManifestFetcher = /** @class */ (function () {
318
317
  * @returns {Object}
319
318
  */
320
319
  ManifestFetcher.prototype._getBackoffSetting = function (onRetry) {
321
- var _a = this._settings, lowLatencyMode = _a.lowLatencyMode, ogRegular = _a.maxRetryRegular, ogOffline = _a.maxRetryOffline;
320
+ var _a = config.getCurrent(), DEFAULT_MAX_MANIFEST_REQUEST_RETRY = _a.DEFAULT_MAX_MANIFEST_REQUEST_RETRY, DEFAULT_MAX_REQUESTS_RETRY_ON_OFFLINE = _a.DEFAULT_MAX_REQUESTS_RETRY_ON_OFFLINE, INITIAL_BACKOFF_DELAY_BASE = _a.INITIAL_BACKOFF_DELAY_BASE, MAX_BACKOFF_DELAY_BASE = _a.MAX_BACKOFF_DELAY_BASE;
321
+ var _b = this._settings, lowLatencyMode = _b.lowLatencyMode, ogRegular = _b.maxRetryRegular, ogOffline = _b.maxRetryOffline;
322
322
  var baseDelay = lowLatencyMode ? INITIAL_BACKOFF_DELAY_BASE.LOW_LATENCY :
323
323
  INITIAL_BACKOFF_DELAY_BASE.REGULAR;
324
324
  var maxDelay = lowLatencyMode ? MAX_BACKOFF_DELAY_BASE.LOW_LATENCY :
@@ -130,7 +130,7 @@ export interface ISegmentFetcherOptions {
130
130
  * @returns {Object}
131
131
  */
132
132
  export declare function getSegmentFetcherOptions(bufferType: string, { maxRetryRegular, maxRetryOffline, lowLatencyMode }: {
133
- maxRetryRegular?: number;
134
- maxRetryOffline?: number;
133
+ maxRetryRegular?: number | undefined;
134
+ maxRetryOffline?: number | undefined;
135
135
  lowLatencyMode: boolean;
136
136
  }): ISegmentFetcherOptions;
@@ -26,7 +26,6 @@ import objectAssign from "../../../utils/object_assign";
26
26
  import TaskCanceller from "../../../utils/task_canceller";
27
27
  import errorSelector from "../utils/error_selector";
28
28
  import { tryURLsWithBackoff } from "../utils/try_urls_with_backoff";
29
- var DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR = config.DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR, DEFAULT_MAX_REQUESTS_RETRY_ON_OFFLINE = config.DEFAULT_MAX_REQUESTS_RETRY_ON_OFFLINE, INITIAL_BACKOFF_DELAY_BASE = config.INITIAL_BACKOFF_DELAY_BASE, MAX_BACKOFF_DELAY_BASE = config.MAX_BACKOFF_DELAY_BASE;
30
29
  var generateRequestID = idGenerator();
31
30
  /**
32
31
  * Create an `ISegmentFetcher` object which will allow to easily fetch and parse
@@ -76,7 +75,8 @@ export default function createSegmentFetcher(bufferType, pipeline, callbacks, op
76
75
  /**
77
76
  * If the request succeeded, set to the corresponding
78
77
  * `IChunkCompleteInformation` object.
79
- * If the request failed or was cancelled, set to `null`.
78
+ * For any other completion cases: if the request either failed, was
79
+ * cancelled or just if no request was needed, set to `null`.
80
80
  *
81
81
  * Stays to `undefined` when the request is still pending.
82
82
  */
@@ -162,6 +162,9 @@ export default function createSegmentFetcher(bufferType, pipeline, callbacks, op
162
162
  requestInfo = res.resultData;
163
163
  sendNetworkMetricsIfAvailable();
164
164
  }
165
+ else {
166
+ requestInfo = null;
167
+ }
165
168
  if (!canceller.isUsed) {
166
169
  // The current Observable could have been canceled as a result of one
167
170
  // of the previous `next` calls. In that case, we don't want to send
@@ -267,6 +270,7 @@ export default function createSegmentFetcher(bufferType, pipeline, callbacks, op
267
270
  */
268
271
  export function getSegmentFetcherOptions(bufferType, _a) {
269
272
  var maxRetryRegular = _a.maxRetryRegular, maxRetryOffline = _a.maxRetryOffline, lowLatencyMode = _a.lowLatencyMode;
273
+ var _b = config.getCurrent(), DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR = _b.DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR, DEFAULT_MAX_REQUESTS_RETRY_ON_OFFLINE = _b.DEFAULT_MAX_REQUESTS_RETRY_ON_OFFLINE, INITIAL_BACKOFF_DELAY_BASE = _b.INITIAL_BACKOFF_DELAY_BASE, MAX_BACKOFF_DELAY_BASE = _b.MAX_BACKOFF_DELAY_BASE;
270
274
  return { maxRetryRegular: bufferType === "image" ? 0 :
271
275
  maxRetryRegular !== null && maxRetryRegular !== void 0 ? maxRetryRegular : DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR,
272
276
  maxRetryOffline: maxRetryOffline !== null && maxRetryOffline !== void 0 ? maxRetryOffline : DEFAULT_MAX_REQUESTS_RETRY_ON_OFFLINE,
@@ -17,7 +17,6 @@ import config from "../../../config";
17
17
  import applyPrioritizerToSegmentFetcher from "./prioritized_segment_fetcher";
18
18
  import ObservablePrioritizer from "./prioritizer";
19
19
  import createSegmentFetcher, { getSegmentFetcherOptions, } from "./segment_fetcher";
20
- var MIN_CANCELABLE_PRIORITY = config.MIN_CANCELABLE_PRIORITY, MAX_HIGH_PRIORITY_LEVEL = config.MAX_HIGH_PRIORITY_LEVEL;
21
20
  /**
22
21
  * Interact with the transport pipelines to download segments with the right
23
22
  * priority.
@@ -53,6 +52,7 @@ var SegmentFetcherCreator = /** @class */ (function () {
53
52
  * @param {Object} transport
54
53
  */
55
54
  function SegmentFetcherCreator(transport, options) {
55
+ var _a = config.getCurrent(), MIN_CANCELABLE_PRIORITY = _a.MIN_CANCELABLE_PRIORITY, MAX_HIGH_PRIORITY_LEVEL = _a.MAX_HIGH_PRIORITY_LEVEL;
56
56
  this._transport = transport;
57
57
  this._prioritizer = new ObservablePrioritizer({
58
58
  prioritySteps: { high: MAX_HIGH_PRIORITY_LEVEL,
@@ -49,12 +49,12 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
49
49
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
50
50
  }
51
51
  };
52
- import PPromise from "pinkie";
53
52
  import { isOffline } from "../../../compat";
54
53
  import { CustomLoaderError, isKnownError, NetworkErrorTypes, RequestError, } from "../../../errors";
55
54
  import log from "../../../log";
56
55
  import cancellableSleep from "../../../utils/cancellable_sleep";
57
56
  import getFuzzedDelay from "../../../utils/get_fuzzed_delay";
57
+ import PPromise from "../../../utils/promise";
58
58
  import TaskCanceller from "../../../utils/task_canceller";
59
59
  /**
60
60
  * Called on a loader error.
@@ -15,7 +15,6 @@
15
15
  */
16
16
  import config from "../../config";
17
17
  import log from "../../log";
18
- var DEFAULT_LIVE_GAP = config.DEFAULT_LIVE_GAP;
19
18
  /**
20
19
  * Returns the calculated initial time for the content described by the given
21
20
  * Manifest:
@@ -76,6 +75,7 @@ export default function getInitialTime(manifest, lowLatencyMode, startAt) {
76
75
  var suggestedPresentationDelay = manifest.suggestedPresentationDelay, clockOffset = manifest.clockOffset;
77
76
  var maximumPosition = manifest.getMaximumPosition();
78
77
  var liveTime = void 0;
78
+ var DEFAULT_LIVE_GAP = config.getCurrent().DEFAULT_LIVE_GAP;
79
79
  if (clockOffset == null) {
80
80
  log.info("Init: no clock offset found for a live content, " +
81
81
  "starting close to maximum available position");
@@ -20,7 +20,7 @@
20
20
  import { Observable } from "rxjs";
21
21
  import { IReadOnlySharedReference } from "../../utils/reference";
22
22
  import { PlaybackObserver } from "../api";
23
- import { IKeySystemOption } from "../eme";
23
+ import { IKeySystemOption } from "../decrypt";
24
24
  import { IInitialTimeOptions } from "./get_initial_time";
25
25
  import { IDirectfileEvent } from "./types";
26
26
  export interface IDirectFileOptions {
@@ -29,8 +29,8 @@ export interface IDirectFileOptions {
29
29
  mediaElement: HTMLMediaElement;
30
30
  playbackObserver: PlaybackObserver;
31
31
  speed: IReadOnlySharedReference<number>;
32
- startAt?: IInitialTimeOptions;
33
- url?: string;
32
+ startAt?: IInitialTimeOptions | undefined;
33
+ url?: string | undefined;
34
34
  }
35
35
  /**
36
36
  * Launch a content in "Directfile mode".
@@ -21,12 +21,17 @@ import { EMPTY, filter, ignoreElements, merge as observableMerge, mergeMap, swit
21
21
  import { clearElementSrc, setElementSrc$, } from "../../compat";
22
22
  import log from "../../log";
23
23
  import deferSubscriptions from "../../utils/defer_subscriptions";
24
- import createEMEManager from "./create_eme_manager";
25
24
  import emitLoadedEvent from "./emit_loaded_event";
26
25
  import initialSeekAndPlay from "./initial_seek_and_play";
26
+ import linkDrmAndContent from "./link_drm_and_content";
27
27
  import StallAvoider from "./stall_avoider";
28
28
  import throwOnMediaError from "./throw_on_media_error";
29
29
  import updatePlaybackRate from "./update_playback_rate";
30
+ // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
31
+ // first type parameter as `any` instead of the perfectly fine `unknown`,
32
+ // leading to linter issues, as it forbids the usage of `any`.
33
+ // This is why we're disabling the eslint rule.
34
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
30
35
  /**
31
36
  * calculate initial time as a position in seconds.
32
37
  * @param {HTMLMediaElement} mediaElement
@@ -86,9 +91,8 @@ export default function initializeDirectfileContent(_a) {
86
91
  log.debug("Init: Initial time calculated:", initialTime);
87
92
  var seekAndPlay$ = initialSeekAndPlay({ mediaElement: mediaElement, playbackObserver: playbackObserver, startTime: initialTime,
88
93
  mustAutoPlay: autoPlay }).seekAndPlay$;
89
- // Create EME Manager, an observable which will manage every EME-related
90
- // issue.
91
- var emeManager$ = linkURL$.pipe(mergeMap(function () { return createEMEManager(mediaElement, keySystems, EMPTY); }), deferSubscriptions(), share());
94
+ /** Initialize decryption capabilities and the HTMLMediaElement's src attribute. */
95
+ var drmEvents$ = linkDrmAndContent(mediaElement, keySystems, EMPTY, linkURL$).pipe(deferSubscriptions(), share());
92
96
  // Translate errors coming from the media element into RxPlayer errors
93
97
  // through a throwing Observable.
94
98
  var mediaError$ = throwOnMediaError(mediaElement);
@@ -96,11 +100,6 @@ export default function initializeDirectfileContent(_a) {
96
100
  // Set the speed set by the user on the media element while pausing a
97
101
  // little longer while the buffer is empty.
98
102
  var playbackRate$ = updatePlaybackRate(mediaElement, speed, observation$)
99
- // NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
100
- // first type parameter as `any` instead of the perfectly fine `unknown`,
101
- // leading to linter issues, as it forbids the usage of `any`.
102
- // This is why we're disabling the eslint rule.
103
- /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
104
103
  .pipe(ignoreElements());
105
104
  /**
106
105
  * Observable trying to avoid various stalling situations, emitting "stalled"
@@ -112,17 +111,12 @@ export default function initializeDirectfileContent(_a) {
112
111
  * media can begin playback.
113
112
  * Also emits warning events if issues arise when doing so.
114
113
  */
115
- var loadingEvts$ = emeManager$.pipe(filter(function isEMEReady(evt) {
116
- if (evt.type === "created-media-keys") {
117
- evt.value.canAttachMediaKeys.setValue(true);
118
- return true;
119
- }
120
- return evt.type === "eme-disabled" || evt.type === "attached-media-keys";
121
- }), take(1), mergeMap(function () { return seekAndPlay$; }), switchMap(function (evt) {
114
+ var loadingEvts$ = drmEvents$.pipe(filter(function (evt) { return evt.type === "decryption-ready" ||
115
+ evt.type === "decryption-disabled"; }), take(1), mergeMap(function () { return seekAndPlay$; }), switchMap(function (evt) {
122
116
  if (evt.type === "warning") {
123
117
  return observableOf(evt);
124
118
  }
125
119
  return emitLoadedEvent(observation$, mediaElement, null, true);
126
120
  }));
127
- return observableMerge(loadingEvts$, emeManager$, mediaError$, playbackRate$, stallAvoider$);
121
+ return observableMerge(loadingEvts$, drmEvents$.pipe(ignoreElements()), mediaError$, playbackRate$, stallAvoider$);
128
122
  }