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
@@ -26,14 +26,13 @@ import {
26
26
  import {
27
27
  IAdaptationSetIntermediateRepresentation,
28
28
  IRepresentationIntermediateRepresentation,
29
- ISegmentTemplateIntermediateRepresentation,
30
29
  IScheme,
31
30
  IContentProtectionIntermediateRepresentation,
32
31
  } from "../node_parser_types";
33
32
  import { getWEBMHDRInformation } from "./get_hdr_information";
34
- import ManifestBoundsCalculator from "./manifest_bounds_calculator";
35
- import parseRepresentationIndex from "./parse_representation_index";
36
- import { IResolvedBaseUrl } from "./resolve_base_urls";
33
+ import parseRepresentationIndex, {
34
+ IRepresentationIndexContext,
35
+ } from "./parse_representation_index";
37
36
 
38
37
  /**
39
38
  * Combine inband event streams from representation and
@@ -59,49 +58,6 @@ function combineInbandEventStreams(
59
58
  return newSchemeId;
60
59
  }
61
60
 
62
- /** Supplementary context needed to parse a Representation. */
63
- export interface IAdaptationInfos {
64
- /** Whether we should request new segments even if they are not yet finished. */
65
- aggressiveMode : boolean;
66
- availabilityTimeComplete: boolean;
67
- /** availability time offset of the concerned Adaptation. */
68
- availabilityTimeOffset: number;
69
- /** Eventual URLs from which every relative URL will be based on. */
70
- baseURLs : IResolvedBaseUrl[];
71
- /** Allows to obtain the first/last available position of a dynamic content. */
72
- manifestBoundsCalculator : ManifestBoundsCalculator;
73
- /** End time of the current period, in seconds. */
74
- end? : number;
75
- /** Whether the Manifest can evolve with time. */
76
- isDynamic : boolean;
77
- /** Manifest DASH profiles used for signalling some features */
78
- manifestProfiles?: string;
79
- /**
80
- * Parent parsed SegmentTemplate elements.
81
- * Sorted by provenance from higher level (e.g. Period) to lower-lever (e.g.
82
- * AdaptationSet).
83
- */
84
- parentSegmentTemplates : ISegmentTemplateIntermediateRepresentation[];
85
- /**
86
- * Time (in terms of `performance.now`) at which the XML file containing this
87
- * Representation was received.
88
- */
89
- receivedTime? : number;
90
- /** Start time of the current period, in seconds. */
91
- start : number;
92
- /** Depth of the buffer for the whole content, in seconds. */
93
- timeShiftBufferDepth? : number;
94
- /**
95
- * The parser should take this Adaptation - which is from a previously parsed
96
- * Manifest for the same dynamic content - as a base to speed-up the parsing
97
- * process.
98
- * /!\ If unexpected differences exist between both, there is a risk of
99
- * de-synchronization with what is actually on the server,
100
- * Use with moderation.
101
- */
102
- unsafelyBaseOnPreviousAdaptation : Adaptation | null;
103
- }
104
-
105
61
  /**
106
62
  * Extract HDR information from manifest and codecs.
107
63
  * @param {Object}
@@ -111,9 +67,9 @@ function getHDRInformation(
111
67
  { adaptationProfiles,
112
68
  manifestProfiles,
113
69
  codecs,
114
- }: { adaptationProfiles?: string;
115
- manifestProfiles?: string;
116
- codecs?: string; }
70
+ }: { adaptationProfiles?: string | undefined;
71
+ manifestProfiles?: string | undefined;
72
+ codecs?: string | undefined; }
117
73
  ): undefined | IHDRInformation {
118
74
  const profiles = (adaptationProfiles ?? "") + (manifestProfiles ?? "");
119
75
  if (codecs === undefined) {
@@ -138,13 +94,13 @@ function getHDRInformation(
138
94
  /**
139
95
  * Process intermediate representations to create final parsed representations.
140
96
  * @param {Array.<Object>} representationsIR
141
- * @param {Object} adaptationInfos
97
+ * @param {Object} context
142
98
  * @returns {Array.<Object>}
143
99
  */
144
100
  export default function parseRepresentations(
145
101
  representationsIR : IRepresentationIntermediateRepresentation[],
146
102
  adaptation : IAdaptationSetIntermediateRepresentation,
147
- adaptationInfos : IAdaptationInfos
103
+ context : IRepresentationContext
148
104
  ): IParsedRepresentation[] {
149
105
  const parsedRepresentations : IParsedRepresentation[] = [];
150
106
  for (const representation of representationsIR) {
@@ -171,7 +127,7 @@ export default function parseRepresentations(
171
127
  }
172
128
 
173
129
  // Retrieve previous version of the Representation, if one.
174
- const unsafelyBaseOnPreviousRepresentation = adaptationInfos
130
+ const unsafelyBaseOnPreviousRepresentation = context
175
131
  .unsafelyBaseOnPreviousAdaptation?.getRepresentation(representationID) ??
176
132
  null;
177
133
 
@@ -180,18 +136,19 @@ export default function parseRepresentations(
180
136
 
181
137
  const availabilityTimeComplete =
182
138
  representation.attributes.availabilityTimeComplete ??
183
- adaptationInfos.availabilityTimeComplete;
139
+ context.availabilityTimeComplete;
184
140
  const availabilityTimeOffset =
185
141
  (representation.attributes.availabilityTimeOffset ?? 0) +
186
- adaptationInfos.availabilityTimeOffset;
187
- const representationInfos = objectAssign({}, adaptationInfos,
188
- { availabilityTimeOffset,
189
- availabilityTimeComplete,
190
- unsafelyBaseOnPreviousRepresentation,
191
- adaptation,
192
- inbandEventStreams });
142
+ context.availabilityTimeOffset;
143
+ const reprIndexCtxt = objectAssign({},
144
+ context,
145
+ { availabilityTimeOffset,
146
+ availabilityTimeComplete,
147
+ unsafelyBaseOnPreviousRepresentation,
148
+ adaptation,
149
+ inbandEventStreams });
193
150
  const representationIndex = parseRepresentationIndex(representation,
194
- representationInfos);
151
+ reprIndexCtxt);
195
152
 
196
153
  // Find bitrate
197
154
  let representationBitrate : number;
@@ -297,10 +254,34 @@ export default function parseRepresentations(
297
254
 
298
255
  parsedRepresentation.hdrInfo =
299
256
  getHDRInformation({ adaptationProfiles: adaptation.attributes.profiles,
300
- manifestProfiles: adaptationInfos.manifestProfiles,
257
+ manifestProfiles: context.manifestProfiles,
301
258
  codecs });
302
259
 
303
260
  parsedRepresentations.push(parsedRepresentation);
304
261
  }
305
262
  return parsedRepresentations;
306
263
  }
264
+
265
+ /** Supplementary context needed to parse a Representation. */
266
+ export interface IRepresentationContext extends IInheritedRepresentationIndexContext {
267
+ /** Manifest DASH profiles used for signalling some features */
268
+ manifestProfiles?: string | undefined;
269
+ /**
270
+ * The parser should take this Adaptation - which is from a previously parsed
271
+ * Manifest for the same dynamic content - as a base to speed-up the parsing
272
+ * process.
273
+ * /!\ If unexpected differences exist between both, there is a risk of
274
+ * de-synchronization with what is actually on the server,
275
+ * Use with moderation.
276
+ */
277
+ unsafelyBaseOnPreviousAdaptation : Adaptation | null;
278
+ }
279
+
280
+ /**
281
+ * Supplementary context needed to parse a Representation common with
282
+ * `IRepresentationIndexContext`.
283
+ */
284
+ type IInheritedRepresentationIndexContext = Omit<IRepresentationIndexContext,
285
+ "adaptation" |
286
+ "unsafelyBaseOnPreviousRepresentation" |
287
+ "inbandEventStreams">;
@@ -131,7 +131,7 @@ export interface IPeriodChildren {
131
131
  /**
132
132
  * Provide a template with which we will be able to request segments.
133
133
  */
134
- segmentTemplate? : ISegmentTemplateIntermediateRepresentation;
134
+ segmentTemplate? : ISegmentTemplateIntermediateRepresentation | undefined;
135
135
  /**
136
136
  * Allows to signal events linked to this Period.
137
137
  *
@@ -189,17 +189,17 @@ export interface IAdaptationSetChildren {
189
189
  representations : IRepresentationIntermediateRepresentation[];
190
190
 
191
191
  // optional
192
- accessibilities? : IScheme[];
193
- contentComponent? : IContentComponentAttributes;
194
- contentProtections? : IContentProtectionIntermediateRepresentation[];
195
- essentialProperties? : IScheme[];
196
- inbandEventStreams? : IScheme[];
192
+ accessibilities? : IScheme[] | undefined;
193
+ contentComponent? : IContentComponentAttributes | undefined;
194
+ contentProtections? : IContentProtectionIntermediateRepresentation[] | undefined;
195
+ essentialProperties? : IScheme[] | undefined;
196
+ inbandEventStreams? : IScheme[] | undefined;
197
197
  roles? : IScheme[];
198
- supplementalProperties? : IScheme[];
198
+ supplementalProperties? : IScheme[] | undefined;
199
199
 
200
- segmentBase? : ISegmentBaseIntermediateRepresentation;
201
- segmentList? : ISegmentListIntermediateRepresentation;
202
- segmentTemplate? : ISegmentTemplateIntermediateRepresentation;
200
+ segmentBase? : ISegmentBaseIntermediateRepresentation | undefined;
201
+ segmentList? : ISegmentListIntermediateRepresentation | undefined;
202
+ segmentTemplate? : ISegmentTemplateIntermediateRepresentation | undefined;
203
203
  }
204
204
 
205
205
  /* Intermediate representation for An AdaptationSet node's attributes. */
@@ -336,20 +336,20 @@ export interface IContentProtectionAttributes {
336
336
  }
337
337
 
338
338
  export interface ISegmentTemplateIntermediateRepresentation {
339
- availabilityTimeComplete? : boolean;
340
- availabilityTimeOffset?: number;
341
- bitstreamSwitching? : boolean;
342
- duration? : number;
343
- index? : string;
344
- indexRange?: [number, number];
345
- indexRangeExact? : boolean;
346
- media? : string;
347
- presentationTimeOffset? : number;
348
- startNumber? : number;
349
- timescale? : number;
350
- initialization? : { media?: string };
351
- timeline? : ISegmentTimelineElement[];
352
- timelineParser? : ITimelineParser;
339
+ availabilityTimeComplete? : boolean | undefined;
340
+ availabilityTimeOffset? : number | undefined;
341
+ bitstreamSwitching? : boolean | undefined;
342
+ duration? : number | undefined;
343
+ index? : string | undefined;
344
+ indexRange?: [number, number] | undefined;
345
+ indexRangeExact? : boolean | undefined;
346
+ media? : string | undefined;
347
+ presentationTimeOffset? : number | undefined;
348
+ startNumber? : number | undefined;
349
+ timescale? : number | undefined;
350
+ initialization? : { media?: string } | undefined;
351
+ timeline? : ISegmentTimelineElement[] | undefined;
352
+ timelineParser? : ITimelineParser | undefined;
353
353
  }
354
354
 
355
355
  export interface ISegmentTimelineElement {
@@ -382,9 +382,9 @@ export interface IScheme {
382
382
  *
383
383
  * `undefined` if no `schemeIdUri` attribute has been found.
384
384
  */
385
- schemeIdUri? : string;
385
+ schemeIdUri? : string | undefined;
386
386
  /** Inner content of that scheme. */
387
- value? : string;
387
+ value? : string | undefined;
388
388
  }
389
389
 
390
390
  export interface IEventStreamIntermediateRepresentation {
@@ -395,9 +395,9 @@ export interface IEventStreamIntermediateRepresentation {
395
395
  }
396
396
 
397
397
  export interface IEventStreamAttributes {
398
- schemeIdUri? : string;
399
- timescale? : number;
400
- value? : string;
398
+ schemeIdUri? : string | undefined;
399
+ timescale? : number | undefined;
400
+ value? : string | undefined;
401
401
 
402
402
  /**
403
403
  * XML namespaces linked to the `<EventStream>` element.
@@ -406,7 +406,7 @@ export interface IEventStreamAttributes {
406
406
  * not parsed through the browser's DOMParser API, and thus might depend on
407
407
  * parent namespaces to be parsed correctly.
408
408
  */
409
- namespaces? : Array<{ key: string; value: string }>;
409
+ namespaces? : Array<{ key: string; value: string }> | undefined;
410
410
  }
411
411
 
412
412
  export interface IEventStreamChildren {
@@ -71,19 +71,19 @@ export interface ILoadedResource<T extends string | ArrayBuffer> {
71
71
  * The URL of the loaded resource (post-redirection if one).
72
72
  * `undefined` if unknown or inexistant.
73
73
  */
74
- url? : string;
74
+ url? : string | undefined;
75
75
  /**
76
76
  * The time, in terms of `performance.now()`, at which the resource was
77
77
  * starting to be fetched.
78
78
  * `undefined` if unknown or not applicable.
79
79
  */
80
- sendingTime? : number;
80
+ sendingTime? : number | undefined;
81
81
  /**
82
82
  * The time, in terms of `performance.now()`, at which the resource was
83
83
  * fully-fetched.
84
84
  * `undefined` if unknown or not applicable.
85
85
  */
86
- receivedTime? : number;
86
+ receivedTime? : number | undefined;
87
87
  /** The loaded resource itself, under the right format.
88
88
  * Or an error, when fetching ressources.
89
89
  */
@@ -14,10 +14,10 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import PPromise from "pinkie";
18
17
  import log from "../../../../../log";
19
18
  import assertUnreachable from "../../../../../utils/assert_unreachable";
20
19
  import noop from "../../../../../utils/noop";
20
+ import PPromise from "../../../../../utils/promise";
21
21
  import parseMpdIr, {
22
22
  IIrParserResponse,
23
23
  ILoadedXlinkData,
@@ -69,11 +69,11 @@ export interface IMetaPlaylist {
69
69
  export default function parseMetaPlaylist(
70
70
  data : unknown,
71
71
  parserOptions : {
72
- url?: string;
72
+ url?: string | undefined;
73
73
  serverSyncInfos?: {
74
74
  serverTimestamp: number;
75
75
  clientTime: number;
76
- };
76
+ } | undefined;
77
77
  }
78
78
  ): IParserResponse<IParsedManifest> {
79
79
  let parsedData;
@@ -147,9 +147,9 @@ export default function parseMetaPlaylist(
147
147
  function createManifest(
148
148
  mplData : IMetaPlaylist,
149
149
  manifests : Manifest[],
150
- parserOptions: { url?: string;
150
+ parserOptions: { url?: string | undefined;
151
151
  serverSyncInfos?: { serverTimestamp: number;
152
- clientTime: number; }; }
152
+ clientTime: number; } | undefined; }
153
153
  ): IParsedManifest {
154
154
  const { url, serverSyncInfos } = parserOptions;
155
155
  const clockOffset = serverSyncInfos !== undefined ?
@@ -64,8 +64,8 @@ interface IAdaptationParserArguments { root : Element;
64
64
  timescale : number;
65
65
  protections : IContentProtectionSmooth[];
66
66
  isLive : boolean;
67
- timeShiftBufferDepth? : number;
68
- manifestReceivedTime? : number; }
67
+ timeShiftBufferDepth? : number | undefined;
68
+ manifestReceivedTime? : number | undefined; }
69
69
 
70
70
  type IAdaptationType = "audio" |
71
71
  "video" |
@@ -83,18 +83,19 @@ const MIME_TYPES : Partial<Record<string, string>> = {
83
83
  AVC1: "video/mp4",
84
84
  H264: "video/mp4",
85
85
  TTML: "application/ttml+xml+mp4",
86
+ DFXP: "application/ttml+xml+mp4",
86
87
  };
87
88
 
88
89
  export interface IHSSParserConfiguration {
89
- aggressiveMode? : boolean;
90
- suggestedPresentationDelay? : number;
91
- referenceDateTime? : number;
92
- minRepresentationBitrate? : number;
93
- keySystems? : (hex? : Uint8Array) => IKeySystem[];
90
+ aggressiveMode? : boolean | undefined;
91
+ suggestedPresentationDelay? : number | undefined;
92
+ referenceDateTime? : number | undefined;
93
+ minRepresentationBitrate? : number | undefined;
94
+ keySystems? : ((hex : Uint8Array | undefined) => IKeySystem[]) | undefined;
94
95
  serverSyncInfos? : {
95
96
  serverTimestamp: number;
96
97
  clientTime: number;
97
- };
98
+ } | undefined;
98
99
  }
99
100
 
100
101
  interface ISmoothParsedQualityLevel {
@@ -104,16 +105,16 @@ interface ISmoothParsedQualityLevel {
104
105
  customAttributes : string[];
105
106
 
106
107
  // optional
107
- audiotag? : number;
108
- bitsPerSample? : number;
109
- channels? : number;
110
- codecs? : string;
111
- height? : number;
112
- id? : string;
113
- mimeType? : string;
114
- packetSize? : number;
115
- samplingRate? : number;
116
- width? : number;
108
+ audiotag? : number | undefined;
109
+ bitsPerSample? : number | undefined;
110
+ channels? : number | undefined;
111
+ codecs? : string | undefined;
112
+ height? : number | undefined;
113
+ id? : string | undefined;
114
+ mimeType? : string | undefined;
115
+ packetSize? : number | undefined;
116
+ samplingRate? : number | undefined;
117
+ width? : number | undefined;
117
118
  }
118
119
 
119
120
  /**
@@ -122,9 +123,11 @@ interface ISmoothParsedQualityLevel {
122
123
  */
123
124
  function createSmoothStreamingParser(
124
125
  parserOptions : IHSSParserConfiguration = {}
125
- ) : (manifest : Document, url? : string, manifestReceivedTime? : number)
126
- => IParsedManifest
127
- {
126
+ ) : (
127
+ manifest : Document,
128
+ url? : string | undefined,
129
+ manifestReceivedTime? : number | undefined
130
+ ) => IParsedManifest {
128
131
  const referenceDateTime = parserOptions.referenceDateTime === undefined ?
129
132
  Date.UTC(1970, 0, 1, 0, 0, 0, 0) / 1000 :
130
133
  parserOptions.referenceDateTime;
@@ -178,12 +178,12 @@ export interface ISmoothRepresentationIndexContextInformation {
178
178
 
179
179
  /** Information allowing to generate a Smooth initialization segment. */
180
180
  interface ISmoothInitSegmentPrivateInfos {
181
- bitsPerSample? : number;
182
- channels? : number;
183
- codecPrivateData? : string;
184
- packetSize? : number;
185
- samplingRate? : number;
186
- protection? : { keyId : Uint8Array };
181
+ bitsPerSample? : number | undefined;
182
+ channels? : number | undefined;
183
+ codecPrivateData? : string | undefined;
184
+ packetSize? : number | undefined;
185
+ samplingRate? : number | undefined;
186
+ protection? : { keyId : Uint8Array } | undefined;
187
187
  }
188
188
 
189
189
  /**
@@ -198,13 +198,13 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
198
198
  * Information needed to generate an initialization segment.
199
199
  * Taken from the Manifest.
200
200
  */
201
- private _initSegmentInfos : { codecPrivateData? : string;
202
- bitsPerSample? : number;
203
- channels? : number;
204
- packetSize? : number;
205
- samplingRate? : number;
201
+ private _initSegmentInfos : { codecPrivateData? : string | undefined;
202
+ bitsPerSample? : number | undefined;
203
+ channels? : number | undefined;
204
+ packetSize? : number | undefined;
205
+ samplingRate? : number | undefined;
206
206
  timescale : number;
207
- protection? : { keyId : Uint8Array }; };
207
+ protection? : { keyId : Uint8Array } | undefined; };
208
208
 
209
209
  /**
210
210
  * if `true`, this class will return segments even if we're not sure they had
@@ -225,13 +225,13 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
225
225
  * Useful to know if a segment present in the timeline has actually been
226
226
  * generated on the server-side
227
227
  */
228
- private _scaledLiveGap? : number;
228
+ private _scaledLiveGap : number | undefined;
229
229
 
230
230
  /**
231
231
  * Defines the end of the latest available segment when this index was known to
232
232
  * be valid, in the index's timescale.
233
233
  */
234
- private _initialScaledLastPosition? : number;
234
+ private _initialScaledLastPosition : number | undefined;
235
235
 
236
236
  /**
237
237
  * Defines the earliest time when this index was known to be valid (that is, when
@@ -18,8 +18,8 @@ import { IRepresentationIndex } from "../../manifest";
18
18
  import { IHDRInformation } from "../../manifest/types";
19
19
 
20
20
  export interface IManifestStreamEvent { start: number;
21
- end?: number;
22
- id?: string;
21
+ end?: number | undefined;
22
+ id?: string | undefined;
23
23
  data: IParsedStreamEventData; }
24
24
 
25
25
  export interface IParsedStreamEventData {
@@ -33,7 +33,7 @@ export interface IParsedStreamEventData {
33
33
 
34
34
  /** Describes information about an encryption Key ID of a given media. */
35
35
  export interface IContentProtectionKID { keyId : Uint8Array;
36
- systemId?: string; }
36
+ systemId?: string | undefined; }
37
37
 
38
38
  /**
39
39
  * Encryption initialization data.
@@ -92,37 +92,37 @@ export interface IParsedRepresentation {
92
92
  id: string;
93
93
 
94
94
  /** Codec(s) associated with this Representation. */
95
- codecs?: string;
95
+ codecs?: string | undefined;
96
96
  /**
97
97
  * Information about the encryption associated with this Representation.
98
98
  * Not set if unknown or if the content is not encrypted.
99
99
  */
100
- contentProtections? : IContentProtections;
100
+ contentProtections? : IContentProtections | undefined;
101
101
  /**
102
102
  * Frame rate (images per seconds) associated with this Representation.
103
103
  * Not set if unknown or if it makes no sense (e.g. for subtitles).
104
104
  */
105
- frameRate?: string;
105
+ frameRate?: string | undefined;
106
106
  /**
107
107
  * Height (top to bottom) in pixels this Representation has.
108
108
  * Not set if unknown or if it makes no sense (e.g. for audio).
109
109
  */
110
- height?: number;
110
+ height?: number | undefined;
111
111
  /**
112
112
  * Defines the mime-type of the content.
113
113
  * This allows to deduce the media container but most of the time, the
114
114
  * `codecs` will also be needed to know how to decode that media.
115
115
  */
116
- mimeType?: string;
116
+ mimeType?: string | undefined;
117
117
  /**
118
118
  * Width (left to right) in pixels this Representation has.
119
119
  * Not set if unknown or if it makes no sense (e.g. for audio).
120
120
  */
121
- width?: number;
121
+ width?: number | undefined;
122
122
  /**
123
123
  * Information about the HDR characteristic of a content.
124
124
  */
125
- hdrInfo?: IHDRInformation;
125
+ hdrInfo?: IHDRInformation | undefined;
126
126
  }
127
127
 
128
128
  /** Every possible types an Adaptation can have. */
@@ -155,34 +155,34 @@ export interface IParsedAdaptation {
155
155
  * Not set if unknown or if it makes no sense for the current track (e.g. for
156
156
  * a video track).
157
157
  */
158
- audioDescription? : boolean;
158
+ audioDescription? : boolean | undefined;
159
159
  /**
160
160
  * Whether this Adaptation are closed captions for the hard of hearing.
161
161
  * Not set if unknown or if it makes no sense for the current track (e.g. for
162
162
  * a video track).
163
163
  */
164
- closedCaption? : boolean;
164
+ closedCaption? : boolean | undefined;
165
165
  /**
166
166
  * If true this Adaptation is in a dub: it was recorded in another language
167
167
  * than the original(s) one(s).
168
168
  */
169
- isDub? : boolean;
169
+ isDub? : boolean | undefined;
170
170
  /**
171
171
  * If true this Adaptation is in a sign interpreted: which is a variant of the
172
172
  * video with sign language.
173
173
  */
174
- isSignInterpreted? : boolean;
174
+ isSignInterpreted? : boolean | undefined;
175
175
  /** Tells if the track is a trick mode track. */
176
- isTrickModeTrack? : boolean;
176
+ isTrickModeTrack? : boolean | undefined;
177
177
  /**
178
178
  * Language the `Adaptation` is in.
179
179
  * Not set if unknown or if it makes no sense for the current track.
180
180
  */
181
- language?: string;
181
+ language?: string | undefined;
182
182
  /**
183
183
  * TrickMode tracks attached to the adaptation.
184
184
  */
185
- trickModeTracks?: IParsedAdaptation[];
185
+ trickModeTracks?: IParsedAdaptation[] | undefined;
186
186
  }
187
187
 
188
188
  /** Information on a given period of time in the Manifest */
@@ -205,18 +205,18 @@ export interface IParsedPeriod {
205
205
  * Duration of the Period (from the start to the end), in seconds.
206
206
  * `undefined` if the Period is the last one and is still being updated.
207
207
  */
208
- duration? : number;
208
+ duration? : number | undefined;
209
209
  /**
210
210
  * Time at which the Period ends, in seconds.
211
211
  * `undefined` if the Period is the last one and is still
212
212
  * being updated.
213
213
  */
214
- end? : number;
214
+ end? : number | undefined;
215
215
  /**
216
216
  * Array containing every stream event from period in manifest.
217
217
  * `undefined` if no parsed stream event in manifest.
218
218
  */
219
- streamEvents?: IManifestStreamEvent[];
219
+ streamEvents?: IManifestStreamEvent[] | undefined;
220
220
  }
221
221
 
222
222
  /** Information on the whole content */
@@ -240,23 +240,23 @@ export interface IParsedManifest {
240
240
  * The wall-clock time when the manifest was generated and published at the
241
241
  * origin server
242
242
  */
243
- publishTime?: number;
243
+ publishTime? : number | undefined;
244
244
  /** Underlying transport protocol: "smooth", "dash", "metaplaylist" etc. */
245
245
  transportType: string;
246
246
  /** Base time from which the segments are generated. */
247
- availabilityStartTime? : number;
247
+ availabilityStartTime? : number | undefined;
248
248
  /**
249
249
  * Offset, in milliseconds, the client's clock (in terms of `performance.now`)
250
250
  * has relatively to the server's
251
251
  */
252
- clockOffset?: number;
252
+ clockOffset? : number | undefined;
253
253
  /** If set, the Manifest needs to be updated when that Promise resolves. */
254
- expired? : Promise<void>;
254
+ expired? : Promise<void> | undefined;
255
255
  /**
256
256
  * Duration of the validity of this Manifest from its download time.
257
257
  * After that time has elapsed, the Manifest should be refreshed.
258
258
  */
259
- lifetime?: number;
259
+ lifetime? : number | undefined;
260
260
  /**
261
261
  * Data allowing to calculate the minimum and maximum seekable positions at
262
262
  * any given time.
@@ -266,7 +266,7 @@ export interface IParsedManifest {
266
266
  * The minimum time, in seconds, available in this Manifest.
267
267
  * `undefined` if that value is unknown.
268
268
  */
269
- absoluteMinimumTime? : number;
269
+ absoluteMinimumTime? : number | undefined;
270
270
  /**
271
271
  * Some dynamic contents have the concept of a "window depth" (or "buffer
272
272
  * depth") which allows to set a minimum position for all reachable
@@ -311,8 +311,8 @@ export interface IParsedManifest {
311
311
  * Suggested delay from the last position the player should start from by
312
312
  * default.
313
313
  */
314
- suggestedPresentationDelay? : number;
314
+ suggestedPresentationDelay? : number | undefined;
315
315
  /** URIs where the manifest can be refreshed by order of importance. */
316
- uris?: string[];
316
+ uris? : string[] | undefined;
317
317
  }
318
318