rx-player 3.26.3-dev.2022021400 → 3.27.0-dev.2022032100

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/.eslintrc.js +0 -4
  2. package/CHANGELOG.md +17 -2
  3. package/FILES.md +5 -4
  4. package/VERSION +1 -1
  5. package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
  6. package/dist/_esm5.processed/compat/browser_detection.js +4 -2
  7. package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
  8. package/dist/_esm5.processed/compat/eme/close_session.js +143 -36
  9. package/dist/_esm5.processed/compat/eme/custom_key_system_access.d.ts +15 -0
  10. package/dist/_esm5.processed/compat/eme/custom_key_system_access.js +1 -17
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +6 -7
  12. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
  13. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +20 -22
  14. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +58 -40
  15. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +49 -48
  16. package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
  17. package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
  18. package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
  19. package/dist/_esm5.processed/compat/eme/load_session.js +67 -17
  20. package/dist/_esm5.processed/compat/event_listeners.js +2 -1
  21. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
  22. package/dist/_esm5.processed/config.d.ts +166 -1080
  23. package/dist/_esm5.processed/config.js +17 -1119
  24. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
  25. package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
  26. package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
  27. package/dist/_esm5.processed/core/api/index.d.ts +2 -1
  28. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +2 -1
  29. package/dist/_esm5.processed/core/api/option_utils.d.ts +6 -3
  30. package/dist/_esm5.processed/core/api/option_utils.js +21 -7
  31. package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
  32. package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
  33. package/dist/_esm5.processed/core/api/public_api.js +73 -35
  34. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -49
  35. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +25 -65
  36. package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
  37. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +103 -0
  38. package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
  39. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +40 -0
  40. package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
  41. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +865 -0
  42. package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
  43. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
  44. package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
  45. package/dist/_esm5.processed/core/decrypt/create_session.js +173 -0
  46. package/dist/_esm5.processed/core/{eme/dispose_media_keys.d.ts → decrypt/dispose_decryption_resources.d.ts} +4 -4
  47. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
  48. package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
  49. package/dist/_esm5.processed/core/decrypt/find_key_system.js +299 -0
  50. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
  51. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
  52. package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
  53. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
  54. package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
  55. package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
  56. package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
  57. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
  58. package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
  59. package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
  60. package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
  61. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
  62. package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +119 -241
  63. package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
  64. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
  65. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
  66. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
  67. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
  68. package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
  69. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +84 -0
  70. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
  71. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
  72. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
  73. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
  74. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
  75. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
  76. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
  77. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
  78. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
  79. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
  80. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
  81. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
  82. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
  83. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +302 -0
  84. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
  85. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
  86. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
  87. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
  88. package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
  89. package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
  90. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
  91. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
  92. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -5
  93. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +1 -1
  94. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  95. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +2 -3
  96. package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
  97. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +1 -1
  98. package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
  99. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +6 -3
  100. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
  101. package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
  102. package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
  103. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
  104. package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
  105. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
  106. package/dist/_esm5.processed/core/init/types.d.ts +2 -4
  107. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
  108. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
  109. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
  110. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
  111. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
  112. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
  113. package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
  114. package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
  115. package/dist/_esm5.processed/core/stream/index.d.ts +1 -0
  116. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
  117. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
  118. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
  119. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.d.ts +15 -11
  120. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +6 -3
  121. package/dist/_esm5.processed/core/stream/period/index.d.ts +1 -0
  122. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +5 -12
  123. package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
  124. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +2 -2
  125. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
  126. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
  127. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
  128. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
  129. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
  130. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
  131. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
  132. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
  133. package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
  134. package/dist/_esm5.processed/default_config.d.ts +1114 -0
  135. package/dist/_esm5.processed/default_config.js +1145 -0
  136. package/dist/_esm5.processed/experimental/index.d.ts +2 -0
  137. package/dist/_esm5.processed/experimental/index.js +2 -0
  138. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
  139. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +6 -7
  140. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.js +2 -3
  141. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +15 -0
  142. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -2
  143. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +3 -5
  144. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +3 -5
  145. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +1 -2
  146. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.js +1 -2
  147. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.js +1 -2
  148. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -2
  149. package/dist/_esm5.processed/features/features_object.js +1 -1
  150. package/dist/_esm5.processed/features/initialize_features.js +1 -1
  151. package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
  152. package/dist/_esm5.processed/features/list/eme.js +5 -5
  153. package/dist/_esm5.processed/features/types.d.ts +3 -3
  154. package/dist/_esm5.processed/manifest/manifest.d.ts +1 -14
  155. package/dist/_esm5.processed/manifest/manifest.js +10 -74
  156. package/dist/_esm5.processed/manifest/representation.d.ts +35 -3
  157. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
  158. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
  159. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +1 -1
  160. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +87 -75
  161. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
  162. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +4 -5
  163. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
  164. package/dist/_esm5.processed/public_types.d.ts +3 -2
  165. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +1 -2
  166. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +4 -3
  167. package/dist/_esm5.processed/transports/dash/image_pipelines.js +60 -11
  168. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -2
  169. package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
  170. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +1 -1
  171. package/dist/_esm5.processed/transports/dash/segment_loader.js +3 -4
  172. package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
  173. package/dist/_esm5.processed/transports/dash/text_loader.js +1 -2
  174. package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
  175. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -3
  176. package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
  177. package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
  178. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +2 -3
  179. package/dist/_esm5.processed/transports/smooth/pipelines.js +71 -14
  180. package/dist/_esm5.processed/transports/smooth/segment_loader.js +3 -4
  181. package/dist/_esm5.processed/transports/types.d.ts +22 -0
  182. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -2
  183. package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -2
  184. package/dist/_esm5.processed/utils/cast_to_observable.js +1 -3
  185. package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
  186. package/dist/_esm5.processed/utils/deep_merge.js +53 -0
  187. package/dist/_esm5.processed/utils/reference.d.ts +29 -0
  188. package/dist/_esm5.processed/utils/reference.js +72 -24
  189. package/dist/_esm5.processed/utils/request/fetch.js +1 -2
  190. package/dist/_esm5.processed/utils/request/xhr.js +2 -3
  191. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
  192. package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
  193. package/dist/_esm5.processed/utils/task_canceller.js +3 -3
  194. package/dist/rx-player.js +4936 -3340
  195. package/dist/rx-player.min.js +1 -1
  196. package/dummy +1 -0
  197. package/{dist/_esm5.processed/utils/promise.d.ts → experimental/index.d.ts} +1 -2
  198. package/{dist/_esm5.processed/utils/promise.js → experimental/index.js} +1 -3
  199. package/package.json +32 -35
  200. package/{src/typings/pinkie.d.ts → scripts/build/templates/experimental/index.d.ts} +1 -4
  201. package/scripts/build/templates/experimental/index.js +16 -0
  202. package/scripts/update-version +2 -2
  203. package/sonar-project.properties +1 -1
  204. package/src/README.md +6 -6
  205. package/src/compat/__tests__/play.test.ts +2 -4
  206. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
  207. package/src/compat/browser_detection.ts +4 -2
  208. package/src/compat/eme/close_session.ts +89 -56
  209. package/src/compat/eme/custom_key_system_access.ts +1 -2
  210. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +6 -7
  211. package/src/compat/eme/custom_media_keys/index.ts +20 -38
  212. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +68 -52
  213. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +57 -56
  214. package/src/compat/eme/generate_key_request.ts +25 -33
  215. package/src/compat/eme/load_session.ts +28 -31
  216. package/src/compat/event_listeners.ts +2 -1
  217. package/src/compat/should_favour_custom_safari_EME.ts +5 -2
  218. package/src/config.ts +17 -1210
  219. package/src/core/README.md +1 -1
  220. package/src/core/abr/bandwidth_estimator.ts +4 -4
  221. package/src/core/abr/network_analyzer.ts +5 -6
  222. package/src/core/api/__tests__/get_player_state.test.ts +3 -3
  223. package/src/core/api/__tests__/option_utils.test.ts +29 -17
  224. package/src/core/api/get_player_state.ts +1 -1
  225. package/src/core/api/index.ts +3 -0
  226. package/src/core/api/option_utils.ts +42 -23
  227. package/src/core/api/playback_observer.ts +12 -8
  228. package/src/core/api/public_api.ts +152 -113
  229. package/src/core/decrypt/README.md +22 -0
  230. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
  231. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
  232. package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
  233. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
  234. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
  235. package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +31 -93
  236. package/src/core/{eme → decrypt}/attach_media_keys.ts +48 -56
  237. package/src/core/decrypt/clear_on_stop.ts +47 -0
  238. package/src/core/decrypt/content_decryptor.ts +1157 -0
  239. package/src/core/decrypt/create_or_load_session.ts +130 -0
  240. package/src/core/decrypt/create_session.ts +174 -0
  241. package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
  242. package/src/core/{eme → decrypt}/find_key_system.ts +111 -122
  243. package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
  244. package/src/core/decrypt/get_media_keys.ts +145 -0
  245. package/src/core/{eme → decrypt}/index.ts +11 -8
  246. package/src/core/decrypt/init_media_keys.ts +51 -0
  247. package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
  248. package/src/core/decrypt/set_server_certificate.ts +104 -0
  249. package/src/core/{eme → decrypt}/types.ts +128 -258
  250. package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
  251. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
  252. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
  253. package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
  254. package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
  255. package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +19 -20
  256. package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
  257. package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
  258. package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
  259. package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
  260. package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
  261. package/src/core/decrypt/utils/key_session_record.ts +175 -0
  262. package/src/core/decrypt/utils/loaded_sessions_store.ts +317 -0
  263. package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
  264. package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
  265. package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
  266. package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
  267. package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -7
  268. package/src/core/fetchers/segment/segment_fetcher.ts +4 -4
  269. package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
  270. package/src/core/fetchers/utils/try_urls_with_backoff.ts +2 -3
  271. package/src/core/init/.initialize_media_source.ts.un~ +0 -0
  272. package/src/core/init/get_initial_time.ts +2 -1
  273. package/src/core/init/initialize_directfile.ts +17 -20
  274. package/src/core/init/initialize_media_source.ts +44 -106
  275. package/src/core/init/link_drm_and_content.ts +176 -0
  276. package/src/core/init/manifest_update_scheduler.ts +5 -3
  277. package/src/core/init/stall_avoider.ts +6 -5
  278. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
  279. package/src/core/init/types.ts +1 -39
  280. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
  281. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +3 -4
  282. package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
  283. package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
  284. package/src/core/stream/events_generators.ts +9 -4
  285. package/src/core/stream/index.ts +1 -0
  286. package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
  287. package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
  288. package/src/core/stream/period/get_adaptation_switch_strategy.ts +25 -15
  289. package/src/core/stream/period/index.ts +1 -0
  290. package/src/core/stream/period/period_stream.ts +10 -16
  291. package/src/core/stream/representation/force_garbage_collection.ts +2 -2
  292. package/src/core/stream/representation/get_buffer_status.ts +28 -16
  293. package/src/core/stream/representation/get_needed_segments.ts +124 -28
  294. package/src/core/stream/representation/get_segment_priority.ts +1 -2
  295. package/src/core/stream/representation/push_media_segment.ts +3 -2
  296. package/src/core/stream/representation/representation_stream.ts +30 -7
  297. package/src/core/stream/types.ts +1 -1
  298. package/src/default_config.ts +1241 -0
  299. package/src/experimental/index.ts +5 -0
  300. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
  301. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +7 -7
  302. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
  303. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +9 -10
  304. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +2 -4
  305. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +2 -3
  306. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +1 -2
  307. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +3 -5
  308. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +3 -5
  309. package/src/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.ts +1 -2
  310. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.ts +1 -2
  311. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts +1 -2
  312. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.ts +1 -2
  313. package/src/features/__tests__/initialize_features.test.ts +2 -2
  314. package/src/features/features_object.ts +1 -1
  315. package/src/features/initialize_features.ts +1 -1
  316. package/src/features/list/__tests__/eme.test.ts +5 -5
  317. package/src/features/list/eme.ts +5 -5
  318. package/src/features/types.ts +3 -10
  319. package/src/manifest/manifest.ts +6 -76
  320. package/src/manifest/representation.ts +36 -3
  321. package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
  322. package/src/parsers/manifest/dash/common/indexes/template.ts +1 -2
  323. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +1 -1
  324. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +109 -64
  325. package/src/parsers/manifest/dash/common/parse_mpd.ts +1 -2
  326. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +4 -5
  327. package/src/parsers/manifest/smooth/create_parser.ts +1 -0
  328. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
  329. package/src/public_types.ts +6 -1
  330. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +1 -2
  331. package/src/transports/dash/image_pipelines.ts +15 -14
  332. package/src/transports/dash/init_segment_loader.ts +1 -2
  333. package/src/transports/dash/manifest_parser.ts +2 -3
  334. package/src/transports/dash/segment_loader.ts +4 -5
  335. package/src/transports/dash/segment_parser.ts +5 -0
  336. package/src/transports/dash/text_loader.ts +2 -3
  337. package/src/transports/dash/text_parser.ts +8 -0
  338. package/src/transports/local/segment_loader.ts +2 -3
  339. package/src/transports/local/segment_parser.ts +4 -0
  340. package/src/transports/local/text_parser.ts +8 -0
  341. package/src/transports/metaplaylist/pipelines.ts +2 -3
  342. package/src/transports/smooth/pipelines.ts +26 -14
  343. package/src/transports/smooth/segment_loader.ts +5 -6
  344. package/src/transports/types.ts +22 -0
  345. package/src/transports/utils/call_custom_manifest_loader.ts +1 -2
  346. package/src/utils/__tests__/deep_merge.test.ts +48 -0
  347. package/src/utils/cancellable_sleep.ts +1 -2
  348. package/src/utils/cast_to_observable.ts +0 -2
  349. package/src/utils/deep_merge.ts +46 -0
  350. package/src/utils/reference.ts +116 -23
  351. package/src/utils/request/fetch.ts +1 -2
  352. package/src/utils/request/xhr.ts +3 -3
  353. package/src/utils/rx-from_cancellable_promise.ts +7 -2
  354. package/src/utils/task_canceller.ts +6 -4
  355. package/tsconfig.json +0 -1
  356. package/tsconfig.modules.json +0 -1
  357. package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
  358. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
  359. package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
  360. package/dist/_esm5.processed/core/eme/create_session.js +0 -126
  361. package/dist/_esm5.processed/core/eme/dispose_eme.d.ts +0 -19
  362. package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
  363. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
  364. package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
  365. package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
  366. package/dist/_esm5.processed/core/eme/find_key_system.js +0 -253
  367. package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
  368. package/dist/_esm5.processed/core/eme/get_session.js +0 -68
  369. package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
  370. package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
  371. package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
  372. package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
  373. package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
  374. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
  375. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
  376. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
  377. package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
  378. package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
  379. package/src/core/eme/README.md +0 -26
  380. package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
  381. package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
  382. package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
  383. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
  384. package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
  385. package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
  386. package/src/core/eme/clear_eme_session.ts +0 -62
  387. package/src/core/eme/create_session.ts +0 -187
  388. package/src/core/eme/dispose_eme.ts +0 -25
  389. package/src/core/eme/dispose_media_keys.ts +0 -46
  390. package/src/core/eme/eme_manager.ts +0 -387
  391. package/src/core/eme/get_media_keys.ts +0 -141
  392. package/src/core/eme/get_session.ts +0 -135
  393. package/src/core/eme/init_media_keys.ts +0 -106
  394. package/src/core/eme/set_server_certificate.ts +0 -115
  395. package/src/core/eme/utils/close_session.ts +0 -113
  396. package/src/core/eme/utils/init_data_store.ts +0 -234
  397. package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
  398. package/src/core/init/create_eme_manager.ts +0 -95
  399. package/src/utils/__tests__/promise.test.ts +0 -23
  400. package/src/utils/promise.ts +0 -20
@@ -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";
@@ -142,29 +144,24 @@ function getAdaptationSetSwitchingIDs(adaptation) {
142
144
  */
143
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) &&
@@ -186,6 +183,7 @@ export default function parseAdaptationSets(adaptationsIR, context) {
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);
@@ -216,19 +214,16 @@ export default function parseAdaptationSets(adaptationsIR, context) {
216
214
  arrayFind(essentialProperties, function (scheme) {
217
215
  return scheme.schemeIdUri === "http://dashif.org/guidelines/trickmode";
218
216
  }) : undefined;
219
- 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(" ");
220
218
  var isTrickModeTrack = trickModeAttachedAdaptationIds !== undefined;
221
219
  if (type === "video" &&
222
220
  isMainAdaptation &&
223
- parsedAdaptations.video !== undefined &&
224
- parsedAdaptations.video.length > 0 &&
225
- lastMainAdaptationIndex.video !== undefined &&
221
+ lastMainVideoAdapIdx >= 0 &&
222
+ parsedAdaptations.video.length > lastMainVideoAdapIdx &&
226
223
  !isTrickModeTrack) {
227
- // Add to the already existing main video adaptation
228
- // TODO remove that ugly custom logic?
229
- var videoMainAdaptation = parsedAdaptations.video[lastMainAdaptationIndex.video];
230
- reprCtxt.unsafelyBaseOnPreviousAdaptation = (_f = (_e = context
231
- .unsafelyBaseOnPreviousPeriod) === null || _e === void 0 ? void 0 : _e.getAdaptation(videoMainAdaptation.id)) !== null && _f !== void 0 ? _f : null;
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;
232
227
  var representations = parseRepresentations(representationsIR, adaptation, reprCtxt);
233
228
  (_a = videoMainAdaptation.representations).push.apply(_a, representations);
234
229
  newID = videoMainAdaptation.id;
@@ -268,8 +263,8 @@ export default function parseAdaptationSets(adaptationsIR, context) {
268
263
  }
269
264
  newID = adaptationID;
270
265
  parsedAdaptationsIDs.push(adaptationID);
271
- reprCtxt.unsafelyBaseOnPreviousAdaptation = (_h = (_g = context
272
- .unsafelyBaseOnPreviousPeriod) === null || _g === void 0 ? void 0 : _g.getAdaptation(adaptationID)) !== null && _h !== void 0 ? _h : null;
266
+ reprCtxt.unsafelyBaseOnPreviousAdaptation = (_j = (_h = context
267
+ .unsafelyBaseOnPreviousPeriod) === null || _h === void 0 ? void 0 : _h.getAdaptation(adaptationID)) !== null && _j !== void 0 ? _j : null;
273
268
  var representations = parseRepresentations(representationsIR, adaptation, reprCtxt);
274
269
  var parsedAdaptationSet = { id: adaptationID, representations: representations, type: type, isTrickModeTrack: isTrickModeTrack };
275
270
  if (adaptation.attributes.language != null) {
@@ -287,75 +282,92 @@ export default function parseAdaptationSets(adaptationsIR, context) {
287
282
  if (isSignInterpreted === true) {
288
283
  parsedAdaptationSet.isSignInterpreted = true;
289
284
  }
290
- var adaptationsOfTheSameType = parsedAdaptations[type];
291
285
  if (trickModeAttachedAdaptationIds !== undefined) {
292
286
  trickModeAdaptations.push({ adaptation: parsedAdaptationSet, trickModeAttachedAdaptationIds: trickModeAttachedAdaptationIds });
293
287
  }
294
- else if (adaptationsOfTheSameType === undefined) {
295
- parsedAdaptations[type] = [parsedAdaptationSet];
296
- if (isMainAdaptation) {
297
- lastMainAdaptationIndex[type] = 0;
298
- }
299
- }
300
288
  else {
301
- var mergedInto = null;
289
+ // look if we have to merge this into another Adaptation
290
+ var mergedIntoIdx = -1;
302
291
  var _loop_1 = function (id) {
303
292
  var _k;
304
293
  var switchingInfos = adaptationSwitchingInfos[id];
305
- if (switchingInfos != null &&
294
+ if (switchingInfos !== undefined &&
306
295
  switchingInfos.newID !== newID &&
307
296
  arrayIncludes(switchingInfos.adaptationSetSwitchingIDs, originalID)) {
308
- var adaptationToMergeInto = arrayFind(adaptationsOfTheSameType, function (a) { return a.id === id; });
309
- if (adaptationToMergeInto != null &&
310
- 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 ===
311
301
  parsedAdaptationSet.audioDescription &&
312
- adaptationToMergeInto.closedCaption ===
302
+ mergedInto[0].closedCaption ===
313
303
  parsedAdaptationSet.closedCaption &&
314
- adaptationToMergeInto.language === parsedAdaptationSet.language) {
304
+ mergedInto[0].language === parsedAdaptationSet.language) {
315
305
  log.info("DASH Parser: merging \"switchable\" AdaptationSets", originalID, id);
316
- (_k = adaptationToMergeInto.representations)
317
- .push.apply(_k, parsedAdaptationSet.representations);
318
- 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
+ };
319
318
  }
320
319
  }
321
320
  };
322
- // look if we have to merge this into another Adaptation
323
- for (var _j = 0, adaptationSetSwitchingIDs_1 = adaptationSetSwitchingIDs; _j < adaptationSetSwitchingIDs_1.length; _j++) {
324
- var id = adaptationSetSwitchingIDs_1[_j];
321
+ for (var _i = 0, adaptationSetSwitchingIDs_1 = adaptationSetSwitchingIDs; _i < adaptationSetSwitchingIDs_1.length; _i++) {
322
+ var id = adaptationSetSwitchingIDs_1[_i];
325
323
  _loop_1(id);
326
324
  }
327
- if (isMainAdaptation) {
328
- var oldLastMainIdx = lastMainAdaptationIndex[type];
329
- var newLastMainIdx = oldLastMainIdx === undefined ? 0 :
330
- oldLastMainIdx + 1;
331
- if (mergedInto === null) {
332
- // put "main" Adaptation after all other Main Adaptations
333
- adaptationsOfTheSameType.splice(newLastMainIdx, 0, parsedAdaptationSet);
334
- lastMainAdaptationIndex[type] = newLastMainIdx;
335
- }
336
- else {
337
- var indexOf = adaptationsOfTheSameType.indexOf(mergedInto);
338
- if (indexOf < 0) { // Weird, not found
339
- adaptationsOfTheSameType.splice(newLastMainIdx, 0, parsedAdaptationSet);
340
- lastMainAdaptationIndex[type] = newLastMainIdx;
341
- }
342
- else if (oldLastMainIdx === undefined || indexOf > oldLastMainIdx) {
343
- // Found but was not main
344
- adaptationsOfTheSameType.splice(indexOf, 1);
345
- adaptationsOfTheSameType.splice(newLastMainIdx, 0, mergedInto);
346
- lastMainAdaptationIndex[type] = newLastMainIdx;
347
- }
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;
348
330
  }
349
331
  }
350
- else if (mergedInto === null) {
351
- adaptationsOfTheSameType.push(parsedAdaptationSet);
352
- }
353
332
  }
354
333
  }
355
334
  if (originalID != null && adaptationSwitchingInfos[originalID] == null) {
356
335
  adaptationSwitchingInfos[originalID] = { newID: newID, adaptationSetSwitchingIDs: adaptationSetSwitchingIDs };
357
336
  }
358
337
  }
359
- attachTrickModeTrack(parsedAdaptations, trickModeAdaptations);
360
- 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;
361
373
  }
@@ -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];
@@ -52,7 +52,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
52
52
  import log from "../../../../../log";
53
53
  import assertUnreachable from "../../../../../utils/assert_unreachable";
54
54
  import noop from "../../../../../utils/noop";
55
- import PPromise from "../../../../../utils/promise";
56
55
  import parseMpdIr from "../../common";
57
56
  import { generateRootChildrenParser } from "./generators";
58
57
  import { generateXLinkChildrenParser } from "./generators/XLink";
@@ -86,7 +85,7 @@ var DashWasmParser = /** @class */ (function () {
86
85
  */
87
86
  DashWasmParser.prototype.waitForInitialization = function () {
88
87
  var _a;
89
- return (_a = this._initProm) !== null && _a !== void 0 ? _a : PPromise.reject("No initialization performed yet.");
88
+ return (_a = this._initProm) !== null && _a !== void 0 ? _a : Promise.reject("No initialization performed yet.");
90
89
  };
91
90
  DashWasmParser.prototype.initialize = function (opts) {
92
91
  return __awaiter(this, void 0, void 0, function () {
@@ -175,11 +174,11 @@ var DashWasmParser = /** @class */ (function () {
175
174
  var _this = this;
176
175
  return __generator(this, function (_a) {
177
176
  if (this.status !== "uninitialized") {
178
- return [2 /*return*/, PPromise.reject(new Error("DashWasmParser already initialized."))];
177
+ return [2 /*return*/, Promise.reject(new Error("DashWasmParser already initialized."))];
179
178
  }
180
179
  else if (!this.isCompatible()) {
181
180
  this.status = "failure";
182
- return [2 /*return*/, PPromise.reject(new Error("Target not compatible with WebAssembly."))];
181
+ return [2 /*return*/, Promise.reject(new Error("Target not compatible with WebAssembly."))];
183
182
  }
184
183
  this.status = "initializing";
185
184
  parsersStack = this._parsersStack;
@@ -201,7 +200,7 @@ var DashWasmParser = /** @class */ (function () {
201
200
  fetchedWasm = fetch(opts.wasmUrl);
202
201
  streamingProm = typeof WebAssembly.instantiateStreaming === "function" ?
203
202
  WebAssembly.instantiateStreaming(fetchedWasm, imports) :
204
- PPromise.reject("`WebAssembly.instantiateStreaming` API not available");
203
+ Promise.reject("`WebAssembly.instantiateStreaming` API not available");
205
204
  this._initProm = streamingProm
206
205
  .catch(function (e) { return __awaiter(_this, void 0, void 0, function () {
207
206
  var res, resAb;
@@ -48,6 +48,7 @@ var MIME_TYPES = {
48
48
  AVC1: "video/mp4",
49
49
  H264: "video/mp4",
50
50
  TTML: "application/ttml+xml+mp4",
51
+ DFXP: "application/ttml+xml+mp4",
51
52
  };
52
53
  /**
53
54
  * @param {Object|undefined} parserOptions
@@ -17,8 +17,9 @@
17
17
  * This file exports types we want to expose to library users.
18
18
  * Those types are considered as part of the API.
19
19
  */
20
- export { IConstructorOptions, ILoadVideoOptions, ITransportOptions, IKeySystemOption, ISupplementaryTextTrackOption, ISupplementaryImageTrackOption, IDefaultAudioTrackOption, IDefaultTextTrackOption, INetworkConfigOption, IStartAtOption, ITMAudioTrackListItem as IAvailableAudioTrack, ITMTextTrackListItem as IAvailableTextTrack, ITMVideoTrackListItem as IAvailableVideoTrack, ITMAudioTrack as IAudioTrack, ITMTextTrack as ITextTrack, ITMVideoTrack as IVideoTrack, IAudioTrackPreference, ITextTrackPreference, IVideoTrackPreference, IStreamEvent, IStreamEventData, } from "./core/api";
21
- export { IPersistentSessionInfo, IPersistentSessionStorage, } from "./core/eme";
20
+ export { IConstructorOptions, ILoadVideoOptions, ITransportOptions, IKeySystemOption, ISupplementaryTextTrackOption, ISupplementaryImageTrackOption, IDefaultAudioTrackOption, IDefaultTextTrackOption, INetworkConfigOption, IStartAtOption, ITMAudioTrackListItem as IAvailableAudioTrack, ITMTextTrackListItem as IAvailableTextTrack, ITMVideoTrackListItem as IAvailableVideoTrack, ITMAudioTrack as IAudioTrack, ITMTextTrack as ITextTrack, ITMVideoTrack as IVideoTrack, IAudioTrackPreference, ITextTrackPreference, IVideoTrackPreference, IBitrateEstimate, IPositionUpdateItem as IPositionUpdate, IPlayerState, IStreamEvent, IStreamEventData, } from "./core/api";
21
+ export { IPersistentSessionInfo, IPersistentSessionStorage, } from "./core/decrypt";
22
+ export { IAudioTrackSwitchingMode } from "./core/stream";
22
23
  export { ICustomError as IPlayerError } from "./errors";
23
24
  export { IExposedAdaptation as IAdaptation, IExposedManifest as IManifest, IExposedPeriod as IPeriod, IExposedRepresentation as IRepresentation, IExposedSegment as ISegment, IRepresentationFilter, IRepresentationInfos, } from "./manifest";
24
25
  export { ICustomSegmentLoader as ISegmentLoader, ICustomManifestLoader as IManifestLoader, } from "./transports";
@@ -24,7 +24,6 @@ var __assign = (this && this.__assign) || function () {
24
24
  };
25
25
  return __assign.apply(this, arguments);
26
26
  };
27
- import PPromise from "../../utils/promise";
28
27
  import TaskCanceller from "../../utils/task_canceller";
29
28
  import checkISOBMFFIntegrity from "../utils/check_isobmff_integrity";
30
29
  import inferSegmentContainer from "../utils/infer_segment_container";
@@ -37,7 +36,7 @@ import inferSegmentContainer from "../utils/infer_segment_container";
37
36
  */
38
37
  export default function addSegmentIntegrityChecks(segmentLoader) {
39
38
  return function (url, content, initialCancelSignal, callbacks) {
40
- return new PPromise(function (res, rej) {
39
+ return new Promise(function (res, rej) {
41
40
  var canceller = new TaskCanceller();
42
41
  var unregisterCancelLstnr = initialCancelSignal
43
42
  .register(function onCheckCancellation(err) {
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { CancellationSignal } from "../../utils/task_canceller";
17
- import { IImageTrackSegmentData, ILoadedImageSegmentFormat, ISegmentContext, ISegmentLoaderCallbacks, ISegmentLoaderResultChunkedComplete, ISegmentLoaderResultSegmentCreated, ISegmentLoaderResultSegmentLoaded, ISegmentParserParsedInitChunk, ISegmentParserParsedMediaChunk } from "../types";
17
+ import { IImageTrackSegmentData, ILoadedImageSegmentFormat, ISegmentContext, ISegmentLoaderCallbacks, ISegmentLoaderResultSegmentCreated, ISegmentLoaderResultSegmentLoaded, ISegmentParserParsedInitChunk, ISegmentParserParsedMediaChunk } from "../types";
18
18
  /**
19
19
  * Loads an image segment.
20
20
  * @param {string|null} url
@@ -23,10 +23,11 @@ import { IImageTrackSegmentData, ILoadedImageSegmentFormat, ISegmentContext, ISe
23
23
  * @param {Object} callbacks
24
24
  * @returns {Promise}
25
25
  */
26
- export declare function imageLoader(url: string | null, content: ISegmentContext, cancelSignal: CancellationSignal, callbacks: ISegmentLoaderCallbacks<ILoadedImageSegmentFormat>): Promise<ISegmentLoaderResultSegmentLoaded<ILoadedImageSegmentFormat> | ISegmentLoaderResultSegmentCreated<ILoadedImageSegmentFormat> | ISegmentLoaderResultChunkedComplete>;
26
+ export declare function imageLoader(url: string | null, content: ISegmentContext, cancelSignal: CancellationSignal, callbacks: ISegmentLoaderCallbacks<ILoadedImageSegmentFormat>): Promise<ISegmentLoaderResultSegmentLoaded<ILoadedImageSegmentFormat> | ISegmentLoaderResultSegmentCreated<ILoadedImageSegmentFormat>>;
27
27
  /**
28
28
  * Parses an image segment.
29
- * @param {Object} args
29
+ * @param {Object} loadedSegment
30
+ * @param {Object} content
30
31
  * @returns {Object}
31
32
  */
32
33
  export declare function imageParser(loadedSegment: {
@@ -13,8 +13,43 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
23
+ });
24
+ };
25
+ var __generator = (this && this.__generator) || function (thisArg, body) {
26
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
27
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
28
+ function verb(n) { return function (v) { return step([n, v]); }; }
29
+ function step(op) {
30
+ if (f) throw new TypeError("Generator is already executing.");
31
+ while (_) try {
32
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
33
+ if (y = 0, t) op = [op[0] & 2, t.value];
34
+ switch (op[0]) {
35
+ case 0: case 1: t = op; break;
36
+ case 4: _.label++; return { value: op[1], done: false };
37
+ case 5: _.label++; y = op[1]; op = [0]; continue;
38
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
39
+ default:
40
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
41
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
42
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
43
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
44
+ if (t[2]) _.ops.pop();
45
+ _.trys.pop(); continue;
46
+ }
47
+ op = body.call(thisArg, _);
48
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
49
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
50
+ }
51
+ };
16
52
  import features from "../../features";
17
- import PPromise from "../../utils/promise";
18
53
  import request from "../../utils/request";
19
54
  import takeFirstSet from "../../utils/take_first_set";
20
55
  /**
@@ -26,19 +61,30 @@ import takeFirstSet from "../../utils/take_first_set";
26
61
  * @returns {Promise}
27
62
  */
28
63
  export function imageLoader(url, content, cancelSignal, callbacks) {
29
- var segment = content.segment;
30
- if (segment.isInit || url === null) {
31
- return PPromise.resolve({ resultType: "segment-created",
32
- resultData: null });
33
- }
34
- return request({ url: url, responseType: "arraybuffer",
35
- onProgress: callbacks.onProgress, cancelSignal: cancelSignal })
36
- .then(function (data) { return ({ resultType: "segment-loaded",
37
- resultData: data }); });
64
+ return __awaiter(this, void 0, void 0, function () {
65
+ var segment, data;
66
+ return __generator(this, function (_a) {
67
+ switch (_a.label) {
68
+ case 0:
69
+ segment = content.segment;
70
+ if (segment.isInit || url === null) {
71
+ return [2 /*return*/, { resultType: "segment-created",
72
+ resultData: null }];
73
+ }
74
+ return [4 /*yield*/, request({ url: url, responseType: "arraybuffer",
75
+ onProgress: callbacks.onProgress, cancelSignal: cancelSignal })];
76
+ case 1:
77
+ data = _a.sent();
78
+ return [2 /*return*/, { resultType: "segment-loaded",
79
+ resultData: data }];
80
+ }
81
+ });
82
+ });
38
83
  }
39
84
  /**
40
85
  * Parses an image segment.
41
- * @param {Object} args
86
+ * @param {Object} loadedSegment
87
+ * @param {Object} content
42
88
  * @returns {Object}
43
89
  */
44
90
  export function imageParser(loadedSegment, content) {
@@ -47,6 +93,7 @@ export function imageParser(loadedSegment, content) {
47
93
  if (content.segment.isInit) { // image init segment has no use
48
94
  return { segmentType: "init",
49
95
  initializationData: null,
96
+ initializationDataSize: 0,
50
97
  protectionDataUpdate: false,
51
98
  initTimescale: undefined };
52
99
  }
@@ -58,6 +105,7 @@ export function imageParser(loadedSegment, content) {
58
105
  if (data === null || features.imageParser === null) {
59
106
  return { segmentType: "media",
60
107
  chunkData: null,
108
+ chunkSize: 0,
61
109
  chunkInfos: { duration: segment.duration,
62
110
  time: segment.time }, chunkOffset: chunkOffset, protectionDataUpdate: false,
63
111
  appendWindow: [period.start, period.end] };
@@ -70,6 +118,7 @@ export function imageParser(loadedSegment, content) {
70
118
  end: Number.MAX_VALUE,
71
119
  timescale: 1,
72
120
  type: "bif" },
121
+ chunkSize: undefined,
73
122
  chunkInfos: { time: 0,
74
123
  duration: Number.MAX_VALUE }, chunkOffset: chunkOffset, protectionDataUpdate: false,
75
124
  appendWindow: [period.start, period.end] };
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { concat } from "../../utils/byte_parsing";
17
- import PPromise from "../../utils/promise";
18
17
  import request from "../../utils/request";
19
18
  import byteRange from "../utils/byte_range";
20
19
  /**
@@ -49,7 +48,7 @@ export default function initSegmentLoader(url, segment, cancelSignal, callbacks)
49
48
  responseType: "arraybuffer", cancelSignal: cancelSignal, onProgress: callbacks.onProgress });
50
49
  var indexRequest$ = request({ url: url, headers: { Range: byteRange(segment.indexRange) },
51
50
  responseType: "arraybuffer", cancelSignal: cancelSignal, onProgress: callbacks.onProgress });
52
- return PPromise.all([rangeRequest$, indexRequest$])
51
+ return Promise.all([rangeRequest$, indexRequest$])
53
52
  .then(function (_a) {
54
53
  var initData = _a[0], indexData = _a[1];
55
54
  var data = concat(new Uint8Array(initData.responseData), new Uint8Array(indexData.responseData));
@@ -18,7 +18,6 @@ import features from "../../features";
18
18
  import log from "../../log";
19
19
  import Manifest from "../../manifest";
20
20
  import objectAssign from "../../utils/object_assign";
21
- import PPromise from "../../utils/promise";
22
21
  import request from "../../utils/request";
23
22
  import { strToUtf8, utf8ToStr, } from "../../utils/string_parsing";
24
23
  export default function generateManifestParser(options) {
@@ -98,7 +97,7 @@ export default function generateManifestParser(options) {
98
97
  onWarnings(parserResponse.value.warnings);
99
98
  }
100
99
  if (cancelSignal.isCancelled) {
101
- return PPromise.reject(cancelSignal.cancellationError);
100
+ return Promise.reject(cancelSignal.cancellationError);
102
101
  }
103
102
  var manifest = new Manifest(parserResponse.value.parsed, options);
104
103
  return { manifest: manifest, url: url };
@@ -148,7 +147,7 @@ export default function generateManifestParser(options) {
148
147
  });
149
148
  });
150
149
  });
151
- return PPromise.all(externalResources).then(function (loadedResources) {
150
+ return Promise.all(externalResources).then(function (loadedResources) {
152
151
  if (value.format === "string") {
153
152
  assertLoadedResourcesFormatString(loadedResources);
154
153
  return processMpdParserResponse(value.continue(loadedResources));
@@ -17,7 +17,7 @@ import { CancellationSignal } from "../../utils/task_canceller";
17
17
  import { ICustomSegmentLoader, ILoadedAudioVideoSegmentFormat, ISegmentContext, ISegmentLoader, ISegmentLoaderCallbacks, ISegmentLoaderResultChunkedComplete, ISegmentLoaderResultSegmentCreated, ISegmentLoaderResultSegmentLoaded } from "../types";
18
18
  /**
19
19
  * Segment loader triggered if there was no custom-defined one in the API.
20
- * @param {string} uri
20
+ * @param {string} url
21
21
  * @param {Object} content
22
22
  * @param {boolean} lowLatencyMode
23
23
  * @param {Object} callbacks
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { CustomLoaderError } from "../../errors";
17
- import PPromise from "../../utils/promise";
18
17
  import request, { fetchIsSupported, } from "../../utils/request";
19
18
  import warnOnce from "../../utils/warn_once";
20
19
  import byteRange from "../utils/byte_range";
@@ -24,7 +23,7 @@ import initSegmentLoader from "./init_segment_loader";
24
23
  import lowLatencySegmentLoader from "./low_latency_segment_loader";
25
24
  /**
26
25
  * Segment loader triggered if there was no custom-defined one in the API.
27
- * @param {string} uri
26
+ * @param {string} url
28
27
  * @param {Object} content
29
28
  * @param {boolean} lowLatencyMode
30
29
  * @param {Object} callbacks
@@ -67,7 +66,7 @@ export default function generateSegmentLoader(_a) {
67
66
  */
68
67
  function segmentLoader(url, content, cancelSignal, callbacks) {
69
68
  if (url == null) {
70
- return PPromise.resolve({ resultType: "segment-created",
69
+ return Promise.resolve({ resultType: "segment-created",
71
70
  resultData: null });
72
71
  }
73
72
  if (lowLatencyMode || customSegmentLoader === undefined) {
@@ -79,7 +78,7 @@ export default function generateSegmentLoader(_a) {
79
78
  representation: content.representation,
80
79
  segment: content.segment,
81
80
  transport: "dash", url: url };
82
- return new PPromise(function (res, rej) {
81
+ return new Promise(function (res, rej) {
83
82
  /** `true` when the custom segmentLoader should not be active anymore. */
84
83
  var hasFinished = false;
85
84
  /**
@@ -36,11 +36,13 @@ export default function generateAudioVideoSegmentParser(_a) {
36
36
  if (segment.isInit) {
37
37
  return { segmentType: "init",
38
38
  initializationData: null,
39
+ initializationDataSize: 0,
39
40
  protectionDataUpdate: false,
40
41
  initTimescale: undefined };
41
42
  }
42
43
  return { segmentType: "media",
43
44
  chunkData: null,
45
+ chunkSize: 0,
44
46
  chunkInfos: null,
45
47
  chunkOffset: 0,
46
48
  protectionDataUpdate: false, appendWindow: appendWindow };
@@ -74,11 +76,11 @@ export default function generateAudioVideoSegmentParser(_a) {
74
76
  var events = getEventsOutOfEMSGs(whitelistedEMSGs, manifest.publishTime);
75
77
  if (events !== undefined) {
76
78
  var needsManifestRefresh = events.needsManifestRefresh, inbandEvents = events.inbandEvents;
77
- return { segmentType: "media", chunkData: chunkData, chunkInfos: chunkInfos, chunkOffset: chunkOffset, appendWindow: appendWindow, inbandEvents: inbandEvents, protectionDataUpdate: protectionDataUpdate, needsManifestRefresh: needsManifestRefresh };
79
+ return { segmentType: "media", chunkData: chunkData, chunkSize: chunkData.length, chunkInfos: chunkInfos, chunkOffset: chunkOffset, appendWindow: appendWindow, inbandEvents: inbandEvents, protectionDataUpdate: protectionDataUpdate, needsManifestRefresh: needsManifestRefresh };
78
80
  }
79
81
  }
80
82
  }
81
- return { segmentType: "media", chunkData: chunkData, chunkInfos: chunkInfos, chunkOffset: chunkOffset, protectionDataUpdate: protectionDataUpdate, appendWindow: appendWindow };
83
+ return { segmentType: "media", chunkData: chunkData, chunkSize: chunkData.length, chunkInfos: chunkInfos, chunkOffset: chunkOffset, protectionDataUpdate: protectionDataUpdate, appendWindow: appendWindow };
82
84
  }
83
85
  // we're handling an initialization segment
84
86
  var indexRange = segment.indexRange;
@@ -117,6 +119,7 @@ export default function generateAudioVideoSegmentParser(_a) {
117
119
  var parsedTimescale = isNullOrUndefined(timescale) ? undefined :
118
120
  timescale;
119
121
  return { segmentType: "init",
120
- initializationData: chunkData, protectionDataUpdate: protectionDataUpdate, initTimescale: parsedTimescale };
122
+ initializationData: chunkData,
123
+ initializationDataSize: chunkData.length, protectionDataUpdate: protectionDataUpdate, initTimescale: parsedTimescale };
121
124
  };
122
125
  }
@@ -13,7 +13,6 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import PPromise from "../../utils/promise";
17
16
  import request, { fetchIsSupported, } from "../../utils/request";
18
17
  import warnOnce from "../../utils/warn_once";
19
18
  import byteRange from "../utils/byte_range";
@@ -41,7 +40,7 @@ export default function generateTextTrackLoader(_a) {
41
40
  var adaptation = content.adaptation, representation = content.representation, segment = content.segment;
42
41
  var range = segment.range;
43
42
  if (url === null) {
44
- return PPromise.resolve({ resultType: "segment-created",
43
+ return Promise.resolve({ resultType: "segment-created",
45
44
  resultData: null });
46
45
  }
47
46
  if (segment.isInit) {