rx-player 3.26.3-dev.2022021400 → 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 (340) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/FILES.md +5 -4
  3. package/VERSION +1 -1
  4. package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
  5. package/dist/_esm5.processed/compat/browser_detection.js +4 -2
  6. package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
  7. package/dist/_esm5.processed/compat/eme/close_session.js +144 -36
  8. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
  9. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +21 -22
  10. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +53 -34
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +43 -41
  12. package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
  13. package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
  14. package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
  15. package/dist/_esm5.processed/compat/eme/load_session.js +68 -17
  16. package/dist/_esm5.processed/compat/event_listeners.js +2 -1
  17. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
  18. package/dist/_esm5.processed/config.d.ts +166 -1080
  19. package/dist/_esm5.processed/config.js +17 -1119
  20. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
  21. package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
  22. package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
  23. package/dist/_esm5.processed/core/api/index.d.ts +2 -1
  24. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +2 -1
  25. package/dist/_esm5.processed/core/api/option_utils.d.ts +3 -1
  26. package/dist/_esm5.processed/core/api/option_utils.js +19 -6
  27. package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
  28. package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
  29. package/dist/_esm5.processed/core/api/public_api.js +72 -33
  30. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -49
  31. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +25 -65
  32. package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
  33. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +104 -0
  34. package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
  35. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +41 -0
  36. package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
  37. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +866 -0
  38. package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
  39. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
  40. package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
  41. package/dist/_esm5.processed/core/decrypt/create_session.js +174 -0
  42. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.d.ts +21 -0
  43. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
  44. package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
  45. package/dist/_esm5.processed/core/decrypt/find_key_system.js +300 -0
  46. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
  47. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
  48. package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
  49. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
  50. package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
  51. package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
  52. package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
  53. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
  54. package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
  55. package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
  56. package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
  57. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
  58. package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +119 -241
  59. package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
  60. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
  61. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
  62. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
  63. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
  64. package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
  65. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +85 -0
  66. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
  67. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
  68. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
  69. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
  70. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
  71. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
  72. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
  73. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
  74. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
  75. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
  76. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
  77. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
  78. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
  79. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +303 -0
  80. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
  81. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
  82. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
  83. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
  84. package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
  85. package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
  86. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
  87. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
  88. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +2 -2
  89. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +1 -1
  90. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  91. package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
  92. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +1 -1
  93. package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
  94. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +4 -2
  95. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
  96. package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
  97. package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
  98. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
  99. package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
  100. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
  101. package/dist/_esm5.processed/core/init/types.d.ts +2 -4
  102. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
  103. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
  104. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
  105. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
  106. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
  107. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
  108. package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
  109. package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
  110. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
  111. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
  112. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
  113. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +1 -1
  114. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +2 -1
  115. package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
  116. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +2 -2
  117. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
  118. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
  119. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
  120. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
  121. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
  122. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
  123. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
  124. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
  125. package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
  126. package/dist/_esm5.processed/default_config.d.ts +1114 -0
  127. package/dist/_esm5.processed/default_config.js +1145 -0
  128. package/dist/_esm5.processed/experimental/index.d.ts +2 -0
  129. package/dist/_esm5.processed/experimental/index.js +2 -0
  130. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
  131. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +1 -1
  132. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +1 -2
  133. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +1 -2
  134. package/dist/_esm5.processed/features/features_object.js +1 -1
  135. package/dist/_esm5.processed/features/initialize_features.js +1 -1
  136. package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
  137. package/dist/_esm5.processed/features/list/eme.js +5 -5
  138. package/dist/_esm5.processed/features/types.d.ts +3 -3
  139. package/dist/_esm5.processed/manifest/manifest.d.ts +1 -14
  140. package/dist/_esm5.processed/manifest/manifest.js +10 -74
  141. package/dist/_esm5.processed/manifest/representation.d.ts +35 -3
  142. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
  143. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
  144. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +1 -1
  145. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +87 -75
  146. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
  147. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
  148. package/dist/_esm5.processed/public_types.d.ts +2 -2
  149. package/dist/_esm5.processed/transports/dash/image_pipelines.js +3 -0
  150. package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
  151. package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
  152. package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
  153. package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
  154. package/dist/_esm5.processed/transports/smooth/pipelines.js +68 -10
  155. package/dist/_esm5.processed/transports/types.d.ts +22 -0
  156. package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
  157. package/dist/_esm5.processed/utils/deep_merge.js +53 -0
  158. package/dist/_esm5.processed/utils/reference.d.ts +29 -0
  159. package/dist/_esm5.processed/utils/reference.js +72 -24
  160. package/dist/_esm5.processed/utils/request/fetch.js +1 -2
  161. package/dist/_esm5.processed/utils/request/xhr.js +1 -1
  162. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
  163. package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
  164. package/dist/_esm5.processed/utils/task_canceller.js +3 -3
  165. package/dist/rx-player.js +5002 -3033
  166. package/dist/rx-player.min.js +1 -1
  167. package/dummy +1 -0
  168. package/{dist/_esm5.processed/core/eme/dispose_eme.d.ts → experimental/index.d.ts} +1 -4
  169. package/{dist/_esm5.processed/core/eme/dispose_media_keys.d.ts → experimental/index.js} +1 -6
  170. package/package.json +32 -34
  171. package/scripts/build/templates/experimental/index.d.ts +16 -0
  172. package/scripts/build/templates/experimental/index.js +16 -0
  173. package/sonar-project.properties +1 -1
  174. package/src/README.md +6 -6
  175. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
  176. package/src/compat/browser_detection.ts +4 -2
  177. package/src/compat/eme/close_session.ts +90 -56
  178. package/src/compat/eme/custom_media_keys/index.ts +21 -38
  179. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +63 -46
  180. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +51 -49
  181. package/src/compat/eme/generate_key_request.ts +25 -33
  182. package/src/compat/eme/load_session.ts +29 -31
  183. package/src/compat/event_listeners.ts +2 -1
  184. package/src/compat/should_favour_custom_safari_EME.ts +5 -2
  185. package/src/config.ts +17 -1210
  186. package/src/core/README.md +1 -1
  187. package/src/core/abr/bandwidth_estimator.ts +4 -4
  188. package/src/core/abr/network_analyzer.ts +5 -6
  189. package/src/core/api/__tests__/get_player_state.test.ts +3 -3
  190. package/src/core/api/__tests__/option_utils.test.ts +17 -17
  191. package/src/core/api/get_player_state.ts +1 -1
  192. package/src/core/api/index.ts +3 -0
  193. package/src/core/api/option_utils.ts +37 -20
  194. package/src/core/api/playback_observer.ts +12 -8
  195. package/src/core/api/public_api.ts +151 -111
  196. package/src/core/decrypt/README.md +22 -0
  197. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
  198. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
  199. package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
  200. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
  201. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
  202. package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +31 -93
  203. package/src/core/{eme → decrypt}/attach_media_keys.ts +49 -56
  204. package/src/core/decrypt/clear_on_stop.ts +48 -0
  205. package/src/core/decrypt/content_decryptor.ts +1158 -0
  206. package/src/core/decrypt/create_or_load_session.ts +130 -0
  207. package/src/core/decrypt/create_session.ts +175 -0
  208. package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
  209. package/src/core/{eme → decrypt}/find_key_system.ts +112 -122
  210. package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
  211. package/src/core/decrypt/get_media_keys.ts +145 -0
  212. package/src/core/{eme → decrypt}/index.ts +11 -8
  213. package/src/core/decrypt/init_media_keys.ts +51 -0
  214. package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
  215. package/src/core/decrypt/set_server_certificate.ts +104 -0
  216. package/src/core/{eme → decrypt}/types.ts +128 -258
  217. package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
  218. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
  219. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
  220. package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
  221. package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
  222. package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +20 -20
  223. package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
  224. package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
  225. package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
  226. package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
  227. package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
  228. package/src/core/decrypt/utils/key_session_record.ts +175 -0
  229. package/src/core/decrypt/utils/loaded_sessions_store.ts +318 -0
  230. package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
  231. package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
  232. package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
  233. package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
  234. package/src/core/fetchers/manifest/manifest_fetcher.ts +4 -4
  235. package/src/core/fetchers/segment/segment_fetcher.ts +4 -4
  236. package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
  237. package/src/core/init/.initialize_media_source.ts.un~ +0 -0
  238. package/src/core/init/get_initial_time.ts +2 -1
  239. package/src/core/init/initialize_directfile.ts +17 -20
  240. package/src/core/init/initialize_media_source.ts +42 -105
  241. package/src/core/init/link_drm_and_content.ts +176 -0
  242. package/src/core/init/manifest_update_scheduler.ts +5 -3
  243. package/src/core/init/stall_avoider.ts +6 -5
  244. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
  245. package/src/core/init/types.ts +1 -39
  246. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
  247. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +3 -4
  248. package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
  249. package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
  250. package/src/core/stream/events_generators.ts +9 -4
  251. package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
  252. package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
  253. package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
  254. package/src/core/stream/period/period_stream.ts +5 -2
  255. package/src/core/stream/representation/force_garbage_collection.ts +2 -2
  256. package/src/core/stream/representation/get_buffer_status.ts +28 -16
  257. package/src/core/stream/representation/get_needed_segments.ts +124 -28
  258. package/src/core/stream/representation/get_segment_priority.ts +1 -2
  259. package/src/core/stream/representation/push_media_segment.ts +3 -2
  260. package/src/core/stream/representation/representation_stream.ts +30 -7
  261. package/src/core/stream/types.ts +1 -1
  262. package/src/default_config.ts +1241 -0
  263. package/src/experimental/index.ts +5 -0
  264. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
  265. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +2 -1
  266. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
  267. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +4 -4
  268. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +1 -2
  269. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +1 -2
  270. package/src/features/__tests__/initialize_features.test.ts +2 -2
  271. package/src/features/features_object.ts +1 -1
  272. package/src/features/initialize_features.ts +1 -1
  273. package/src/features/list/__tests__/eme.test.ts +5 -5
  274. package/src/features/list/eme.ts +5 -5
  275. package/src/features/types.ts +3 -10
  276. package/src/manifest/manifest.ts +6 -76
  277. package/src/manifest/representation.ts +36 -3
  278. package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
  279. package/src/parsers/manifest/dash/common/indexes/template.ts +1 -2
  280. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +1 -1
  281. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +109 -64
  282. package/src/parsers/manifest/dash/common/parse_mpd.ts +1 -2
  283. package/src/parsers/manifest/smooth/create_parser.ts +1 -0
  284. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
  285. package/src/public_types.ts +5 -1
  286. package/src/transports/dash/image_pipelines.ts +3 -0
  287. package/src/transports/dash/segment_parser.ts +5 -0
  288. package/src/transports/dash/text_parser.ts +8 -0
  289. package/src/transports/local/segment_parser.ts +4 -0
  290. package/src/transports/local/text_parser.ts +8 -0
  291. package/src/transports/smooth/pipelines.ts +22 -9
  292. package/src/transports/types.ts +22 -0
  293. package/src/utils/__tests__/deep_merge.test.ts +48 -0
  294. package/src/utils/deep_merge.ts +46 -0
  295. package/src/utils/reference.ts +116 -23
  296. package/src/utils/request/fetch.ts +1 -2
  297. package/src/utils/request/xhr.ts +2 -1
  298. package/src/utils/rx-from_cancellable_promise.ts +7 -2
  299. package/src/utils/task_canceller.ts +6 -4
  300. package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
  301. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
  302. package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
  303. package/dist/_esm5.processed/core/eme/create_session.js +0 -126
  304. package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
  305. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
  306. package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
  307. package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
  308. package/dist/_esm5.processed/core/eme/find_key_system.js +0 -253
  309. package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
  310. package/dist/_esm5.processed/core/eme/get_session.js +0 -68
  311. package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
  312. package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
  313. package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
  314. package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
  315. package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
  316. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
  317. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
  318. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
  319. package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
  320. package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
  321. package/src/core/eme/README.md +0 -26
  322. package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
  323. package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
  324. package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
  325. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
  326. package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
  327. package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
  328. package/src/core/eme/clear_eme_session.ts +0 -62
  329. package/src/core/eme/create_session.ts +0 -187
  330. package/src/core/eme/dispose_eme.ts +0 -25
  331. package/src/core/eme/dispose_media_keys.ts +0 -46
  332. package/src/core/eme/eme_manager.ts +0 -387
  333. package/src/core/eme/get_media_keys.ts +0 -141
  334. package/src/core/eme/get_session.ts +0 -135
  335. package/src/core/eme/init_media_keys.ts +0 -106
  336. package/src/core/eme/set_server_certificate.ts +0 -115
  337. package/src/core/eme/utils/close_session.ts +0 -113
  338. package/src/core/eme/utils/init_data_store.ts +0 -234
  339. package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
  340. package/src/core/init/create_eme_manager.ts +0 -95
@@ -16,7 +16,7 @@ Those modules are:
16
16
  Initialize playback and connects different modules between one another.
17
17
 
18
18
 
19
- - __the `EMEManager` (./eme)__
19
+ - __the `ContentDecryptor` (./decrypt)__
20
20
 
21
21
  Negotiate content decryption.
22
22
  Only used for contents with DRM (Digital Right Management).
@@ -17,10 +17,6 @@
17
17
  import config from "../../config";
18
18
  import EWMA from "./utils/ewma";
19
19
 
20
- const { ABR_MINIMUM_TOTAL_BYTES,
21
- ABR_MINIMUM_CHUNK_SIZE,
22
- ABR_FAST_EMA,
23
- ABR_SLOW_EMA } = config;
24
20
 
25
21
  /**
26
22
  * Calculate a mean bandwidth based on the bytes downloaded and the amount
@@ -35,6 +31,7 @@ export default class BandwidthEstimator {
35
31
  private _bytesSampled : number;
36
32
 
37
33
  constructor() {
34
+ const { ABR_FAST_EMA, ABR_SLOW_EMA } = config.getCurrent();
38
35
  /**
39
36
  * A fast-moving average.
40
37
  * @private
@@ -63,6 +60,7 @@ export default class BandwidthEstimator {
63
60
  * request.
64
61
  */
65
62
  public addSample(durationInMs : number, numberOfBytes : number) : void {
63
+ const { ABR_MINIMUM_CHUNK_SIZE } = config.getCurrent();
66
64
  if (numberOfBytes < ABR_MINIMUM_CHUNK_SIZE) {
67
65
  return;
68
66
  }
@@ -80,6 +78,7 @@ export default class BandwidthEstimator {
80
78
  * @returns {Number|undefined}
81
79
  */
82
80
  public getEstimate() : number|undefined {
81
+ const { ABR_MINIMUM_TOTAL_BYTES } = config.getCurrent();
83
82
  if (this._bytesSampled < ABR_MINIMUM_TOTAL_BYTES) {
84
83
  return undefined;
85
84
  }
@@ -94,6 +93,7 @@ export default class BandwidthEstimator {
94
93
  * Reset the bandwidth estimation.
95
94
  */
96
95
  public reset() : void {
96
+ const { ABR_FAST_EMA, ABR_SLOW_EMA } = config.getCurrent();
97
97
  this._fastEWMA = new EWMA(ABR_FAST_EMA);
98
98
  this._slowEWMA = new EWMA(ABR_SLOW_EMA);
99
99
  this._bytesSampled = 0;
@@ -25,11 +25,6 @@ import {
25
25
  } from "./pending_requests_store";
26
26
  import EWMA from "./utils/ewma";
27
27
 
28
- const { ABR_REGULAR_FACTOR,
29
- ABR_STARVATION_DURATION_DELTA,
30
- ABR_STARVATION_FACTOR,
31
- ABR_STARVATION_GAP,
32
- OUT_OF_STARVATION_GAP } = config;
33
28
 
34
29
  /** Object describing the current playback conditions. */
35
30
  interface IPlaybackConditionsInfo {
@@ -289,6 +284,10 @@ export default class NetworkAnalyzer {
289
284
  regularBitrateFactor : number; };
290
285
 
291
286
  constructor(initialBitrate: number, lowLatencyMode: boolean) {
287
+ const { ABR_STARVATION_GAP,
288
+ OUT_OF_STARVATION_GAP,
289
+ ABR_STARVATION_FACTOR,
290
+ ABR_REGULAR_FACTOR } = config.getCurrent();
292
291
  this._initialBitrate = initialBitrate;
293
292
  this._inStarvationMode = false;
294
293
  this._lowLatencyMode = lowLatencyMode;
@@ -334,7 +333,7 @@ export default class NetworkAnalyzer {
334
333
  const { bufferGap, position, duration } = playbackInfo;
335
334
  const realBufferGap = isFinite(bufferGap) ? bufferGap :
336
335
  0;
337
-
336
+ const { ABR_STARVATION_DURATION_DELTA } = config.getCurrent();
338
337
  // check if should get in/out of starvation mode
339
338
  if (isNaN(duration) ||
340
339
  realBufferGap + position < duration - ABR_STARVATION_DURATION_DELTA)
@@ -128,7 +128,7 @@ describe("API - getLoadedContentState", () => {
128
128
  const fakeProps = {
129
129
  ended: false,
130
130
  duration: 10,
131
- currentTime: 10 - config.FORCED_ENDED_THRESHOLD,
131
+ currentTime: 10 - config.getCurrent().FORCED_ENDED_THRESHOLD,
132
132
  };
133
133
  const mediaElement = fakeProps as HTMLMediaElement;
134
134
  expect(getLoadedContentState(mediaElement, true, "seeking")).toBe("ENDED");
@@ -144,7 +144,7 @@ describe("API - getLoadedContentState", () => {
144
144
  const fakeProps1 = {
145
145
  ended: false,
146
146
  duration: 10,
147
- currentTime: 10 - config.FORCED_ENDED_THRESHOLD,
147
+ currentTime: 10 - config.getCurrent().FORCED_ENDED_THRESHOLD,
148
148
  };
149
149
  const mediaElement1 = fakeProps1 as HTMLMediaElement;
150
150
  expect(getLoadedContentState(mediaElement1, true, "seeking")).toBe("ENDED");
@@ -159,7 +159,7 @@ describe("API - getLoadedContentState", () => {
159
159
  const fakeProps2 = {
160
160
  ended: false,
161
161
  duration: 10,
162
- currentTime: config.FORCED_ENDED_THRESHOLD + 10,
162
+ currentTime: config.getCurrent().FORCED_ENDED_THRESHOLD + 10,
163
163
  };
164
164
  const mediaElement2 = fakeProps2 as HTMLMediaElement;
165
165
  expect(getLoadedContentState(mediaElement2, true, "seeking")).toBe("ENDED");
@@ -46,22 +46,6 @@ const normalizeTextTrackMock = normalizeTextTrack as
46
46
  jest.Mock<ReturnType<typeof normalizeTextTrack>>;
47
47
  const logWarnMock = log.warn as jest.Mock<ReturnType<typeof log.warn>>;
48
48
 
49
- const {
50
- // DEFAULT_AUTO_PLAY,
51
- DEFAULT_INITIAL_BITRATES,
52
- DEFAULT_LIMIT_VIDEO_WIDTH,
53
- // DEFAULT_MANUAL_BITRATE_SWITCHING_MODE,
54
- DEFAULT_MIN_BITRATES,
55
- DEFAULT_MAX_BITRATES,
56
- DEFAULT_MAX_BUFFER_AHEAD,
57
- DEFAULT_MAX_BUFFER_BEHIND,
58
- // DEFAULT_SHOW_NATIVE_SUBTITLE,
59
- // DEFAULT_TEXT_TRACK_MODE,
60
- DEFAULT_THROTTLE_WHEN_HIDDEN,
61
- DEFAULT_THROTTLE_VIDEO_BITRATE_WHEN_HIDDEN,
62
- DEFAULT_WANTED_BUFFER_AHEAD,
63
- } = config;
64
-
65
49
  describe("API - parseConstructorOptions", () => {
66
50
  beforeEach(() => {
67
51
  jest.resetModules();
@@ -75,8 +59,24 @@ describe("API - parseConstructorOptions", () => {
75
59
  });
76
60
 
77
61
  const videoElement = document.createElement("video");
78
-
62
+ const {
63
+ // DEFAULT_AUTO_PLAY,
64
+ DEFAULT_INITIAL_BITRATES,
65
+ DEFAULT_LIMIT_VIDEO_WIDTH,
66
+ // DEFAULT_MANUAL_BITRATE_SWITCHING_MODE,
67
+ DEFAULT_MIN_BITRATES,
68
+ DEFAULT_MAX_BITRATES,
69
+ DEFAULT_MAX_BUFFER_AHEAD,
70
+ DEFAULT_MAX_BUFFER_BEHIND,
71
+ DEFAULT_MAX_VIDEO_BUFFER_SIZE,
72
+ // DEFAULT_SHOW_NATIVE_SUBTITLE,
73
+ // DEFAULT_TEXT_TRACK_MODE,
74
+ DEFAULT_THROTTLE_WHEN_HIDDEN,
75
+ DEFAULT_THROTTLE_VIDEO_BITRATE_WHEN_HIDDEN,
76
+ DEFAULT_WANTED_BUFFER_AHEAD,
77
+ } = config.getCurrent();
79
78
  const defaultConstructorOptions = {
79
+ maxVideoBufferSize: DEFAULT_MAX_VIDEO_BUFFER_SIZE,
80
80
  maxBufferAhead: DEFAULT_MAX_BUFFER_AHEAD,
81
81
  maxBufferBehind: DEFAULT_MAX_BUFFER_BEHIND,
82
82
  wantedBufferAhead: DEFAULT_WANTED_BUFFER_AHEAD,
@@ -17,7 +17,6 @@
17
17
  import config from "../../config";
18
18
  import { IStallingSituation } from "../init";
19
19
 
20
- const { FORCED_ENDED_THRESHOLD } = config;
21
20
 
22
21
  export type IPlayerState = "STOPPED" |
23
22
  "LOADED" |
@@ -56,6 +55,7 @@ export default function getLoadedContentState(
56
55
  stalledStatus : IStallingSituation |
57
56
  null
58
57
  ) : IPlayerState {
58
+ const { FORCED_ENDED_THRESHOLD } = config.getCurrent();
59
59
  if (mediaElement.ended) {
60
60
  return PLAYER_STATES.ENDED;
61
61
  }
@@ -17,10 +17,13 @@
17
17
  import PlaybackObserver from "./playback_observer";
18
18
  import Player from "./public_api";
19
19
  export {
20
+ IBitrateEstimate,
21
+ IPositionUpdateItem,
20
22
  IStreamEvent,
21
23
  IStreamEventData,
22
24
  } from "./public_api";
23
25
  export { PlaybackObserver };
26
+ export { IPlayerState } from "./get_player_state";
24
27
  export {
25
28
  IPlaybackObservation,
26
29
  IPlaybackObserverEventType,
@@ -36,31 +36,13 @@ import {
36
36
  } from "../../utils/languages";
37
37
  import objectAssign from "../../utils/object_assign";
38
38
  import warnOnce from "../../utils/warn_once";
39
- import { IKeySystemOption } from "../eme";
39
+ import { IKeySystemOption } from "../decrypt";
40
40
  import {
41
41
  IAudioTrackPreference,
42
42
  ITextTrackPreference,
43
43
  IVideoTrackPreference,
44
44
  } from "./track_choice_manager";
45
45
 
46
- const { DEFAULT_AUDIO_TRACK_SWITCHING_MODE,
47
- DEFAULT_AUTO_PLAY,
48
- DEFAULT_CODEC_SWITCHING_BEHAVIOR,
49
- DEFAULT_ENABLE_FAST_SWITCHING,
50
- DEFAULT_INITIAL_BITRATES,
51
- DEFAULT_LIMIT_VIDEO_WIDTH,
52
- DEFAULT_MANUAL_BITRATE_SWITCHING_MODE,
53
- DEFAULT_MIN_BITRATES,
54
- DEFAULT_MAX_BITRATES,
55
- DEFAULT_MAX_BUFFER_AHEAD,
56
- DEFAULT_MAX_BUFFER_BEHIND,
57
- DEFAULT_SHOW_NATIVE_SUBTITLE,
58
- DEFAULT_STOP_AT_END,
59
- DEFAULT_TEXT_TRACK_MODE,
60
- DEFAULT_THROTTLE_WHEN_HIDDEN,
61
- DEFAULT_THROTTLE_VIDEO_BITRATE_WHEN_HIDDEN,
62
- DEFAULT_WANTED_BUFFER_AHEAD } = config;
63
-
64
46
  export { IKeySystemOption };
65
47
 
66
48
  /** Value of the `serverSyncInfos` transport option. */
@@ -195,6 +177,7 @@ type IParsedStartAtOption = { position : number } |
195
177
  export interface IConstructorOptions { maxBufferAhead? : number;
196
178
  maxBufferBehind? : number;
197
179
  wantedBufferAhead? : number;
180
+ maxVideoBufferSize?: number;
198
181
 
199
182
  limitVideoWidth? : boolean;
200
183
  throttleWhenHidden? : boolean;
@@ -218,7 +201,7 @@ export interface IParsedConstructorOptions {
218
201
  maxBufferAhead : number;
219
202
  maxBufferBehind : number;
220
203
  wantedBufferAhead : number;
221
-
204
+ maxVideoBufferSize : number;
222
205
  limitVideoWidth : boolean;
223
206
  throttleWhenHidden : boolean;
224
207
  throttleVideoBitrateWhenHidden : boolean;
@@ -328,6 +311,7 @@ function parseConstructorOptions(
328
311
  let maxBufferAhead : number;
329
312
  let maxBufferBehind : number;
330
313
  let wantedBufferAhead : number;
314
+ let maxVideoBufferSize : number;
331
315
 
332
316
  let throttleWhenHidden : boolean;
333
317
  let throttleVideoBitrateWhenHidden : boolean;
@@ -344,6 +328,18 @@ function parseConstructorOptions(
344
328
  let maxAudioBitrate : number;
345
329
  let maxVideoBitrate : number;
346
330
 
331
+ const { DEFAULT_INITIAL_BITRATES,
332
+ DEFAULT_LIMIT_VIDEO_WIDTH,
333
+ DEFAULT_MIN_BITRATES,
334
+ DEFAULT_MAX_BITRATES,
335
+ DEFAULT_MAX_BUFFER_AHEAD,
336
+ DEFAULT_MAX_BUFFER_BEHIND,
337
+ DEFAULT_MAX_VIDEO_BUFFER_SIZE,
338
+ DEFAULT_STOP_AT_END,
339
+ DEFAULT_THROTTLE_WHEN_HIDDEN,
340
+ DEFAULT_THROTTLE_VIDEO_BITRATE_WHEN_HIDDEN,
341
+ DEFAULT_WANTED_BUFFER_AHEAD } = config.getCurrent();
342
+
347
343
  if (isNullOrUndefined(options.maxBufferAhead)) {
348
344
  maxBufferAhead = DEFAULT_MAX_BUFFER_AHEAD;
349
345
  } else {
@@ -373,6 +369,18 @@ function parseConstructorOptions(
373
369
  }
374
370
  }
375
371
 
372
+ if (isNullOrUndefined(options.maxVideoBufferSize)) {
373
+ maxVideoBufferSize = DEFAULT_MAX_VIDEO_BUFFER_SIZE;
374
+ } else {
375
+ maxVideoBufferSize = Number(options.maxVideoBufferSize);
376
+ if (isNaN(maxVideoBufferSize)) {
377
+ /* eslint-disable max-len */
378
+ throw new Error("Invalid maxVideoBufferSize parameter. Should be a number.");
379
+ /* eslint-enable max-len */
380
+ }
381
+ }
382
+
383
+
376
384
  const limitVideoWidth = isNullOrUndefined(options.limitVideoWidth) ?
377
385
  DEFAULT_LIMIT_VIDEO_WIDTH :
378
386
  !!options.limitVideoWidth;
@@ -514,6 +522,7 @@ function parseConstructorOptions(
514
522
  limitVideoWidth,
515
523
  videoElement,
516
524
  wantedBufferAhead,
525
+ maxVideoBufferSize,
517
526
  throttleWhenHidden,
518
527
  throttleVideoBitrateWhenHidden,
519
528
  preferredAudioTracks,
@@ -576,6 +585,14 @@ function parseLoadVideoOptions(
576
585
  let textTrackElement : HTMLElement|undefined;
577
586
  let startAt : IParsedStartAtOption|undefined;
578
587
 
588
+ const { DEFAULT_AUDIO_TRACK_SWITCHING_MODE,
589
+ DEFAULT_AUTO_PLAY,
590
+ DEFAULT_CODEC_SWITCHING_BEHAVIOR,
591
+ DEFAULT_ENABLE_FAST_SWITCHING,
592
+ DEFAULT_MANUAL_BITRATE_SWITCHING_MODE,
593
+ DEFAULT_SHOW_NATIVE_SUBTITLE,
594
+ DEFAULT_TEXT_TRACK_MODE } = config.getCurrent();
595
+
579
596
  if (isNullOrUndefined(options)) {
580
597
  throw new Error("No option set on loadVideo");
581
598
  }
@@ -31,14 +31,6 @@ import log from "../../log";
31
31
  import objectAssign from "../../utils/object_assign";
32
32
  import { getRange } from "../../utils/ranges";
33
33
 
34
- const { SAMPLING_INTERVAL_MEDIASOURCE,
35
- SAMPLING_INTERVAL_LOW_LATENCY,
36
- SAMPLING_INTERVAL_NO_MEDIASOURCE,
37
- RESUME_GAP_AFTER_SEEKING,
38
- RESUME_GAP_AFTER_NOT_ENOUGH_DATA,
39
- RESUME_GAP_AFTER_BUFFERING,
40
- REBUFFERING_GAP,
41
- MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING } = config;
42
34
 
43
35
  /**
44
36
  * HTMLMediaElement Events for which playback observations are calculated and
@@ -207,7 +199,12 @@ export default class PlaybackObserver {
207
199
  * @returns {Observable}
208
200
  */
209
201
  private _createInnerObservable() : Observable<IPlaybackObservation> {
202
+
203
+
210
204
  return observableDefer(() : Observable<IPlaybackObservation> => {
205
+ const { SAMPLING_INTERVAL_MEDIASOURCE,
206
+ SAMPLING_INTERVAL_LOW_LATENCY,
207
+ SAMPLING_INTERVAL_NO_MEDIASOURCE } = config.getCurrent();
211
208
  const getCurrentObservation = (
212
209
  event : IPlaybackObserverEventType
213
210
  ) : IPlaybackObservation => {
@@ -452,6 +449,9 @@ function getRebufferingEndGap(
452
449
  }
453
450
  const suffix : "LOW_LATENCY" | "DEFAULT" = lowLatencyMode ? "LOW_LATENCY" :
454
451
  "DEFAULT";
452
+ const { RESUME_GAP_AFTER_SEEKING,
453
+ RESUME_GAP_AFTER_NOT_ENOUGH_DATA,
454
+ RESUME_GAP_AFTER_BUFFERING } = config.getCurrent();
455
455
 
456
456
  switch (rebufferingStatus.reason) {
457
457
  case "seeking":
@@ -474,6 +474,7 @@ function hasLoadedUntilTheEnd(
474
474
  duration : number,
475
475
  lowLatencyMode : boolean
476
476
  ) : boolean {
477
+ const { REBUFFERING_GAP } = config.getCurrent();
477
478
  const suffix : "LOW_LATENCY" | "DEFAULT" = lowLatencyMode ? "LOW_LATENCY" :
478
479
  "DEFAULT";
479
480
  return currentRange !== null &&
@@ -533,6 +534,8 @@ function getRebufferingStatus(
533
534
  currentInfo : IMediaInfos,
534
535
  { withMediaSource, lowLatencyMode } : IPlaybackObserverOptions
535
536
  ) : IRebufferingStatus | null {
537
+
538
+ const { REBUFFERING_GAP } = config.getCurrent();
536
539
  const { event: currentEvt,
537
540
  position: currentTime,
538
541
  bufferGap,
@@ -643,6 +646,7 @@ function getFreezingStatus(
643
646
  prevObservation : IPlaybackObservation,
644
647
  currentInfo : IMediaInfos
645
648
  ) : IFreezingStatus | null {
649
+ const { MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING } = config.getCurrent();
646
650
  if (prevObservation.freezing) {
647
651
  if (currentInfo.ended ||
648
652
  currentInfo.paused ||