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
@@ -14,7 +14,9 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import log from "../../../../log";
17
+ import { SUPPORTED_ADAPTATIONS_TYPE, } from "../../../../manifest";
17
18
  import arrayFind from "../../../../utils/array_find";
19
+ import arrayFindIndex from "../../../../utils/array_find_index";
18
20
  import arrayIncludes from "../../../../utils/array_includes";
19
21
  import isNonEmptyString from "../../../../utils/is_non_empty_string";
20
22
  import attachTrickModeTrack from "./attach_trickmode_track";
@@ -30,7 +32,7 @@ import resolveBaseURLs from "./resolve_base_urls";
30
32
  * @returns {Boolean}
31
33
  */
32
34
  function isVisuallyImpaired(accessibility) {
33
- if (accessibility == null) {
35
+ if (accessibility === undefined) {
34
36
  return false;
35
37
  }
36
38
  var isVisuallyImpairedAudioDvbDash = (accessibility.schemeIdUri === "urn:tva:metadata:cs:AudioPurposeCS:2007" &&
@@ -47,7 +49,7 @@ function isVisuallyImpaired(accessibility) {
47
49
  * @returns {Boolean}
48
50
  */
49
51
  function isHardOfHearing(accessibility) {
50
- if (accessibility == null) {
52
+ if (accessibility === undefined) {
51
53
  return false;
52
54
  }
53
55
  return (accessibility.schemeIdUri === "urn:tva:metadata:cs:AudioPurposeCS:2007" &&
@@ -61,7 +63,7 @@ function isHardOfHearing(accessibility) {
61
63
  * @returns {Boolean}
62
64
  */
63
65
  function hasSignLanguageInterpretation(accessibility) {
64
- if (accessibility == null) {
66
+ if (accessibility === undefined) {
65
67
  return false;
66
68
  }
67
69
  return (accessibility.schemeIdUri === "urn:mpeg:dash:role:2011" &&
@@ -137,43 +139,38 @@ function getAdaptationSetSwitchingIDs(adaptation) {
137
139
  * Note that the AdaptationSets returned are sorted by priority (from the most
138
140
  * priority to the least one).
139
141
  * @param {Array.<Object>} adaptationsIR
140
- * @param {Object} periodInfos
142
+ * @param {Object} context
141
143
  * @returns {Array.<Object>}
142
144
  */
143
- export default function parseAdaptationSets(adaptationsIR, periodInfos) {
145
+ export default function parseAdaptationSets(adaptationsIR, context) {
144
146
  var _a;
145
- var _b, _c, _d, _e, _f, _g, _h;
146
- var parsedAdaptations = {};
147
+ var _b, _c, _d, _e, _f, _g, _h, _j;
148
+ var parsedAdaptations = { video: [],
149
+ audio: [],
150
+ text: [],
151
+ image: [] };
147
152
  var trickModeAdaptations = [];
148
153
  var adaptationSwitchingInfos = {};
149
154
  var parsedAdaptationsIDs = [];
150
155
  /**
151
- * Index of the last parsed AdaptationSet with a Role set as "main" in
152
- * `parsedAdaptations` for a given type.
153
- * Not defined for a type with no main Adaptation inside.
154
- * This is used to put main AdaptationSet first in the resulting array of
155
- * Adaptation while still preserving the MPD order among them.
156
+ * Index of the last parsed Video AdaptationSet with a Role set as "main" in
157
+ * `parsedAdaptations.video`.
158
+ * `-1` if not yet encountered.
159
+ * Used as we merge all main video AdaptationSet due to a comprehension of the
160
+ * DASH-IF IOP.
156
161
  */
157
- var lastMainAdaptationIndex = {};
158
- // first sort AdaptationSets by absolute priority.
159
- adaptationsIR.sort(function (a, b) {
160
- var _a, _b;
161
- /* As of DASH-IF 4.3, `1` is the default value. */
162
- var priority1 = (_a = a.attributes.selectionPriority) !== null && _a !== void 0 ? _a : 1;
163
- var priority2 = (_b = b.attributes.selectionPriority) !== null && _b !== void 0 ? _b : 1;
164
- return priority2 - priority1;
165
- });
166
- for (var _i = 0, adaptationsIR_1 = adaptationsIR; _i < adaptationsIR_1.length; _i++) {
167
- var adaptation = adaptationsIR_1[_i];
162
+ var lastMainVideoAdapIdx = -1;
163
+ for (var adaptationIdx = 0; adaptationIdx < adaptationsIR.length; adaptationIdx++) {
164
+ var adaptation = adaptationsIR[adaptationIdx];
168
165
  var adaptationChildren = adaptation.children;
169
166
  var essentialProperties = adaptationChildren.essentialProperties, roles = adaptationChildren.roles;
170
167
  var isMainAdaptation = Array.isArray(roles) &&
171
168
  roles.some(function (role) { return role.value === "main"; }) &&
172
169
  roles.some(function (role) { return role.schemeIdUri === "urn:mpeg:dash:role:2011"; });
173
170
  var representationsIR = adaptation.children.representations;
174
- var availabilityTimeComplete = (_b = adaptation.attributes.availabilityTimeComplete) !== null && _b !== void 0 ? _b : periodInfos.availabilityTimeComplete;
171
+ var availabilityTimeComplete = (_b = adaptation.attributes.availabilityTimeComplete) !== null && _b !== void 0 ? _b : context.availabilityTimeComplete;
175
172
  var availabilityTimeOffset = ((_c = adaptation.attributes.availabilityTimeOffset) !== null && _c !== void 0 ? _c : 0) +
176
- periodInfos.availabilityTimeOffset;
173
+ context.availabilityTimeOffset;
177
174
  var adaptationMimeType = adaptation.attributes.mimeType;
178
175
  var adaptationCodecs = adaptation.attributes.codecs;
179
176
  var type = inferAdaptationType(representationsIR, isNonEmptyString(adaptationMimeType) ?
@@ -186,49 +183,48 @@ export default function parseAdaptationSets(adaptationsIR, periodInfos) {
186
183
  if (type === undefined) {
187
184
  continue;
188
185
  }
186
+ var priority = (_d = adaptation.attributes.selectionPriority) !== null && _d !== void 0 ? _d : 1;
189
187
  var originalID = adaptation.attributes.id;
190
188
  var newID = void 0;
191
189
  var adaptationSetSwitchingIDs = getAdaptationSetSwitchingIDs(adaptation);
192
190
  var parentSegmentTemplates = [];
193
- if (periodInfos.segmentTemplate !== undefined) {
194
- parentSegmentTemplates.push(periodInfos.segmentTemplate);
191
+ if (context.segmentTemplate !== undefined) {
192
+ parentSegmentTemplates.push(context.segmentTemplate);
195
193
  }
196
194
  if (adaptation.children.segmentTemplate !== undefined) {
197
195
  parentSegmentTemplates.push(adaptation.children.segmentTemplate);
198
196
  }
199
- var adaptationInfos = {
200
- aggressiveMode: periodInfos.aggressiveMode,
197
+ var reprCtxt = {
198
+ aggressiveMode: context.aggressiveMode,
201
199
  availabilityTimeComplete: availabilityTimeComplete,
202
200
  availabilityTimeOffset: availabilityTimeOffset,
203
- baseURLs: resolveBaseURLs(periodInfos.baseURLs, adaptationChildren.baseURLs),
204
- manifestBoundsCalculator: periodInfos.manifestBoundsCalculator,
205
- end: periodInfos.end,
206
- isDynamic: periodInfos.isDynamic,
207
- manifestProfiles: periodInfos.manifestProfiles,
201
+ baseURLs: resolveBaseURLs(context.baseURLs, adaptationChildren.baseURLs),
202
+ manifestBoundsCalculator: context.manifestBoundsCalculator,
203
+ end: context.end,
204
+ isDynamic: context.isDynamic,
205
+ isLastPeriod: context.isLastPeriod,
206
+ manifestProfiles: context.manifestProfiles,
208
207
  parentSegmentTemplates: parentSegmentTemplates,
209
- receivedTime: periodInfos.receivedTime,
210
- start: periodInfos.start,
211
- timeShiftBufferDepth: periodInfos.timeShiftBufferDepth,
208
+ receivedTime: context.receivedTime,
209
+ start: context.start,
210
+ timeShiftBufferDepth: context.timeShiftBufferDepth,
212
211
  unsafelyBaseOnPreviousAdaptation: null,
213
212
  };
214
213
  var trickModeProperty = Array.isArray(essentialProperties) ?
215
214
  arrayFind(essentialProperties, function (scheme) {
216
215
  return scheme.schemeIdUri === "http://dashif.org/guidelines/trickmode";
217
216
  }) : undefined;
218
- var trickModeAttachedAdaptationIds = (_d = trickModeProperty === null || trickModeProperty === void 0 ? void 0 : trickModeProperty.value) === null || _d === void 0 ? void 0 : _d.split(" ");
217
+ var trickModeAttachedAdaptationIds = (_e = trickModeProperty === null || trickModeProperty === void 0 ? void 0 : trickModeProperty.value) === null || _e === void 0 ? void 0 : _e.split(" ");
219
218
  var isTrickModeTrack = trickModeAttachedAdaptationIds !== undefined;
220
219
  if (type === "video" &&
221
220
  isMainAdaptation &&
222
- parsedAdaptations.video !== undefined &&
223
- parsedAdaptations.video.length > 0 &&
224
- lastMainAdaptationIndex.video !== undefined &&
221
+ lastMainVideoAdapIdx >= 0 &&
222
+ parsedAdaptations.video.length > lastMainVideoAdapIdx &&
225
223
  !isTrickModeTrack) {
226
- // Add to the already existing main video adaptation
227
- // TODO remove that ugly custom logic?
228
- var videoMainAdaptation = parsedAdaptations.video[lastMainAdaptationIndex.video];
229
- adaptationInfos.unsafelyBaseOnPreviousAdaptation = (_f = (_e = periodInfos
230
- .unsafelyBaseOnPreviousPeriod) === null || _e === void 0 ? void 0 : _e.getAdaptation(videoMainAdaptation.id)) !== null && _f !== void 0 ? _f : null;
231
- var representations = parseRepresentations(representationsIR, adaptation, adaptationInfos);
224
+ var videoMainAdaptation = parsedAdaptations.video[lastMainVideoAdapIdx][0];
225
+ reprCtxt.unsafelyBaseOnPreviousAdaptation = (_g = (_f = context
226
+ .unsafelyBaseOnPreviousPeriod) === null || _f === void 0 ? void 0 : _f.getAdaptation(videoMainAdaptation.id)) !== null && _g !== void 0 ? _g : null;
227
+ var representations = parseRepresentations(representationsIR, adaptation, reprCtxt);
232
228
  (_a = videoMainAdaptation.representations).push.apply(_a, representations);
233
229
  newID = videoMainAdaptation.id;
234
230
  }
@@ -267,9 +263,9 @@ export default function parseAdaptationSets(adaptationsIR, periodInfos) {
267
263
  }
268
264
  newID = adaptationID;
269
265
  parsedAdaptationsIDs.push(adaptationID);
270
- adaptationInfos.unsafelyBaseOnPreviousAdaptation = (_h = (_g = periodInfos
271
- .unsafelyBaseOnPreviousPeriod) === null || _g === void 0 ? void 0 : _g.getAdaptation(adaptationID)) !== null && _h !== void 0 ? _h : null;
272
- var representations = parseRepresentations(representationsIR, adaptation, adaptationInfos);
266
+ reprCtxt.unsafelyBaseOnPreviousAdaptation = (_j = (_h = context
267
+ .unsafelyBaseOnPreviousPeriod) === null || _h === void 0 ? void 0 : _h.getAdaptation(adaptationID)) !== null && _j !== void 0 ? _j : null;
268
+ var representations = parseRepresentations(representationsIR, adaptation, reprCtxt);
273
269
  var parsedAdaptationSet = { id: adaptationID, representations: representations, type: type, isTrickModeTrack: isTrickModeTrack };
274
270
  if (adaptation.attributes.language != null) {
275
271
  parsedAdaptationSet.language = adaptation.attributes.language;
@@ -286,75 +282,92 @@ export default function parseAdaptationSets(adaptationsIR, periodInfos) {
286
282
  if (isSignInterpreted === true) {
287
283
  parsedAdaptationSet.isSignInterpreted = true;
288
284
  }
289
- var adaptationsOfTheSameType = parsedAdaptations[type];
290
285
  if (trickModeAttachedAdaptationIds !== undefined) {
291
286
  trickModeAdaptations.push({ adaptation: parsedAdaptationSet, trickModeAttachedAdaptationIds: trickModeAttachedAdaptationIds });
292
287
  }
293
- else if (adaptationsOfTheSameType === undefined) {
294
- parsedAdaptations[type] = [parsedAdaptationSet];
295
- if (isMainAdaptation) {
296
- lastMainAdaptationIndex[type] = 0;
297
- }
298
- }
299
288
  else {
300
- var mergedInto = null;
289
+ // look if we have to merge this into another Adaptation
290
+ var mergedIntoIdx = -1;
301
291
  var _loop_1 = function (id) {
302
292
  var _k;
303
293
  var switchingInfos = adaptationSwitchingInfos[id];
304
- if (switchingInfos != null &&
294
+ if (switchingInfos !== undefined &&
305
295
  switchingInfos.newID !== newID &&
306
296
  arrayIncludes(switchingInfos.adaptationSetSwitchingIDs, originalID)) {
307
- var adaptationToMergeInto = arrayFind(adaptationsOfTheSameType, function (a) { return a.id === id; });
308
- if (adaptationToMergeInto != null &&
309
- adaptationToMergeInto.audioDescription ===
297
+ mergedIntoIdx = arrayFindIndex(parsedAdaptations[type], function (a) { return a[0].id === id; });
298
+ var mergedInto = parsedAdaptations[type][mergedIntoIdx];
299
+ if (mergedInto !== undefined &&
300
+ mergedInto[0].audioDescription ===
310
301
  parsedAdaptationSet.audioDescription &&
311
- adaptationToMergeInto.closedCaption ===
302
+ mergedInto[0].closedCaption ===
312
303
  parsedAdaptationSet.closedCaption &&
313
- adaptationToMergeInto.language === parsedAdaptationSet.language) {
304
+ mergedInto[0].language === parsedAdaptationSet.language) {
314
305
  log.info("DASH Parser: merging \"switchable\" AdaptationSets", originalID, id);
315
- (_k = adaptationToMergeInto.representations)
316
- .push.apply(_k, parsedAdaptationSet.representations);
317
- mergedInto = adaptationToMergeInto;
306
+ (_k = mergedInto[0].representations).push.apply(_k, parsedAdaptationSet.representations);
307
+ if (type === "video" &&
308
+ isMainAdaptation &&
309
+ !mergedInto[1].isMainAdaptation) {
310
+ lastMainVideoAdapIdx = Math.max(lastMainVideoAdapIdx, mergedIntoIdx);
311
+ }
312
+ mergedInto[1] = {
313
+ priority: Math.max(priority, mergedInto[1].priority),
314
+ isMainAdaptation: isMainAdaptation ||
315
+ mergedInto[1].isMainAdaptation,
316
+ indexInMpd: Math.min(adaptationIdx, mergedInto[1].indexInMpd),
317
+ };
318
318
  }
319
319
  }
320
320
  };
321
- // look if we have to merge this into another Adaptation
322
- for (var _j = 0, adaptationSetSwitchingIDs_1 = adaptationSetSwitchingIDs; _j < adaptationSetSwitchingIDs_1.length; _j++) {
323
- var id = adaptationSetSwitchingIDs_1[_j];
321
+ for (var _i = 0, adaptationSetSwitchingIDs_1 = adaptationSetSwitchingIDs; _i < adaptationSetSwitchingIDs_1.length; _i++) {
322
+ var id = adaptationSetSwitchingIDs_1[_i];
324
323
  _loop_1(id);
325
324
  }
326
- if (isMainAdaptation) {
327
- var oldLastMainIdx = lastMainAdaptationIndex[type];
328
- var newLastMainIdx = oldLastMainIdx === undefined ? 0 :
329
- oldLastMainIdx + 1;
330
- if (mergedInto === null) {
331
- // put "main" Adaptation after all other Main Adaptations
332
- adaptationsOfTheSameType.splice(newLastMainIdx, 0, parsedAdaptationSet);
333
- lastMainAdaptationIndex[type] = newLastMainIdx;
334
- }
335
- else {
336
- var indexOf = adaptationsOfTheSameType.indexOf(mergedInto);
337
- if (indexOf < 0) { // Weird, not found
338
- adaptationsOfTheSameType.splice(newLastMainIdx, 0, parsedAdaptationSet);
339
- lastMainAdaptationIndex[type] = newLastMainIdx;
340
- }
341
- else if (oldLastMainIdx === undefined || indexOf > oldLastMainIdx) {
342
- // Found but was not main
343
- adaptationsOfTheSameType.splice(indexOf, 1);
344
- adaptationsOfTheSameType.splice(newLastMainIdx, 0, mergedInto);
345
- lastMainAdaptationIndex[type] = newLastMainIdx;
346
- }
325
+ if (mergedIntoIdx < 0) {
326
+ parsedAdaptations[type].push([parsedAdaptationSet,
327
+ { priority: priority, isMainAdaptation: isMainAdaptation, indexInMpd: adaptationIdx }]);
328
+ if (type === "video" && isMainAdaptation) {
329
+ lastMainVideoAdapIdx = parsedAdaptations.video.length - 1;
347
330
  }
348
331
  }
349
- else if (mergedInto === null) {
350
- adaptationsOfTheSameType.push(parsedAdaptationSet);
351
- }
352
332
  }
353
333
  }
354
334
  if (originalID != null && adaptationSwitchingInfos[originalID] == null) {
355
335
  adaptationSwitchingInfos[originalID] = { newID: newID, adaptationSetSwitchingIDs: adaptationSetSwitchingIDs };
356
336
  }
357
337
  }
358
- attachTrickModeTrack(parsedAdaptations, trickModeAdaptations);
359
- return parsedAdaptations;
338
+ var adaptationsPerType = SUPPORTED_ADAPTATIONS_TYPE
339
+ .reduce(function (acc, adaptationType) {
340
+ var adaptationsParsedForType = parsedAdaptations[adaptationType];
341
+ if (adaptationsParsedForType.length > 0) {
342
+ adaptationsParsedForType.sort(compareAdaptations);
343
+ acc[adaptationType] = adaptationsParsedForType
344
+ .map(function (_a) {
345
+ var parsedAdaptation = _a[0];
346
+ return parsedAdaptation;
347
+ });
348
+ }
349
+ return acc;
350
+ }, {});
351
+ parsedAdaptations.video.sort(compareAdaptations);
352
+ attachTrickModeTrack(adaptationsPerType, trickModeAdaptations);
353
+ return adaptationsPerType;
354
+ }
355
+ /**
356
+ * Compare groups of parsed AdaptationSet, alongside some ordering metadata,
357
+ * allowing to easily sort them through JavaScript's `Array.prototype.sort`
358
+ * method.
359
+ * @param {Array.<Object>} a
360
+ * @param {Array.<Object>} b
361
+ * @returns {number}
362
+ */
363
+ function compareAdaptations(a, b) {
364
+ var priorityDiff = b[1].priority - a[1].priority;
365
+ if (priorityDiff !== 0) {
366
+ return priorityDiff;
367
+ }
368
+ if (a[1].isMainAdaptation !== b[1].isMainAdaptation) {
369
+ return a[1].isMainAdaptation ? -1 :
370
+ 1;
371
+ }
372
+ return a[1].indexInMpd - b[1].indexInMpd;
360
373
  }
@@ -26,11 +26,11 @@ export interface IMPDParserArguments {
26
26
  * If set, offset to add to `performance.now()` to obtain the current server's
27
27
  * time.
28
28
  */
29
- externalClockOffset?: number;
29
+ externalClockOffset?: number | undefined;
30
30
  /** Time, in terms of `performance.now` at which this MPD was received. */
31
- manifestReceivedTime?: number;
31
+ manifestReceivedTime?: number | undefined;
32
32
  /** Default base time, in seconds. */
33
- referenceDateTime?: number;
33
+ referenceDateTime?: number | undefined;
34
34
  /**
35
35
  * The parser should take this Manifest - which is a previously parsed
36
36
  * Manifest for the same dynamic content - as a base to speed-up the parsing
@@ -41,12 +41,12 @@ export interface IMPDParserArguments {
41
41
  */
42
42
  unsafelyBaseOnPreviousManifest: Manifest | null;
43
43
  /** URL of the manifest (post-redirection if one). */
44
- url?: string;
44
+ url?: string | undefined;
45
45
  }
46
46
  export interface ILoadedXlinkData {
47
- url?: string;
48
- sendingTime?: number;
49
- receivedTime?: number;
47
+ url?: string | undefined;
48
+ sendingTime?: number | undefined;
49
+ receivedTime?: number | undefined;
50
50
  parsed: IPeriodIntermediateRepresentation[];
51
51
  warnings: Error[];
52
52
  }
@@ -94,4 +94,4 @@ export declare type IIrParserResponse = IIrParserResponseNeedsClock | IIrParserR
94
94
  * @param {Array.<Object>} warnings
95
95
  * @returns {Object}
96
96
  */
97
- export default function parseMpdIr(mpdIR: IMPDIntermediateRepresentation, args: IMPDParserArguments, warnings: Error[], hasLoadedClock?: boolean, xlinkInfos?: IXLinkInfos): IIrParserResponse;
97
+ export default function parseMpdIr(mpdIR: IMPDIntermediateRepresentation, args: IMPDParserArguments, warnings: Error[], hasLoadedClock?: boolean | undefined, xlinkInfos?: IXLinkInfos): IIrParserResponse;
@@ -33,7 +33,6 @@ import getMinimumAndMaximumPosition from "./get_minimum_and_maximum_positions";
33
33
  import parseAvailabilityStartTime from "./parse_availability_start_time";
34
34
  import parsePeriods from "./parse_periods";
35
35
  import resolveBaseURLs from "./resolve_base_urls";
36
- var DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0 = config.DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0;
37
36
  /**
38
37
  * Checks if xlinks needs to be loaded before actually parsing the manifest.
39
38
  * @param {Object} mpdIR
@@ -157,7 +156,7 @@ function parseCompleteIntermediateRepresentation(mpdIR, args, warnings, xlinkInf
157
156
  if (rootAttributes.minimumUpdatePeriod !== undefined &&
158
157
  rootAttributes.minimumUpdatePeriod >= 0) {
159
158
  lifetime = rootAttributes.minimumUpdatePeriod === 0 ?
160
- DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0 :
159
+ config.getCurrent().DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0 :
161
160
  rootAttributes.minimumUpdatePeriod;
162
161
  }
163
162
  var _d = getMinimumAndMaximumPosition(parsedPeriods), contentStart = _d[0], contentEnd = _d[1];
@@ -16,33 +16,29 @@
16
16
  import Manifest from "../../../../manifest";
17
17
  import { IParsedPeriod } from "../../types";
18
18
  import { IPeriodIntermediateRepresentation } from "../node_parser_types";
19
- import { IResolvedBaseUrl } from "./resolve_base_urls";
19
+ import { IAdaptationSetContext } from "./parse_adaptation_sets";
20
20
  /** Information about each linked Xlink. */
21
21
  export declare type IXLinkInfos = WeakMap<IPeriodIntermediateRepresentation, {
22
22
  /** Real URL (post-redirection) used to download this xlink. */
23
- url?: string;
23
+ url?: string | undefined;
24
24
  /** Time at which the request was sent (since the time origin), in ms. */
25
- sendingTime?: number;
25
+ sendingTime?: number | undefined;
26
26
  /** Time at which the request was received (since the time origin), in ms. */
27
- receivedTime?: number;
27
+ receivedTime?: number | undefined;
28
28
  }>;
29
+ /**
30
+ * Process intermediate periods to create final parsed periods.
31
+ * @param {Array.<Object>} periodsIR
32
+ * @param {Object} context
33
+ * @returns {Array.<Object>}
34
+ */
35
+ export default function parsePeriods(periodsIR: IPeriodIntermediateRepresentation[], context: IPeriodContext): IParsedPeriod[];
29
36
  /** Context needed when calling `parsePeriods`. */
30
- export interface IPeriodsContextInfos {
31
- /** Whether we should request new segments even if they are not yet finished. */
32
- aggressiveMode: boolean;
37
+ export interface IPeriodContext extends IInheritedAdaptationContext {
33
38
  availabilityStartTime: number;
34
- baseURLs: IResolvedBaseUrl[];
35
- clockOffset?: number;
36
- duration?: number;
37
- isDynamic: boolean;
38
- manifestProfiles?: string;
39
- /**
40
- * Time (in terms of `performance.now`) at which the XML file containing this
41
- * Period was received.
42
- */
43
- receivedTime?: number;
44
- /** Depth of the buffer for the whole content, in seconds. */
45
- timeShiftBufferDepth?: number;
39
+ clockOffset?: number | undefined;
40
+ /** Duration (mediaPresentationDuration) of the whole MPD, in seconds. */
41
+ duration?: number | undefined;
46
42
  /**
47
43
  * The parser should take this Manifest - which is a previously parsed
48
44
  * Manifest for the same dynamic content - as a base to speed-up the parsing
@@ -61,12 +57,7 @@ export interface IPeriodsContextInfos {
61
57
  xmlNamespaces?: Array<{
62
58
  key: string;
63
59
  value: string;
64
- }>;
60
+ }> | undefined;
65
61
  }
66
- /**
67
- * Process intermediate periods to create final parsed periods.
68
- * @param {Array.<Object>} periodsIR
69
- * @param {Object} contextInfos
70
- * @returns {Array.<Object>}
71
- */
72
- export default function parsePeriods(periodsIR: IPeriodIntermediateRepresentation[], contextInfos: IPeriodsContextInfos): IParsedPeriod[];
62
+ declare type IInheritedAdaptationContext = Omit<IAdaptationSetContext, "availabilityTimeComplete" | "availabilityTimeOffset" | "duration" | "isLastPeriod" | "manifestBoundsCalculator" | "start" | "unsafelyBaseOnPreviousPeriod">;
63
+ export {};
@@ -28,25 +28,26 @@ var generatePeriodID = idGenerator();
28
28
  /**
29
29
  * Process intermediate periods to create final parsed periods.
30
30
  * @param {Array.<Object>} periodsIR
31
- * @param {Object} contextInfos
31
+ * @param {Object} context
32
32
  * @returns {Array.<Object>}
33
33
  */
34
- export default function parsePeriods(periodsIR, contextInfos) {
34
+ export default function parsePeriods(periodsIR, context) {
35
35
  var _a, _b, _c, _d, _e, _f;
36
36
  var parsedPeriods = [];
37
- var periodsTimeInformation = getPeriodsTimeInformation(periodsIR, contextInfos);
37
+ var periodsTimeInformation = getPeriodsTimeInformation(periodsIR, context);
38
38
  if (periodsTimeInformation.length !== periodsIR.length) {
39
39
  throw new Error("MPD parsing error: the time information are incoherent.");
40
40
  }
41
- var isDynamic = contextInfos.isDynamic, timeShiftBufferDepth = contextInfos.timeShiftBufferDepth;
41
+ var isDynamic = context.isDynamic, timeShiftBufferDepth = context.timeShiftBufferDepth;
42
42
  var manifestBoundsCalculator = new ManifestBoundsCalculator({ isDynamic: isDynamic, timeShiftBufferDepth: timeShiftBufferDepth });
43
- if (!isDynamic && contextInfos.duration != null) {
44
- manifestBoundsCalculator.setLastPosition(contextInfos.duration);
43
+ if (!isDynamic && context.duration != null) {
44
+ manifestBoundsCalculator.setLastPosition(context.duration);
45
45
  }
46
46
  var _loop_1 = function (i) {
47
+ var isLastPeriod = i === periodsIR.length - 1;
47
48
  var periodIR = periodsIR[i];
48
- var xlinkInfos = contextInfos.xlinkInfos.get(periodIR);
49
- var periodBaseURLs = resolveBaseURLs(contextInfos.baseURLs, periodIR.children.baseURLs);
49
+ var xlinkInfos = context.xlinkInfos.get(periodIR);
50
+ var periodBaseURLs = resolveBaseURLs(context.baseURLs, periodIR.children.baseURLs);
50
51
  var _g = periodsTimeInformation[i], periodStart = _g.periodStart, periodDuration = _g.periodDuration, periodEnd = _g.periodEnd;
51
52
  var periodID;
52
53
  if (periodIR.attributes.id == null) {
@@ -61,15 +62,16 @@ export default function parsePeriods(periodsIR, contextInfos) {
61
62
  periodID += "-dup";
62
63
  }
63
64
  var receivedTime = xlinkInfos !== undefined ? xlinkInfos.receivedTime :
64
- contextInfos.receivedTime;
65
- var unsafelyBaseOnPreviousPeriod = (_b = (_a = contextInfos
65
+ context.receivedTime;
66
+ var unsafelyBaseOnPreviousPeriod = (_b = (_a = context
66
67
  .unsafelyBaseOnPreviousManifest) === null || _a === void 0 ? void 0 : _a.getPeriod(periodID)) !== null && _b !== void 0 ? _b : null;
67
68
  var availabilityTimeComplete = (_c = periodIR.attributes.availabilityTimeComplete) !== null && _c !== void 0 ? _c : true;
68
69
  var availabilityTimeOffset = (_d = periodIR.attributes.availabilityTimeOffset) !== null && _d !== void 0 ? _d : 0;
69
- var periodInfos = { aggressiveMode: contextInfos.aggressiveMode, availabilityTimeComplete: availabilityTimeComplete, availabilityTimeOffset: availabilityTimeOffset, baseURLs: periodBaseURLs, manifestBoundsCalculator: manifestBoundsCalculator, end: periodEnd, isDynamic: isDynamic, manifestProfiles: contextInfos.manifestProfiles, receivedTime: receivedTime, segmentTemplate: periodIR.children.segmentTemplate,
70
- start: periodStart, timeShiftBufferDepth: timeShiftBufferDepth, unsafelyBaseOnPreviousPeriod: unsafelyBaseOnPreviousPeriod };
71
- var adaptations = parseAdaptationSets(periodIR.children.adaptations, periodInfos);
72
- var namespaces = ((_e = contextInfos.xmlNamespaces) !== null && _e !== void 0 ? _e : [])
70
+ var aggressiveMode = context.aggressiveMode, manifestProfiles = context.manifestProfiles;
71
+ var segmentTemplate = periodIR.children.segmentTemplate;
72
+ var adapCtxt = { aggressiveMode: aggressiveMode, availabilityTimeComplete: availabilityTimeComplete, availabilityTimeOffset: availabilityTimeOffset, baseURLs: periodBaseURLs, manifestBoundsCalculator: manifestBoundsCalculator, end: periodEnd, isDynamic: isDynamic, isLastPeriod: isLastPeriod, manifestProfiles: manifestProfiles, receivedTime: receivedTime, segmentTemplate: segmentTemplate, start: periodStart, timeShiftBufferDepth: timeShiftBufferDepth, unsafelyBaseOnPreviousPeriod: unsafelyBaseOnPreviousPeriod };
73
+ var adaptations = parseAdaptationSets(periodIR.children.adaptations, adapCtxt);
74
+ var namespaces = ((_e = context.xmlNamespaces) !== null && _e !== void 0 ? _e : [])
73
75
  .concat((_f = periodIR.attributes.namespaces) !== null && _f !== void 0 ? _f : []);
74
76
  var streamEvents = generateStreamEvents(periodIR.children.eventStreams, periodStart, namespaces);
75
77
  var parsedPeriod = { id: periodID,
@@ -90,7 +92,7 @@ export default function parsePeriods(periodsIR, contextInfos) {
90
92
  manifestBoundsCalculator.setLastPosition(lastPosition, positionTime);
91
93
  }
92
94
  else {
93
- var guessedLastPositionFromClock = guessLastPositionFromClock(contextInfos, periodStart);
95
+ var guessedLastPositionFromClock = guessLastPositionFromClock(context, periodStart);
94
96
  if (guessedLastPositionFromClock !== undefined) {
95
97
  var guessedLastPosition = guessedLastPositionFromClock[0], guessedPositionTime = guessedLastPositionFromClock[1];
96
98
  manifestBoundsCalculator.setLastPosition(guessedLastPosition, guessedPositionTime);
@@ -104,9 +106,9 @@ export default function parsePeriods(periodsIR, contextInfos) {
104
106
  for (var i = periodsIR.length - 1; i >= 0; i--) {
105
107
  _loop_1(i);
106
108
  }
107
- if (contextInfos.isDynamic && !manifestBoundsCalculator.lastPositionIsKnown()) {
109
+ if (context.isDynamic && !manifestBoundsCalculator.lastPositionIsKnown()) {
108
110
  // Guess a last time the last position
109
- var guessedLastPositionFromClock = guessLastPositionFromClock(contextInfos, 0);
111
+ var guessedLastPositionFromClock = guessLastPositionFromClock(context, 0);
110
112
  if (guessedLastPositionFromClock !== undefined) {
111
113
  var lastPosition = guessedLastPositionFromClock[0], positionTime = guessedLastPositionFromClock[1];
112
114
  manifestBoundsCalculator.setLastPosition(lastPosition, positionTime);
@@ -137,14 +139,14 @@ export default function parsePeriods(periodsIR, contextInfos) {
137
139
  * the live time more directly from that previous one, we might be better off
138
140
  * than just using the clock.
139
141
  *
140
- * @param {Object} contextInfos
142
+ * @param {Object} context
141
143
  * @param {number} minimumTime
142
144
  * @returns {Array.<number|undefined>}
143
145
  */
144
- function guessLastPositionFromClock(contextInfos, minimumTime) {
145
- if (contextInfos.clockOffset != null) {
146
- var lastPosition = contextInfos.clockOffset / 1000 -
147
- contextInfos.availabilityStartTime;
146
+ function guessLastPositionFromClock(context, minimumTime) {
147
+ if (context.clockOffset != null) {
148
+ var lastPosition = context.clockOffset / 1000 -
149
+ context.availabilityStartTime;
148
150
  var positionTime = performance.now() / 1000;
149
151
  var timeInSec = positionTime + lastPosition;
150
152
  if (timeInSec >= minimumTime) {
@@ -156,7 +158,7 @@ function guessLastPositionFromClock(contextInfos, minimumTime) {
156
158
  if (now >= minimumTime) {
157
159
  log.warn("DASH Parser: no clock synchronization mechanism found." +
158
160
  " Using the system clock instead.");
159
- var lastPosition = now - contextInfos.availabilityStartTime;
161
+ var lastPosition = now - context.availabilityStartTime;
160
162
  var positionTime = performance.now() / 1000;
161
163
  return [lastPosition, positionTime];
162
164
  }
@@ -17,21 +17,37 @@ import { IRepresentationIndex, Representation } from "../../../../manifest";
17
17
  import { IAdaptationSetIntermediateRepresentation, IRepresentationIntermediateRepresentation, ISegmentTemplateIntermediateRepresentation, IScheme } from "../node_parser_types";
18
18
  import ManifestBoundsCalculator from "./manifest_bounds_calculator";
19
19
  import { IResolvedBaseUrl } from "./resolve_base_urls";
20
+ /**
21
+ * Parse the specific segment indexing information found in a representation
22
+ * into a IRepresentationIndex implementation.
23
+ * @param {Array.<Object>} representation
24
+ * @param {Object} context
25
+ * @returns {Array.<Object>}
26
+ */
27
+ export default function parseRepresentationIndex(representation: IRepresentationIntermediateRepresentation, context: IRepresentationIndexContext): IRepresentationIndex;
20
28
  /** Supplementary context needed to parse a RepresentationIndex. */
21
- export interface IRepresentationInfos {
29
+ export interface IRepresentationIndexContext {
22
30
  /** Parsed AdaptationSet which contains the Representation. */
23
31
  adaptation: IAdaptationSetIntermediateRepresentation;
24
32
  /** Whether we should request new segments even if they are not yet finished. */
25
33
  aggressiveMode: boolean;
34
+ /** If false, declared segments in the MPD might still be not completely generated. */
26
35
  availabilityTimeComplete: boolean;
27
36
  /** availability time offset of the concerned Adaptation. */
28
37
  availabilityTimeOffset: number;
29
38
  /** Eventual URLs from which every relative URL will be based on. */
30
39
  baseURLs: IResolvedBaseUrl[];
40
+ /** End time of the current Period, in seconds. */
41
+ end?: number | undefined;
42
+ /** List of inband event streams that are present on the representation */
43
+ inbandEventStreams: IScheme[] | undefined;
44
+ /**
45
+ * Set to `true` if the linked Period is the chronologically last one in the
46
+ * Manifest.
47
+ */
48
+ isLastPeriod: boolean;
31
49
  /** Allows to obtain the first/last available position of a dynamic content. */
32
50
  manifestBoundsCalculator: ManifestBoundsCalculator;
33
- /** End time of the current period, in seconds. */
34
- end?: number;
35
51
  /** Whether the Manifest can evolve with time. */
36
52
  isDynamic: boolean;
37
53
  /**
@@ -44,11 +60,11 @@ export interface IRepresentationInfos {
44
60
  * Time (in terms of `performance.now`) at which the XML file containing this
45
61
  * Representation was received.
46
62
  */
47
- receivedTime?: number;
63
+ receivedTime?: number | undefined;
48
64
  /** Start time of the current period, in seconds. */
49
65
  start: number;
50
66
  /** Depth of the buffer for the whole content, in seconds. */
51
- timeShiftBufferDepth?: number;
67
+ timeShiftBufferDepth?: number | undefined;
52
68
  /**
53
69
  * The parser should take this Representation - which is the same as this one
54
70
  * parsed at an earlier time - as a base to speed-up the parsing process.
@@ -56,14 +72,4 @@ export interface IRepresentationInfos {
56
72
  * de-synchronization with what is actually on the server.
57
73
  */
58
74
  unsafelyBaseOnPreviousRepresentation: Representation | null;
59
- /** List of inband event streams that are present on the representation */
60
- inbandEventStreams: IScheme[] | undefined;
61
75
  }
62
- /**
63
- * Parse the specific segment indexing information found in a representation
64
- * into a IRepresentationIndex implementation.
65
- * @param {Array.<Object>} representation
66
- * @param {Object} representationInfos
67
- * @returns {Array.<Object>}
68
- */
69
- export default function parseRepresentationIndex(representation: IRepresentationIntermediateRepresentation, representationInfos: IRepresentationInfos): IRepresentationIndex;