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
@@ -1,181 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import hashBuffer from "../../../utils/hash_buffer";
17
- import areInitializationValuesCompatible from "./are_init_values_compatible";
18
- /**
19
- * Store a unique value associated to an initData and initDataType.
20
- * @class InitDataStore
21
- */
22
- var InitDataStore = /** @class */ (function () {
23
- /** Construct a new InitDataStore. */
24
- function InitDataStore() {
25
- this._storage = [];
26
- }
27
- /**
28
- * Returns all stored value, in the order in which they have been stored.
29
- * Note: it is possible to move a value to the end of this array by calling
30
- * the `getAndReuse` method.
31
- * @returns {Array}
32
- */
33
- InitDataStore.prototype.getAll = function () {
34
- return this._storage.map(function (item) { return item.payload; });
35
- };
36
- /**
37
- * Returns the number of stored values.
38
- * @returns {number}
39
- */
40
- InitDataStore.prototype.getLength = function () {
41
- return this._storage.length;
42
- };
43
- /**
44
- * Returns `true` if no initialization data is stored yet in this
45
- * InitDataStore.
46
- * Returns `false` otherwise.
47
- * @returns {boolean}
48
- */
49
- InitDataStore.prototype.isEmpty = function () {
50
- return this._storage.length === 0;
51
- };
52
- /**
53
- * Returns the element associated with the given initData and initDataType.
54
- * Returns `undefined` if not found.
55
- * @param {Uint8Array} initData
56
- * @param {string|undefined} initDataType
57
- * @returns {*}
58
- */
59
- InitDataStore.prototype.get = function (initializationData) {
60
- var index = this._findIndex(initializationData);
61
- return index >= 0 ? this._storage[index].payload :
62
- undefined;
63
- };
64
- /**
65
- * Like `get`, but also move the corresponding value at the end of the store
66
- * (as returned by `getAll`) if found.
67
- * This can be used for example to tell when a previously-stored value is
68
- * re-used to then be able to implement a caching replacement algorithm based
69
- * on the least-recently-used values by just evicting the first values
70
- * returned by `getAll`.
71
- * @param {Uint8Array} initData
72
- * @param {string|undefined} initDataType
73
- * @returns {*}
74
- */
75
- InitDataStore.prototype.getAndReuse = function (initializationData) {
76
- var index = this._findIndex(initializationData);
77
- if (index === -1) {
78
- return undefined;
79
- }
80
- var item = this._storage.splice(index, 1)[0];
81
- this._storage.push(item);
82
- return item.payload;
83
- };
84
- /**
85
- * Add to the store a value linked to the corresponding initData and
86
- * initDataType.
87
- * If a value was already stored linked to those, replace it.
88
- * @param {Object} initializationData
89
- * @param {*} payload
90
- */
91
- InitDataStore.prototype.store = function (initializationData, payload) {
92
- var indexOf = this._findIndex(initializationData);
93
- if (indexOf >= 0) {
94
- // this._storage contains the stored value in the same order they have
95
- // been put. So here we want to remove the previous element and re-push
96
- // it to the end.
97
- this._storage.splice(indexOf, 1);
98
- }
99
- var values = this._formatValuesForStore(initializationData.values);
100
- this._storage.push({ type: initializationData.type, values: values, payload: payload });
101
- };
102
- /**
103
- * Add to the store a value linked to the corresponding initData and
104
- * initDataType.
105
- * If a value linked to those was already stored, do nothing and returns
106
- * `false`.
107
- * If not, add the value and return `true`.
108
- *
109
- * This can be used as a more performant version of doing both a `get` call -
110
- * to see if a value is stored linked to that data - and then if not doing a
111
- * store. `storeIfNone` is more performant as it will only perform hashing
112
- * and a look-up a single time.
113
- * @param {Object} initializationData
114
- * @param {*} payload
115
- * @returns {boolean}
116
- */
117
- InitDataStore.prototype.storeIfNone = function (initializationData, payload) {
118
- var indexOf = this._findIndex(initializationData);
119
- if (indexOf >= 0) {
120
- return false;
121
- }
122
- var values = this._formatValuesForStore(initializationData.values);
123
- this._storage.push({ type: initializationData.type, values: values, payload: payload });
124
- return true;
125
- };
126
- /**
127
- * Remove an initDataType and initData combination from this store.
128
- * Returns the associated value if it has been found, `undefined` otherwise.
129
- * @param {Uint8Array} initData
130
- * @param {string|undefined} initDataType
131
- * @returns {*}
132
- */
133
- InitDataStore.prototype.remove = function (initializationData) {
134
- var indexOf = this._findIndex(initializationData);
135
- if (indexOf === -1) {
136
- return undefined;
137
- }
138
- return this._storage.splice(indexOf, 1)[0].payload;
139
- };
140
- /**
141
- * Find the index of the corresponding initialization data in `this._storage`.
142
- * Returns `-1` if not found.
143
- * @param {Object} initializationData
144
- * @returns {boolean}
145
- */
146
- InitDataStore.prototype._findIndex = function (initializationData) {
147
- var formattedVals = this._formatValuesForStore(initializationData.values);
148
- // Begin by the last element as we usually re-encounter the last stored
149
- // initData sooner than the first one.
150
- for (var i = this._storage.length - 1; i >= 0; i--) {
151
- var stored = this._storage[i];
152
- if (stored.type === initializationData.type) {
153
- if (areInitializationValuesCompatible(stored.values, formattedVals)) {
154
- return i;
155
- }
156
- }
157
- }
158
- return -1;
159
- };
160
- /**
161
- * Format given initializationData's values so they are ready to be stored:
162
- * - sort them by systemId, so they are faster to compare
163
- * - add hash for each initialization data encountered.
164
- * @param {Array.<Object>} initialValues
165
- * @returns {Array.<Object>}
166
- */
167
- InitDataStore.prototype._formatValuesForStore = function (initialValues) {
168
- return initialValues.slice()
169
- .sort(function (a, b) { return a.systemId === b.systemId ? 0 :
170
- a.systemId === undefined ? 1 :
171
- b.systemId === undefined ? -1 :
172
- a.systemId < b.systemId ? -1 :
173
- 1; })
174
- .map(function (_a) {
175
- var systemId = _a.systemId, data = _a.data;
176
- return ({ systemId: systemId, data: data, hash: hashBuffer(data) });
177
- });
178
- };
179
- return InitDataStore;
180
- }());
181
- export default InitDataStore;
@@ -1,123 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { Observable } from "rxjs";
17
- import { ICustomMediaKeys, ICustomMediaKeySession } from "../../../compat";
18
- import { IInitializationDataInfo } from "../types";
19
- /** Stored MediaKeySession data assiociated to an initialization data. */
20
- interface IStoredSessionEntry {
21
- /** The initialization data linked to the MediaKeySession. */
22
- initializationData: IInitializationDataInfo;
23
- /** The MediaKeySession created. */
24
- mediaKeySession: MediaKeySession | ICustomMediaKeySession;
25
- /** The MediaKeySessionType (e.g. "temporary" or "persistent-license"). */
26
- sessionType: MediaKeySessionType;
27
- }
28
- /** MediaKeySession information. */
29
- export interface IStoredSessionData {
30
- /** The MediaKeySession created. */
31
- mediaKeySession: MediaKeySession | ICustomMediaKeySession;
32
- /** The MediaKeySessionType (e.g. "temporary" or "persistent-license"). */
33
- sessionType: MediaKeySessionType;
34
- }
35
- /**
36
- * Create and store MediaKeySessions linked to a single MediaKeys
37
- * instance.
38
- *
39
- * Keep track of sessionTypes and of the initialization data each
40
- * MediaKeySession is created for.
41
- * @class LoadedSessionsStore
42
- */
43
- export default class LoadedSessionsStore {
44
- /** MediaKeys instance on which the MediaKeySessions are created. */
45
- private readonly _mediaKeys;
46
- /** Store unique MediaKeySession information per initialization data. */
47
- private _storage;
48
- /**
49
- * Create a new LoadedSessionsStore, which will store information about
50
- * loaded MediaKeySessions on the given MediaKeys instance.
51
- * @param {MediaKeys} mediaKeys
52
- */
53
- constructor(mediaKeys: MediaKeys | ICustomMediaKeys);
54
- /**
55
- * Returns the stored MediaKeySession information related to the
56
- * given initDataType and initData if found.
57
- * Returns `null` if no such MediaKeySession is stored.
58
- * @param {Object} initializationData
59
- * @returns {Object|null}
60
- */
61
- get(initializationData: IInitializationDataInfo): IStoredSessionData | null;
62
- /**
63
- * Like `get` but also moves the corresponding MediaKeySession to the end of
64
- * its internal storage, as returned by the `getAll` method.
65
- *
66
- * This can be used for example to tell when a previously-stored
67
- * initialization data is re-used to then be able to implement a caching
68
- * replacement algorithm based on the least-recently-used values by just
69
- * evicting the first values returned by `getAll`.
70
- * @param {Object} initializationData
71
- * @returns {Object|null}
72
- */
73
- getAndReuse(initializationData: IInitializationDataInfo): IStoredSessionData | null;
74
- /**
75
- * Moves the corresponding MediaKeySession to the end of its internal storage,
76
- * as returned by the `getAll` method.
77
- *
78
- * This can be used to signal that a previously-stored initialization data is
79
- * re-used to then be able to implement a caching replacement algorithm based
80
- * on the least-recently-used values by just evicting the first values
81
- * returned by `getAll`.
82
- *
83
- * Returns `true` if the corresponding session was found in the store, `false`
84
- * otherwise.
85
- * @param {Object} initializationData
86
- * @returns {boolean}
87
- */
88
- reuse(initializationData: IInitializationDataInfo): boolean;
89
- /**
90
- * Create a new MediaKeySession and store it in this store.
91
- * @throws {EncryptedMediaError}
92
- * @param {Object} initializationData
93
- * @param {string} sessionType
94
- * @returns {MediaKeySession}
95
- */
96
- createSession(initializationData: IInitializationDataInfo, sessionType: MediaKeySessionType): MediaKeySession | ICustomMediaKeySession;
97
- /**
98
- * Close a MediaKeySession corresponding to an initialization data and remove
99
- * its related stored information from the LoadedSessionsStore.
100
- * Emit when done.
101
- * @param {Object} initializationData
102
- * @returns {Observable}
103
- */
104
- closeSession(initializationData: IInitializationDataInfo): Observable<unknown>;
105
- /**
106
- * Returns the number of stored MediaKeySessions in this LoadedSessionsStore.
107
- * @returns {number}
108
- */
109
- getLength(): number;
110
- /**
111
- * Returns information about all stored MediaKeySession, in the order in which
112
- * the MediaKeySession have been created.
113
- * @returns {Array.<Object>}
114
- */
115
- getAll(): IStoredSessionEntry[];
116
- /**
117
- * Close all sessions in this store.
118
- * Emit `null` when done.
119
- * @returns {Observable}
120
- */
121
- closeAllSessions(): Observable<null>;
122
- }
123
- export {};
@@ -1,173 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { concat as observableConcat, defer as observableDefer, EMPTY, ignoreElements, merge as observableMerge, of as observableOf, } from "rxjs";
17
- import { EncryptedMediaError } from "../../../errors";
18
- import log from "../../../log";
19
- import isNullOrUndefined from "../../../utils/is_null_or_undefined";
20
- import safelyCloseMediaKeySession from "./close_session";
21
- import InitDataStore from "./init_data_store";
22
- /**
23
- * Create and store MediaKeySessions linked to a single MediaKeys
24
- * instance.
25
- *
26
- * Keep track of sessionTypes and of the initialization data each
27
- * MediaKeySession is created for.
28
- * @class LoadedSessionsStore
29
- */
30
- var LoadedSessionsStore = /** @class */ (function () {
31
- /**
32
- * Create a new LoadedSessionsStore, which will store information about
33
- * loaded MediaKeySessions on the given MediaKeys instance.
34
- * @param {MediaKeys} mediaKeys
35
- */
36
- function LoadedSessionsStore(mediaKeys) {
37
- this._mediaKeys = mediaKeys;
38
- this._storage = new InitDataStore();
39
- }
40
- /**
41
- * Returns the stored MediaKeySession information related to the
42
- * given initDataType and initData if found.
43
- * Returns `null` if no such MediaKeySession is stored.
44
- * @param {Object} initializationData
45
- * @returns {Object|null}
46
- */
47
- LoadedSessionsStore.prototype.get = function (initializationData) {
48
- var entry = this._storage.get(initializationData);
49
- return entry === undefined ? null :
50
- { mediaKeySession: entry.mediaKeySession,
51
- sessionType: entry.sessionType };
52
- };
53
- /**
54
- * Like `get` but also moves the corresponding MediaKeySession to the end of
55
- * its internal storage, as returned by the `getAll` method.
56
- *
57
- * This can be used for example to tell when a previously-stored
58
- * initialization data is re-used to then be able to implement a caching
59
- * replacement algorithm based on the least-recently-used values by just
60
- * evicting the first values returned by `getAll`.
61
- * @param {Object} initializationData
62
- * @returns {Object|null}
63
- */
64
- LoadedSessionsStore.prototype.getAndReuse = function (initializationData) {
65
- var entry = this._storage.getAndReuse(initializationData);
66
- return entry === undefined ? null :
67
- { mediaKeySession: entry.mediaKeySession,
68
- sessionType: entry.sessionType };
69
- };
70
- /**
71
- * Moves the corresponding MediaKeySession to the end of its internal storage,
72
- * as returned by the `getAll` method.
73
- *
74
- * This can be used to signal that a previously-stored initialization data is
75
- * re-used to then be able to implement a caching replacement algorithm based
76
- * on the least-recently-used values by just evicting the first values
77
- * returned by `getAll`.
78
- *
79
- * Returns `true` if the corresponding session was found in the store, `false`
80
- * otherwise.
81
- * @param {Object} initializationData
82
- * @returns {boolean}
83
- */
84
- LoadedSessionsStore.prototype.reuse = function (initializationData) {
85
- return this._storage.getAndReuse(initializationData) !== undefined;
86
- };
87
- /**
88
- * Create a new MediaKeySession and store it in this store.
89
- * @throws {EncryptedMediaError}
90
- * @param {Object} initializationData
91
- * @param {string} sessionType
92
- * @returns {MediaKeySession}
93
- */
94
- LoadedSessionsStore.prototype.createSession = function (initializationData, sessionType) {
95
- var _this = this;
96
- if (this._storage.get(initializationData) !== undefined) {
97
- throw new EncryptedMediaError("MULTIPLE_SESSIONS_SAME_INIT_DATA", "This initialization data was already stored.");
98
- }
99
- var mediaKeySession = this._mediaKeys.createSession(sessionType);
100
- var entry = { mediaKeySession: mediaKeySession, sessionType: sessionType, initializationData: initializationData };
101
- if (!isNullOrUndefined(mediaKeySession.closed)) {
102
- mediaKeySession.closed
103
- .then(function () {
104
- var currentEntry = _this._storage.get(initializationData);
105
- if (currentEntry !== undefined &&
106
- currentEntry.mediaKeySession === mediaKeySession) {
107
- _this._storage.remove(initializationData);
108
- }
109
- })
110
- .catch(function (e) {
111
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
112
- log.warn("EME-LSS: MediaKeySession.closed rejected: ".concat(e));
113
- });
114
- }
115
- log.debug("EME-LSS: Add MediaKeySession", entry.sessionType);
116
- this._storage.store(initializationData, entry);
117
- return mediaKeySession;
118
- };
119
- /**
120
- * Close a MediaKeySession corresponding to an initialization data and remove
121
- * its related stored information from the LoadedSessionsStore.
122
- * Emit when done.
123
- * @param {Object} initializationData
124
- * @returns {Observable}
125
- */
126
- LoadedSessionsStore.prototype.closeSession = function (initializationData) {
127
- var _this = this;
128
- return observableDefer(function () {
129
- var entry = _this._storage.remove(initializationData);
130
- if (entry === undefined) {
131
- log.warn("EME-LSS: No MediaKeySession found with " +
132
- "the given initData and initDataType");
133
- return EMPTY;
134
- }
135
- return safelyCloseMediaKeySession(entry.mediaKeySession);
136
- });
137
- };
138
- /**
139
- * Returns the number of stored MediaKeySessions in this LoadedSessionsStore.
140
- * @returns {number}
141
- */
142
- LoadedSessionsStore.prototype.getLength = function () {
143
- return this._storage.getLength();
144
- };
145
- /**
146
- * Returns information about all stored MediaKeySession, in the order in which
147
- * the MediaKeySession have been created.
148
- * @returns {Array.<Object>}
149
- */
150
- LoadedSessionsStore.prototype.getAll = function () {
151
- return this._storage.getAll();
152
- };
153
- /**
154
- * Close all sessions in this store.
155
- * Emit `null` when done.
156
- * @returns {Observable}
157
- */
158
- LoadedSessionsStore.prototype.closeAllSessions = function () {
159
- var _this = this;
160
- return observableDefer(function () {
161
- var closing$ = _this._storage.getAll()
162
- .map(function (entry) { return safelyCloseMediaKeySession(entry.mediaKeySession); });
163
- log.debug("EME-LSS: Closing all current MediaKeySessions", closing$.length);
164
- // re-initialize the storage, so that new interactions with the
165
- // `LoadedSessionsStore` do not rely on MediaKeySessions we're in the
166
- // process of removing
167
- _this._storage = new InitDataStore();
168
- return observableConcat(observableMerge.apply(void 0, closing$).pipe(ignoreElements()), observableOf(null));
169
- });
170
- };
171
- return LoadedSessionsStore;
172
- }());
173
- export default LoadedSessionsStore;
@@ -1,34 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { Observable } from "rxjs";
17
- import { IContentProtection, IEMEManagerEvent, IKeySystemOption } from "../eme";
18
- /**
19
- * Event emitted after deciding that no EME logic should be launched for the
20
- * current content.
21
- */
22
- export interface IEMEDisabledEvent {
23
- type: "eme-disabled";
24
- }
25
- /**
26
- * Create EMEManager if possible (has the APIs and configuration).
27
- * Else, return an Observable throwing at the next encrypted event encountered.
28
- * @param {HTMLMediaElement} mediaElement
29
- * @param {Array.<Object>} keySystems
30
- * @param {Observable<Object>} contentProtections$
31
- * @returns {Observable}
32
- */
33
- export default function createEMEManager(mediaElement: HTMLMediaElement, keySystems: IKeySystemOption[], contentProtections$: Observable<IContentProtection>): Observable<IEMEManagerEvent | IEMEDisabledEvent>;
34
- export { IEMEManagerEvent };
@@ -1,52 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { map, merge as observableMerge, of as observableOf, } from "rxjs";
17
- import { events, hasEMEAPIs, } from "../../compat/";
18
- import { EncryptedMediaError } from "../../errors";
19
- import features from "../../features";
20
- import log from "../../log";
21
- var onEncrypted$ = events.onEncrypted$;
22
- /**
23
- * Create EMEManager if possible (has the APIs and configuration).
24
- * Else, return an Observable throwing at the next encrypted event encountered.
25
- * @param {HTMLMediaElement} mediaElement
26
- * @param {Array.<Object>} keySystems
27
- * @param {Observable<Object>} contentProtections$
28
- * @returns {Observable}
29
- */
30
- export default function createEMEManager(mediaElement, keySystems, contentProtections$) {
31
- var encryptedEvents$ = observableMerge(onEncrypted$(mediaElement), contentProtections$);
32
- if (features.emeManager == null) {
33
- return observableMerge(encryptedEvents$.pipe(map(function () {
34
- log.error("Init: Encrypted event but EME feature not activated");
35
- throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR", "EME feature not activated.");
36
- })), observableOf({ type: "eme-disabled" }));
37
- }
38
- if (keySystems.length === 0) {
39
- return observableMerge(encryptedEvents$.pipe(map(function () {
40
- log.error("Init: Ciphered media and no keySystem passed");
41
- throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR", "Media is encrypted and no `keySystems` given");
42
- })), observableOf({ type: "eme-disabled" }));
43
- }
44
- if (!hasEMEAPIs()) {
45
- return observableMerge(encryptedEvents$.pipe(map(function () {
46
- log.error("Init: Encrypted event but no EME API available");
47
- throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR", "Encryption APIs not found.");
48
- })), observableOf({ type: "eme-disabled" }));
49
- }
50
- log.debug("Init: Creating EMEManager");
51
- return features.emeManager(mediaElement, keySystems, contentProtections$);
52
- }
@@ -1,85 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- import log from "../../log";
18
- import arrayFindIndex from "../../utils/array_find_index";
19
-
20
- export interface IBufferBasedChooserPlaybackObservation {
21
- bufferGap : number; // Difference in seconds between the current position and
22
- // the next non-buffered position
23
- currentBitrate? : number; // The bitrate of the currently downloaded segments, in bps
24
- currentScore? : number; // The "maintainability score" of the currently
25
- // downloaded segments
26
- speed : number; // Playback rate wanted
27
- }
28
-
29
- /**
30
- * From the buffer gap, choose a representation.
31
- * @param {Object} playbackObservation
32
- * @param {Array.<Number>} bitrates
33
- * @param {Array.<Number>} bufferLevels
34
- * @returns {Object|undefined}
35
- */
36
- export default function getEstimateFromBufferLevels(
37
- playbackObservation : IBufferBasedChooserPlaybackObservation,
38
- bitrates : number[],
39
- bufferLevels : number[]
40
- ) : number|undefined {
41
- const { bufferGap, currentBitrate, currentScore, speed } = playbackObservation;
42
- if (currentBitrate == null) {
43
- return bitrates[0];
44
- }
45
- const currentBitrateIndex = arrayFindIndex(bitrates, b => b === currentBitrate);
46
- if (currentBitrateIndex < 0 || bitrates.length !== bufferLevels.length) {
47
- log.error("ABR: Current Bitrate not found in the calculated levels");
48
- return bitrates[0];
49
- }
50
-
51
- let scaledScore : number|undefined;
52
- if (currentScore != null) {
53
- scaledScore = speed === 0 ? currentScore : (currentScore / speed);
54
- }
55
-
56
- if (scaledScore != null && scaledScore > 1) {
57
- const currentBufferLevel = bufferLevels[currentBitrateIndex];
58
- const nextIndex = (() => {
59
- for (let i = currentBitrateIndex + 1; i < bufferLevels.length; i++) {
60
- if (bufferLevels[i] > currentBufferLevel) {
61
- return i;
62
- }
63
- }
64
- })();
65
- if (nextIndex != null) {
66
- const nextBufferLevel = bufferLevels[nextIndex];
67
- if (bufferGap >= nextBufferLevel) {
68
- return bitrates[nextIndex];
69
- }
70
- }
71
- }
72
-
73
- if (scaledScore == null || scaledScore < 1.15) {
74
- const currentBufferLevel = bufferLevels[currentBitrateIndex];
75
- if (bufferGap < currentBufferLevel) {
76
- for (let i = currentBitrateIndex - 1; i >= 0; i--) {
77
- if (bitrates[i] < currentBitrate) {
78
- return bitrates[i];
79
- }
80
- }
81
- return currentBitrate;
82
- }
83
- }
84
- return currentBitrate;
85
- }
@@ -1,26 +0,0 @@
1
- # The EMEManager ###############################################################
2
-
3
-
4
- ## Overview ####################################################################
5
-
6
- This directory exports the ``EMEManager``, which allows to easily interface with
7
- the browser APIs for decrypting a crypted content, it follows the [Encrypted
8
- Media Extensions recommandations](https://www.w3.org/TR/encrypted-media/).
9
-
10
- Like most modules in the RxPlayer, the `EMEManager` is just a function - called
11
- a single time - returning an Observable.
12
-
13
- This Observable then return event corresponding to different milestones related
14
- to decrypting the content.
15
-
16
- This module is particularly isolated from the rest of the code it mostly take:
17
- - The media element
18
- - DRM-related options
19
- - Observable emitting encryption initialization data found in the content
20
-
21
- And can then do most of its work in the background.
22
-
23
- Before going in, you're encouraged to read a little about the Encrypted Media
24
- Extensions (EME). This code is heavy on EME APIs and may be difficult to follow
25
- if you don't have a vague understanding of the concept of a `MediaKeySession`
26
- or of a `MediaKeySystemAccess`.