rx-player 3.26.2 → 3.27.0-dev.20220317

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (500) hide show
  1. package/.github/workflows/perfs.yml +22 -0
  2. package/CHANGELOG.md +33 -1
  3. package/FILES.md +5 -4
  4. package/VERSION +1 -1
  5. package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
  6. package/dist/_esm5.processed/compat/browser_detection.js +4 -2
  7. package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
  8. package/dist/_esm5.processed/compat/eme/close_session.js +144 -36
  9. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
  10. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +27 -24
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +53 -34
  12. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +43 -41
  13. package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
  14. package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
  15. package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
  16. package/dist/_esm5.processed/compat/eme/load_session.js +68 -17
  17. package/dist/_esm5.processed/compat/event_listeners.js +2 -1
  18. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
  19. package/dist/_esm5.processed/config.d.ts +166 -1080
  20. package/dist/_esm5.processed/config.js +17 -1119
  21. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
  22. package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
  23. package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
  24. package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +1 -1
  25. package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
  26. package/dist/_esm5.processed/core/abr/pending_requests_store.js +3 -5
  27. package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +1 -1
  28. package/dist/_esm5.processed/core/abr/representation_estimator.js +2 -2
  29. package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
  30. package/dist/_esm5.processed/core/api/index.d.ts +2 -1
  31. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +6 -0
  32. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +22 -4
  33. package/dist/_esm5.processed/core/api/option_utils.d.ts +3 -1
  34. package/dist/_esm5.processed/core/api/option_utils.js +19 -6
  35. package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
  36. package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
  37. package/dist/_esm5.processed/core/api/public_api.js +72 -33
  38. package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +6 -6
  39. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -51
  40. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +30 -75
  41. package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
  42. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +104 -0
  43. package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
  44. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +41 -0
  45. package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
  46. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +866 -0
  47. package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
  48. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
  49. package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
  50. package/dist/_esm5.processed/core/decrypt/create_session.js +174 -0
  51. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.d.ts +21 -0
  52. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
  53. package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
  54. package/dist/_esm5.processed/core/decrypt/find_key_system.js +300 -0
  55. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
  56. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
  57. package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
  58. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
  59. package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
  60. package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
  61. package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
  62. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
  63. package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
  64. package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
  65. package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
  66. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
  67. package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +120 -242
  68. package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
  69. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
  70. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
  71. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
  72. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
  73. package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
  74. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +85 -0
  75. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
  76. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
  77. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
  78. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
  79. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
  80. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
  81. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
  82. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
  83. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
  84. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
  85. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
  86. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
  87. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
  88. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +303 -0
  89. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
  90. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
  91. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
  92. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
  93. package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
  94. package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
  95. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
  96. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
  97. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +4 -4
  98. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -3
  99. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +2 -2
  100. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +6 -2
  101. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  102. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +1 -1
  103. package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
  104. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +3 -3
  105. package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
  106. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +5 -3
  107. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
  108. package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
  109. package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
  110. package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
  111. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
  112. package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
  113. package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
  114. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
  115. package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +2 -2
  116. package/dist/_esm5.processed/core/init/types.d.ts +2 -4
  117. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
  118. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +3 -3
  119. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
  120. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +32 -31
  121. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +4 -4
  122. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
  123. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
  124. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
  125. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
  126. package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
  127. package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
  128. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
  129. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
  130. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
  131. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +1 -1
  132. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +2 -1
  133. package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
  134. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +5 -6
  135. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
  136. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
  137. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
  138. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
  139. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
  140. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
  141. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
  142. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
  143. package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
  144. package/dist/_esm5.processed/default_config.d.ts +1114 -0
  145. package/dist/_esm5.processed/default_config.js +1145 -0
  146. package/dist/_esm5.processed/errors/request_error.js +3 -1
  147. package/dist/_esm5.processed/experimental/index.d.ts +2 -0
  148. package/dist/_esm5.processed/experimental/index.js +2 -0
  149. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
  150. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
  151. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +2 -4
  152. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
  153. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
  154. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +1 -2
  155. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +1 -2
  156. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
  157. package/dist/_esm5.processed/features/features_object.js +1 -1
  158. package/dist/_esm5.processed/features/initialize_features.js +1 -1
  159. package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
  160. package/dist/_esm5.processed/features/list/eme.js +5 -5
  161. package/dist/_esm5.processed/features/types.d.ts +3 -3
  162. package/dist/_esm5.processed/manifest/adaptation.d.ts +2 -2
  163. package/dist/_esm5.processed/manifest/adaptation.js +3 -1
  164. package/dist/_esm5.processed/manifest/manifest.d.ts +10 -23
  165. package/dist/_esm5.processed/manifest/manifest.js +10 -74
  166. package/dist/_esm5.processed/manifest/period.d.ts +3 -3
  167. package/dist/_esm5.processed/manifest/representation.d.ts +37 -5
  168. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +18 -18
  169. package/dist/_esm5.processed/manifest/types.d.ts +3 -3
  170. package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
  171. package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
  172. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +6 -6
  173. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
  174. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -2
  175. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
  176. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +14 -14
  177. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +17 -17
  178. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
  179. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
  180. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +28 -20
  181. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +20 -5
  182. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  183. package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
  184. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -35
  185. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +109 -96
  186. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +8 -8
  187. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
  188. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +18 -27
  189. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +25 -23
  190. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +21 -15
  191. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +19 -19
  192. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -38
  193. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +8 -8
  194. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +30 -30
  195. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +3 -3
  196. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -1
  197. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
  198. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
  199. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
  200. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
  201. package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
  202. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
  203. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +15 -5
  204. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +2 -2
  205. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.d.ts +11 -1
  206. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +31 -19
  207. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
  208. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
  209. package/dist/_esm5.processed/public_types.d.ts +2 -2
  210. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +2 -1
  211. package/dist/_esm5.processed/transports/dash/image_pipelines.js +4 -1
  212. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
  213. package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
  214. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
  215. package/dist/_esm5.processed/transports/dash/segment_loader.js +2 -2
  216. package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +1 -1
  217. package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
  218. package/dist/_esm5.processed/transports/dash/text_loader.d.ts +1 -1
  219. package/dist/_esm5.processed/transports/dash/text_loader.js +1 -1
  220. package/dist/_esm5.processed/transports/dash/text_parser.d.ts +1 -1
  221. package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
  222. package/dist/_esm5.processed/transports/local/segment_loader.d.ts +1 -2
  223. package/dist/_esm5.processed/transports/local/segment_loader.js +1 -1
  224. package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
  225. package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
  226. package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +1 -1
  227. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
  228. package/dist/_esm5.processed/transports/smooth/pipelines.js +69 -11
  229. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +0 -1
  230. package/dist/_esm5.processed/transports/smooth/segment_loader.js +2 -2
  231. package/dist/_esm5.processed/transports/types.d.ts +58 -30
  232. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
  233. package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +1 -1
  234. package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -1
  235. package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
  236. package/dist/_esm5.processed/utils/cast_to_observable.js +1 -1
  237. package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
  238. package/dist/_esm5.processed/utils/deep_merge.js +53 -0
  239. package/dist/_esm5.processed/utils/reference.d.ts +29 -0
  240. package/dist/_esm5.processed/utils/reference.js +72 -24
  241. package/dist/_esm5.processed/utils/request/fetch.d.ts +4 -5
  242. package/dist/_esm5.processed/utils/request/fetch.js +8 -6
  243. package/dist/_esm5.processed/utils/request/xhr.d.ts +6 -6
  244. package/dist/_esm5.processed/utils/request/xhr.js +3 -2
  245. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +1 -2
  246. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
  247. package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
  248. package/dist/_esm5.processed/utils/task_canceller.js +3 -3
  249. package/dist/rx-player.js +5242 -3190
  250. package/dist/rx-player.min.js +1 -1
  251. package/dummy +1 -0
  252. package/{dist/_esm5.processed/core/eme/dispose_eme.d.ts → experimental/index.d.ts} +1 -4
  253. package/{dist/_esm5.processed/core/eme/dispose_media_keys.d.ts → experimental/index.js} +1 -6
  254. package/package.json +33 -36
  255. package/scripts/build/templates/experimental/index.d.ts +16 -0
  256. package/scripts/build/templates/experimental/index.js +16 -0
  257. package/scripts/doc-generator/generate_header_html.js +6 -7
  258. package/scripts/doc-generator/generate_page_html.js +3 -4
  259. package/scripts/doc-generator/generate_page_list_html.js +4 -5
  260. package/scripts/doc-generator/generate_sidebar_html.js +4 -7
  261. package/scripts/doc-generator/utils.js +0 -11
  262. package/scripts/generate_demo_list.js +3 -3
  263. package/scripts/generate_documentation_list.js +3 -3
  264. package/scripts/launch_static_server.js +127 -67
  265. package/scripts/run_standalone_demo.js +1 -0
  266. package/scripts/start_demo_web_server.js +1 -0
  267. package/sonar-project.properties +1 -1
  268. package/src/README.md +6 -6
  269. package/src/compat/__tests__/fullscreen.test.ts +7 -7
  270. package/src/compat/__tests__/is_vtt_cue.test.ts +1 -1
  271. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
  272. package/src/compat/browser_detection.ts +4 -2
  273. package/src/compat/eme/close_session.ts +90 -56
  274. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
  275. package/src/compat/eme/custom_media_keys/index.ts +28 -41
  276. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +63 -46
  277. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +51 -49
  278. package/src/compat/eme/generate_key_request.ts +25 -33
  279. package/src/compat/eme/load_session.ts +29 -31
  280. package/src/compat/event_listeners.ts +2 -1
  281. package/src/compat/should_favour_custom_safari_EME.ts +5 -2
  282. package/src/config.ts +17 -1210
  283. package/src/core/README.md +1 -1
  284. package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
  285. package/src/core/abr/bandwidth_estimator.ts +4 -4
  286. package/src/core/abr/buffer_based_chooser.ts +85 -20
  287. package/src/core/abr/network_analyzer.ts +6 -7
  288. package/src/core/abr/pending_requests_store.ts +3 -5
  289. package/src/core/abr/representation_estimator.ts +6 -3
  290. package/src/core/api/__tests__/get_player_state.test.ts +3 -3
  291. package/src/core/api/__tests__/option_utils.test.ts +17 -17
  292. package/src/core/api/get_player_state.ts +1 -1
  293. package/src/core/api/index.ts +3 -0
  294. package/src/core/api/media_element_track_choice_manager.ts +22 -3
  295. package/src/core/api/option_utils.ts +37 -20
  296. package/src/core/api/playback_observer.ts +12 -8
  297. package/src/core/api/public_api.ts +152 -112
  298. package/src/core/api/track_choice_manager.ts +10 -9
  299. package/src/core/decrypt/README.md +22 -0
  300. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
  301. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
  302. package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
  303. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
  304. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
  305. package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +36 -103
  306. package/src/core/{eme → decrypt}/attach_media_keys.ts +49 -56
  307. package/src/core/decrypt/clear_on_stop.ts +48 -0
  308. package/src/core/decrypt/content_decryptor.ts +1158 -0
  309. package/src/core/decrypt/create_or_load_session.ts +130 -0
  310. package/src/core/decrypt/create_session.ts +175 -0
  311. package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
  312. package/src/core/{eme → decrypt}/find_key_system.ts +126 -134
  313. package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
  314. package/src/core/decrypt/get_media_keys.ts +145 -0
  315. package/src/core/{eme → decrypt}/index.ts +11 -8
  316. package/src/core/decrypt/init_media_keys.ts +51 -0
  317. package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
  318. package/src/core/decrypt/set_server_certificate.ts +104 -0
  319. package/src/core/{eme → decrypt}/types.ts +129 -259
  320. package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
  321. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
  322. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
  323. package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
  324. package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
  325. package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +20 -20
  326. package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
  327. package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
  328. package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
  329. package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
  330. package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
  331. package/src/core/decrypt/utils/key_session_record.ts +175 -0
  332. package/src/core/decrypt/utils/loaded_sessions_store.ts +318 -0
  333. package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
  334. package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
  335. package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
  336. package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
  337. package/src/core/fetchers/manifest/manifest_fetcher.ts +9 -9
  338. package/src/core/fetchers/segment/segment_fetcher.ts +10 -7
  339. package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
  340. package/src/core/fetchers/utils/try_urls_with_backoff.ts +1 -1
  341. package/src/core/init/.initialize_media_source.ts.un~ +0 -0
  342. package/src/core/init/get_initial_time.ts +2 -1
  343. package/src/core/init/initialize_directfile.ts +19 -22
  344. package/src/core/init/initialize_media_source.ts +43 -106
  345. package/src/core/init/link_drm_and_content.ts +176 -0
  346. package/src/core/init/manifest_update_scheduler.ts +12 -10
  347. package/src/core/init/stall_avoider.ts +6 -5
  348. package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
  349. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
  350. package/src/core/init/stream_events_emitter/types.ts +2 -2
  351. package/src/core/init/types.ts +1 -39
  352. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
  353. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +6 -7
  354. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +32 -31
  355. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
  356. package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
  357. package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
  358. package/src/core/stream/events_generators.ts +9 -4
  359. package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
  360. package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
  361. package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
  362. package/src/core/stream/period/period_stream.ts +5 -2
  363. package/src/core/stream/representation/force_garbage_collection.ts +5 -7
  364. package/src/core/stream/representation/get_buffer_status.ts +28 -16
  365. package/src/core/stream/representation/get_needed_segments.ts +124 -28
  366. package/src/core/stream/representation/get_segment_priority.ts +1 -2
  367. package/src/core/stream/representation/push_media_segment.ts +3 -2
  368. package/src/core/stream/representation/representation_stream.ts +30 -7
  369. package/src/core/stream/types.ts +1 -1
  370. package/src/default_config.ts +1241 -0
  371. package/src/errors/request_error.ts +4 -1
  372. package/src/experimental/index.ts +5 -0
  373. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
  374. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +5 -7
  375. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
  376. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +4 -4
  377. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +1 -1
  378. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
  379. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +1 -2
  380. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +1 -2
  381. package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
  382. package/src/features/__tests__/initialize_features.test.ts +2 -2
  383. package/src/features/features_object.ts +1 -1
  384. package/src/features/initialize_features.ts +1 -1
  385. package/src/features/list/__tests__/eme.test.ts +5 -5
  386. package/src/features/list/eme.ts +5 -5
  387. package/src/features/types.ts +3 -10
  388. package/src/manifest/adaptation.ts +6 -4
  389. package/src/manifest/manifest.ts +16 -86
  390. package/src/manifest/period.ts +3 -3
  391. package/src/manifest/representation.ts +38 -5
  392. package/src/manifest/representation_index/types.ts +18 -18
  393. package/src/manifest/types.ts +3 -3
  394. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
  395. package/src/parsers/manifest/dash/common/get_hdr_information.ts +1 -1
  396. package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
  397. package/src/parsers/manifest/dash/common/indexes/base.ts +6 -6
  398. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +4 -2
  399. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +2 -2
  400. package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
  401. package/src/parsers/manifest/dash/common/indexes/list.ts +14 -14
  402. package/src/parsers/manifest/dash/common/indexes/template.ts +18 -18
  403. package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
  404. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +51 -23
  405. package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
  406. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
  407. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +167 -134
  408. package/src/parsers/manifest/dash/common/parse_mpd.ts +9 -10
  409. package/src/parsers/manifest/dash/common/parse_periods.ts +80 -79
  410. package/src/parsers/manifest/dash/common/parse_representation_index.ts +83 -75
  411. package/src/parsers/manifest/dash/common/parse_representations.ts +44 -63
  412. package/src/parsers/manifest/dash/node_parser_types.ts +30 -30
  413. package/src/parsers/manifest/dash/parsers_types.ts +3 -3
  414. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -1
  415. package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +4 -4
  416. package/src/parsers/manifest/smooth/create_parser.ts +24 -21
  417. package/src/parsers/manifest/smooth/representation_index.ts +14 -14
  418. package/src/parsers/manifest/types.ts +28 -28
  419. package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +31 -33
  420. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +15 -6
  421. package/src/parsers/manifest/utils/index_helpers.ts +2 -2
  422. package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
  423. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
  424. package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
  425. package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
  426. package/src/public_types.ts +5 -1
  427. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +2 -2
  428. package/src/transports/dash/image_pipelines.ts +4 -1
  429. package/src/transports/dash/init_segment_loader.ts +1 -1
  430. package/src/transports/dash/manifest_parser.ts +1 -1
  431. package/src/transports/dash/segment_loader.ts +7 -7
  432. package/src/transports/dash/segment_parser.ts +8 -1
  433. package/src/transports/dash/text_loader.ts +2 -2
  434. package/src/transports/dash/text_parser.ts +11 -1
  435. package/src/transports/local/segment_loader.ts +4 -4
  436. package/src/transports/local/segment_parser.ts +4 -0
  437. package/src/transports/local/text_parser.ts +8 -0
  438. package/src/transports/metaplaylist/manifest_loader.ts +1 -1
  439. package/src/transports/metaplaylist/pipelines.ts +1 -1
  440. package/src/transports/smooth/pipelines.ts +29 -16
  441. package/src/transports/smooth/segment_loader.ts +8 -8
  442. package/src/transports/types.ts +59 -30
  443. package/src/transports/utils/call_custom_manifest_loader.ts +6 -6
  444. package/src/transports/utils/generate_manifest_loader.ts +1 -1
  445. package/src/utils/__tests__/deep_merge.test.ts +48 -0
  446. package/src/utils/__tests__/flat_map.test.ts +12 -7
  447. package/src/utils/cancellable_sleep.ts +1 -1
  448. package/src/utils/cast_to_observable.ts +1 -2
  449. package/src/utils/deep_merge.ts +46 -0
  450. package/src/utils/reference.ts +116 -23
  451. package/src/utils/request/fetch.ts +17 -15
  452. package/src/utils/request/xhr.ts +11 -8
  453. package/src/utils/rx-from_cancellable_promise.ts +8 -4
  454. package/src/utils/task_canceller.ts +6 -4
  455. package/tsconfig.json +1 -2
  456. package/tsconfig.modules.json +1 -2
  457. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
  458. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
  459. package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
  460. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
  461. package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
  462. package/dist/_esm5.processed/core/eme/create_session.js +0 -126
  463. package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
  464. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
  465. package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
  466. package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
  467. package/dist/_esm5.processed/core/eme/find_key_system.js +0 -243
  468. package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
  469. package/dist/_esm5.processed/core/eme/get_session.js +0 -68
  470. package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
  471. package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
  472. package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
  473. package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
  474. package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
  475. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
  476. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
  477. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
  478. package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
  479. package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
  480. package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
  481. package/src/core/eme/README.md +0 -26
  482. package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
  483. package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
  484. package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
  485. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
  486. package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
  487. package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
  488. package/src/core/eme/clear_eme_session.ts +0 -62
  489. package/src/core/eme/create_session.ts +0 -187
  490. package/src/core/eme/dispose_eme.ts +0 -25
  491. package/src/core/eme/dispose_media_keys.ts +0 -46
  492. package/src/core/eme/eme_manager.ts +0 -387
  493. package/src/core/eme/get_media_keys.ts +0 -141
  494. package/src/core/eme/get_session.ts +0 -135
  495. package/src/core/eme/init_media_keys.ts +0 -106
  496. package/src/core/eme/set_server_certificate.ts +0 -115
  497. package/src/core/eme/utils/close_session.ts +0 -113
  498. package/src/core/eme/utils/init_data_store.ts +0 -234
  499. package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
  500. package/src/core/init/create_eme_manager.ts +0 -95
@@ -37,7 +37,6 @@ import resolveBaseURLs, {
37
37
  IResolvedBaseUrl,
38
38
  } from "./resolve_base_urls";
39
39
 
40
- const { DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0 } = config;
41
40
 
42
41
  /** Possible options for `parseMPD`. */
43
42
  export interface IMPDParserArguments {
@@ -47,11 +46,11 @@ export interface IMPDParserArguments {
47
46
  * If set, offset to add to `performance.now()` to obtain the current server's
48
47
  * time.
49
48
  */
50
- externalClockOffset? : number;
49
+ externalClockOffset? : number | undefined;
51
50
  /** Time, in terms of `performance.now` at which this MPD was received. */
52
- manifestReceivedTime? : number;
51
+ manifestReceivedTime? : number | undefined;
53
52
  /** Default base time, in seconds. */
54
- referenceDateTime? : number;
53
+ referenceDateTime? : number | undefined;
55
54
  /**
56
55
  * The parser should take this Manifest - which is a previously parsed
57
56
  * Manifest for the same dynamic content - as a base to speed-up the parsing
@@ -62,13 +61,13 @@ export interface IMPDParserArguments {
62
61
  */
63
62
  unsafelyBaseOnPreviousManifest : Manifest | null;
64
63
  /** URL of the manifest (post-redirection if one). */
65
- url? : string;
64
+ url? : string | undefined;
66
65
  }
67
66
 
68
67
  export interface ILoadedXlinkData {
69
- url? : string;
70
- sendingTime? : number;
71
- receivedTime? : number;
68
+ url? : string | undefined;
69
+ sendingTime? : number | undefined;
70
+ receivedTime? : number | undefined;
72
71
  parsed : IPeriodIntermediateRepresentation[];
73
72
  warnings : Error[];
74
73
  }
@@ -127,7 +126,7 @@ export default function parseMpdIr(
127
126
  mpdIR : IMPDIntermediateRepresentation,
128
127
  args : IMPDParserArguments,
129
128
  warnings : Error[],
130
- hasLoadedClock? : boolean,
129
+ hasLoadedClock? : boolean | undefined,
131
130
  xlinkInfos : IXLinkInfos = new WeakMap()
132
131
  ) : IIrParserResponse {
133
132
  const { children: rootChildren,
@@ -277,7 +276,7 @@ function parseCompleteIntermediateRepresentation(
277
276
  rootAttributes.minimumUpdatePeriod >= 0)
278
277
  {
279
278
  lifetime = rootAttributes.minimumUpdatePeriod === 0 ?
280
- DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0 :
279
+ config.getCurrent().DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0 :
281
280
  rootAttributes.minimumUpdatePeriod;
282
281
  }
283
282
 
@@ -34,91 +34,55 @@ import {
34
34
  import flattenOverlappingPeriods from "./flatten_overlapping_periods";
35
35
  import getPeriodsTimeInformation from "./get_periods_time_infos";
36
36
  import ManifestBoundsCalculator from "./manifest_bounds_calculator";
37
- import parseAdaptationSets from "./parse_adaptation_sets";
38
- import resolveBaseURLs, {
39
- IResolvedBaseUrl,
40
- } from "./resolve_base_urls";
37
+ import parseAdaptationSets, {
38
+ IAdaptationSetContext,
39
+ } from "./parse_adaptation_sets";
40
+ import resolveBaseURLs from "./resolve_base_urls";
41
41
 
42
42
  const generatePeriodID = idGenerator();
43
43
 
44
44
  /** Information about each linked Xlink. */
45
45
  export type IXLinkInfos = WeakMap<IPeriodIntermediateRepresentation, {
46
46
  /** Real URL (post-redirection) used to download this xlink. */
47
- url? : string;
47
+ url? : string | undefined;
48
48
  /** Time at which the request was sent (since the time origin), in ms. */
49
- sendingTime? : number;
49
+ sendingTime? : number | undefined;
50
50
  /** Time at which the request was received (since the time origin), in ms. */
51
- receivedTime? : number;
51
+ receivedTime? : number | undefined;
52
52
  }>;
53
53
 
54
- /** Context needed when calling `parsePeriods`. */
55
- export interface IPeriodsContextInfos {
56
- /** Whether we should request new segments even if they are not yet finished. */
57
- aggressiveMode : boolean;
58
- availabilityStartTime : number;
59
- baseURLs : IResolvedBaseUrl[];
60
- clockOffset? : number;
61
- duration? : number;
62
- isDynamic : boolean;
63
- manifestProfiles?: string;
64
- /**
65
- * Time (in terms of `performance.now`) at which the XML file containing this
66
- * Period was received.
67
- */
68
- receivedTime? : number;
69
- /** Depth of the buffer for the whole content, in seconds. */
70
- timeShiftBufferDepth? : number;
71
- /**
72
- * The parser should take this Manifest - which is a previously parsed
73
- * Manifest for the same dynamic content - as a base to speed-up the parsing
74
- * process.
75
- * /!\ If unexpected differences exist between the two, there is a risk of
76
- * de-synchronization with what is actually on the server,
77
- * Use with moderation.
78
- */
79
- unsafelyBaseOnPreviousManifest : Manifest | null;
80
- xlinkInfos : IXLinkInfos;
81
-
82
- /**
83
- * XML namespaces linked to the `<MPD>` element.
84
- * May be needed to convert EventStream's Event elements back into the
85
- * Document form.
86
- */
87
- xmlNamespaces? : Array<{ key : string;
88
- value : string; }>;
89
- }
90
-
91
54
  /**
92
55
  * Process intermediate periods to create final parsed periods.
93
56
  * @param {Array.<Object>} periodsIR
94
- * @param {Object} contextInfos
57
+ * @param {Object} context
95
58
  * @returns {Array.<Object>}
96
59
  */
97
60
  export default function parsePeriods(
98
61
  periodsIR : IPeriodIntermediateRepresentation[],
99
- contextInfos : IPeriodsContextInfos
62
+ context : IPeriodContext
100
63
  ): IParsedPeriod[] {
101
64
  const parsedPeriods : IParsedPeriod[] = [];
102
- const periodsTimeInformation = getPeriodsTimeInformation(periodsIR, contextInfos);
65
+ const periodsTimeInformation = getPeriodsTimeInformation(periodsIR, context);
103
66
  if (periodsTimeInformation.length !== periodsIR.length) {
104
67
  throw new Error("MPD parsing error: the time information are incoherent.");
105
68
  }
106
69
 
107
70
  const { isDynamic,
108
- timeShiftBufferDepth } = contextInfos;
71
+ timeShiftBufferDepth } = context;
109
72
  const manifestBoundsCalculator = new ManifestBoundsCalculator({ isDynamic,
110
73
  timeShiftBufferDepth });
111
74
 
112
- if (!isDynamic && contextInfos.duration != null) {
113
- manifestBoundsCalculator.setLastPosition(contextInfos.duration);
75
+ if (!isDynamic && context.duration != null) {
76
+ manifestBoundsCalculator.setLastPosition(context.duration);
114
77
  }
115
78
 
116
79
  // We parse it in reverse because we might need to deduce the buffer depth from
117
80
  // the last Periods' indexes
118
81
  for (let i = periodsIR.length - 1; i >= 0; i--) {
82
+ const isLastPeriod = i === periodsIR.length - 1;
119
83
  const periodIR = periodsIR[i];
120
- const xlinkInfos = contextInfos.xlinkInfos.get(periodIR);
121
- const periodBaseURLs = resolveBaseURLs(contextInfos.baseURLs,
84
+ const xlinkInfos = context.xlinkInfos.get(periodIR);
85
+ const periodBaseURLs = resolveBaseURLs(context.baseURLs,
122
86
  periodIR.children.baseURLs);
123
87
 
124
88
  const { periodStart,
@@ -139,30 +103,32 @@ export default function parsePeriods(
139
103
  }
140
104
 
141
105
  const receivedTime = xlinkInfos !== undefined ? xlinkInfos.receivedTime :
142
- contextInfos.receivedTime;
106
+ context.receivedTime;
143
107
 
144
- const unsafelyBaseOnPreviousPeriod = contextInfos
108
+ const unsafelyBaseOnPreviousPeriod = context
145
109
  .unsafelyBaseOnPreviousManifest?.getPeriod(periodID) ?? null;
146
110
 
147
111
  const availabilityTimeComplete = periodIR.attributes.availabilityTimeComplete ?? true;
148
112
  const availabilityTimeOffset = periodIR.attributes.availabilityTimeOffset ?? 0;
149
- const periodInfos = { aggressiveMode: contextInfos.aggressiveMode,
150
- availabilityTimeComplete,
151
- availabilityTimeOffset,
152
- baseURLs: periodBaseURLs,
153
- manifestBoundsCalculator,
154
- end: periodEnd,
155
- isDynamic,
156
- manifestProfiles: contextInfos.manifestProfiles,
157
- receivedTime,
158
- segmentTemplate: periodIR.children.segmentTemplate,
159
- start: periodStart,
160
- timeShiftBufferDepth,
161
- unsafelyBaseOnPreviousPeriod };
162
- const adaptations = parseAdaptationSets(periodIR.children.adaptations,
163
- periodInfos);
113
+ const { aggressiveMode, manifestProfiles } = context;
114
+ const { segmentTemplate } = periodIR.children;
115
+ const adapCtxt : IAdaptationSetContext = { aggressiveMode,
116
+ availabilityTimeComplete,
117
+ availabilityTimeOffset,
118
+ baseURLs: periodBaseURLs,
119
+ manifestBoundsCalculator,
120
+ end: periodEnd,
121
+ isDynamic,
122
+ isLastPeriod,
123
+ manifestProfiles,
124
+ receivedTime,
125
+ segmentTemplate,
126
+ start: periodStart,
127
+ timeShiftBufferDepth,
128
+ unsafelyBaseOnPreviousPeriod };
129
+ const adaptations = parseAdaptationSets(periodIR.children.adaptations, adapCtxt);
164
130
 
165
- const namespaces = (contextInfos.xmlNamespaces ?? [])
131
+ const namespaces = (context.xmlNamespaces ?? [])
166
132
  .concat(periodIR.attributes.namespaces ?? []);
167
133
  const streamEvents = generateStreamEvents(periodIR.children.eventStreams,
168
134
  periodStart,
@@ -187,7 +153,7 @@ export default function parsePeriods(
187
153
  manifestBoundsCalculator.setLastPosition(lastPosition, positionTime);
188
154
  } else {
189
155
  const guessedLastPositionFromClock =
190
- guessLastPositionFromClock(contextInfos, periodStart);
156
+ guessLastPositionFromClock(context, periodStart);
191
157
  if (guessedLastPositionFromClock !== undefined) {
192
158
  const [guessedLastPosition, guessedPositionTime] =
193
159
  guessedLastPositionFromClock;
@@ -199,9 +165,9 @@ export default function parsePeriods(
199
165
  }
200
166
  }
201
167
 
202
- if (contextInfos.isDynamic && !manifestBoundsCalculator.lastPositionIsKnown()) {
168
+ if (context.isDynamic && !manifestBoundsCalculator.lastPositionIsKnown()) {
203
169
  // Guess a last time the last position
204
- const guessedLastPositionFromClock = guessLastPositionFromClock(contextInfos, 0);
170
+ const guessedLastPositionFromClock = guessLastPositionFromClock(context, 0);
205
171
  if (guessedLastPositionFromClock !== undefined) {
206
172
  const [lastPosition, positionTime] = guessedLastPositionFromClock;
207
173
  manifestBoundsCalculator.setLastPosition(lastPosition, positionTime);
@@ -233,17 +199,17 @@ export default function parsePeriods(
233
199
  * the live time more directly from that previous one, we might be better off
234
200
  * than just using the clock.
235
201
  *
236
- * @param {Object} contextInfos
202
+ * @param {Object} context
237
203
  * @param {number} minimumTime
238
204
  * @returns {Array.<number|undefined>}
239
205
  */
240
206
  function guessLastPositionFromClock(
241
- contextInfos : IPeriodsContextInfos,
207
+ context : IPeriodContext,
242
208
  minimumTime : number
243
209
  ) : [number, number] | undefined {
244
- if (contextInfos.clockOffset != null) {
245
- const lastPosition = contextInfos.clockOffset / 1000 -
246
- contextInfos.availabilityStartTime;
210
+ if (context.clockOffset != null) {
211
+ const lastPosition = context.clockOffset / 1000 -
212
+ context.availabilityStartTime;
247
213
  const positionTime = performance.now() / 1000;
248
214
  const timeInSec = positionTime + lastPosition;
249
215
  if (timeInSec >= minimumTime) {
@@ -254,7 +220,7 @@ function guessLastPositionFromClock(
254
220
  if (now >= minimumTime) {
255
221
  log.warn("DASH Parser: no clock synchronization mechanism found." +
256
222
  " Using the system clock instead.");
257
- const lastPosition = now - contextInfos.availabilityStartTime;
223
+ const lastPosition = now - context.availabilityStartTime;
258
224
  const positionTime = performance.now() / 1000;
259
225
  return [lastPosition, positionTime];
260
226
  }
@@ -366,3 +332,38 @@ function generateStreamEvents(
366
332
  }
367
333
  return res;
368
334
  }
335
+
336
+ /** Context needed when calling `parsePeriods`. */
337
+ export interface IPeriodContext extends IInheritedAdaptationContext {
338
+ availabilityStartTime : number;
339
+ clockOffset? : number | undefined;
340
+ /** Duration (mediaPresentationDuration) of the whole MPD, in seconds. */
341
+ duration? : number | undefined;
342
+ /**
343
+ * The parser should take this Manifest - which is a previously parsed
344
+ * Manifest for the same dynamic content - as a base to speed-up the parsing
345
+ * process.
346
+ * /!\ If unexpected differences exist between the two, there is a risk of
347
+ * de-synchronization with what is actually on the server,
348
+ * Use with moderation.
349
+ */
350
+ unsafelyBaseOnPreviousManifest : Manifest | null;
351
+ xlinkInfos : IXLinkInfos;
352
+
353
+ /**
354
+ * XML namespaces linked to the `<MPD>` element.
355
+ * May be needed to convert EventStream's Event elements back into the
356
+ * Document form.
357
+ */
358
+ xmlNamespaces? : Array<{ key : string;
359
+ value : string; }> | undefined;
360
+ }
361
+
362
+ type IInheritedAdaptationContext = Omit<IAdaptationSetContext,
363
+ "availabilityTimeComplete" |
364
+ "availabilityTimeOffset" |
365
+ "duration" |
366
+ "isLastPeriod" |
367
+ "manifestBoundsCalculator" |
368
+ "start" |
369
+ "unsafelyBaseOnPreviousPeriod">;
@@ -37,61 +37,18 @@ import resolveBaseURLs, {
37
37
  IResolvedBaseUrl,
38
38
  } from "./resolve_base_urls";
39
39
 
40
- /** Supplementary context needed to parse a RepresentationIndex. */
41
- export interface IRepresentationInfos {
42
- /** Parsed AdaptationSet which contains the Representation. */
43
- adaptation : IAdaptationSetIntermediateRepresentation;
44
- /** Whether we should request new segments even if they are not yet finished. */
45
- aggressiveMode : boolean;
46
- availabilityTimeComplete : boolean;
47
- /** availability time offset of the concerned Adaptation. */
48
- availabilityTimeOffset : number;
49
- /** Eventual URLs from which every relative URL will be based on. */
50
- baseURLs : IResolvedBaseUrl[];
51
- /** Allows to obtain the first/last available position of a dynamic content. */
52
- manifestBoundsCalculator : ManifestBoundsCalculator;
53
- /** End time of the current period, in seconds. */
54
- end? : number;
55
- /** Whether the Manifest can evolve with time. */
56
- isDynamic : boolean;
57
- /**
58
- * Parent parsed SegmentTemplate elements.
59
- * Sorted by provenance from higher level (e.g. Period) to lower-lever (e.g.
60
- * AdaptationSet).
61
- */
62
- parentSegmentTemplates : ISegmentTemplateIntermediateRepresentation[];
63
- /**
64
- * Time (in terms of `performance.now`) at which the XML file containing this
65
- * Representation was received.
66
- */
67
- receivedTime? : number;
68
- /** Start time of the current period, in seconds. */
69
- start : number;
70
- /** Depth of the buffer for the whole content, in seconds. */
71
- timeShiftBufferDepth? : number;
72
- /**
73
- * The parser should take this Representation - which is the same as this one
74
- * parsed at an earlier time - as a base to speed-up the parsing process.
75
- * /!\ If unexpected differences exist between both, there is a risk of
76
- * de-synchronization with what is actually on the server.
77
- */
78
- unsafelyBaseOnPreviousRepresentation : Representation | null;
79
- /** List of inband event streams that are present on the representation */
80
- inbandEventStreams: IScheme[] | undefined;
81
- }
82
-
83
40
  /**
84
41
  * Parse the specific segment indexing information found in a representation
85
42
  * into a IRepresentationIndex implementation.
86
43
  * @param {Array.<Object>} representation
87
- * @param {Object} representationInfos
44
+ * @param {Object} context
88
45
  * @returns {Array.<Object>}
89
46
  */
90
47
  export default function parseRepresentationIndex(
91
48
  representation : IRepresentationIntermediateRepresentation,
92
- representationInfos : IRepresentationInfos
49
+ context : IRepresentationIndexContext
93
50
  ) : IRepresentationIndex {
94
- const representationBaseURLs = resolveBaseURLs(representationInfos.baseURLs,
51
+ const representationBaseURLs = resolveBaseURLs(context.baseURLs,
95
52
  representation.children.baseURLs);
96
53
  const { aggressiveMode,
97
54
  availabilityTimeOffset,
@@ -102,7 +59,8 @@ export default function parseRepresentationIndex(
102
59
  receivedTime,
103
60
  timeShiftBufferDepth,
104
61
  unsafelyBaseOnPreviousRepresentation,
105
- inbandEventStreams } = representationInfos;
62
+ inbandEventStreams,
63
+ isLastPeriod } = context;
106
64
 
107
65
  const isEMSGWhitelisted = (inbandEvent: IEMSG): boolean => {
108
66
  if (inbandEventStreams === undefined) {
@@ -111,31 +69,32 @@ export default function parseRepresentationIndex(
111
69
  return inbandEventStreams
112
70
  .some(({ schemeIdUri }) => schemeIdUri === inbandEvent.schemeIdUri);
113
71
  };
114
- const context = { aggressiveMode,
115
- availabilityTimeComplete: true,
116
- availabilityTimeOffset,
117
- unsafelyBaseOnPreviousRepresentation,
118
- isEMSGWhitelisted,
119
- manifestBoundsCalculator,
120
- isDynamic,
121
- periodEnd,
122
- periodStart,
123
- receivedTime,
124
- representationBaseURLs,
125
- representationBitrate: representation.attributes.bitrate,
126
- representationId: representation.attributes.id,
127
- timeShiftBufferDepth };
72
+ const reprIndexCtxt = { aggressiveMode,
73
+ availabilityTimeComplete: true,
74
+ availabilityTimeOffset,
75
+ unsafelyBaseOnPreviousRepresentation,
76
+ isEMSGWhitelisted,
77
+ isLastPeriod,
78
+ manifestBoundsCalculator,
79
+ isDynamic,
80
+ periodEnd,
81
+ periodStart,
82
+ receivedTime,
83
+ representationBaseURLs,
84
+ representationBitrate: representation.attributes.bitrate,
85
+ representationId: representation.attributes.id,
86
+ timeShiftBufferDepth };
128
87
  let representationIndex : IRepresentationIndex;
129
88
  if (representation.children.segmentBase !== undefined) {
130
89
  const { segmentBase } = representation.children;
131
- representationIndex = new BaseRepresentationIndex(segmentBase, context);
90
+ representationIndex = new BaseRepresentationIndex(segmentBase, reprIndexCtxt);
132
91
  } else if (representation.children.segmentList !== undefined) {
133
92
  const { segmentList } = representation.children;
134
- representationIndex = new ListRepresentationIndex(segmentList, context);
93
+ representationIndex = new ListRepresentationIndex(segmentList, reprIndexCtxt);
135
94
  } else if (representation.children.segmentTemplate !== undefined ||
136
- representationInfos.parentSegmentTemplates.length > 0)
95
+ context.parentSegmentTemplates.length > 0)
137
96
  {
138
- const segmentTemplates = representationInfos.parentSegmentTemplates.slice();
97
+ const segmentTemplates = context.parentSegmentTemplates.slice();
139
98
  const childSegmentTemplate = representation.children.segmentTemplate;
140
99
  if (childSegmentTemplate !== undefined) {
141
100
  segmentTemplates.push(childSegmentTemplate);
@@ -145,32 +104,81 @@ export default function parseRepresentationIndex(
145
104
  ...segmentTemplates as [
146
105
  ISegmentTemplateIntermediateRepresentation
147
106
  ] /* Ugly TS Hack */);
148
- context.availabilityTimeComplete =
107
+ reprIndexCtxt.availabilityTimeComplete =
149
108
  segmentTemplate.availabilityTimeComplete ??
150
- representationInfos.availabilityTimeComplete;
151
- context.availabilityTimeOffset =
109
+ context.availabilityTimeComplete;
110
+ reprIndexCtxt.availabilityTimeOffset =
152
111
  (segmentTemplate.availabilityTimeOffset ?? 0) +
153
- representationInfos.availabilityTimeOffset;
112
+ context.availabilityTimeOffset;
154
113
  representationIndex = TimelineRepresentationIndex
155
114
  .isTimelineIndexArgument(segmentTemplate) ?
156
- new TimelineRepresentationIndex(segmentTemplate, context) :
157
- new TemplateRepresentationIndex(segmentTemplate, context);
115
+ new TimelineRepresentationIndex(segmentTemplate, reprIndexCtxt) :
116
+ new TemplateRepresentationIndex(segmentTemplate, reprIndexCtxt);
158
117
  } else {
159
- const adaptationChildren = representationInfos.adaptation.children;
118
+ const adaptationChildren = context.adaptation.children;
160
119
  if (adaptationChildren.segmentBase !== undefined) {
161
120
  const { segmentBase } = adaptationChildren;
162
- representationIndex = new BaseRepresentationIndex(segmentBase, context);
121
+ representationIndex = new BaseRepresentationIndex(segmentBase, reprIndexCtxt);
163
122
  } else if (adaptationChildren.segmentList !== undefined) {
164
123
  const { segmentList } = adaptationChildren;
165
- representationIndex = new ListRepresentationIndex(segmentList, context);
124
+ representationIndex = new ListRepresentationIndex(segmentList, reprIndexCtxt);
166
125
  } else {
167
126
  representationIndex = new TemplateRepresentationIndex({
168
127
  duration: Number.MAX_VALUE,
169
128
  timescale: 1,
170
129
  startNumber: 0,
171
130
  media: "",
172
- }, context);
131
+ }, reprIndexCtxt);
173
132
  }
174
133
  }
175
134
  return representationIndex;
176
135
  }
136
+
137
+ /** Supplementary context needed to parse a RepresentationIndex. */
138
+ export interface IRepresentationIndexContext {
139
+ /** Parsed AdaptationSet which contains the Representation. */
140
+ adaptation : IAdaptationSetIntermediateRepresentation;
141
+ /** Whether we should request new segments even if they are not yet finished. */
142
+ aggressiveMode : boolean;
143
+ /** If false, declared segments in the MPD might still be not completely generated. */
144
+ availabilityTimeComplete : boolean;
145
+ /** availability time offset of the concerned Adaptation. */
146
+ availabilityTimeOffset : number;
147
+ /** Eventual URLs from which every relative URL will be based on. */
148
+ baseURLs : IResolvedBaseUrl[];
149
+ /** End time of the current Period, in seconds. */
150
+ end? : number | undefined;
151
+ /** List of inband event streams that are present on the representation */
152
+ inbandEventStreams: IScheme[] | undefined;
153
+ /**
154
+ * Set to `true` if the linked Period is the chronologically last one in the
155
+ * Manifest.
156
+ */
157
+ isLastPeriod : boolean;
158
+ /** Allows to obtain the first/last available position of a dynamic content. */
159
+ manifestBoundsCalculator : ManifestBoundsCalculator;
160
+ /** Whether the Manifest can evolve with time. */
161
+ isDynamic : boolean;
162
+ /**
163
+ * Parent parsed SegmentTemplate elements.
164
+ * Sorted by provenance from higher level (e.g. Period) to lower-lever (e.g.
165
+ * AdaptationSet).
166
+ */
167
+ parentSegmentTemplates : ISegmentTemplateIntermediateRepresentation[];
168
+ /**
169
+ * Time (in terms of `performance.now`) at which the XML file containing this
170
+ * Representation was received.
171
+ */
172
+ receivedTime? : number | undefined;
173
+ /** Start time of the current period, in seconds. */
174
+ start : number;
175
+ /** Depth of the buffer for the whole content, in seconds. */
176
+ timeShiftBufferDepth? : number | undefined;
177
+ /**
178
+ * The parser should take this Representation - which is the same as this one
179
+ * parsed at an earlier time - as a base to speed-up the parsing process.
180
+ * /!\ If unexpected differences exist between both, there is a risk of
181
+ * de-synchronization with what is actually on the server.
182
+ */
183
+ unsafelyBaseOnPreviousRepresentation : Representation | null;
184
+ }