rx-player 3.26.3-dev.2022021400 → 3.27.0-dev.2022032100

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/.eslintrc.js +0 -4
  2. package/CHANGELOG.md +17 -2
  3. package/FILES.md +5 -4
  4. package/VERSION +1 -1
  5. package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
  6. package/dist/_esm5.processed/compat/browser_detection.js +4 -2
  7. package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
  8. package/dist/_esm5.processed/compat/eme/close_session.js +143 -36
  9. package/dist/_esm5.processed/compat/eme/custom_key_system_access.d.ts +15 -0
  10. package/dist/_esm5.processed/compat/eme/custom_key_system_access.js +1 -17
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +6 -7
  12. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
  13. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +20 -22
  14. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +58 -40
  15. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +49 -48
  16. package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
  17. package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
  18. package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
  19. package/dist/_esm5.processed/compat/eme/load_session.js +67 -17
  20. package/dist/_esm5.processed/compat/event_listeners.js +2 -1
  21. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
  22. package/dist/_esm5.processed/config.d.ts +166 -1080
  23. package/dist/_esm5.processed/config.js +17 -1119
  24. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
  25. package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
  26. package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
  27. package/dist/_esm5.processed/core/api/index.d.ts +2 -1
  28. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +2 -1
  29. package/dist/_esm5.processed/core/api/option_utils.d.ts +6 -3
  30. package/dist/_esm5.processed/core/api/option_utils.js +21 -7
  31. package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
  32. package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
  33. package/dist/_esm5.processed/core/api/public_api.js +73 -35
  34. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -49
  35. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +25 -65
  36. package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
  37. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +103 -0
  38. package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
  39. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +40 -0
  40. package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
  41. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +865 -0
  42. package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
  43. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
  44. package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
  45. package/dist/_esm5.processed/core/decrypt/create_session.js +173 -0
  46. package/dist/_esm5.processed/core/{eme/dispose_media_keys.d.ts → decrypt/dispose_decryption_resources.d.ts} +4 -4
  47. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
  48. package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
  49. package/dist/_esm5.processed/core/decrypt/find_key_system.js +299 -0
  50. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
  51. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
  52. package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
  53. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
  54. package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
  55. package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
  56. package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
  57. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
  58. package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
  59. package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
  60. package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
  61. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
  62. package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +119 -241
  63. package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
  64. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
  65. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
  66. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
  67. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
  68. package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
  69. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +84 -0
  70. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
  71. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
  72. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
  73. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
  74. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
  75. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
  76. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
  77. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
  78. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
  79. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
  80. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
  81. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
  82. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
  83. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +302 -0
  84. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
  85. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
  86. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
  87. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
  88. package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
  89. package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
  90. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
  91. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
  92. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -5
  93. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +1 -1
  94. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  95. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +2 -3
  96. package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
  97. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +1 -1
  98. package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
  99. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +6 -3
  100. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
  101. package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
  102. package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
  103. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
  104. package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
  105. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
  106. package/dist/_esm5.processed/core/init/types.d.ts +2 -4
  107. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
  108. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
  109. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
  110. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
  111. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
  112. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
  113. package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
  114. package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
  115. package/dist/_esm5.processed/core/stream/index.d.ts +1 -0
  116. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
  117. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
  118. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
  119. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.d.ts +15 -11
  120. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +6 -3
  121. package/dist/_esm5.processed/core/stream/period/index.d.ts +1 -0
  122. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +5 -12
  123. package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
  124. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +2 -2
  125. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
  126. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
  127. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
  128. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
  129. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
  130. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
  131. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
  132. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
  133. package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
  134. package/dist/_esm5.processed/default_config.d.ts +1114 -0
  135. package/dist/_esm5.processed/default_config.js +1145 -0
  136. package/dist/_esm5.processed/experimental/index.d.ts +2 -0
  137. package/dist/_esm5.processed/experimental/index.js +2 -0
  138. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
  139. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +6 -7
  140. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.js +2 -3
  141. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +15 -0
  142. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -2
  143. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +3 -5
  144. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +3 -5
  145. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +1 -2
  146. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.js +1 -2
  147. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.js +1 -2
  148. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -2
  149. package/dist/_esm5.processed/features/features_object.js +1 -1
  150. package/dist/_esm5.processed/features/initialize_features.js +1 -1
  151. package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
  152. package/dist/_esm5.processed/features/list/eme.js +5 -5
  153. package/dist/_esm5.processed/features/types.d.ts +3 -3
  154. package/dist/_esm5.processed/manifest/manifest.d.ts +1 -14
  155. package/dist/_esm5.processed/manifest/manifest.js +10 -74
  156. package/dist/_esm5.processed/manifest/representation.d.ts +35 -3
  157. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
  158. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
  159. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +1 -1
  160. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +87 -75
  161. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
  162. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +4 -5
  163. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
  164. package/dist/_esm5.processed/public_types.d.ts +3 -2
  165. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +1 -2
  166. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +4 -3
  167. package/dist/_esm5.processed/transports/dash/image_pipelines.js +60 -11
  168. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -2
  169. package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
  170. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +1 -1
  171. package/dist/_esm5.processed/transports/dash/segment_loader.js +3 -4
  172. package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
  173. package/dist/_esm5.processed/transports/dash/text_loader.js +1 -2
  174. package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
  175. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -3
  176. package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
  177. package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
  178. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +2 -3
  179. package/dist/_esm5.processed/transports/smooth/pipelines.js +71 -14
  180. package/dist/_esm5.processed/transports/smooth/segment_loader.js +3 -4
  181. package/dist/_esm5.processed/transports/types.d.ts +22 -0
  182. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -2
  183. package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -2
  184. package/dist/_esm5.processed/utils/cast_to_observable.js +1 -3
  185. package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
  186. package/dist/_esm5.processed/utils/deep_merge.js +53 -0
  187. package/dist/_esm5.processed/utils/reference.d.ts +29 -0
  188. package/dist/_esm5.processed/utils/reference.js +72 -24
  189. package/dist/_esm5.processed/utils/request/fetch.js +1 -2
  190. package/dist/_esm5.processed/utils/request/xhr.js +2 -3
  191. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
  192. package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
  193. package/dist/_esm5.processed/utils/task_canceller.js +3 -3
  194. package/dist/rx-player.js +4936 -3340
  195. package/dist/rx-player.min.js +1 -1
  196. package/dummy +1 -0
  197. package/{dist/_esm5.processed/utils/promise.d.ts → experimental/index.d.ts} +1 -2
  198. package/{dist/_esm5.processed/utils/promise.js → experimental/index.js} +1 -3
  199. package/package.json +32 -35
  200. package/{src/typings/pinkie.d.ts → scripts/build/templates/experimental/index.d.ts} +1 -4
  201. package/scripts/build/templates/experimental/index.js +16 -0
  202. package/scripts/update-version +2 -2
  203. package/sonar-project.properties +1 -1
  204. package/src/README.md +6 -6
  205. package/src/compat/__tests__/play.test.ts +2 -4
  206. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
  207. package/src/compat/browser_detection.ts +4 -2
  208. package/src/compat/eme/close_session.ts +89 -56
  209. package/src/compat/eme/custom_key_system_access.ts +1 -2
  210. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +6 -7
  211. package/src/compat/eme/custom_media_keys/index.ts +20 -38
  212. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +68 -52
  213. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +57 -56
  214. package/src/compat/eme/generate_key_request.ts +25 -33
  215. package/src/compat/eme/load_session.ts +28 -31
  216. package/src/compat/event_listeners.ts +2 -1
  217. package/src/compat/should_favour_custom_safari_EME.ts +5 -2
  218. package/src/config.ts +17 -1210
  219. package/src/core/README.md +1 -1
  220. package/src/core/abr/bandwidth_estimator.ts +4 -4
  221. package/src/core/abr/network_analyzer.ts +5 -6
  222. package/src/core/api/__tests__/get_player_state.test.ts +3 -3
  223. package/src/core/api/__tests__/option_utils.test.ts +29 -17
  224. package/src/core/api/get_player_state.ts +1 -1
  225. package/src/core/api/index.ts +3 -0
  226. package/src/core/api/option_utils.ts +42 -23
  227. package/src/core/api/playback_observer.ts +12 -8
  228. package/src/core/api/public_api.ts +152 -113
  229. package/src/core/decrypt/README.md +22 -0
  230. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
  231. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
  232. package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
  233. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
  234. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
  235. package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +31 -93
  236. package/src/core/{eme → decrypt}/attach_media_keys.ts +48 -56
  237. package/src/core/decrypt/clear_on_stop.ts +47 -0
  238. package/src/core/decrypt/content_decryptor.ts +1157 -0
  239. package/src/core/decrypt/create_or_load_session.ts +130 -0
  240. package/src/core/decrypt/create_session.ts +174 -0
  241. package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
  242. package/src/core/{eme → decrypt}/find_key_system.ts +111 -122
  243. package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
  244. package/src/core/decrypt/get_media_keys.ts +145 -0
  245. package/src/core/{eme → decrypt}/index.ts +11 -8
  246. package/src/core/decrypt/init_media_keys.ts +51 -0
  247. package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
  248. package/src/core/decrypt/set_server_certificate.ts +104 -0
  249. package/src/core/{eme → decrypt}/types.ts +128 -258
  250. package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
  251. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
  252. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
  253. package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
  254. package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
  255. package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +19 -20
  256. package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
  257. package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
  258. package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
  259. package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
  260. package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
  261. package/src/core/decrypt/utils/key_session_record.ts +175 -0
  262. package/src/core/decrypt/utils/loaded_sessions_store.ts +317 -0
  263. package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
  264. package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
  265. package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
  266. package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
  267. package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -7
  268. package/src/core/fetchers/segment/segment_fetcher.ts +4 -4
  269. package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
  270. package/src/core/fetchers/utils/try_urls_with_backoff.ts +2 -3
  271. package/src/core/init/.initialize_media_source.ts.un~ +0 -0
  272. package/src/core/init/get_initial_time.ts +2 -1
  273. package/src/core/init/initialize_directfile.ts +17 -20
  274. package/src/core/init/initialize_media_source.ts +44 -106
  275. package/src/core/init/link_drm_and_content.ts +176 -0
  276. package/src/core/init/manifest_update_scheduler.ts +5 -3
  277. package/src/core/init/stall_avoider.ts +6 -5
  278. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
  279. package/src/core/init/types.ts +1 -39
  280. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
  281. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +3 -4
  282. package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
  283. package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
  284. package/src/core/stream/events_generators.ts +9 -4
  285. package/src/core/stream/index.ts +1 -0
  286. package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
  287. package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
  288. package/src/core/stream/period/get_adaptation_switch_strategy.ts +25 -15
  289. package/src/core/stream/period/index.ts +1 -0
  290. package/src/core/stream/period/period_stream.ts +10 -16
  291. package/src/core/stream/representation/force_garbage_collection.ts +2 -2
  292. package/src/core/stream/representation/get_buffer_status.ts +28 -16
  293. package/src/core/stream/representation/get_needed_segments.ts +124 -28
  294. package/src/core/stream/representation/get_segment_priority.ts +1 -2
  295. package/src/core/stream/representation/push_media_segment.ts +3 -2
  296. package/src/core/stream/representation/representation_stream.ts +30 -7
  297. package/src/core/stream/types.ts +1 -1
  298. package/src/default_config.ts +1241 -0
  299. package/src/experimental/index.ts +5 -0
  300. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
  301. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +7 -7
  302. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
  303. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +9 -10
  304. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +2 -4
  305. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +2 -3
  306. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +1 -2
  307. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +3 -5
  308. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +3 -5
  309. package/src/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.ts +1 -2
  310. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.ts +1 -2
  311. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts +1 -2
  312. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.ts +1 -2
  313. package/src/features/__tests__/initialize_features.test.ts +2 -2
  314. package/src/features/features_object.ts +1 -1
  315. package/src/features/initialize_features.ts +1 -1
  316. package/src/features/list/__tests__/eme.test.ts +5 -5
  317. package/src/features/list/eme.ts +5 -5
  318. package/src/features/types.ts +3 -10
  319. package/src/manifest/manifest.ts +6 -76
  320. package/src/manifest/representation.ts +36 -3
  321. package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
  322. package/src/parsers/manifest/dash/common/indexes/template.ts +1 -2
  323. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +1 -1
  324. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +109 -64
  325. package/src/parsers/manifest/dash/common/parse_mpd.ts +1 -2
  326. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +4 -5
  327. package/src/parsers/manifest/smooth/create_parser.ts +1 -0
  328. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
  329. package/src/public_types.ts +6 -1
  330. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +1 -2
  331. package/src/transports/dash/image_pipelines.ts +15 -14
  332. package/src/transports/dash/init_segment_loader.ts +1 -2
  333. package/src/transports/dash/manifest_parser.ts +2 -3
  334. package/src/transports/dash/segment_loader.ts +4 -5
  335. package/src/transports/dash/segment_parser.ts +5 -0
  336. package/src/transports/dash/text_loader.ts +2 -3
  337. package/src/transports/dash/text_parser.ts +8 -0
  338. package/src/transports/local/segment_loader.ts +2 -3
  339. package/src/transports/local/segment_parser.ts +4 -0
  340. package/src/transports/local/text_parser.ts +8 -0
  341. package/src/transports/metaplaylist/pipelines.ts +2 -3
  342. package/src/transports/smooth/pipelines.ts +26 -14
  343. package/src/transports/smooth/segment_loader.ts +5 -6
  344. package/src/transports/types.ts +22 -0
  345. package/src/transports/utils/call_custom_manifest_loader.ts +1 -2
  346. package/src/utils/__tests__/deep_merge.test.ts +48 -0
  347. package/src/utils/cancellable_sleep.ts +1 -2
  348. package/src/utils/cast_to_observable.ts +0 -2
  349. package/src/utils/deep_merge.ts +46 -0
  350. package/src/utils/reference.ts +116 -23
  351. package/src/utils/request/fetch.ts +1 -2
  352. package/src/utils/request/xhr.ts +3 -3
  353. package/src/utils/rx-from_cancellable_promise.ts +7 -2
  354. package/src/utils/task_canceller.ts +6 -4
  355. package/tsconfig.json +0 -1
  356. package/tsconfig.modules.json +0 -1
  357. package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
  358. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
  359. package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
  360. package/dist/_esm5.processed/core/eme/create_session.js +0 -126
  361. package/dist/_esm5.processed/core/eme/dispose_eme.d.ts +0 -19
  362. package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
  363. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
  364. package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
  365. package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
  366. package/dist/_esm5.processed/core/eme/find_key_system.js +0 -253
  367. package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
  368. package/dist/_esm5.processed/core/eme/get_session.js +0 -68
  369. package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
  370. package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
  371. package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
  372. package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
  373. package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
  374. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
  375. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
  376. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
  377. package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
  378. package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
  379. package/src/core/eme/README.md +0 -26
  380. package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
  381. package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
  382. package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
  383. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
  384. package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
  385. package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
  386. package/src/core/eme/clear_eme_session.ts +0 -62
  387. package/src/core/eme/create_session.ts +0 -187
  388. package/src/core/eme/dispose_eme.ts +0 -25
  389. package/src/core/eme/dispose_media_keys.ts +0 -46
  390. package/src/core/eme/eme_manager.ts +0 -387
  391. package/src/core/eme/get_media_keys.ts +0 -141
  392. package/src/core/eme/get_session.ts +0 -135
  393. package/src/core/eme/init_media_keys.ts +0 -106
  394. package/src/core/eme/set_server_certificate.ts +0 -115
  395. package/src/core/eme/utils/close_session.ts +0 -113
  396. package/src/core/eme/utils/init_data_store.ts +0 -234
  397. package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
  398. package/src/core/init/create_eme_manager.ts +0 -95
  399. package/src/utils/__tests__/promise.test.ts +0 -23
  400. package/src/utils/promise.ts +0 -20
@@ -76,7 +76,6 @@ import EventEmitter, {
76
76
  import isNullOrUndefined from "../../utils/is_null_or_undefined";
77
77
  import Logger from "../../utils/logger";
78
78
  import objectAssign from "../../utils/object_assign";
79
- import PPromise from "../../utils/promise";
80
79
  import {
81
80
  getLeftSizeOfRange,
82
81
  getPlayedSizeOfRange,
@@ -87,10 +86,10 @@ import createSharedReference, {
87
86
  } from "../../utils/reference";
88
87
  import warnOnce from "../../utils/warn_once";
89
88
  import {
90
- clearEMESession,
91
- disposeEME,
89
+ clearOnStop,
90
+ disposeDecryptionResources,
92
91
  getCurrentKeySystem,
93
- } from "../eme";
92
+ } from "../decrypt";
94
93
  import {
95
94
  IManifestFetcherParsedResult,
96
95
  IManifestFetcherWarningEvent,
@@ -140,7 +139,6 @@ import TrackChoiceManager, {
140
139
 
141
140
  /* eslint-disable @typescript-eslint/naming-convention */
142
141
 
143
- const { DEFAULT_UNMUTED_VOLUME } = config;
144
142
 
145
143
  const { isPageActive,
146
144
  isVideoVisible,
@@ -152,74 +150,6 @@ const { isPageActive,
152
150
  onTextTrackChanges$,
153
151
  videoWidth$ } = events;
154
152
 
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 | undefined;
167
- wallClockTime? : number | undefined;
168
- /**
169
- * Only for live contents. Difference between the "live edge" and the current
170
- * position, in seconds.
171
- */
172
- liveGap? : number | undefined;
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
153
  /**
224
154
  * @class Player
225
155
  * @extends EventEmitter
@@ -280,6 +210,8 @@ class Player extends EventEmitter<IPublicAPIEvent> {
280
210
  maxBufferAhead : ISharedReference<number>;
281
211
  /** Maximum kept buffer behind in the current position, in seconds. */
282
212
  maxBufferBehind : ISharedReference<number>;
213
+ /** Maximum size of video buffer , in kiloBytes */
214
+ maxVideoBufferSize : ISharedReference<number>;
283
215
  };
284
216
 
285
217
  /** Information on the current bitrate settings. */
@@ -488,13 +420,14 @@ class Player extends EventEmitter<IPublicAPIEvent> {
488
420
  throttleVideoBitrateWhenHidden,
489
421
  videoElement,
490
422
  wantedBufferAhead,
423
+ maxVideoBufferSize,
491
424
  stopAtEnd } = parseConstructorOptions(options);
492
-
425
+ const { DEFAULT_UNMUTED_VOLUME } = config.getCurrent();
493
426
  // Workaround to support Firefox autoplay on FF 42.
494
427
  // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
495
428
  videoElement.preload = "auto";
496
429
 
497
- this.version = /* PLAYER_VERSION */"3.26.3-dev.2022021400";
430
+ this.version = /* PLAYER_VERSION */"3.27.0-dev.2022032100";
498
431
  this.log = log;
499
432
  this.state = "STOPPED";
500
433
  this.videoElement = videoElement;
@@ -554,6 +487,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
554
487
  wantedBufferAhead: createSharedReference(wantedBufferAhead),
555
488
  maxBufferAhead: createSharedReference(maxBufferAhead),
556
489
  maxBufferBehind: createSharedReference(maxBufferBehind),
490
+ maxVideoBufferSize: createSharedReference(maxVideoBufferSize),
557
491
  };
558
492
 
559
493
  this._priv_bitrateInfos = {
@@ -613,8 +547,13 @@ class Player extends EventEmitter<IPublicAPIEvent> {
613
547
  this.stop();
614
548
 
615
549
  if (this.videoElement !== null) {
616
- // free resources used for EME management
617
- disposeEME(this.videoElement);
550
+ // free resources used for decryption management
551
+ disposeDecryptionResources(this.videoElement)
552
+ .catch((err : unknown) => {
553
+ const message = err instanceof Error ? err.message :
554
+ "Unknown error";
555
+ log.error("API: Could not dispose decryption resources: " + message);
556
+ });
618
557
  }
619
558
 
620
559
  // free Observables linked to the Player instance
@@ -627,6 +566,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
627
566
  this._priv_speed.finish();
628
567
  this._priv_contentLock.finish();
629
568
  this._priv_bufferOptions.wantedBufferAhead.finish();
569
+ this._priv_bufferOptions.maxVideoBufferSize.finish();
630
570
  this._priv_bufferOptions.maxBufferAhead.finish();
631
571
  this._priv_bufferOptions.maxBufferBehind.finish();
632
572
  this._priv_bitrateInfos.manualBitrates.video.finish();
@@ -1025,28 +965,26 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1025
965
  const playerState$ = observableConcat(
1026
966
  observableOf(PLAYER_STATES.LOADING), // Begin with LOADING
1027
967
 
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)
968
+ loaded$.pipe(switchMap((_, i) => {
969
+ const isFirstLoad = i === 0;
970
+ return observableMerge(
971
+ // Purposely subscribed first so a RELOADING triggered synchronously
972
+ // after a LOADED state is catched.
973
+ reloading$.pipe(map(() => PLAYER_STATES.RELOADING)),
974
+ // Only switch to LOADED state for the first (i.e. non-RELOADING) load
975
+ isFirstLoad ? observableOf(PLAYER_STATES.LOADED) :
976
+ EMPTY,
977
+ // Purposely put last so any other state change happens after we've
978
+ // already switched to LOADED
979
+ loadedStateUpdates$.pipe(
1035
980
  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
- )
981
+ // For the first load, we prefer staying at the LOADED state over
982
+ // PAUSED when autoPlay is disabled.
983
+ // For consecutive loads however, there's no LOADED state.
984
+ skipWhile(state => isFirstLoad && state === PLAYER_STATES.PAUSED)
1047
985
  )
1048
- )
1049
- )
986
+ );
987
+ }))
1050
988
  ).pipe(distinctUntilChanged());
1051
989
 
1052
990
  let playbackSubscription : Subscription|undefined;
@@ -1338,7 +1276,24 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1338
1276
 
1339
1277
  const { isDirectFile, manifest } = this._priv_contentInfos;
1340
1278
  if (isDirectFile) {
1341
- return this.videoElement.currentTime;
1279
+ // Calculating the "wall-clock time" necessitate to obtain first an offset,
1280
+ // and then adding that offset to the HTMLMediaElement's current position.
1281
+ // That offset is in most case present inside the Manifest file, yet in
1282
+ // directfile mode, the RxPlayer won't parse that file, the browser does it.
1283
+ //
1284
+ // Thankfully Safari declares a `getStartDate` method allowing to obtain
1285
+ // that offset when available. This logic is thus mainly useful when
1286
+ // playing HLS contents in directfile mode on Safari.
1287
+ const mediaElement : HTMLMediaElement & {
1288
+ getStartDate? : () => number | null | undefined;
1289
+ } = this.videoElement;
1290
+ if (typeof mediaElement.getStartDate === "function") {
1291
+ const startDate = mediaElement.getStartDate();
1292
+ if (typeof startDate === "number" && !isNaN(startDate)) {
1293
+ return startDate + mediaElement.currentTime;
1294
+ }
1295
+ }
1296
+ return mediaElement.currentTime;
1342
1297
  }
1343
1298
  if (manifest !== null) {
1344
1299
  const currentTime = this.videoElement.currentTime;
@@ -1583,7 +1538,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1583
1538
  /* eslint-disable @typescript-eslint/unbound-method */
1584
1539
  if (isNullOrUndefined(playPromise) || typeof playPromise.catch !== "function") {
1585
1540
  /* eslint-enable @typescript-eslint/unbound-method */
1586
- return PPromise.resolve();
1541
+ return Promise.resolve();
1587
1542
  }
1588
1543
  return playPromise.catch((error: Error) => {
1589
1544
  if (error.name === "NotAllowedError") {
@@ -1757,6 +1712,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1757
1712
  * If the volume was set to 0, set a default volume instead (see config).
1758
1713
  */
1759
1714
  unMute() : void {
1715
+ const { DEFAULT_UNMUTED_VOLUME } = config.getCurrent();
1760
1716
  const vol = this.getVolume();
1761
1717
  if (vol === 0) {
1762
1718
  this.setVolume(this._priv_mutedMemory === 0 ? DEFAULT_UNMUTED_VOLUME :
@@ -1865,6 +1821,15 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1865
1821
  this._priv_bufferOptions.wantedBufferAhead.setValue(sizeInSeconds);
1866
1822
  }
1867
1823
 
1824
+ /**
1825
+ * Set the max buffer size the buffer should take in memory
1826
+ * The player . will stop downloading chunks when this size is reached.
1827
+ * @param {Number} sizeInKBytes
1828
+ */
1829
+ setMaxVideoBufferSize(sizeInKBytes : number) : void {
1830
+ this._priv_bufferOptions.maxVideoBufferSize.setValue(sizeInKBytes);
1831
+ }
1832
+
1868
1833
  /**
1869
1834
  * Returns the max buffer size for the buffer behind the current position.
1870
1835
  * @returns {Number}
@@ -1889,6 +1854,14 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1889
1854
  return this._priv_bufferOptions.wantedBufferAhead.getValue();
1890
1855
  }
1891
1856
 
1857
+ /**
1858
+ * Returns the max buffer memory size for the buffer in kilobytes
1859
+ * @returns {Number}
1860
+ */
1861
+ getMaxVideoBufferSize() : number {
1862
+ return this._priv_bufferOptions.maxVideoBufferSize.getValue();
1863
+ }
1864
+
1892
1865
  /**
1893
1866
  * Returns type of current keysystem (e.g. playready, widevine) if the content
1894
1867
  * is encrypted. null otherwise.
@@ -2336,25 +2309,23 @@ class Player extends EventEmitter<IPublicAPIEvent> {
2336
2309
 
2337
2310
  this._priv_contentEventsMemory = {};
2338
2311
 
2339
- // EME cleaning
2312
+ // DRM-related clean-up
2340
2313
  const freeUpContentLock = () => {
2341
2314
  log.debug("Unlocking `contentLock`. Next content can begin.");
2342
2315
  this._priv_contentLock.setValue(false);
2343
2316
  };
2344
2317
 
2345
2318
  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
- },
2319
+ clearOnStop(this.videoElement).then(
2320
+ () => {
2321
+ log.debug("API: DRM session cleaned-up with success!");
2322
+ freeUpContentLock();
2323
+ },
2324
+ (err : unknown) => {
2325
+ log.error("API: An error arised when trying to clean-up the DRM session:" +
2326
+ (err instanceof Error ? err.toString() :
2327
+ "Unknown Error"));
2328
+ freeUpContentLock();
2358
2329
  });
2359
2330
  } else {
2360
2331
  freeUpContentLock();
@@ -2975,7 +2946,75 @@ class Player extends EventEmitter<IPublicAPIEvent> {
2975
2946
  return activeRepresentations[currentPeriod.id];
2976
2947
  }
2977
2948
  }
2978
- Player.version = /* PLAYER_VERSION */"3.26.3-dev.2022021400";
2949
+ Player.version = /* PLAYER_VERSION */"3.27.0-dev.2022032100";
2950
+
2951
+ /** Payload emitted with a `positionUpdate` event. */
2952
+ export interface IPositionUpdateItem {
2953
+ /** current position the player is in, in seconds. */
2954
+ position : number;
2955
+ /** Last position set for the current media currently, in seconds. */
2956
+ duration : number;
2957
+ /** Playback rate (i.e. speed) at which the current media is played. */
2958
+ playbackRate : number;
2959
+ /** Amount of buffer available for now in front of the current position, in seconds. */
2960
+ bufferGap : number;
2961
+ /** Current maximum seekable position. */
2962
+ maximumBufferTime? : number | undefined;
2963
+ wallClockTime? : number | undefined;
2964
+ /**
2965
+ * Only for live contents. Difference between the "live edge" and the current
2966
+ * position, in seconds.
2967
+ */
2968
+ liveGap? : number | undefined;
2969
+ }
2970
+
2971
+ /** Payload emitted with a `bitrateEstimationChange` event. */
2972
+ export interface IBitrateEstimate {
2973
+ /** The type of buffer this estimate was done for (e.g. "audio). */
2974
+ type : IBufferType;
2975
+ /** The calculated bitrate, in bits per seconds. */
2976
+ bitrate : number | undefined;
2977
+ }
2978
+
2979
+ export type IStreamEvent = { data: IStreamEventData;
2980
+ start: number;
2981
+ end: number;
2982
+ onExit?: () => void; } |
2983
+ { data: IStreamEventData;
2984
+ start: number; };
2985
+
2986
+ /** Every events sent by the RxPlayer's public API. */
2987
+ interface IPublicAPIEvent {
2988
+ playerStateChange : string;
2989
+ positionUpdate : IPositionUpdateItem;
2990
+ audioTrackChange : ITMAudioTrack | null;
2991
+ textTrackChange : ITMTextTrack | null;
2992
+ videoTrackChange : ITMVideoTrack | null;
2993
+ audioBitrateChange : number;
2994
+ videoBitrateChange : number;
2995
+ imageTrackUpdate : { data: IBifThumbnail[] };
2996
+ fullscreenChange : boolean;
2997
+ bitrateEstimationChange : IBitrateEstimate;
2998
+ volumeChange : number;
2999
+ error : ICustomError | Error;
3000
+ warning : ICustomError | Error;
3001
+ nativeTextTracksChange : TextTrack[];
3002
+ periodChange : Period;
3003
+ availableAudioBitratesChange : number[];
3004
+ availableVideoBitratesChange : number[];
3005
+ availableAudioTracksChange : ITMAudioTrackListItem[];
3006
+ availableTextTracksChange : ITMTextTrackListItem[];
3007
+ availableVideoTracksChange : ITMVideoTrackListItem[];
3008
+ decipherabilityUpdate : Array<{ manifest : Manifest;
3009
+ period : Period;
3010
+ adaptation : Adaptation;
3011
+ representation : Representation; }>;
3012
+ seeking : null;
3013
+ seeked : null;
3014
+ streamEvent : IStreamEvent;
3015
+ streamEventSkip : IStreamEvent;
3016
+ inbandEvents : IInbandEvent[];
3017
+ }
2979
3018
 
2980
3019
  export default Player;
2981
3020
  export { IStreamEventData };
@@ -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`.