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
@@ -24,77 +24,6 @@ import { IInbandEvent } from "../stream";
24
24
  import { IPlayerState } from "./get_player_state";
25
25
  import { IConstructorOptions, ILoadVideoOptions } from "./option_utils";
26
26
  import { IAudioTrackPreference, ITextTrackPreference, ITMAudioTrack, ITMAudioTrackListItem, ITMTextTrack, ITMTextTrackListItem, ITMVideoTrack, ITMVideoTrackListItem, IVideoTrackPreference } from "./track_choice_manager";
27
- /** Payload emitted with a `positionUpdate` event. */
28
- interface IPositionUpdateItem {
29
- /** current position the player is in, in seconds. */
30
- position: number;
31
- /** Last position set for the current media currently, in seconds. */
32
- duration: number;
33
- /** Playback rate (i.e. speed) at which the current media is played. */
34
- playbackRate: number;
35
- /** Amount of buffer available for now in front of the current position, in seconds. */
36
- bufferGap: number;
37
- /** Current maximum seekable position. */
38
- maximumBufferTime?: number;
39
- wallClockTime?: number;
40
- /**
41
- * Only for live contents. Difference between the "live edge" and the current
42
- * position, in seconds.
43
- */
44
- liveGap?: number;
45
- }
46
- /** Payload emitted with a `bitrateEstimationChange` event. */
47
- interface IBitrateEstimate {
48
- /** The type of buffer this estimate was done for (e.g. "audio). */
49
- type: IBufferType;
50
- /** The calculated bitrate, in bits per seconds. */
51
- bitrate: number | undefined;
52
- }
53
- export declare type IStreamEvent = {
54
- data: IStreamEventData;
55
- start: number;
56
- end: number;
57
- onExit?: () => void;
58
- } | {
59
- data: IStreamEventData;
60
- start: number;
61
- };
62
- /** Every events sent by the RxPlayer's public API. */
63
- interface IPublicAPIEvent {
64
- playerStateChange: string;
65
- positionUpdate: IPositionUpdateItem;
66
- audioTrackChange: ITMAudioTrack | null;
67
- textTrackChange: ITMTextTrack | null;
68
- videoTrackChange: ITMVideoTrack | null;
69
- audioBitrateChange: number;
70
- videoBitrateChange: number;
71
- imageTrackUpdate: {
72
- data: IBifThumbnail[];
73
- };
74
- fullscreenChange: boolean;
75
- bitrateEstimationChange: IBitrateEstimate;
76
- volumeChange: number;
77
- error: ICustomError | Error;
78
- warning: ICustomError | Error;
79
- nativeTextTracksChange: TextTrack[];
80
- periodChange: Period;
81
- availableAudioBitratesChange: number[];
82
- availableVideoBitratesChange: number[];
83
- availableAudioTracksChange: ITMAudioTrackListItem[];
84
- availableTextTracksChange: ITMTextTrackListItem[];
85
- availableVideoTracksChange: ITMVideoTrackListItem[];
86
- decipherabilityUpdate: Array<{
87
- manifest: Manifest;
88
- period: Period;
89
- adaptation: Adaptation;
90
- representation: Representation;
91
- }>;
92
- seeking: null;
93
- seeked: null;
94
- streamEvent: IStreamEvent;
95
- streamEventSkip: IStreamEvent;
96
- inbandEvents: IInbandEvent[];
97
- }
98
27
  /**
99
28
  * @class Player
100
29
  * @extends EventEmitter
@@ -594,6 +523,12 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
594
523
  * @param {Number} sizeInSeconds
595
524
  */
596
525
  setWantedBufferAhead(sizeInSeconds: number): void;
526
+ /**
527
+ * Set the max buffer size the buffer should take in memory
528
+ * The player . will stop downloading chunks when this size is reached.
529
+ * @param {Number} sizeInKBytes
530
+ */
531
+ setMaxVideoBufferSize(sizeInKBytes: number): void;
597
532
  /**
598
533
  * Returns the max buffer size for the buffer behind the current position.
599
534
  * @returns {Number}
@@ -609,6 +544,11 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
609
544
  * @returns {Number}
610
545
  */
611
546
  getWantedBufferAhead(): number;
547
+ /**
548
+ * Returns the max buffer memory size for the buffer in kilobytes
549
+ * @returns {Number}
550
+ */
551
+ getMaxVideoBufferSize(): number;
612
552
  /**
613
553
  * Returns type of current keysystem (e.g. playready, widevine) if the content
614
554
  * is encrypted. null otherwise.
@@ -865,5 +805,76 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
865
805
  private _priv_triggerCurrentBitrateChangeEvent;
866
806
  private _priv_getCurrentRepresentations;
867
807
  }
808
+ /** Payload emitted with a `positionUpdate` event. */
809
+ export interface IPositionUpdateItem {
810
+ /** current position the player is in, in seconds. */
811
+ position: number;
812
+ /** Last position set for the current media currently, in seconds. */
813
+ duration: number;
814
+ /** Playback rate (i.e. speed) at which the current media is played. */
815
+ playbackRate: number;
816
+ /** Amount of buffer available for now in front of the current position, in seconds. */
817
+ bufferGap: number;
818
+ /** Current maximum seekable position. */
819
+ maximumBufferTime?: number | undefined;
820
+ wallClockTime?: number | undefined;
821
+ /**
822
+ * Only for live contents. Difference between the "live edge" and the current
823
+ * position, in seconds.
824
+ */
825
+ liveGap?: number | undefined;
826
+ }
827
+ /** Payload emitted with a `bitrateEstimationChange` event. */
828
+ export interface IBitrateEstimate {
829
+ /** The type of buffer this estimate was done for (e.g. "audio). */
830
+ type: IBufferType;
831
+ /** The calculated bitrate, in bits per seconds. */
832
+ bitrate: number | undefined;
833
+ }
834
+ export declare type IStreamEvent = {
835
+ data: IStreamEventData;
836
+ start: number;
837
+ end: number;
838
+ onExit?: () => void;
839
+ } | {
840
+ data: IStreamEventData;
841
+ start: number;
842
+ };
843
+ /** Every events sent by the RxPlayer's public API. */
844
+ interface IPublicAPIEvent {
845
+ playerStateChange: string;
846
+ positionUpdate: IPositionUpdateItem;
847
+ audioTrackChange: ITMAudioTrack | null;
848
+ textTrackChange: ITMTextTrack | null;
849
+ videoTrackChange: ITMVideoTrack | null;
850
+ audioBitrateChange: number;
851
+ videoBitrateChange: number;
852
+ imageTrackUpdate: {
853
+ data: IBifThumbnail[];
854
+ };
855
+ fullscreenChange: boolean;
856
+ bitrateEstimationChange: IBitrateEstimate;
857
+ volumeChange: number;
858
+ error: ICustomError | Error;
859
+ warning: ICustomError | Error;
860
+ nativeTextTracksChange: TextTrack[];
861
+ periodChange: Period;
862
+ availableAudioBitratesChange: number[];
863
+ availableVideoBitratesChange: number[];
864
+ availableAudioTracksChange: ITMAudioTrackListItem[];
865
+ availableTextTracksChange: ITMTextTrackListItem[];
866
+ availableVideoTracksChange: ITMVideoTrackListItem[];
867
+ decipherabilityUpdate: Array<{
868
+ manifest: Manifest;
869
+ period: Period;
870
+ adaptation: Adaptation;
871
+ representation: Representation;
872
+ }>;
873
+ seeking: null;
874
+ seeked: null;
875
+ streamEvent: IStreamEvent;
876
+ streamEventSkip: IStreamEvent;
877
+ inbandEvents: IInbandEvent[];
878
+ }
868
879
  export default Player;
869
880
  export { IStreamEventData };
@@ -60,7 +60,7 @@ import PPromise from "../../utils/promise";
60
60
  import { getLeftSizeOfRange, getPlayedSizeOfRange, getSizeOfRange, } from "../../utils/ranges";
61
61
  import createSharedReference from "../../utils/reference";
62
62
  import warnOnce from "../../utils/warn_once";
63
- import { clearEMESession, disposeEME, getCurrentKeySystem, } from "../eme";
63
+ import { clearOnStop, disposeDecryptionResources, getCurrentKeySystem, } from "../decrypt";
64
64
  import { ManifestFetcher, SegmentFetcherCreator, } from "../fetchers";
65
65
  import initializeMediaSourcePlayback from "../init";
66
66
  import emitSeekEvents from "./emit_seek_events";
@@ -69,7 +69,6 @@ import { checkReloadOptions, parseConstructorOptions, parseLoadVideoOptions, } f
69
69
  import PlaybackObserver from "./playback_observer";
70
70
  import TrackChoiceManager from "./track_choice_manager";
71
71
  /* eslint-disable @typescript-eslint/naming-convention */
72
- var DEFAULT_UNMUTED_VOLUME = config.DEFAULT_UNMUTED_VOLUME;
73
72
  var isPageActive = events.isPageActive, isVideoVisible = events.isVideoVisible, onEnded$ = events.onEnded$, onFullscreenChange$ = events.onFullscreenChange$, onPlayPause$ = events.onPlayPause$, onPictureInPictureEvent$ = events.onPictureInPictureEvent$, onSeeking$ = events.onSeeking$, onTextTrackChanges$ = events.onTextTrackChanges$, videoWidth$ = events.videoWidth$;
74
73
  /**
75
74
  * @class Player
@@ -84,11 +83,12 @@ var Player = /** @class */ (function (_super) {
84
83
  function Player(options) {
85
84
  if (options === void 0) { options = {}; }
86
85
  var _this = _super.call(this) || this;
87
- var _a = parseConstructorOptions(options), initialAudioBitrate = _a.initialAudioBitrate, initialVideoBitrate = _a.initialVideoBitrate, limitVideoWidth = _a.limitVideoWidth, minAudioBitrate = _a.minAudioBitrate, minVideoBitrate = _a.minVideoBitrate, maxAudioBitrate = _a.maxAudioBitrate, maxBufferAhead = _a.maxBufferAhead, maxBufferBehind = _a.maxBufferBehind, maxVideoBitrate = _a.maxVideoBitrate, preferredAudioTracks = _a.preferredAudioTracks, preferredTextTracks = _a.preferredTextTracks, preferredVideoTracks = _a.preferredVideoTracks, throttleWhenHidden = _a.throttleWhenHidden, throttleVideoBitrateWhenHidden = _a.throttleVideoBitrateWhenHidden, videoElement = _a.videoElement, wantedBufferAhead = _a.wantedBufferAhead, stopAtEnd = _a.stopAtEnd;
86
+ var _a = parseConstructorOptions(options), initialAudioBitrate = _a.initialAudioBitrate, initialVideoBitrate = _a.initialVideoBitrate, limitVideoWidth = _a.limitVideoWidth, minAudioBitrate = _a.minAudioBitrate, minVideoBitrate = _a.minVideoBitrate, maxAudioBitrate = _a.maxAudioBitrate, maxBufferAhead = _a.maxBufferAhead, maxBufferBehind = _a.maxBufferBehind, maxVideoBitrate = _a.maxVideoBitrate, preferredAudioTracks = _a.preferredAudioTracks, preferredTextTracks = _a.preferredTextTracks, preferredVideoTracks = _a.preferredVideoTracks, throttleWhenHidden = _a.throttleWhenHidden, throttleVideoBitrateWhenHidden = _a.throttleVideoBitrateWhenHidden, videoElement = _a.videoElement, wantedBufferAhead = _a.wantedBufferAhead, maxVideoBufferSize = _a.maxVideoBufferSize, stopAtEnd = _a.stopAtEnd;
87
+ var DEFAULT_UNMUTED_VOLUME = config.getCurrent().DEFAULT_UNMUTED_VOLUME;
88
88
  // Workaround to support Firefox autoplay on FF 42.
89
89
  // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
90
90
  videoElement.preload = "auto";
91
- _this.version = /* PLAYER_VERSION */ "3.26.2";
91
+ _this.version = /* PLAYER_VERSION */ "3.27.0-dev.2022031700";
92
92
  _this.log = log;
93
93
  _this.state = "STOPPED";
94
94
  _this.videoElement = videoElement;
@@ -138,6 +138,7 @@ var Player = /** @class */ (function (_super) {
138
138
  wantedBufferAhead: createSharedReference(wantedBufferAhead),
139
139
  maxBufferAhead: createSharedReference(maxBufferAhead),
140
140
  maxBufferBehind: createSharedReference(maxBufferBehind),
141
+ maxVideoBufferSize: createSharedReference(maxVideoBufferSize),
141
142
  };
142
143
  _this._priv_bitrateInfos = {
143
144
  lastBitrates: { audio: initialAudioBitrate,
@@ -224,8 +225,13 @@ var Player = /** @class */ (function (_super) {
224
225
  // free resources linked to the loaded content
225
226
  this.stop();
226
227
  if (this.videoElement !== null) {
227
- // free resources used for EME management
228
- disposeEME(this.videoElement);
228
+ // free resources used for decryption management
229
+ disposeDecryptionResources(this.videoElement)
230
+ .catch(function (err) {
231
+ var message = err instanceof Error ? err.message :
232
+ "Unknown error";
233
+ log.error("API: Could not dispose decryption resources: " + message);
234
+ });
229
235
  }
230
236
  // free Observables linked to the Player instance
231
237
  this._priv_destroy$.next();
@@ -236,6 +242,7 @@ var Player = /** @class */ (function (_super) {
236
242
  this._priv_speed.finish();
237
243
  this._priv_contentLock.finish();
238
244
  this._priv_bufferOptions.wantedBufferAhead.finish();
245
+ this._priv_bufferOptions.maxVideoBufferSize.finish();
239
246
  this._priv_bufferOptions.maxBufferAhead.finish();
240
247
  this._priv_bufferOptions.maxBufferBehind.finish();
241
248
  this._priv_bitrateInfos.manualBitrates.video.finish();
@@ -527,18 +534,23 @@ var Player = /** @class */ (function (_super) {
527
534
  }));
528
535
  /** Emit all player "state" updates. */
529
536
  var playerState$ = observableConcat(observableOf(PLAYER_STATES.LOADING), // Begin with LOADING
530
- // LOADED as soon as the first "loaded" event is sent
531
- loaded$.pipe(take(1), map(function () { return PLAYER_STATES.LOADED; })), observableMerge(loadedStateUpdates$
532
- .pipe(
533
- // From the first reload onward, we enter another dynamic (below)
534
- takeUntil(reloading$), skipWhile(function (state) { return state === PLAYER_STATES.PAUSED; })),
535
- // when reloading
536
- reloading$.pipe(switchMap(function () {
537
- return loaded$.pipe(take(1), // wait for the next loaded event
538
- mergeMap(function () { return loadedStateUpdates$; }), // to update the state as usual
539
- startWith(PLAYER_STATES.RELOADING) // Starts with "RELOADING" state
540
- );
541
- })))).pipe(distinctUntilChanged());
537
+ loaded$.pipe(switchMap(function (_, i) {
538
+ var isFirstLoad = i === 0;
539
+ return observableMerge(
540
+ // Purposely subscribed first so a RELOADING triggered synchronously
541
+ // after a LOADED state is catched.
542
+ reloading$.pipe(map(function () { return PLAYER_STATES.RELOADING; })),
543
+ // Only switch to LOADED state for the first (i.e. non-RELOADING) load
544
+ isFirstLoad ? observableOf(PLAYER_STATES.LOADED) :
545
+ EMPTY,
546
+ // Purposely put last so any other state change happens after we've
547
+ // already switched to LOADED
548
+ loadedStateUpdates$.pipe(takeUntil(reloading$),
549
+ // For the first load, we prefer staying at the LOADED state over
550
+ // PAUSED when autoPlay is disabled.
551
+ // For consecutive loads however, there's no LOADED state.
552
+ skipWhile(function (state) { return isFirstLoad && state === PLAYER_STATES.PAUSED; })));
553
+ }))).pipe(distinctUntilChanged());
542
554
  var playbackSubscription;
543
555
  stopContent$
544
556
  .pipe(take(1))
@@ -794,7 +806,22 @@ var Player = /** @class */ (function (_super) {
794
806
  }
795
807
  var _a = this._priv_contentInfos, isDirectFile = _a.isDirectFile, manifest = _a.manifest;
796
808
  if (isDirectFile) {
797
- return this.videoElement.currentTime;
809
+ // Calculating the "wall-clock time" necessitate to obtain first an offset,
810
+ // and then adding that offset to the HTMLMediaElement's current position.
811
+ // That offset is in most case present inside the Manifest file, yet in
812
+ // directfile mode, the RxPlayer won't parse that file, the browser does it.
813
+ //
814
+ // Thankfully Safari declares a `getStartDate` method allowing to obtain
815
+ // that offset when available. This logic is thus mainly useful when
816
+ // playing HLS contents in directfile mode on Safari.
817
+ var mediaElement = this.videoElement;
818
+ if (typeof mediaElement.getStartDate === "function") {
819
+ var startDate = mediaElement.getStartDate();
820
+ if (typeof startDate === "number" && !isNaN(startDate)) {
821
+ return startDate + mediaElement.currentTime;
822
+ }
823
+ }
824
+ return mediaElement.currentTime;
798
825
  }
799
826
  if (manifest !== null) {
800
827
  var currentTime = this.videoElement.currentTime;
@@ -1173,6 +1200,7 @@ var Player = /** @class */ (function (_super) {
1173
1200
  * If the volume was set to 0, set a default volume instead (see config).
1174
1201
  */
1175
1202
  Player.prototype.unMute = function () {
1203
+ var DEFAULT_UNMUTED_VOLUME = config.getCurrent().DEFAULT_UNMUTED_VOLUME;
1176
1204
  var vol = this.getVolume();
1177
1205
  if (vol === 0) {
1178
1206
  this.setVolume(this._priv_mutedMemory === 0 ? DEFAULT_UNMUTED_VOLUME :
@@ -1271,6 +1299,14 @@ var Player = /** @class */ (function (_super) {
1271
1299
  Player.prototype.setWantedBufferAhead = function (sizeInSeconds) {
1272
1300
  this._priv_bufferOptions.wantedBufferAhead.setValue(sizeInSeconds);
1273
1301
  };
1302
+ /**
1303
+ * Set the max buffer size the buffer should take in memory
1304
+ * The player . will stop downloading chunks when this size is reached.
1305
+ * @param {Number} sizeInKBytes
1306
+ */
1307
+ Player.prototype.setMaxVideoBufferSize = function (sizeInKBytes) {
1308
+ this._priv_bufferOptions.maxVideoBufferSize.setValue(sizeInKBytes);
1309
+ };
1274
1310
  /**
1275
1311
  * Returns the max buffer size for the buffer behind the current position.
1276
1312
  * @returns {Number}
@@ -1292,6 +1328,13 @@ var Player = /** @class */ (function (_super) {
1292
1328
  Player.prototype.getWantedBufferAhead = function () {
1293
1329
  return this._priv_bufferOptions.wantedBufferAhead.getValue();
1294
1330
  };
1331
+ /**
1332
+ * Returns the max buffer memory size for the buffer in kilobytes
1333
+ * @returns {Number}
1334
+ */
1335
+ Player.prototype.getMaxVideoBufferSize = function () {
1336
+ return this._priv_bufferOptions.maxVideoBufferSize.getValue();
1337
+ };
1295
1338
  /**
1296
1339
  * Returns type of current keysystem (e.g. playready, widevine) if the content
1297
1340
  * is encrypted. null otherwise.
@@ -1712,24 +1755,20 @@ var Player = /** @class */ (function (_super) {
1712
1755
  (_a = this._priv_mediaElementTrackChoiceManager) === null || _a === void 0 ? void 0 : _a.dispose();
1713
1756
  this._priv_mediaElementTrackChoiceManager = null;
1714
1757
  this._priv_contentEventsMemory = {};
1715
- // EME cleaning
1758
+ // DRM-related clean-up
1716
1759
  var freeUpContentLock = function () {
1717
1760
  log.debug("Unlocking `contentLock`. Next content can begin.");
1718
1761
  _this._priv_contentLock.setValue(false);
1719
1762
  };
1720
1763
  if (!isNullOrUndefined(this.videoElement)) {
1721
- clearEMESession(this.videoElement)
1722
- .subscribe({
1723
- error: function (err) {
1724
- log.error("API: An error arised when trying to clean-up the EME session:" +
1725
- (err instanceof Error ? err.toString() :
1726
- "Unknown Error"));
1727
- freeUpContentLock();
1728
- },
1729
- complete: function () {
1730
- log.debug("API: EME session cleaned-up with success!");
1731
- freeUpContentLock();
1732
- },
1764
+ clearOnStop(this.videoElement).then(function () {
1765
+ log.debug("API: DRM session cleaned-up with success!");
1766
+ freeUpContentLock();
1767
+ }, function (err) {
1768
+ log.error("API: An error arised when trying to clean-up the DRM session:" +
1769
+ (err instanceof Error ? err.toString() :
1770
+ "Unknown Error"));
1771
+ freeUpContentLock();
1733
1772
  });
1734
1773
  }
1735
1774
  else {
@@ -2264,5 +2303,5 @@ var Player = /** @class */ (function (_super) {
2264
2303
  };
2265
2304
  return Player;
2266
2305
  }(EventEmitter));
2267
- Player.version = /* PLAYER_VERSION */ "3.26.2";
2306
+ Player.version = /* PLAYER_VERSION */ "3.27.0-dev.2022031700";
2268
2307
  export default Player;
@@ -50,7 +50,7 @@ interface IVideoTrackPreferenceObject {
50
50
  interface ITMAudioRepresentation {
51
51
  id: string | number;
52
52
  bitrate: number;
53
- codec?: string;
53
+ codec?: string | undefined;
54
54
  }
55
55
  /** Audio track returned by the TrackChoiceManager. */
56
56
  export interface ITMAudioTrack {
@@ -75,11 +75,11 @@ export interface ITMTextTrack {
75
75
  interface ITMVideoRepresentation {
76
76
  id: string | number;
77
77
  bitrate: number;
78
- width?: number;
79
- height?: number;
80
- codec?: string;
81
- frameRate?: string;
82
- hdrInfo?: IHDRInformation;
78
+ width?: number | undefined;
79
+ height?: number | undefined;
80
+ codec?: string | undefined;
81
+ frameRate?: string | undefined;
82
+ hdrInfo?: IHDRInformation | undefined;
83
83
  }
84
84
  /** Video track returned by the TrackChoiceManager. */
85
85
  export interface ITMVideoTrack {
@@ -14,14 +14,13 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  /// <reference types="jest" />
17
- import { Observable, Subject } from "rxjs";
17
+ import { Subject } from "rxjs";
18
18
  import { IEncryptedEventData } from "../../../../compat/eme";
19
19
  import EventEmitter from "../../../../utils/event_emitter";
20
20
  /** Default MediaKeySystemAccess configuration used by the RxPlayer. */
21
21
  export declare const defaultKSConfig: {
22
22
  audioCapabilities: {
23
23
  contentType: string;
24
- robustness: undefined;
25
24
  }[];
26
25
  distinctiveIdentifier: "optional";
27
26
  initDataTypes: readonly ["cenc"];
@@ -29,7 +28,6 @@ export declare const defaultKSConfig: {
29
28
  sessionTypes: readonly ["temporary"];
30
29
  videoCapabilities: {
31
30
  contentType: string;
32
- robustness: undefined;
33
31
  }[];
34
32
  }[];
35
33
  /** Default Widevine MediaKeySystemAccess configuration used by the RxPlayer. */
@@ -99,7 +97,7 @@ export declare class MediaKeySystemAccessImpl {
99
97
  createMediaKeys(): Promise<MediaKeysImpl>;
100
98
  getConfiguration(): MediaKeySystemConfiguration[];
101
99
  }
102
- export declare function requestMediaKeySystemAccessImpl(keySystem: string, config: MediaKeySystemConfiguration[]): Observable<MediaKeySystemAccessImpl>;
100
+ export declare function requestMediaKeySystemAccessImpl(keySystem: string, config: MediaKeySystemConfiguration[]): Promise<MediaKeySystemAccessImpl>;
103
101
  /**
104
102
  * Mock functions coming from the compat directory.
105
103
  */
@@ -111,15 +109,13 @@ export declare function mockCompat(exportedFunctions?: {}): {
111
109
  triggerKeyError: Subject<unknown>;
112
110
  triggerKeyStatusesChange: Subject<unknown>;
113
111
  };
114
- requestMediaKeySystemAccessSpy: jest.Mock<Observable<MediaKeySystemAccessImpl>, [keySystem: string, config: MediaKeySystemConfiguration[]]>;
112
+ requestMediaKeySystemAccessSpy: jest.Mock<Promise<MediaKeySystemAccessImpl>, [keySystem: string, config: MediaKeySystemConfiguration[]]>;
115
113
  getInitDataSpy: jest.Mock<IEncryptedEventData, [encryptedEvent: IEncryptedEventData]>;
116
- setMediaKeysSpy: jest.Mock<Observable<null>, []>;
117
- generateKeyRequestSpy: jest.Mock<Observable<void>, [mks: MediaKeySessionImpl, initializationDataType: any, initializationData: any]>;
114
+ setMediaKeysSpy: jest.Mock<any, any>;
115
+ generateKeyRequestSpy: jest.Mock<Promise<void>, [mks: MediaKeySessionImpl, initializationDataType: any, initializationData: any]>;
118
116
  };
119
117
  /**
120
- * Check that the EMEManager, when called with those arguments, throws
121
- * directly without any event emitted.
122
- *
118
+ * Check that the ContentDecryptor, when called with those arguments, throws.
123
119
  * If that's the case, resolve with the corresponding error.
124
120
  * Else, reject.
125
121
  * @param {HTMLMediaElement} mediaElement
@@ -127,47 +123,7 @@ export declare function mockCompat(exportedFunctions?: {}): {
127
123
  * @param {Observable} contentProtections$
128
124
  * @returns {Promise}
129
125
  */
130
- export declare function testEMEManagerImmediateError(EMEManager: any, mediaElement: HTMLMediaElement, keySystemsConfigs: unknown[], contentProtections$: Observable<unknown>): Promise<unknown>;
131
- /**
132
- * Check that the event received corresponds to the session-message event for a
133
- * license request.
134
- * @param {Object} evt
135
- * @param {Object} initDataVal
136
- */
137
- export declare function expectLicenseRequestMessage(evt: {
138
- type: string;
139
- value: any;
140
- }, initDataVal: {
141
- type: string | undefined;
142
- values: Array<{
143
- systemId: string | unknown;
144
- data: Uint8Array;
145
- }>;
146
- }): void;
147
- /**
148
- * @param {Object} evt
149
- * @param {Uint8Array} initData
150
- * @param {string|undefined} initDataType
151
- */
152
- export declare function expectInitDataIgnored(evt: {
153
- type: string;
154
- value: any;
155
- }, initDataVal: {
156
- type: string | undefined;
157
- values: Array<{
158
- systemId: string | undefined;
159
- data: Uint8Array;
160
- }>;
161
- }): void;
162
- /**
163
- * @param {Object} evt
164
- * @param {Uint8Array} initData
165
- * @param {string|undefined} initDataType
166
- */
167
- export declare function expectEncryptedEventReceived(evt: {
168
- type: string;
169
- value: any;
170
- }, initData: IEncryptedEventData): void;
126
+ export declare function testContentDecryptorError(ContentDecryptor: any, mediaElement: HTMLMediaElement, keySystemsConfigs: unknown[]): Promise<unknown>;
171
127
  /**
172
128
  * Does the reverse operation than what `formatFakeChallengeFromInitData` does:
173
129
  * Retrieve initialization data from a fake challenge done in our tests
@@ -46,29 +46,26 @@ var __assign = (this && this.__assign) || function () {
46
46
  /* eslint-disable @typescript-eslint/no-unsafe-assignment */
47
47
  /* eslint-disable @typescript-eslint/no-unsafe-return */
48
48
  /* eslint-disable @typescript-eslint/no-unsafe-argument */
49
+ /* eslint-disable @typescript-eslint/naming-convention */
50
+ /* eslint-disable @typescript-eslint/no-explicit-any */
51
+ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */
49
52
  /* eslint-disable no-restricted-properties */
50
- import { defer as observableDefer, of as observableOf, Subject, } from "rxjs";
53
+ import { Subject } from "rxjs";
51
54
  import { base64ToBytes, bytesToBase64, } from "../../../../utils/base64";
52
- import castToObservable from "../../../../utils/cast_to_observable";
53
55
  import EventEmitter, { fromEvent } from "../../../../utils/event_emitter";
54
56
  import flatMap from "../../../../utils/flat_map";
55
57
  import { strToUtf8, utf8ToStr, } from "../../../../utils/string_parsing";
56
58
  /** Default MediaKeySystemAccess configuration used by the RxPlayer. */
57
59
  export var defaultKSConfig = [{
58
- audioCapabilities: [{ contentType: "audio/mp4;codecs=\"mp4a.40.2\"",
59
- robustness: undefined },
60
- { contentType: "audio/webm;codecs=opus",
61
- robustness: undefined }],
60
+ audioCapabilities: [{ contentType: "audio/mp4;codecs=\"mp4a.40.2\"" },
61
+ { contentType: "audio/webm;codecs=opus" }],
62
62
  distinctiveIdentifier: "optional",
63
63
  initDataTypes: ["cenc"],
64
64
  persistentState: "optional",
65
65
  sessionTypes: ["temporary"],
66
- videoCapabilities: [{ contentType: "video/mp4;codecs=\"avc1.4d401e\"",
67
- robustness: undefined },
68
- { contentType: "video/mp4;codecs=\"avc1.42e01e\"",
69
- robustness: undefined },
70
- { contentType: "video/webm;codecs=\"vp8\"",
71
- robustness: undefined }],
66
+ videoCapabilities: [{ contentType: "video/mp4;codecs=\"avc1.4d401e\"" },
67
+ { contentType: "video/mp4;codecs=\"avc1.42e01e\"" },
68
+ { contentType: "video/webm;codecs=\"vp8\"" }],
72
69
  }];
73
70
  /** Default Widevine MediaKeySystemAccess configuration used by the RxPlayer. */
74
71
  export var defaultWidevineConfig = (function () {
@@ -160,13 +157,16 @@ var MediaKeySessionImpl = /** @class */ (function (_super) {
160
157
  return Promise.resolve();
161
158
  };
162
159
  MediaKeySessionImpl.prototype.generateRequest = function (initDataType, initData) {
160
+ var _this = this;
163
161
  var msg = formatFakeChallengeFromInitData(initData, initDataType);
164
- var event = Object.assign(new CustomEvent("message"), { message: msg.buffer,
165
- messageType: "license-request" });
166
- this.trigger("message", event);
167
- if (this.onmessage !== null && this.onmessage !== undefined) {
168
- this.onmessage(event);
169
- }
162
+ setTimeout(function () {
163
+ var event = Object.assign(new CustomEvent("message"), { message: msg.buffer,
164
+ messageType: "license-request" });
165
+ _this.trigger("message", event);
166
+ if (_this.onmessage !== null && _this.onmessage !== undefined) {
167
+ _this.onmessage(event);
168
+ }
169
+ }, 5);
170
170
  return Promise.resolve();
171
171
  };
172
172
  MediaKeySessionImpl.prototype.load = function (_sessionId) {
@@ -225,7 +225,7 @@ var MediaKeySystemAccessImpl = /** @class */ (function () {
225
225
  }());
226
226
  export { MediaKeySystemAccessImpl };
227
227
  export function requestMediaKeySystemAccessImpl(keySystem, config) {
228
- return observableOf(new MediaKeySystemAccessImpl(keySystem, config));
228
+ return Promise.resolve(new MediaKeySystemAccessImpl(keySystem, config));
229
229
  }
230
230
  /**
231
231
  * Mock functions coming from the compat directory.
@@ -250,11 +250,9 @@ export function mockCompat(exportedFunctions) {
250
250
  }),
251
251
  };
252
252
  var rmksaSpy = jest.fn(requestMediaKeySystemAccessImpl);
253
- var setMediaKeysSpy = jest.fn(function () { return observableOf(null); });
253
+ var setMediaKeysSpy = jest.fn();
254
254
  var generateKeyRequestSpy = jest.fn(function (mks, initializationDataType, initializationData) {
255
- return observableDefer(function () {
256
- return castToObservable(mks.generateRequest(initializationDataType, initializationData));
257
- });
255
+ return mks.generateRequest(initializationDataType, initializationData);
258
256
  });
259
257
  var getInitDataSpy = jest.fn(function (encryptedEvent) {
260
258
  return encryptedEvent;
@@ -264,9 +262,7 @@ export function mockCompat(exportedFunctions) {
264
262
  requestMediaKeySystemAccessSpy: rmksaSpy, getInitDataSpy: getInitDataSpy, setMediaKeysSpy: setMediaKeysSpy, generateKeyRequestSpy: generateKeyRequestSpy };
265
263
  }
266
264
  /**
267
- * Check that the EMEManager, when called with those arguments, throws
268
- * directly without any event emitted.
269
- *
265
+ * Check that the ContentDecryptor, when called with those arguments, throws.
270
266
  * If that's the case, resolve with the corresponding error.
271
267
  * Else, reject.
272
268
  * @param {HTMLMediaElement} mediaElement
@@ -274,58 +270,17 @@ export function mockCompat(exportedFunctions) {
274
270
  * @param {Observable} contentProtections$
275
271
  * @returns {Promise}
276
272
  */
277
- export function testEMEManagerImmediateError(
278
- /* eslint-disable @typescript-eslint/naming-convention */
279
- /* eslint-disable @typescript-eslint/no-explicit-any */
280
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
281
- EMEManager,
282
- /* eslint-enable @typescript-eslint/no-explicit-any */
283
- /* eslint-enable @typescript-eslint/naming-convention */
284
- mediaElement, keySystemsConfigs, contentProtections$) {
273
+ export function testContentDecryptorError(ContentDecryptor, mediaElement, keySystemsConfigs) {
285
274
  return new Promise(function (res, rej) {
286
- EMEManager(mediaElement, keySystemsConfigs, contentProtections$)
287
- .subscribe(function (evt) {
288
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
289
- var eventStr = JSON.stringify(evt);
290
- rej(new Error("Received an EMEManager event: " + eventStr));
291
- }, function (err) { res(err); }, function () { return rej(new Error("EMEManager completed.")); });
275
+ var contentDecryptor = new ContentDecryptor(mediaElement, keySystemsConfigs);
276
+ contentDecryptor.addEventListener("error", function (error) {
277
+ res(error);
278
+ });
279
+ setTimeout(function () {
280
+ rej(new Error("Timeout exceeded"));
281
+ }, 10);
292
282
  });
293
283
  }
294
- /**
295
- * Check that the event received corresponds to the session-message event for a
296
- * license request.
297
- * @param {Object} evt
298
- * @param {Object} initDataVal
299
- */
300
- export function expectLicenseRequestMessage(
301
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
302
- evt, initDataVal) {
303
- expect(evt.type).toEqual("session-message");
304
- expect(evt.value.messageType).toEqual("license-request");
305
- expect(evt.value.initializationData).toEqual(initDataVal);
306
- }
307
- /**
308
- * @param {Object} evt
309
- * @param {Uint8Array} initData
310
- * @param {string|undefined} initDataType
311
- */
312
- export function expectInitDataIgnored(
313
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
314
- evt, initDataVal) {
315
- expect(evt.type).toEqual("init-data-ignored");
316
- expect(evt.value.initializationData).toEqual(initDataVal);
317
- }
318
- /**
319
- * @param {Object} evt
320
- * @param {Uint8Array} initData
321
- * @param {string|undefined} initDataType
322
- */
323
- export function expectEncryptedEventReceived(
324
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
325
- evt, initData) {
326
- expect(evt.type).toEqual("encrypted-event-received");
327
- expect(evt.value).toEqual(initData);
328
- }
329
284
  /**
330
285
  * Does the reverse operation than what `formatFakeChallengeFromInitData` does:
331
286
  * Retrieve initialization data from a fake challenge done in our tests