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
@@ -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,
@@ -953,6 +953,17 @@ describe("API - parseLoadVideoOptions", () => {
953
953
  audioTrackSwitchingMode: "direct",
954
954
  });
955
955
 
956
+ expect(parseLoadVideoOptions({
957
+ audioTrackSwitchingMode: "reload",
958
+ url: "foo",
959
+ transport: "bar",
960
+ })).toEqual({
961
+ ...defaultLoadVideoOptions,
962
+ url: "foo",
963
+ transport: "bar",
964
+ audioTrackSwitchingMode: "reload",
965
+ });
966
+
956
967
  expect(parseLoadVideoOptions({
957
968
  audioTrackSwitchingMode: "seamless",
958
969
  url: "foo",
@@ -985,6 +996,7 @@ describe("API - parseLoadVideoOptions", () => {
985
996
  `the following strategy name:
986
997
  - \`seamless\`
987
998
  - \`direct\`
999
+ - \`reload\`
988
1000
  If badly set, seamless strategy will be used as default`);
989
1001
  logWarnMock.mockReset();
990
1002
  logWarnMock.mockReturnValue(undefined);
@@ -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,14 @@ 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
+ import { IAudioTrackSwitchingMode } from "../stream";
40
41
  import {
41
42
  IAudioTrackPreference,
42
43
  ITextTrackPreference,
43
44
  IVideoTrackPreference,
44
45
  } from "./track_choice_manager";
45
46
 
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
47
  export { IKeySystemOption };
65
48
 
66
49
  /** Value of the `serverSyncInfos` transport option. */
@@ -195,6 +178,7 @@ type IParsedStartAtOption = { position : number } |
195
178
  export interface IConstructorOptions { maxBufferAhead? : number;
196
179
  maxBufferBehind? : number;
197
180
  wantedBufferAhead? : number;
181
+ maxVideoBufferSize?: number;
198
182
 
199
183
  limitVideoWidth? : boolean;
200
184
  throttleWhenHidden? : boolean;
@@ -218,7 +202,7 @@ export interface IParsedConstructorOptions {
218
202
  maxBufferAhead : number;
219
203
  maxBufferBehind : number;
220
204
  wantedBufferAhead : number;
221
-
205
+ maxVideoBufferSize : number;
222
206
  limitVideoWidth : boolean;
223
207
  throttleWhenHidden : boolean;
224
208
  throttleVideoBitrateWhenHidden : boolean;
@@ -253,7 +237,7 @@ export interface ILoadVideoOptions {
253
237
  textTrackElement? : HTMLElement;
254
238
  manualBitrateSwitchingMode? : "seamless"|"direct";
255
239
  enableFastSwitching? : boolean;
256
- audioTrackSwitchingMode? : "seamless"|"direct";
240
+ audioTrackSwitchingMode? : IAudioTrackSwitchingMode;
257
241
  onCodecSwitch? : "continue"|"reload";
258
242
 
259
243
  /* eslint-disable import/no-deprecated */
@@ -283,7 +267,7 @@ interface IParsedLoadVideoOptionsBase {
283
267
  startAt : IParsedStartAtOption|undefined;
284
268
  manualBitrateSwitchingMode : "seamless"|"direct";
285
269
  enableFastSwitching : boolean;
286
- audioTrackSwitchingMode : "seamless"|"direct";
270
+ audioTrackSwitchingMode : IAudioTrackSwitchingMode;
287
271
  onCodecSwitch : "continue"|"reload";
288
272
  }
289
273
 
@@ -328,6 +312,7 @@ function parseConstructorOptions(
328
312
  let maxBufferAhead : number;
329
313
  let maxBufferBehind : number;
330
314
  let wantedBufferAhead : number;
315
+ let maxVideoBufferSize : number;
331
316
 
332
317
  let throttleWhenHidden : boolean;
333
318
  let throttleVideoBitrateWhenHidden : boolean;
@@ -344,6 +329,18 @@ function parseConstructorOptions(
344
329
  let maxAudioBitrate : number;
345
330
  let maxVideoBitrate : number;
346
331
 
332
+ const { DEFAULT_INITIAL_BITRATES,
333
+ DEFAULT_LIMIT_VIDEO_WIDTH,
334
+ DEFAULT_MIN_BITRATES,
335
+ DEFAULT_MAX_BITRATES,
336
+ DEFAULT_MAX_BUFFER_AHEAD,
337
+ DEFAULT_MAX_BUFFER_BEHIND,
338
+ DEFAULT_MAX_VIDEO_BUFFER_SIZE,
339
+ DEFAULT_STOP_AT_END,
340
+ DEFAULT_THROTTLE_WHEN_HIDDEN,
341
+ DEFAULT_THROTTLE_VIDEO_BITRATE_WHEN_HIDDEN,
342
+ DEFAULT_WANTED_BUFFER_AHEAD } = config.getCurrent();
343
+
347
344
  if (isNullOrUndefined(options.maxBufferAhead)) {
348
345
  maxBufferAhead = DEFAULT_MAX_BUFFER_AHEAD;
349
346
  } else {
@@ -373,6 +370,18 @@ function parseConstructorOptions(
373
370
  }
374
371
  }
375
372
 
373
+ if (isNullOrUndefined(options.maxVideoBufferSize)) {
374
+ maxVideoBufferSize = DEFAULT_MAX_VIDEO_BUFFER_SIZE;
375
+ } else {
376
+ maxVideoBufferSize = Number(options.maxVideoBufferSize);
377
+ if (isNaN(maxVideoBufferSize)) {
378
+ /* eslint-disable max-len */
379
+ throw new Error("Invalid maxVideoBufferSize parameter. Should be a number.");
380
+ /* eslint-enable max-len */
381
+ }
382
+ }
383
+
384
+
376
385
  const limitVideoWidth = isNullOrUndefined(options.limitVideoWidth) ?
377
386
  DEFAULT_LIMIT_VIDEO_WIDTH :
378
387
  !!options.limitVideoWidth;
@@ -514,6 +523,7 @@ function parseConstructorOptions(
514
523
  limitVideoWidth,
515
524
  videoElement,
516
525
  wantedBufferAhead,
526
+ maxVideoBufferSize,
517
527
  throttleWhenHidden,
518
528
  throttleVideoBitrateWhenHidden,
519
529
  preferredAudioTracks,
@@ -576,6 +586,14 @@ function parseLoadVideoOptions(
576
586
  let textTrackElement : HTMLElement|undefined;
577
587
  let startAt : IParsedStartAtOption|undefined;
578
588
 
589
+ const { DEFAULT_AUDIO_TRACK_SWITCHING_MODE,
590
+ DEFAULT_AUTO_PLAY,
591
+ DEFAULT_CODEC_SWITCHING_BEHAVIOR,
592
+ DEFAULT_ENABLE_FAST_SWITCHING,
593
+ DEFAULT_MANUAL_BITRATE_SWITCHING_MODE,
594
+ DEFAULT_SHOW_NATIVE_SUBTITLE,
595
+ DEFAULT_TEXT_TRACK_MODE } = config.getCurrent();
596
+
579
597
  if (isNullOrUndefined(options)) {
580
598
  throw new Error("No option set on loadVideo");
581
599
  }
@@ -632,11 +650,12 @@ function parseLoadVideoOptions(
632
650
  let audioTrackSwitchingMode = isNullOrUndefined(options.audioTrackSwitchingMode)
633
651
  ? DEFAULT_AUDIO_TRACK_SWITCHING_MODE
634
652
  : options.audioTrackSwitchingMode;
635
- if (!arrayIncludes(["seamless", "direct"], audioTrackSwitchingMode)) {
653
+ if (!arrayIncludes(["seamless", "direct", "reload"], audioTrackSwitchingMode)) {
636
654
  log.warn("The `audioTrackSwitchingMode` loadVideo option must match one of " +
637
655
  "the following strategy name:\n" +
638
656
  "- `seamless`\n" +
639
657
  "- `direct`\n" +
658
+ "- `reload`\n" +
640
659
  "If badly set, " + DEFAULT_AUDIO_TRACK_SWITCHING_MODE +
641
660
  " strategy will be used as default");
642
661
  audioTrackSwitchingMode = DEFAULT_AUDIO_TRACK_SWITCHING_MODE;
@@ -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 ||