rx-player 4.0.0-dev.2023110700 → 4.0.0-dev.2023120600

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 (479) hide show
  1. package/CHANGELOG.md +18 -226
  2. package/FILES.md +1 -1
  3. package/VERSION +1 -1
  4. package/dist/_esm5.processed/compat/add_text_track.d.ts +1 -3
  5. package/dist/_esm5.processed/compat/add_text_track.js +4 -7
  6. package/dist/_esm5.processed/compat/browser_compatibility_types.d.ts +0 -7
  7. package/dist/_esm5.processed/compat/event_listeners.d.ts +2 -15
  8. package/dist/_esm5.processed/compat/event_listeners.js +2 -37
  9. package/dist/_esm5.processed/compat/index.d.ts +1 -3
  10. package/dist/_esm5.processed/compat/index.js +1 -3
  11. package/dist/_esm5.processed/config.d.ts +9 -21
  12. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.d.ts +0 -58
  13. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +14 -54
  14. package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.d.ts +2 -8
  15. package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.js +2 -11
  16. package/dist/_esm5.processed/core/api/debug/buffer_graph.js +2 -6
  17. package/dist/_esm5.processed/core/api/debug/modules/general_info.js +13 -32
  18. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +3 -3
  19. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +1 -1
  20. package/dist/_esm5.processed/core/api/option_utils.d.ts +14 -35
  21. package/dist/_esm5.processed/core/api/option_utils.js +47 -230
  22. package/dist/_esm5.processed/core/api/public_api.d.ts +92 -266
  23. package/dist/_esm5.processed/core/api/public_api.js +451 -807
  24. package/dist/_esm5.processed/core/{segment_buffers/implementations/image → api/track_management}/index.d.ts +3 -2
  25. package/dist/_esm5.processed/core/{segment_buffers/implementations/image → api/track_management}/index.js +3 -2
  26. package/dist/_esm5.processed/core/api/{tracks_management/media_element_track_choice_manager.d.ts → track_management/media_element_tracks_store.d.ts} +15 -75
  27. package/dist/_esm5.processed/core/api/{tracks_management/media_element_track_choice_manager.js → track_management/media_element_tracks_store.js} +74 -193
  28. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.d.ts +84 -0
  29. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +158 -0
  30. package/dist/_esm5.processed/core/api/track_management/tracks_store.d.ts +406 -0
  31. package/dist/_esm5.processed/core/api/track_management/tracks_store.js +932 -0
  32. package/dist/_esm5.processed/core/api/utils.d.ts +1 -0
  33. package/dist/_esm5.processed/core/api/utils.js +28 -11
  34. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +3 -3
  35. package/dist/_esm5.processed/core/decrypt/find_key_system.js +83 -71
  36. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +6 -5
  37. package/dist/_esm5.processed/core/decrypt/session_events_listener.js +10 -72
  38. package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.d.ts +4 -4
  39. package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.js +6 -4
  40. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +1 -3
  41. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +7 -26
  42. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +3 -9
  43. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +16 -9
  44. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -3
  45. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  46. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.d.ts +1 -6
  47. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +4 -41
  48. package/dist/_esm5.processed/core/init/directfile_content_initializer.js +1 -1
  49. package/dist/_esm5.processed/core/init/media_source_content_initializer.d.ts +1 -8
  50. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +5 -19
  51. package/dist/_esm5.processed/core/init/types.d.ts +5 -15
  52. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.d.ts +2 -36
  53. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +2 -82
  54. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +54 -6
  55. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
  56. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.js +19 -2
  57. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +1 -2
  58. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +2 -3
  59. package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +2 -2
  60. package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
  61. package/dist/_esm5.processed/core/segment_buffers/index.js +2 -1
  62. package/dist/_esm5.processed/core/segment_buffers/inventory/index.d.ts +1 -0
  63. package/dist/_esm5.processed/core/segment_buffers/inventory/index.js +1 -0
  64. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.d.ts +33 -0
  65. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.js +49 -0
  66. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +0 -1
  67. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +2 -16
  68. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +0 -15
  69. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +183 -93
  70. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.d.ts +39 -0
  71. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.js +133 -0
  72. package/dist/_esm5.processed/core/stream/adaptation/types.d.ts +27 -13
  73. package/dist/_esm5.processed/core/stream/index.d.ts +2 -3
  74. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +2 -0
  75. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +5 -7
  76. package/dist/_esm5.processed/core/stream/period/period_stream.js +13 -12
  77. package/dist/_esm5.processed/core/stream/period/types.d.ts +5 -14
  78. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +2 -4
  79. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.js +10 -46
  80. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +29 -23
  81. package/dist/_esm5.processed/core/stream/representation/types.d.ts +11 -1
  82. package/dist/_esm5.processed/default_config.d.ts +35 -98
  83. package/dist/_esm5.processed/default_config.js +36 -113
  84. package/dist/_esm5.processed/errors/custom_loader_error.d.ts +1 -3
  85. package/dist/_esm5.processed/errors/custom_loader_error.js +1 -3
  86. package/dist/_esm5.processed/errors/media_error.js +2 -2
  87. package/dist/_esm5.processed/errors/network_error.d.ts +0 -1
  88. package/dist/_esm5.processed/errors/network_error.js +0 -1
  89. package/dist/_esm5.processed/errors/request_error.d.ts +2 -3
  90. package/dist/_esm5.processed/errors/request_error.js +2 -5
  91. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -3
  92. package/dist/_esm5.processed/features/features_object.js +0 -2
  93. package/dist/_esm5.processed/features/list/directfile.js +2 -5
  94. package/dist/_esm5.processed/features/list/index.d.ts +0 -2
  95. package/dist/_esm5.processed/features/list/index.js +0 -2
  96. package/dist/_esm5.processed/features/types.d.ts +3 -27
  97. package/dist/_esm5.processed/manifest/adaptation.d.ts +9 -11
  98. package/dist/_esm5.processed/manifest/adaptation.js +41 -30
  99. package/dist/_esm5.processed/manifest/index.d.ts +3 -4
  100. package/dist/_esm5.processed/manifest/manifest.d.ts +5 -54
  101. package/dist/_esm5.processed/manifest/manifest.js +5 -110
  102. package/dist/_esm5.processed/manifest/period.d.ts +4 -5
  103. package/dist/_esm5.processed/manifest/representation.d.ts +10 -5
  104. package/dist/_esm5.processed/manifest/representation.js +33 -10
  105. package/dist/_esm5.processed/manifest/representation_index/index.d.ts +2 -2
  106. package/dist/_esm5.processed/manifest/representation_index/static.d.ts +2 -0
  107. package/dist/_esm5.processed/manifest/representation_index/static.js +6 -0
  108. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +42 -21
  109. package/dist/_esm5.processed/manifest/types.d.ts +0 -2
  110. package/dist/_esm5.processed/parsers/manifest/dash/common/convert_supplemental_codecs.d.ts +17 -0
  111. package/dist/_esm5.processed/parsers/manifest/dash/common/convert_supplemental_codecs.js +26 -0
  112. package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
  113. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +17 -31
  114. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +26 -19
  115. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +2 -0
  116. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +7 -1
  117. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +2 -6
  118. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +11 -8
  119. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +2 -0
  120. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +6 -0
  121. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  122. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.js +1 -6
  123. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +3 -5
  124. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +0 -2
  125. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -1
  126. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +2 -2
  127. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +0 -2
  128. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +2 -2
  129. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +29 -17
  130. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +13 -6
  131. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +7 -2
  132. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.d.ts +10 -1
  133. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +18 -2
  134. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +6 -4
  135. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +7 -6
  136. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +5 -2
  137. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
  138. package/dist/_esm5.processed/parsers/manifest/local/representation_index.d.ts +2 -0
  139. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +6 -0
  140. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +6 -6
  141. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.d.ts +12 -3
  142. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.js +11 -2
  143. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +0 -1
  144. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +11 -17
  145. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +21 -83
  146. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +53 -125
  147. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.d.ts +119 -0
  148. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.js +159 -0
  149. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.d.ts +3 -6
  150. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.js +4 -4
  151. package/dist/_esm5.processed/parsers/manifest/types.d.ts +4 -3
  152. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_extent.js +1 -8
  153. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_origin.js +1 -9
  154. package/dist/_esm5.processed/public_types.d.ts +396 -308
  155. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.d.ts +5 -4
  156. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +5 -4
  157. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +4 -4
  158. package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
  159. package/dist/_esm5.processed/transports/dash/pipelines.js +1 -4
  160. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
  161. package/dist/_esm5.processed/transports/dash/segment_loader.js +26 -20
  162. package/dist/_esm5.processed/transports/dash/segment_parser.js +19 -24
  163. package/dist/_esm5.processed/transports/dash/text_loader.js +5 -5
  164. package/dist/_esm5.processed/transports/dash/text_parser.js +28 -33
  165. package/dist/_esm5.processed/transports/local/pipelines.js +1 -10
  166. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
  167. package/dist/_esm5.processed/transports/local/segment_parser.d.ts +1 -1
  168. package/dist/_esm5.processed/transports/local/segment_parser.js +10 -10
  169. package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
  170. package/dist/_esm5.processed/transports/local/text_parser.js +23 -23
  171. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +34 -52
  172. package/dist/_esm5.processed/{utils/list_to_map.d.ts → transports/smooth/is_mp4_embedded_track.d.ts} +5 -5
  173. package/dist/_esm5.processed/{features/list/image_buffer.d.ts → transports/smooth/is_mp4_embedded_track.js} +7 -6
  174. package/dist/_esm5.processed/transports/smooth/pipelines.js +33 -190
  175. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +1 -1
  176. package/dist/_esm5.processed/transports/smooth/segment_loader.js +28 -22
  177. package/dist/_esm5.processed/transports/smooth/utils.d.ts +1 -26
  178. package/dist/_esm5.processed/transports/smooth/utils.js +1 -55
  179. package/dist/_esm5.processed/transports/types.d.ts +94 -89
  180. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
  181. package/dist/_esm5.processed/transports/utils/infer_segment_container.d.ts +3 -3
  182. package/dist/_esm5.processed/transports/utils/infer_segment_container.js +5 -7
  183. package/dist/_esm5.processed/transports/utils/parse_text_track.d.ts +8 -12
  184. package/dist/_esm5.processed/transports/utils/parse_text_track.js +19 -21
  185. package/dist/_esm5.processed/utils/array_includes.d.ts +2 -1
  186. package/dist/_esm5.processed/utils/array_includes.js +30 -28
  187. package/dist/_esm5.processed/utils/request/xhr.js +5 -5
  188. package/dist/commonjs/compat/is_codec_supported.js +22 -1
  189. package/dist/commonjs/compat/patch_webkit_source_buffer.js +2 -2
  190. package/dist/commonjs/config.d.ts +1 -0
  191. package/dist/commonjs/core/api/debug/buffer_graph.js +2 -6
  192. package/dist/commonjs/core/api/debug/modules/general_info.js +17 -10
  193. package/dist/commonjs/core/api/option_utils.d.ts +4 -0
  194. package/dist/commonjs/core/api/option_utils.js +8 -3
  195. package/dist/commonjs/core/api/public_api.d.ts +11 -1
  196. package/dist/commonjs/core/api/public_api.js +46 -11
  197. package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
  198. package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.js +11 -3
  199. package/dist/commonjs/core/fetchers/segment/segment_fetcher.d.ts +8 -1
  200. package/dist/commonjs/core/fetchers/segment/segment_fetcher.js +8 -4
  201. package/dist/commonjs/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
  202. package/dist/commonjs/core/fetchers/utils/schedule_request.js +1 -1
  203. package/dist/commonjs/core/init/directfile_content_initializer.js +24 -7
  204. package/dist/commonjs/core/init/media_source_content_initializer.d.ts +6 -0
  205. package/dist/commonjs/core/init/media_source_content_initializer.js +4 -6
  206. package/dist/commonjs/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
  207. package/dist/commonjs/core/init/utils/content_time_boundaries_observer.js +16 -17
  208. package/dist/commonjs/core/init/utils/get_initial_time.d.ts +17 -3
  209. package/dist/commonjs/core/init/utils/get_initial_time.js +9 -7
  210. package/dist/commonjs/core/segment_buffers/implementations/text/html/text_track_cues_store.js +54 -6
  211. package/dist/commonjs/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
  212. package/dist/commonjs/core/segment_buffers/implementations/text/html/utils.js +19 -2
  213. package/dist/commonjs/core/stream/adaptation/adaptation_stream.js +2 -2
  214. package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.js +3 -3
  215. package/dist/commonjs/core/stream/period/period_stream.js +2 -2
  216. package/dist/commonjs/core/stream/representation/utils/get_buffer_status.js +3 -3
  217. package/dist/commonjs/core/stream/representation/utils/get_needed_segments.js +1 -1
  218. package/dist/commonjs/default_config.d.ts +5 -0
  219. package/dist/commonjs/default_config.js +5 -0
  220. package/dist/commonjs/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
  221. package/dist/commonjs/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
  222. package/dist/commonjs/manifest/representation.js +18 -5
  223. package/dist/commonjs/manifest/representation_index/static.d.ts +1 -1
  224. package/dist/commonjs/manifest/representation_index/static.js +2 -2
  225. package/dist/commonjs/manifest/representation_index/types.d.ts +4 -4
  226. package/dist/commonjs/parsers/manifest/dash/common/convert_supplemental_codecs.d.ts +17 -0
  227. package/dist/commonjs/parsers/manifest/dash/common/convert_supplemental_codecs.js +30 -0
  228. package/dist/commonjs/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
  229. package/dist/commonjs/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
  230. package/dist/commonjs/parsers/manifest/dash/common/indexes/base.js +4 -3
  231. package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
  232. package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
  233. package/dist/commonjs/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
  234. package/dist/commonjs/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
  235. package/dist/commonjs/parsers/manifest/dash/common/indexes/list.js +2 -2
  236. package/dist/commonjs/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
  237. package/dist/commonjs/parsers/manifest/dash/common/indexes/template.js +42 -29
  238. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
  239. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
  240. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +250 -51
  241. package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
  242. package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
  243. package/dist/commonjs/parsers/manifest/dash/common/parse_adaptation_sets.js +13 -10
  244. package/dist/commonjs/parsers/manifest/dash/common/parse_mpd.js +27 -14
  245. package/dist/commonjs/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
  246. package/dist/commonjs/parsers/manifest/dash/common/parse_periods.js +17 -18
  247. package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
  248. package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.js +21 -8
  249. package/dist/commonjs/parsers/manifest/dash/common/parse_representations.js +36 -20
  250. package/dist/commonjs/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +3 -0
  251. package/dist/commonjs/parsers/manifest/dash/js-parser/node_parsers/Representation.js +3 -0
  252. package/dist/commonjs/parsers/manifest/dash/node_parser_types.d.ts +2 -0
  253. package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +4 -0
  254. package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +4 -0
  255. package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
  256. package/dist/commonjs/parsers/manifest/local/representation_index.d.ts +1 -1
  257. package/dist/commonjs/parsers/manifest/local/representation_index.js +3 -3
  258. package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
  259. package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.js +2 -2
  260. package/dist/commonjs/parsers/manifest/smooth/representation_index.d.ts +5 -5
  261. package/dist/commonjs/parsers/manifest/smooth/representation_index.js +25 -9
  262. package/dist/commonjs/parsers/manifest/types.d.ts +1 -0
  263. package/dist/commonjs/parsers/manifest/utils/index_helpers.js +1 -1
  264. package/dist/commonjs/public_types.d.ts +78 -34
  265. package/dist/commonjs/transports/dash/init_segment_loader.js +10 -5
  266. package/dist/commonjs/transports/dash/manifest_parser.js +5 -2
  267. package/dist/commonjs/transports/dash/segment_loader.js +2 -1
  268. package/dist/commonjs/transports/dash/text_loader.js +2 -0
  269. package/dist/commonjs/transports/metaplaylist/manifest_loader.js +2 -1
  270. package/dist/commonjs/transports/metaplaylist/pipelines.js +4 -1
  271. package/dist/commonjs/transports/smooth/pipelines.js +4 -2
  272. package/dist/commonjs/transports/smooth/segment_loader.js +2 -1
  273. package/dist/commonjs/transports/types.d.ts +12 -0
  274. package/dist/commonjs/transports/utils/generate_manifest_loader.js +6 -3
  275. package/dist/commonjs/utils/queue_microtask.d.ts +2 -0
  276. package/dist/commonjs/utils/queue_microtask.js +7 -0
  277. package/dist/commonjs/utils/request/fetch.d.ts +6 -0
  278. package/dist/commonjs/utils/request/fetch.js +29 -8
  279. package/dist/commonjs/utils/request/xhr.d.ts +11 -5
  280. package/dist/commonjs/utils/request/xhr.js +29 -8
  281. package/dist/es2017/compat/is_codec_supported.js +22 -1
  282. package/dist/es2017/compat/patch_webkit_source_buffer.js +2 -2
  283. package/dist/es2017/config.d.ts +1 -0
  284. package/dist/es2017/core/api/debug/buffer_graph.js +2 -6
  285. package/dist/es2017/core/api/debug/modules/general_info.js +17 -10
  286. package/dist/es2017/core/api/option_utils.d.ts +4 -0
  287. package/dist/es2017/core/api/option_utils.js +8 -3
  288. package/dist/es2017/core/api/public_api.d.ts +11 -1
  289. package/dist/es2017/core/api/public_api.js +44 -9
  290. package/dist/es2017/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
  291. package/dist/es2017/core/fetchers/manifest/manifest_fetcher.js +11 -3
  292. package/dist/es2017/core/fetchers/segment/segment_fetcher.d.ts +8 -1
  293. package/dist/es2017/core/fetchers/segment/segment_fetcher.js +8 -4
  294. package/dist/es2017/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
  295. package/dist/es2017/core/fetchers/utils/schedule_request.js +1 -1
  296. package/dist/es2017/core/init/directfile_content_initializer.js +24 -7
  297. package/dist/es2017/core/init/media_source_content_initializer.d.ts +6 -0
  298. package/dist/es2017/core/init/media_source_content_initializer.js +4 -6
  299. package/dist/es2017/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
  300. package/dist/es2017/core/init/utils/content_time_boundaries_observer.js +16 -15
  301. package/dist/es2017/core/init/utils/get_initial_time.d.ts +17 -3
  302. package/dist/es2017/core/init/utils/get_initial_time.js +9 -7
  303. package/dist/es2017/core/segment_buffers/implementations/text/html/text_track_cues_store.js +54 -6
  304. package/dist/es2017/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
  305. package/dist/es2017/core/segment_buffers/implementations/text/html/utils.js +18 -2
  306. package/dist/es2017/core/stream/adaptation/adaptation_stream.js +2 -2
  307. package/dist/es2017/core/stream/orchestrator/stream_orchestrator.js +3 -3
  308. package/dist/es2017/core/stream/period/period_stream.js +2 -2
  309. package/dist/es2017/core/stream/representation/utils/get_buffer_status.js +3 -3
  310. package/dist/es2017/core/stream/representation/utils/get_needed_segments.js +1 -1
  311. package/dist/es2017/default_config.d.ts +5 -0
  312. package/dist/es2017/default_config.js +5 -0
  313. package/dist/es2017/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
  314. package/dist/es2017/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
  315. package/dist/es2017/manifest/representation.js +18 -5
  316. package/dist/es2017/manifest/representation_index/static.d.ts +1 -1
  317. package/dist/es2017/manifest/representation_index/static.js +2 -2
  318. package/dist/es2017/manifest/representation_index/types.d.ts +4 -4
  319. package/dist/es2017/parsers/manifest/dash/common/convert_supplemental_codecs.d.ts +17 -0
  320. package/dist/es2017/parsers/manifest/dash/common/convert_supplemental_codecs.js +26 -0
  321. package/dist/es2017/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
  322. package/dist/es2017/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
  323. package/dist/es2017/parsers/manifest/dash/common/indexes/base.js +4 -3
  324. package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
  325. package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
  326. package/dist/es2017/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
  327. package/dist/es2017/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
  328. package/dist/es2017/parsers/manifest/dash/common/indexes/list.js +2 -2
  329. package/dist/es2017/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
  330. package/dist/es2017/parsers/manifest/dash/common/indexes/template.js +40 -27
  331. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
  332. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
  333. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +246 -51
  334. package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
  335. package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
  336. package/dist/es2017/parsers/manifest/dash/common/parse_adaptation_sets.js +11 -8
  337. package/dist/es2017/parsers/manifest/dash/common/parse_mpd.js +27 -13
  338. package/dist/es2017/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
  339. package/dist/es2017/parsers/manifest/dash/common/parse_periods.js +13 -16
  340. package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
  341. package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.js +10 -8
  342. package/dist/es2017/parsers/manifest/dash/common/parse_representations.js +36 -20
  343. package/dist/es2017/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +3 -0
  344. package/dist/es2017/parsers/manifest/dash/js-parser/node_parsers/Representation.js +3 -0
  345. package/dist/es2017/parsers/manifest/dash/node_parser_types.d.ts +2 -0
  346. package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +4 -0
  347. package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +4 -0
  348. package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
  349. package/dist/es2017/parsers/manifest/local/representation_index.d.ts +1 -1
  350. package/dist/es2017/parsers/manifest/local/representation_index.js +3 -3
  351. package/dist/es2017/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
  352. package/dist/es2017/parsers/manifest/metaplaylist/representation_index.js +2 -2
  353. package/dist/es2017/parsers/manifest/smooth/representation_index.d.ts +5 -5
  354. package/dist/es2017/parsers/manifest/smooth/representation_index.js +25 -9
  355. package/dist/es2017/parsers/manifest/types.d.ts +1 -0
  356. package/dist/es2017/parsers/manifest/utils/index_helpers.js +1 -1
  357. package/dist/es2017/public_types.d.ts +78 -34
  358. package/dist/es2017/transports/dash/init_segment_loader.js +5 -0
  359. package/dist/es2017/transports/dash/manifest_parser.js +3 -0
  360. package/dist/es2017/transports/dash/segment_loader.js +1 -0
  361. package/dist/es2017/transports/dash/text_loader.js +2 -0
  362. package/dist/es2017/transports/metaplaylist/manifest_loader.js +1 -0
  363. package/dist/es2017/transports/metaplaylist/pipelines.js +4 -1
  364. package/dist/es2017/transports/smooth/pipelines.js +2 -0
  365. package/dist/es2017/transports/smooth/segment_loader.js +1 -0
  366. package/dist/es2017/transports/types.d.ts +12 -0
  367. package/dist/es2017/transports/utils/generate_manifest_loader.js +3 -0
  368. package/dist/es2017/utils/queue_microtask.d.ts +2 -0
  369. package/dist/es2017/utils/queue_microtask.js +5 -0
  370. package/dist/es2017/utils/request/fetch.d.ts +6 -0
  371. package/dist/es2017/utils/request/fetch.js +29 -8
  372. package/dist/es2017/utils/request/xhr.d.ts +11 -5
  373. package/dist/es2017/utils/request/xhr.js +30 -9
  374. package/dist/mpd-parser.wasm +0 -0
  375. package/dist/rx-player.js +900 -492
  376. package/dist/rx-player.min.js +1 -1
  377. package/package.json +3 -7
  378. package/scripts/update-version +2 -0
  379. package/sonar-project.properties +1 -1
  380. package/src/compat/is_codec_supported.ts +23 -1
  381. package/src/compat/patch_webkit_source_buffer.ts +2 -2
  382. package/src/core/api/debug/buffer_graph.ts +2 -5
  383. package/src/core/api/debug/modules/general_info.ts +15 -10
  384. package/src/core/api/option_utils.ts +11 -3
  385. package/src/core/api/public_api.ts +48 -8
  386. package/src/core/fetchers/manifest/manifest_fetcher.ts +21 -3
  387. package/src/core/fetchers/segment/segment_fetcher.ts +19 -5
  388. package/src/core/fetchers/segment/segment_fetcher_creator.ts +1 -0
  389. package/src/core/fetchers/utils/schedule_request.ts +1 -1
  390. package/src/core/init/directfile_content_initializer.ts +23 -7
  391. package/src/core/init/media_source_content_initializer.ts +13 -7
  392. package/src/core/init/utils/content_time_boundaries_observer.ts +23 -22
  393. package/src/core/init/utils/get_initial_time.ts +25 -12
  394. package/src/core/segment_buffers/implementations/text/html/__tests__/utils.test.ts +15 -0
  395. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +57 -6
  396. package/src/core/segment_buffers/implementations/text/html/utils.ts +19 -2
  397. package/src/core/stream/adaptation/adaptation_stream.ts +2 -2
  398. package/src/core/stream/orchestrator/stream_orchestrator.ts +3 -3
  399. package/src/core/stream/period/period_stream.ts +2 -2
  400. package/src/core/stream/representation/utils/get_buffer_status.ts +3 -3
  401. package/src/core/stream/representation/utils/get_needed_segments.ts +2 -2
  402. package/src/default_config.ts +5 -0
  403. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +3 -1
  404. package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +2 -0
  405. package/src/manifest/representation.ts +19 -6
  406. package/src/manifest/representation_index/static.ts +2 -2
  407. package/src/manifest/representation_index/types.ts +4 -4
  408. package/src/parsers/manifest/dash/common/__tests__/convert_supplemental_codecs.test.ts +37 -0
  409. package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +20 -0
  410. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +182 -36
  411. package/src/parsers/manifest/dash/common/convert_supplemental_codecs.ts +32 -0
  412. package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +5 -0
  413. package/src/parsers/manifest/dash/common/indexes/base.ts +12 -4
  414. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +19 -5
  415. package/src/parsers/manifest/dash/common/indexes/index.ts +16 -4
  416. package/src/parsers/manifest/dash/common/indexes/list.ts +2 -2
  417. package/src/parsers/manifest/dash/common/indexes/template.ts +52 -31
  418. package/src/parsers/manifest/dash/common/indexes/timeline/index.ts +4 -1
  419. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +366 -60
  420. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +63 -25
  421. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +10 -4
  422. package/src/parsers/manifest/dash/common/parse_mpd.ts +28 -15
  423. package/src/parsers/manifest/dash/common/parse_periods.ts +12 -17
  424. package/src/parsers/manifest/dash/common/parse_representation_index.ts +50 -26
  425. package/src/parsers/manifest/dash/common/parse_representations.ts +39 -20
  426. package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +4 -0
  427. package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +4 -0
  428. package/src/parsers/manifest/dash/node_parser_types.ts +2 -0
  429. package/src/parsers/manifest/dash/wasm-parser/rs/events.rs +2 -0
  430. package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +2 -0
  431. package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +4 -0
  432. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +4 -0
  433. package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +2 -0
  434. package/src/parsers/manifest/local/representation_index.ts +3 -3
  435. package/src/parsers/manifest/metaplaylist/representation_index.ts +2 -2
  436. package/src/parsers/manifest/smooth/representation_index.ts +23 -9
  437. package/src/parsers/manifest/types.ts +2 -0
  438. package/src/parsers/manifest/utils/__tests__/get_first_time_from_adaptations.test.ts +1 -1
  439. package/src/parsers/manifest/utils/__tests__/get_last_time_from_adaptation.test.ts +1 -1
  440. package/src/parsers/manifest/utils/index_helpers.ts +1 -1
  441. package/src/public_types.ts +79 -34
  442. package/src/transports/dash/init_segment_loader.ts +5 -0
  443. package/src/transports/dash/manifest_parser.ts +6 -0
  444. package/src/transports/dash/segment_loader.ts +1 -0
  445. package/src/transports/dash/text_loader.ts +2 -0
  446. package/src/transports/metaplaylist/manifest_loader.ts +1 -0
  447. package/src/transports/metaplaylist/pipelines.ts +4 -1
  448. package/src/transports/smooth/pipelines.ts +2 -0
  449. package/src/transports/smooth/segment_loader.ts +1 -0
  450. package/src/transports/types.ts +12 -0
  451. package/src/transports/utils/generate_manifest_loader.ts +3 -0
  452. package/src/utils/queue_microtask.ts +7 -0
  453. package/src/utils/request/fetch.ts +35 -8
  454. package/src/utils/request/xhr.ts +45 -14
  455. package/dist/_esm5.processed/compat/fullscreen.d.ts +0 -32
  456. package/dist/_esm5.processed/compat/fullscreen.js +0 -78
  457. package/dist/_esm5.processed/compat/is_offline.d.ts +0 -39
  458. package/dist/_esm5.processed/compat/is_offline.js +0 -43
  459. package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.d.ts +0 -258
  460. package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.js +0 -989
  461. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.d.ts +0 -75
  462. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +0 -133
  463. package/dist/_esm5.processed/features/list/bif_parser.d.ts +0 -23
  464. package/dist/_esm5.processed/features/list/bif_parser.js +0 -27
  465. package/dist/_esm5.processed/features/list/image_buffer.js +0 -25
  466. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +0 -38
  467. package/dist/_esm5.processed/transports/dash/image_pipelines.js +0 -129
  468. package/dist/_esm5.processed/utils/list_to_map.js +0 -28
  469. package/dist/_esm5.processed/utils/simple_set.d.ts +0 -51
  470. package/dist/_esm5.processed/utils/simple_set.js +0 -57
  471. package/dist/_esm5.processed/utils/uniq.d.ts +0 -36
  472. package/dist/_esm5.processed/utils/uniq.js +0 -43
  473. package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
  474. package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.js +0 -54
  475. package/dist/es2017/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
  476. package/dist/es2017/parsers/manifest/utils/is_segment_still_available.js +0 -51
  477. package/src/parsers/manifest/utils/is_segment_still_available.ts +0 -58
  478. package/src/typings/next-tick.d.ts +0 -23
  479. package/src/typings/object-assign.d.ts +0 -48
@@ -154,6 +154,7 @@ export interface IParsedRepresentation {
154
154
  hdrInfo?: IHDRInformation | undefined;
155
155
  /** `true` if audio has Dolby Atmos. */
156
156
  isSpatialAudio?: boolean | undefined;
157
+ supplementalCodecs?: string | undefined;
157
158
  }
158
159
  /** Every possible types an Adaptation can have. */
159
160
  export type IParsedAdaptationType = "audio" | "video" | "text";
@@ -97,7 +97,7 @@ export function getTimescaledRange(start, duration, timescale) {
97
97
  * timescaled time.
98
98
  * Returns -1 if the given time is lower than the start of the first available
99
99
  * segment.
100
- * @param {Object} index
100
+ * @param {Object} timeline
101
101
  * @param {Number} timeTScaled
102
102
  * @returns {Number}
103
103
  */
@@ -203,10 +203,20 @@ export type IStartAtOption = {
203
203
  percentage: number;
204
204
  } | {
205
205
  /**
206
- * If set, we should begin at this position relative to the content's end,
207
- * in seconds.
206
+ * If set, we should begin at this position relative to the content's maximum
207
+ * seekable position, in seconds.
208
208
  */
209
209
  fromLastPosition: number;
210
+ } | {
211
+ /**
212
+ * If set, we should begin at this position relative to the content's live
213
+ * edge if it makes sense, in seconds.
214
+ *
215
+ * If the live edge is unknown or if it does not make sense for the current
216
+ * content, that position is relative to the content's maximum position
217
+ * instead.
218
+ */
219
+ fromLivePosition: number;
210
220
  } | {
211
221
  /**
212
222
  * If set, we should begin at this position relative to the content's start,
@@ -214,40 +224,37 @@ export type IStartAtOption = {
214
224
  */
215
225
  fromFirstPosition: number;
216
226
  };
227
+ export interface RequestRetryParameters {
228
+ /**
229
+ * The amount of time maximum we should retry a request before failing on Error.
230
+ * Set to `Infinity` for an infinite number of requests.
231
+ */
232
+ maxRetry?: number | undefined;
233
+ /**
234
+ * Amount of time, in milliseconds, after which a request should be
235
+ * aborted and optionally retried, depending on the maxRetry configuration.
236
+ *
237
+ * Setting it to `-1` allows to disable any timeout.
238
+ * `undefined` means that a default, large, timeout will be used instead.
239
+ */
240
+ timeout?: number | undefined;
241
+ /**
242
+ * Amount of time, in milliseconds, after which a request that hasn't receive
243
+ * the headers and status code should be aborted and optionnaly retried,
244
+ * depending on the maxRetry configuration.
245
+ */
246
+ connectionTimeout?: number | undefined;
247
+ }
217
248
  /** Value for the `requestConfig` option of the `loadVideo` method. */
218
249
  export interface IRequestConfig {
219
- manifest?: {
220
- /**
221
- * The amount of time maximum we should retry a Manifest or Manifest-related
222
- * request before failing on Error.
223
- * Set to `Infinity` for an infinite number of requests.
224
- */
225
- maxRetry?: number | undefined;
226
- /**
227
- * Amount of time, in milliseconds, after which a manifest request should be
228
- * aborted and optionally retried, depending on the current configuration.
229
- *
230
- * Setting it to `-1` allows to disable any timeout.
231
- * `undefined` means that a default, large, timeout will be used instead.
232
- */
233
- timeout?: number | undefined;
234
- } | undefined;
235
- segment?: {
236
- /**
237
- * The amount of time maximum we should retry a segment or segment-related
238
- * request before failing on Error.
239
- * Set to `Infinity` for an infinite number of requests.
240
- */
241
- maxRetry?: number | undefined;
242
- /**
243
- * Amount of time, in milliseconds, after which a segment request should be
244
- * aborted and optionally retried, depending on the current configuration.
245
- *
246
- * Setting it to `-1` allows to disable any timeout.
247
- * `undefined` means that a default, large, timeout will be used instead.
248
- */
249
- timeout?: number | undefined;
250
- } | undefined;
250
+ /**
251
+ * Defines the retry parameters when requesting manifest
252
+ */
253
+ manifest?: RequestRetryParameters | undefined;
254
+ /**
255
+ * Defines the retry parameters when requesting a segment
256
+ */
257
+ segment?: RequestRetryParameters | undefined;
251
258
  }
252
259
  export type ISegmentLoader = (
253
260
  /** Information on the segment to request */
@@ -808,18 +815,55 @@ export interface ILockedAudioRepresentationsSettings {
808
815
  switchingMode?: IAudioRepresentationsSwitchingMode | undefined;
809
816
  }
810
817
  export interface IAudioTrackSetting {
818
+ /** `id` of the audio track you want to set. */
811
819
  trackId: string;
820
+ /**
821
+ * `id` of the Period for which you want that setting applied.
822
+ * Keeping it undefined means it will apply to the currently-playing Period.
823
+ */
812
824
  periodId?: string | undefined;
825
+ /**
826
+ * Behavior wanted when replacing an audio track / Adaptation by another.
827
+ * @see IAudioTrackSwitchingMode
828
+ *
829
+ * Keeping it undefined means that the RxPlayer will automatically select
830
+ * the most adapted choice.
831
+ */
813
832
  switchingMode?: IAudioTrackSwitchingMode | undefined;
833
+ /**
834
+ * Representations (a.k.a. qualities) you want to play in that new track.
835
+ * Keeping it undefined means that all compatible qualities may be played.
836
+ */
814
837
  lockedRepresentations?: string[] | undefined;
815
838
  }
816
839
  export interface IVideoTrackSetting {
840
+ /** `id` of the video track you want to set. */
817
841
  trackId: string;
842
+ /**
843
+ * `id` of the Period for which you want that setting applied.
844
+ * Keeping it undefined means it will apply to the currently-playing Period.
845
+ */
818
846
  periodId?: string | undefined;
847
+ /**
848
+ * Behavior wanted when replacing an video track / Adaptation by another.
849
+ * @see IVideoTrackSwitchingMode
850
+ *
851
+ * Keeping it undefined means that the RxPlayer will automatically select
852
+ * the most adapted choice.
853
+ */
819
854
  switchingMode?: IVideoTrackSwitchingMode | undefined;
855
+ /**
856
+ * Representations (a.k.a. qualities) you want to play in that new track.
857
+ * Keeping it undefined means that all compatible qualities may be played.
858
+ */
820
859
  lockedRepresentations?: string[] | undefined;
821
860
  }
822
861
  export interface ITextTrackSetting {
862
+ /** `id` of the text track you want to set. */
823
863
  trackId: string;
864
+ /**
865
+ * `id` of the Period for which you want that setting applied.
866
+ * Keeping it undefined means it will apply to the currently-playing Period.
867
+ */
824
868
  periodId?: string | undefined;
825
869
  }
@@ -30,6 +30,7 @@ export default function initSegmentLoader(url, segment, options, cancelSignal, c
30
30
  return request({ url,
31
31
  responseType: "arraybuffer",
32
32
  timeout: options.timeout,
33
+ connectionTimeout: options.connectionTimeout,
33
34
  cancelSignal,
34
35
  onProgress: callbacks.onProgress })
35
36
  .then(data => ({ resultType: "segment-loaded",
@@ -40,6 +41,7 @@ export default function initSegmentLoader(url, segment, options, cancelSignal, c
40
41
  headers: { Range: byteRange(segment.range) },
41
42
  responseType: "arraybuffer",
42
43
  timeout: options.timeout,
44
+ connectionTimeout: options.connectionTimeout,
43
45
  cancelSignal,
44
46
  onProgress: callbacks.onProgress })
45
47
  .then(data => ({ resultType: "segment-loaded",
@@ -52,6 +54,7 @@ export default function initSegmentLoader(url, segment, options, cancelSignal, c
52
54
  segment.indexRange[1]]) },
53
55
  responseType: "arraybuffer",
54
56
  timeout: options.timeout,
57
+ connectionTimeout: options.connectionTimeout,
55
58
  cancelSignal,
56
59
  onProgress: callbacks.onProgress })
57
60
  .then(data => ({ resultType: "segment-loaded",
@@ -61,12 +64,14 @@ export default function initSegmentLoader(url, segment, options, cancelSignal, c
61
64
  headers: { Range: byteRange(segment.range) },
62
65
  responseType: "arraybuffer",
63
66
  timeout: options.timeout,
67
+ connectionTimeout: options.connectionTimeout,
64
68
  cancelSignal,
65
69
  onProgress: callbacks.onProgress });
66
70
  const indexRequest$ = request({ url,
67
71
  headers: { Range: byteRange(segment.indexRange) },
68
72
  responseType: "arraybuffer",
69
73
  timeout: options.timeout,
74
+ connectionTimeout: options.connectionTimeout,
70
75
  cancelSignal,
71
76
  onProgress: callbacks.onProgress });
72
77
  return Promise.all([rangeRequest$, indexRequest$])
@@ -110,13 +110,16 @@ export default function generateManifestParser(options) {
110
110
  const externalResources = value.urls.map(resourceUrl => {
111
111
  return scheduleRequest(() => {
112
112
  const defaultTimeout = config.getCurrent().DEFAULT_REQUEST_TIMEOUT;
113
+ const defaultConnectionTimeout = config.getCurrent().DEFAULT_CONNECTION_TIMEOUT;
113
114
  return value.format === "string" ? request({ url: resourceUrl,
114
115
  responseType: "text",
115
116
  timeout: defaultTimeout,
117
+ connectionTimeout: defaultConnectionTimeout,
116
118
  cancelSignal }) :
117
119
  request({ url: resourceUrl,
118
120
  responseType: "arraybuffer",
119
121
  timeout: defaultTimeout,
122
+ connectionTimeout: defaultConnectionTimeout,
120
123
  cancelSignal });
121
124
  }).then((res) => {
122
125
  if (value.format === "string") {
@@ -53,6 +53,7 @@ export function regularSegmentLoader(url, context, lowLatencyMode, options, call
53
53
  { Range: byteRange(segment.range) } :
54
54
  undefined,
55
55
  timeout: options.timeout,
56
+ connectionTimeout: options.connectionTimeout,
56
57
  cancelSignal,
57
58
  onProgress: callbacks.onProgress })
58
59
  .then((data) => ({ resultType: "segment-loaded",
@@ -66,6 +66,7 @@ export default function generateTextTrackLoader({ lowLatencyMode, checkMediaSegm
66
66
  { Range: byteRange(range) } :
67
67
  null,
68
68
  timeout: options.timeout,
69
+ connectionTimeout: options.connectionTimeout,
69
70
  onProgress: callbacks.onProgress,
70
71
  cancelSignal })
71
72
  .then((data) => ({ resultType: "segment-loaded",
@@ -77,6 +78,7 @@ export default function generateTextTrackLoader({ lowLatencyMode, checkMediaSegm
77
78
  { Range: byteRange(range) } :
78
79
  null,
79
80
  timeout: options.timeout,
81
+ connectionTimeout: options.connectionTimeout,
80
82
  onProgress: callbacks.onProgress,
81
83
  cancelSignal })
82
84
  .then((data) => ({ resultType: "segment-loaded",
@@ -28,6 +28,7 @@ function regularManifestLoader(url, loaderOptions, cancelSignal) {
28
28
  return request({ url,
29
29
  responseType: "text",
30
30
  timeout: loaderOptions.timeout,
31
+ connectionTimeout: loaderOptions.connectionTimeout,
31
32
  cancelSignal });
32
33
  }
33
34
  /**
@@ -107,7 +107,10 @@ export default function (options) {
107
107
  * Whether a ManifestLoader's timeout should be relied on here
108
108
  * is ambiguous.
109
109
  */
110
- const manOpts = { timeout: config.getCurrent().DEFAULT_REQUEST_TIMEOUT };
110
+ const manOpts = {
111
+ timeout: config.getCurrent().DEFAULT_REQUEST_TIMEOUT,
112
+ connectionTimeout: config.getCurrent().DEFAULT_CONNECTION_TIMEOUT,
113
+ };
111
114
  return transport.manifest.loadManifest(resource.url, manOpts, cancelSignal);
112
115
  }
113
116
  });
@@ -133,6 +133,7 @@ export default function (transportOptions) {
133
133
  return request({ url,
134
134
  responseType: "text",
135
135
  timeout: loaderOptions.timeout,
136
+ connectionTimeout: loaderOptions.connectionTimeout,
136
137
  cancelSignal,
137
138
  onProgress: callbacks.onProgress })
138
139
  .then((data) => ({ resultType: "segment-loaded",
@@ -142,6 +143,7 @@ export default function (transportOptions) {
142
143
  return request({ url,
143
144
  responseType: "arraybuffer",
144
145
  timeout: loaderOptions.timeout,
146
+ connectionTimeout: loaderOptions.connectionTimeout,
145
147
  cancelSignal,
146
148
  onProgress: callbacks.onProgress })
147
149
  .then((data) => {
@@ -40,6 +40,7 @@ function regularSegmentLoader(url, context, callbacks, loaderOptions, cancelSign
40
40
  responseType: "arraybuffer",
41
41
  headers,
42
42
  timeout: loaderOptions.timeout,
43
+ connectionTimeout: loaderOptions.connectionTimeout,
43
44
  cancelSignal,
44
45
  onProgress: callbacks.onProgress })
45
46
  .then((data) => {
@@ -135,6 +135,12 @@ export interface IManifestLoaderOptions {
135
135
  * `undefined` means that no timeout will be enforced.
136
136
  */
137
137
  timeout?: number | undefined;
138
+ /**
139
+ * Connection timeout, in milliseconds, after which the request is canceled
140
+ * if the responses headers has not being received.
141
+ * Do not set or set to "undefined" to disable it.
142
+ */
143
+ connectionTimeout?: number | undefined;
138
144
  }
139
145
  /** Functions allowing to load and parse segments of any type. */
140
146
  export interface ISegmentPipeline<TLoadedFormat, TParsedSegmentDataFormat> {
@@ -168,6 +174,12 @@ export interface ISegmentLoaderOptions {
168
174
  * `undefined` means that no timeout will be enforced.
169
175
  */
170
176
  timeout?: number | undefined;
177
+ /**
178
+ * Connection timeout, in milliseconds, after which the request is canceled
179
+ * if the responses headers has not being received.
180
+ * Do not set or set to "undefined" to disable it.
181
+ */
182
+ connectionTimeout?: number | undefined;
171
183
  }
172
184
  /**
173
185
  * Segment parser function, allowing to parse a chunk (which may be a sub-part
@@ -34,16 +34,19 @@ function generateRegularManifestLoader(preferredType) {
34
34
  return request({ url,
35
35
  responseType: "arraybuffer",
36
36
  timeout: loaderOptions.timeout,
37
+ connectionTimeout: loaderOptions.connectionTimeout,
37
38
  cancelSignal });
38
39
  case "text":
39
40
  return request({ url,
40
41
  responseType: "text",
41
42
  timeout: loaderOptions.timeout,
43
+ connectionTimeout: loaderOptions.connectionTimeout,
42
44
  cancelSignal });
43
45
  case "document":
44
46
  return request({ url,
45
47
  responseType: "document",
46
48
  timeout: loaderOptions.timeout,
49
+ connectionTimeout: loaderOptions.connectionTimeout,
47
50
  cancelSignal });
48
51
  default:
49
52
  assertUnreachable(preferredType);
@@ -0,0 +1,2 @@
1
+ declare const _default: typeof queueMicrotask;
2
+ export default _default;
@@ -0,0 +1,5 @@
1
+ export default typeof queueMicrotask === "function" ?
2
+ queueMicrotask :
3
+ function queueMicrotaskPonyfill(cb) {
4
+ Promise.resolve().then(cb, () => cb());
5
+ };
@@ -67,6 +67,12 @@ export interface IFetchOptions {
67
67
  * if not all data has been received yet.
68
68
  */
69
69
  timeout?: number | undefined;
70
+ /**
71
+ * Optional connection timeout, in milliseconds, after which the request is canceled
72
+ * if the responses headers has not being received.
73
+ * Do not set or set to "undefined" to disable it.
74
+ */
75
+ connectionTimeout?: number | undefined;
70
76
  }
71
77
  export default function fetchRequest(options: IFetchOptions): Promise<IFetchedStreamComplete>;
72
78
  /**
@@ -40,7 +40,8 @@ export default function fetchRequest(options) {
40
40
  }
41
41
  log.debug("Fetch: Called with URL", options.url);
42
42
  let cancellation = null;
43
- let timeouted = false;
43
+ let isTimedOut = false;
44
+ let isConnectionTimedOut = false;
44
45
  const sendingTime = getMonotonicTimeStamp();
45
46
  const abortController = !isNullOrUndefined(_AbortController) ? new _AbortController() :
46
47
  null;
@@ -55,13 +56,26 @@ export default function fetchRequest(options) {
55
56
  }
56
57
  abortController.abort();
57
58
  }
58
- let timeout;
59
+ let timeoutId;
59
60
  if (options.timeout !== undefined) {
60
- timeout = setTimeout(() => {
61
- timeouted = true;
61
+ timeoutId = setTimeout(() => {
62
+ isTimedOut = true;
63
+ if (connectionTimeoutId !== undefined) {
64
+ clearTimeout(connectionTimeoutId);
65
+ }
62
66
  abortFetch();
63
67
  }, options.timeout);
64
68
  }
69
+ let connectionTimeoutId;
70
+ if (options.connectionTimeout !== undefined) {
71
+ connectionTimeoutId = setTimeout(() => {
72
+ isConnectionTimedOut = true;
73
+ if (timeoutId !== undefined) {
74
+ clearTimeout(timeoutId);
75
+ }
76
+ abortFetch();
77
+ }, options.connectionTimeout);
78
+ }
65
79
  const deregisterCancelLstnr = options.cancelSignal
66
80
  .register(function abortRequest(err) {
67
81
  cancellation = err;
@@ -74,8 +88,8 @@ export default function fetchRequest(options) {
74
88
  fetchOpts.signal = !isNullOrUndefined(abortController) ? abortController.signal :
75
89
  null;
76
90
  return fetch(options.url, fetchOpts).then((response) => {
77
- if (!isNullOrUndefined(timeout)) {
78
- clearTimeout(timeout);
91
+ if (connectionTimeoutId !== undefined) {
92
+ clearTimeout(connectionTimeoutId);
79
93
  }
80
94
  if (response.status >= 300) {
81
95
  log.warn("Fetch: Request HTTP Error", response.status, response.url);
@@ -108,6 +122,9 @@ export default function fetchRequest(options) {
108
122
  return readBufferAndSendEvents();
109
123
  }
110
124
  else if (data.done) {
125
+ if (timeoutId !== undefined) {
126
+ clearTimeout(timeoutId);
127
+ }
111
128
  deregisterCancelLstnr();
112
129
  const receivedTime = getMonotonicTimeStamp();
113
130
  const requestDuration = receivedTime - sendingTime;
@@ -125,8 +142,12 @@ export default function fetchRequest(options) {
125
142
  throw cancellation;
126
143
  }
127
144
  deregisterCancelLstnr();
128
- if (timeouted) {
129
- log.warn("Fetch: Request timeouted.");
145
+ if (isTimedOut) {
146
+ log.warn("Fetch: Request timed out.");
147
+ throw new RequestError(options.url, 0, NetworkErrorTypes.TIMEOUT);
148
+ }
149
+ else if (isConnectionTimedOut) {
150
+ log.warn("Fetch: Request connection timed out.");
130
151
  throw new RequestError(options.url, 0, NetworkErrorTypes.TIMEOUT);
131
152
  }
132
153
  else if (err instanceof RequestError) {
@@ -18,14 +18,14 @@ import { CancellationSignal } from "../task_canceller";
18
18
  * Perform an HTTP request, according to the options given.
19
19
  *
20
20
  * Several errors can be rejected. Namely:
21
- * - RequestErrorTypes.TIMEOUT_ERROR: the request timeouted (took too long to
22
- * respond).
23
- * - RequestErrorTypes.PARSE_ERROR: the browser APIs used to parse the
21
+ * - NetworkErrorTypes.TIMEOUT: the request timed out (took too long)
22
+ *
23
+ * - NetworkErrorTypes.PARSE_ERROR: the browser APIs used to parse the
24
24
  * data failed.
25
- * - RequestErrorTypes.ERROR_HTTP_CODE: the HTTP code at the time of reception
25
+ * - NetworkErrorTypes.ERROR_HTTP_CODE: the HTTP code at the time of reception
26
26
  * was not in the 200-299 (included)
27
27
  * range.
28
- * - RequestErrorTypes.ERROR_EVENT: The XHR had an error event before the
28
+ * - NetworkErrorTypes.ERROR_EVENT: The XHR had an error event before the
29
29
  * response could be fetched.
30
30
  * @param {Object} options
31
31
  * @returns {Promise.<Object>}
@@ -50,6 +50,12 @@ export interface IRequestOptions<ResponseType> {
50
50
  * To not set or to set to `undefined` for disable.
51
51
  */
52
52
  timeout?: number | undefined;
53
+ /**
54
+ * Optional connection timeout, in milliseconds, after which the request is canceled
55
+ * if the responses headers has not being received.
56
+ * Do not set or set to "undefined" to disable it.
57
+ */
58
+ connectionTimeout?: number | undefined;
53
59
  /**
54
60
  * "Cancelation token" used to be able to cancel the request.
55
61
  * When this token is "cancelled", the request will be aborted and the Promise
@@ -13,7 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { RequestError } from "../../errors";
16
+ import { NetworkErrorTypes, RequestError } from "../../errors";
17
17
  import isNonEmptyString from "../is_non_empty_string";
18
18
  import isNullOrUndefined from "../is_null_or_undefined";
19
19
  import getMonotonicTimeStamp from "../monotonic_timestamp";
@@ -25,10 +25,11 @@ export default function request(options) {
25
25
  responseType: isNullOrUndefined(options.responseType) ? DEFAULT_RESPONSE_TYPE :
26
26
  options.responseType,
27
27
  timeout: options.timeout,
28
+ connectionTimeout: options.connectionTimeout,
28
29
  };
29
30
  return new Promise((resolve, reject) => {
30
31
  const { onProgress, cancelSignal } = options;
31
- const { url, headers, responseType, timeout } = requestOptions;
32
+ const { url, headers, responseType, timeout, connectionTimeout } = requestOptions;
32
33
  const xhr = new XMLHttpRequest();
33
34
  xhr.open("GET", url, true);
34
35
  let timeoutId;
@@ -42,9 +43,19 @@ export default function request(options) {
42
43
  // is more precise, it might also be more efficient.
43
44
  timeoutId = setTimeout(() => {
44
45
  clearCancellingProcess();
45
- reject(new RequestError(url, xhr.status, "TIMEOUT"));
46
+ reject(new RequestError(url, xhr.status, NetworkErrorTypes.TIMEOUT));
46
47
  }, timeout + 3000);
47
48
  }
49
+ let connectionTimeoutId;
50
+ if (connectionTimeout !== undefined) {
51
+ connectionTimeoutId = setTimeout(() => {
52
+ clearCancellingProcess();
53
+ if (xhr.readyState !== XMLHttpRequest.DONE) {
54
+ xhr.abort();
55
+ }
56
+ reject(new RequestError(url, xhr.status, NetworkErrorTypes.TIMEOUT));
57
+ }, connectionTimeout);
58
+ }
48
59
  xhr.responseType = responseType;
49
60
  if (xhr.responseType === "document") {
50
61
  xhr.overrideMimeType("text/xml");
@@ -64,7 +75,7 @@ export default function request(options) {
64
75
  deregisterCancellationListener = cancelSignal
65
76
  .register(function abortRequest(err) {
66
77
  clearCancellingProcess();
67
- if (!isNullOrUndefined(xhr) && xhr.readyState !== 4) {
78
+ if (xhr.readyState !== XMLHttpRequest.DONE) {
68
79
  xhr.abort();
69
80
  }
70
81
  reject(err);
@@ -75,12 +86,19 @@ export default function request(options) {
75
86
  }
76
87
  xhr.onerror = function onXHRError() {
77
88
  clearCancellingProcess();
78
- reject(new RequestError(url, xhr.status, "ERROR_EVENT"));
89
+ reject(new RequestError(url, xhr.status, NetworkErrorTypes.ERROR_EVENT));
79
90
  };
80
91
  xhr.ontimeout = function onXHRTimeout() {
81
92
  clearCancellingProcess();
82
- reject(new RequestError(url, xhr.status, "TIMEOUT"));
93
+ reject(new RequestError(url, xhr.status, NetworkErrorTypes.TIMEOUT));
83
94
  };
95
+ if (connectionTimeout !== undefined) {
96
+ xhr.onreadystatechange = function clearConnectionTimeout() {
97
+ if (xhr.readyState >= XMLHttpRequest.HEADERS_RECEIVED) {
98
+ clearTimeout(connectionTimeoutId);
99
+ }
100
+ };
101
+ }
84
102
  if (onProgress !== undefined) {
85
103
  xhr.onprogress = function onXHRProgress(event) {
86
104
  const currentTime = getMonotonicTimeStamp();
@@ -93,7 +111,7 @@ export default function request(options) {
93
111
  };
94
112
  }
95
113
  xhr.onload = function onXHRLoad(event) {
96
- if (xhr.readyState === 4) {
114
+ if (xhr.readyState === XMLHttpRequest.DONE) {
97
115
  clearCancellingProcess();
98
116
  if (xhr.status >= 200 && xhr.status < 300) {
99
117
  const receivedTime = getMonotonicTimeStamp();
@@ -117,7 +135,7 @@ export default function request(options) {
117
135
  responseData = xhr.response;
118
136
  }
119
137
  if (isNullOrUndefined(responseData)) {
120
- reject(new RequestError(url, xhr.status, "PARSE_ERROR"));
138
+ reject(new RequestError(url, xhr.status, NetworkErrorTypes.PARSE_ERROR));
121
139
  return;
122
140
  }
123
141
  resolve({ status,
@@ -130,7 +148,7 @@ export default function request(options) {
130
148
  responseData });
131
149
  }
132
150
  else {
133
- reject(new RequestError(url, xhr.status, "ERROR_HTTP_CODE"));
151
+ reject(new RequestError(url, xhr.status, NetworkErrorTypes.ERROR_HTTP_CODE));
134
152
  }
135
153
  }
136
154
  };
@@ -142,6 +160,9 @@ export default function request(options) {
142
160
  if (timeoutId !== undefined) {
143
161
  clearTimeout(timeoutId);
144
162
  }
163
+ if (connectionTimeoutId !== undefined) {
164
+ clearTimeout(connectionTimeoutId);
165
+ }
145
166
  if (deregisterCancellationListener !== null) {
146
167
  deregisterCancellationListener();
147
168
  }
Binary file