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
@@ -87,10 +87,10 @@ import createSharedReference, {
87
87
  } from "../../utils/reference";
88
88
  import warnOnce from "../../utils/warn_once";
89
89
  import {
90
- clearEMESession,
91
- disposeEME,
90
+ clearOnStop,
91
+ disposeDecryptionResources,
92
92
  getCurrentKeySystem,
93
- } from "../eme";
93
+ } from "../decrypt";
94
94
  import {
95
95
  IManifestFetcherParsedResult,
96
96
  IManifestFetcherWarningEvent,
@@ -140,7 +140,6 @@ import TrackChoiceManager, {
140
140
 
141
141
  /* eslint-disable @typescript-eslint/naming-convention */
142
142
 
143
- const { DEFAULT_UNMUTED_VOLUME } = config;
144
143
 
145
144
  const { isPageActive,
146
145
  isVideoVisible,
@@ -152,74 +151,6 @@ const { isPageActive,
152
151
  onTextTrackChanges$,
153
152
  videoWidth$ } = events;
154
153
 
155
- /** Payload emitted with a `positionUpdate` event. */
156
- interface IPositionUpdateItem {
157
- /** current position the player is in, in seconds. */
158
- position : number;
159
- /** Last position set for the current media currently, in seconds. */
160
- duration : number;
161
- /** Playback rate (i.e. speed) at which the current media is played. */
162
- playbackRate : number;
163
- /** Amount of buffer available for now in front of the current position, in seconds. */
164
- bufferGap : number;
165
- /** Current maximum seekable position. */
166
- maximumBufferTime? : number;
167
- wallClockTime? : number;
168
- /**
169
- * Only for live contents. Difference between the "live edge" and the current
170
- * position, in seconds.
171
- */
172
- liveGap? : number;
173
- }
174
-
175
- /** Payload emitted with a `bitrateEstimationChange` event. */
176
- interface IBitrateEstimate {
177
- /** The type of buffer this estimate was done for (e.g. "audio). */
178
- type : IBufferType;
179
- /** The calculated bitrate, in bits per seconds. */
180
- bitrate : number | undefined;
181
- }
182
-
183
- export type IStreamEvent = { data: IStreamEventData;
184
- start: number;
185
- end: number;
186
- onExit?: () => void; } |
187
- { data: IStreamEventData;
188
- start: number; };
189
-
190
- /** Every events sent by the RxPlayer's public API. */
191
- interface IPublicAPIEvent {
192
- playerStateChange : string;
193
- positionUpdate : IPositionUpdateItem;
194
- audioTrackChange : ITMAudioTrack | null;
195
- textTrackChange : ITMTextTrack | null;
196
- videoTrackChange : ITMVideoTrack | null;
197
- audioBitrateChange : number;
198
- videoBitrateChange : number;
199
- imageTrackUpdate : { data: IBifThumbnail[] };
200
- fullscreenChange : boolean;
201
- bitrateEstimationChange : IBitrateEstimate;
202
- volumeChange : number;
203
- error : ICustomError | Error;
204
- warning : ICustomError | Error;
205
- nativeTextTracksChange : TextTrack[];
206
- periodChange : Period;
207
- availableAudioBitratesChange : number[];
208
- availableVideoBitratesChange : number[];
209
- availableAudioTracksChange : ITMAudioTrackListItem[];
210
- availableTextTracksChange : ITMTextTrackListItem[];
211
- availableVideoTracksChange : ITMVideoTrackListItem[];
212
- decipherabilityUpdate : Array<{ manifest : Manifest;
213
- period : Period;
214
- adaptation : Adaptation;
215
- representation : Representation; }>;
216
- seeking : null;
217
- seeked : null;
218
- streamEvent : IStreamEvent;
219
- streamEventSkip : IStreamEvent;
220
- inbandEvents : IInbandEvent[];
221
- }
222
-
223
154
  /**
224
155
  * @class Player
225
156
  * @extends EventEmitter
@@ -280,6 +211,8 @@ class Player extends EventEmitter<IPublicAPIEvent> {
280
211
  maxBufferAhead : ISharedReference<number>;
281
212
  /** Maximum kept buffer behind in the current position, in seconds. */
282
213
  maxBufferBehind : ISharedReference<number>;
214
+ /** Maximum size of video buffer , in kiloBytes */
215
+ maxVideoBufferSize : ISharedReference<number>;
283
216
  };
284
217
 
285
218
  /** Information on the current bitrate settings. */
@@ -321,7 +254,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
321
254
  * URL of the Manifest (or just of the content for DirectFile contents)
322
255
  * currently being played.
323
256
  */
324
- url? : string;
257
+ url : string | undefined;
325
258
 
326
259
  /** Subject allowing to stop playing that content. */
327
260
  stop$ : Subject<void>;
@@ -488,13 +421,14 @@ class Player extends EventEmitter<IPublicAPIEvent> {
488
421
  throttleVideoBitrateWhenHidden,
489
422
  videoElement,
490
423
  wantedBufferAhead,
424
+ maxVideoBufferSize,
491
425
  stopAtEnd } = parseConstructorOptions(options);
492
-
426
+ const { DEFAULT_UNMUTED_VOLUME } = config.getCurrent();
493
427
  // Workaround to support Firefox autoplay on FF 42.
494
428
  // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
495
429
  videoElement.preload = "auto";
496
430
 
497
- this.version = /* PLAYER_VERSION */"3.26.2";
431
+ this.version = /* PLAYER_VERSION */"3.27.0-dev.2022031700";
498
432
  this.log = log;
499
433
  this.state = "STOPPED";
500
434
  this.videoElement = videoElement;
@@ -554,6 +488,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
554
488
  wantedBufferAhead: createSharedReference(wantedBufferAhead),
555
489
  maxBufferAhead: createSharedReference(maxBufferAhead),
556
490
  maxBufferBehind: createSharedReference(maxBufferBehind),
491
+ maxVideoBufferSize: createSharedReference(maxVideoBufferSize),
557
492
  };
558
493
 
559
494
  this._priv_bitrateInfos = {
@@ -613,8 +548,13 @@ class Player extends EventEmitter<IPublicAPIEvent> {
613
548
  this.stop();
614
549
 
615
550
  if (this.videoElement !== null) {
616
- // free resources used for EME management
617
- disposeEME(this.videoElement);
551
+ // free resources used for decryption management
552
+ disposeDecryptionResources(this.videoElement)
553
+ .catch((err : unknown) => {
554
+ const message = err instanceof Error ? err.message :
555
+ "Unknown error";
556
+ log.error("API: Could not dispose decryption resources: " + message);
557
+ });
618
558
  }
619
559
 
620
560
  // free Observables linked to the Player instance
@@ -627,6 +567,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
627
567
  this._priv_speed.finish();
628
568
  this._priv_contentLock.finish();
629
569
  this._priv_bufferOptions.wantedBufferAhead.finish();
570
+ this._priv_bufferOptions.maxVideoBufferSize.finish();
630
571
  this._priv_bufferOptions.maxBufferAhead.finish();
631
572
  this._priv_bufferOptions.maxBufferBehind.finish();
632
573
  this._priv_bitrateInfos.manualBitrates.video.finish();
@@ -1025,28 +966,26 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1025
966
  const playerState$ = observableConcat(
1026
967
  observableOf(PLAYER_STATES.LOADING), // Begin with LOADING
1027
968
 
1028
- // LOADED as soon as the first "loaded" event is sent
1029
- loaded$.pipe(take(1), map(() => PLAYER_STATES.LOADED)),
1030
-
1031
- observableMerge(
1032
- loadedStateUpdates$
1033
- .pipe(
1034
- // From the first reload onward, we enter another dynamic (below)
969
+ loaded$.pipe(switchMap((_, i) => {
970
+ const isFirstLoad = i === 0;
971
+ return observableMerge(
972
+ // Purposely subscribed first so a RELOADING triggered synchronously
973
+ // after a LOADED state is catched.
974
+ reloading$.pipe(map(() => PLAYER_STATES.RELOADING)),
975
+ // Only switch to LOADED state for the first (i.e. non-RELOADING) load
976
+ isFirstLoad ? observableOf(PLAYER_STATES.LOADED) :
977
+ EMPTY,
978
+ // Purposely put last so any other state change happens after we've
979
+ // already switched to LOADED
980
+ loadedStateUpdates$.pipe(
1035
981
  takeUntil(reloading$),
1036
- skipWhile(state => state === PLAYER_STATES.PAUSED)
1037
- ),
1038
-
1039
- // when reloading
1040
- reloading$.pipe(
1041
- switchMap(() =>
1042
- loaded$.pipe(
1043
- take(1), // wait for the next loaded event
1044
- mergeMap(() => loadedStateUpdates$), // to update the state as usual
1045
- startWith(PLAYER_STATES.RELOADING) // Starts with "RELOADING" state
1046
- )
982
+ // For the first load, we prefer staying at the LOADED state over
983
+ // PAUSED when autoPlay is disabled.
984
+ // For consecutive loads however, there's no LOADED state.
985
+ skipWhile(state => isFirstLoad && state === PLAYER_STATES.PAUSED)
1047
986
  )
1048
- )
1049
- )
987
+ );
988
+ }))
1050
989
  ).pipe(distinctUntilChanged());
1051
990
 
1052
991
  let playbackSubscription : Subscription|undefined;
@@ -1338,7 +1277,24 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1338
1277
 
1339
1278
  const { isDirectFile, manifest } = this._priv_contentInfos;
1340
1279
  if (isDirectFile) {
1341
- return this.videoElement.currentTime;
1280
+ // Calculating the "wall-clock time" necessitate to obtain first an offset,
1281
+ // and then adding that offset to the HTMLMediaElement's current position.
1282
+ // That offset is in most case present inside the Manifest file, yet in
1283
+ // directfile mode, the RxPlayer won't parse that file, the browser does it.
1284
+ //
1285
+ // Thankfully Safari declares a `getStartDate` method allowing to obtain
1286
+ // that offset when available. This logic is thus mainly useful when
1287
+ // playing HLS contents in directfile mode on Safari.
1288
+ const mediaElement : HTMLMediaElement & {
1289
+ getStartDate? : () => number | null | undefined;
1290
+ } = this.videoElement;
1291
+ if (typeof mediaElement.getStartDate === "function") {
1292
+ const startDate = mediaElement.getStartDate();
1293
+ if (typeof startDate === "number" && !isNaN(startDate)) {
1294
+ return startDate + mediaElement.currentTime;
1295
+ }
1296
+ }
1297
+ return mediaElement.currentTime;
1342
1298
  }
1343
1299
  if (manifest !== null) {
1344
1300
  const currentTime = this.videoElement.currentTime;
@@ -1757,6 +1713,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1757
1713
  * If the volume was set to 0, set a default volume instead (see config).
1758
1714
  */
1759
1715
  unMute() : void {
1716
+ const { DEFAULT_UNMUTED_VOLUME } = config.getCurrent();
1760
1717
  const vol = this.getVolume();
1761
1718
  if (vol === 0) {
1762
1719
  this.setVolume(this._priv_mutedMemory === 0 ? DEFAULT_UNMUTED_VOLUME :
@@ -1865,6 +1822,15 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1865
1822
  this._priv_bufferOptions.wantedBufferAhead.setValue(sizeInSeconds);
1866
1823
  }
1867
1824
 
1825
+ /**
1826
+ * Set the max buffer size the buffer should take in memory
1827
+ * The player . will stop downloading chunks when this size is reached.
1828
+ * @param {Number} sizeInKBytes
1829
+ */
1830
+ setMaxVideoBufferSize(sizeInKBytes : number) : void {
1831
+ this._priv_bufferOptions.maxVideoBufferSize.setValue(sizeInKBytes);
1832
+ }
1833
+
1868
1834
  /**
1869
1835
  * Returns the max buffer size for the buffer behind the current position.
1870
1836
  * @returns {Number}
@@ -1889,6 +1855,14 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1889
1855
  return this._priv_bufferOptions.wantedBufferAhead.getValue();
1890
1856
  }
1891
1857
 
1858
+ /**
1859
+ * Returns the max buffer memory size for the buffer in kilobytes
1860
+ * @returns {Number}
1861
+ */
1862
+ getMaxVideoBufferSize() : number {
1863
+ return this._priv_bufferOptions.maxVideoBufferSize.getValue();
1864
+ }
1865
+
1892
1866
  /**
1893
1867
  * Returns type of current keysystem (e.g. playready, widevine) if the content
1894
1868
  * is encrypted. null otherwise.
@@ -2336,25 +2310,23 @@ class Player extends EventEmitter<IPublicAPIEvent> {
2336
2310
 
2337
2311
  this._priv_contentEventsMemory = {};
2338
2312
 
2339
- // EME cleaning
2313
+ // DRM-related clean-up
2340
2314
  const freeUpContentLock = () => {
2341
2315
  log.debug("Unlocking `contentLock`. Next content can begin.");
2342
2316
  this._priv_contentLock.setValue(false);
2343
2317
  };
2344
2318
 
2345
2319
  if (!isNullOrUndefined(this.videoElement)) {
2346
- clearEMESession(this.videoElement)
2347
- .subscribe({
2348
- error: (err : unknown) => {
2349
- log.error("API: An error arised when trying to clean-up the EME session:" +
2350
- (err instanceof Error ? err.toString() :
2351
- "Unknown Error"));
2352
- freeUpContentLock();
2353
- },
2354
- complete: () => {
2355
- log.debug("API: EME session cleaned-up with success!");
2356
- freeUpContentLock();
2357
- },
2320
+ clearOnStop(this.videoElement).then(
2321
+ () => {
2322
+ log.debug("API: DRM session cleaned-up with success!");
2323
+ freeUpContentLock();
2324
+ },
2325
+ (err : unknown) => {
2326
+ log.error("API: An error arised when trying to clean-up the DRM session:" +
2327
+ (err instanceof Error ? err.toString() :
2328
+ "Unknown Error"));
2329
+ freeUpContentLock();
2358
2330
  });
2359
2331
  } else {
2360
2332
  freeUpContentLock();
@@ -2975,7 +2947,75 @@ class Player extends EventEmitter<IPublicAPIEvent> {
2975
2947
  return activeRepresentations[currentPeriod.id];
2976
2948
  }
2977
2949
  }
2978
- Player.version = /* PLAYER_VERSION */"3.26.2";
2950
+ Player.version = /* PLAYER_VERSION */"3.27.0-dev.2022031700";
2951
+
2952
+ /** Payload emitted with a `positionUpdate` event. */
2953
+ export interface IPositionUpdateItem {
2954
+ /** current position the player is in, in seconds. */
2955
+ position : number;
2956
+ /** Last position set for the current media currently, in seconds. */
2957
+ duration : number;
2958
+ /** Playback rate (i.e. speed) at which the current media is played. */
2959
+ playbackRate : number;
2960
+ /** Amount of buffer available for now in front of the current position, in seconds. */
2961
+ bufferGap : number;
2962
+ /** Current maximum seekable position. */
2963
+ maximumBufferTime? : number | undefined;
2964
+ wallClockTime? : number | undefined;
2965
+ /**
2966
+ * Only for live contents. Difference between the "live edge" and the current
2967
+ * position, in seconds.
2968
+ */
2969
+ liveGap? : number | undefined;
2970
+ }
2971
+
2972
+ /** Payload emitted with a `bitrateEstimationChange` event. */
2973
+ export interface IBitrateEstimate {
2974
+ /** The type of buffer this estimate was done for (e.g. "audio). */
2975
+ type : IBufferType;
2976
+ /** The calculated bitrate, in bits per seconds. */
2977
+ bitrate : number | undefined;
2978
+ }
2979
+
2980
+ export type IStreamEvent = { data: IStreamEventData;
2981
+ start: number;
2982
+ end: number;
2983
+ onExit?: () => void; } |
2984
+ { data: IStreamEventData;
2985
+ start: number; };
2986
+
2987
+ /** Every events sent by the RxPlayer's public API. */
2988
+ interface IPublicAPIEvent {
2989
+ playerStateChange : string;
2990
+ positionUpdate : IPositionUpdateItem;
2991
+ audioTrackChange : ITMAudioTrack | null;
2992
+ textTrackChange : ITMTextTrack | null;
2993
+ videoTrackChange : ITMVideoTrack | null;
2994
+ audioBitrateChange : number;
2995
+ videoBitrateChange : number;
2996
+ imageTrackUpdate : { data: IBifThumbnail[] };
2997
+ fullscreenChange : boolean;
2998
+ bitrateEstimationChange : IBitrateEstimate;
2999
+ volumeChange : number;
3000
+ error : ICustomError | Error;
3001
+ warning : ICustomError | Error;
3002
+ nativeTextTracksChange : TextTrack[];
3003
+ periodChange : Period;
3004
+ availableAudioBitratesChange : number[];
3005
+ availableVideoBitratesChange : number[];
3006
+ availableAudioTracksChange : ITMAudioTrackListItem[];
3007
+ availableTextTracksChange : ITMTextTrackListItem[];
3008
+ availableVideoTracksChange : ITMVideoTrackListItem[];
3009
+ decipherabilityUpdate : Array<{ manifest : Manifest;
3010
+ period : Period;
3011
+ adaptation : Adaptation;
3012
+ representation : Representation; }>;
3013
+ seeking : null;
3014
+ seeked : null;
3015
+ streamEvent : IStreamEvent;
3016
+ streamEventSkip : IStreamEvent;
3017
+ inbandEvents : IInbandEvent[];
3018
+ }
2979
3019
 
2980
3020
  export default Player;
2981
3021
  export { IStreamEventData };
@@ -63,7 +63,7 @@ interface IVideoTrackPreferenceObject {
63
63
  */
64
64
  interface ITMAudioRepresentation { id : string|number;
65
65
  bitrate : number;
66
- codec? : string; }
66
+ codec? : string | undefined; }
67
67
 
68
68
  /** Audio track returned by the TrackChoiceManager. */
69
69
  export interface ITMAudioTrack { language : string;
@@ -85,11 +85,11 @@ export interface ITMTextTrack { language : string;
85
85
  */
86
86
  interface ITMVideoRepresentation { id : string|number;
87
87
  bitrate : number;
88
- width? : number;
89
- height? : number;
90
- codec? : string;
91
- frameRate? : string;
92
- hdrInfo?: IHDRInformation; }
88
+ width? : number | undefined;
89
+ height? : number | undefined;
90
+ codec? : string | undefined;
91
+ frameRate? : string | undefined;
92
+ hdrInfo?: IHDRInformation | undefined; }
93
93
 
94
94
  /** Video track returned by the TrackChoiceManager. */
95
95
  export interface ITMVideoTrack { id : number|string;
@@ -134,10 +134,11 @@ type INormalizedPreferredAudioTrack = null |
134
134
 
135
135
  /** Audio track preference when it is not set to `null`. */
136
136
  interface INormalizedPreferredAudioTrackObject {
137
- normalized? : string;
138
- audioDescription? : boolean;
137
+ normalized? : string | undefined;
138
+ audioDescription? : boolean | undefined;
139
139
  codec? : { all: boolean;
140
- test: RegExp; };
140
+ test: RegExp; } |
141
+ undefined;
141
142
  }
142
143
 
143
144
  /** Text track preference once normalized by the TrackChoiceManager. */
@@ -0,0 +1,22 @@
1
+ # The ContentDecryptor #########################################################
2
+
3
+
4
+ ## Overview ####################################################################
5
+
6
+ This directory exports the `ContentDecryptor`, which allows to easily interface
7
+ with the browser APIs for decrypting an encrypted content, it follows the
8
+ [Encrypted Media Extensions recommandations](https://www.w3.org/TR/encrypted-media/).
9
+
10
+ The `ContentDecryptor` is a module isolated from the rest of the player taking
11
+ a form of a class.
12
+ It starts initializing decryption capabilities as soon as it is instanciated and
13
+ emits various events to communicate with external code.
14
+
15
+ A central concept of the `ContentDecryptor` is its states.
16
+ As decryption initialization goes on, it reaches multiple steps on which the
17
+ rest of the RxPlayer code might want to react.
18
+
19
+ Before going in, you're encouraged to read a little about the Encrypted Media
20
+ Extensions (EME). This code is heavy on EME APIs and may be difficult to follow
21
+ if you don't have a vague understanding of the concept of a `MediaKeySession`
22
+ or of a `MediaKeySystemAccess`.