rx-player 4.0.0-dev.2023111400 → 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 (407) hide show
  1. package/CHANGELOG.md +11 -227
  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 +12 -35
  21. package/dist/_esm5.processed/core/api/option_utils.js +41 -230
  22. package/dist/_esm5.processed/core/api/public_api.d.ts +91 -266
  23. package/dist/_esm5.processed/core/api/public_api.js +439 -805
  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/native/native_text_segment_buffer.d.ts +1 -2
  55. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +2 -3
  56. package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +2 -2
  57. package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
  58. package/dist/_esm5.processed/core/segment_buffers/index.js +2 -1
  59. package/dist/_esm5.processed/core/segment_buffers/inventory/index.d.ts +1 -0
  60. package/dist/_esm5.processed/core/segment_buffers/inventory/index.js +1 -0
  61. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.d.ts +33 -0
  62. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.js +49 -0
  63. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +0 -1
  64. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +2 -16
  65. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +0 -15
  66. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +183 -93
  67. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.d.ts +39 -0
  68. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.js +133 -0
  69. package/dist/_esm5.processed/core/stream/adaptation/types.d.ts +27 -13
  70. package/dist/_esm5.processed/core/stream/index.d.ts +2 -3
  71. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +2 -0
  72. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +5 -7
  73. package/dist/_esm5.processed/core/stream/period/period_stream.js +13 -12
  74. package/dist/_esm5.processed/core/stream/period/types.d.ts +5 -14
  75. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +2 -4
  76. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.js +10 -46
  77. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +29 -23
  78. package/dist/_esm5.processed/core/stream/representation/types.d.ts +11 -1
  79. package/dist/_esm5.processed/default_config.d.ts +35 -98
  80. package/dist/_esm5.processed/default_config.js +36 -113
  81. package/dist/_esm5.processed/errors/custom_loader_error.d.ts +1 -3
  82. package/dist/_esm5.processed/errors/custom_loader_error.js +1 -3
  83. package/dist/_esm5.processed/errors/media_error.js +2 -2
  84. package/dist/_esm5.processed/errors/network_error.d.ts +0 -1
  85. package/dist/_esm5.processed/errors/network_error.js +0 -1
  86. package/dist/_esm5.processed/errors/request_error.d.ts +2 -3
  87. package/dist/_esm5.processed/errors/request_error.js +2 -5
  88. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -3
  89. package/dist/_esm5.processed/features/features_object.js +0 -2
  90. package/dist/_esm5.processed/features/list/directfile.js +2 -5
  91. package/dist/_esm5.processed/features/list/index.d.ts +0 -2
  92. package/dist/_esm5.processed/features/list/index.js +0 -2
  93. package/dist/_esm5.processed/features/types.d.ts +3 -27
  94. package/dist/_esm5.processed/manifest/adaptation.d.ts +9 -11
  95. package/dist/_esm5.processed/manifest/adaptation.js +41 -30
  96. package/dist/_esm5.processed/manifest/index.d.ts +3 -4
  97. package/dist/_esm5.processed/manifest/manifest.d.ts +5 -54
  98. package/dist/_esm5.processed/manifest/manifest.js +5 -110
  99. package/dist/_esm5.processed/manifest/period.d.ts +4 -5
  100. package/dist/_esm5.processed/manifest/representation.d.ts +10 -5
  101. package/dist/_esm5.processed/manifest/representation.js +15 -5
  102. package/dist/_esm5.processed/manifest/representation_index/index.d.ts +2 -2
  103. package/dist/_esm5.processed/manifest/representation_index/static.d.ts +2 -0
  104. package/dist/_esm5.processed/manifest/representation_index/static.js +6 -0
  105. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +42 -21
  106. package/dist/_esm5.processed/manifest/types.d.ts +0 -2
  107. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +17 -31
  108. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +26 -19
  109. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +2 -0
  110. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +7 -1
  111. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +2 -6
  112. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +11 -8
  113. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +2 -0
  114. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +6 -0
  115. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  116. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.js +1 -6
  117. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +3 -5
  118. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +0 -2
  119. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -1
  120. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +2 -2
  121. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +0 -2
  122. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +2 -2
  123. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +10 -6
  124. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +4 -2
  125. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.d.ts +10 -1
  126. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +18 -2
  127. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +4 -4
  128. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +3 -6
  129. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +1 -2
  130. package/dist/_esm5.processed/parsers/manifest/local/representation_index.d.ts +2 -0
  131. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +6 -0
  132. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +6 -6
  133. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.d.ts +12 -3
  134. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.js +11 -2
  135. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +0 -1
  136. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +11 -17
  137. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +21 -83
  138. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +53 -125
  139. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.d.ts +119 -0
  140. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.js +159 -0
  141. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.d.ts +3 -6
  142. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.js +4 -4
  143. package/dist/_esm5.processed/parsers/manifest/types.d.ts +3 -3
  144. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_extent.js +1 -8
  145. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_origin.js +1 -9
  146. package/dist/_esm5.processed/public_types.d.ts +396 -308
  147. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.d.ts +5 -4
  148. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +5 -4
  149. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +4 -4
  150. package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
  151. package/dist/_esm5.processed/transports/dash/pipelines.js +1 -4
  152. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
  153. package/dist/_esm5.processed/transports/dash/segment_loader.js +26 -20
  154. package/dist/_esm5.processed/transports/dash/segment_parser.js +19 -24
  155. package/dist/_esm5.processed/transports/dash/text_loader.js +5 -5
  156. package/dist/_esm5.processed/transports/dash/text_parser.js +28 -33
  157. package/dist/_esm5.processed/transports/local/pipelines.js +1 -10
  158. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
  159. package/dist/_esm5.processed/transports/local/segment_parser.d.ts +1 -1
  160. package/dist/_esm5.processed/transports/local/segment_parser.js +10 -10
  161. package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
  162. package/dist/_esm5.processed/transports/local/text_parser.js +23 -23
  163. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +34 -52
  164. package/dist/_esm5.processed/{utils/list_to_map.d.ts → transports/smooth/is_mp4_embedded_track.d.ts} +5 -5
  165. package/dist/_esm5.processed/{features/list/image_buffer.d.ts → transports/smooth/is_mp4_embedded_track.js} +7 -6
  166. package/dist/_esm5.processed/transports/smooth/pipelines.js +33 -190
  167. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +1 -1
  168. package/dist/_esm5.processed/transports/smooth/segment_loader.js +28 -22
  169. package/dist/_esm5.processed/transports/smooth/utils.d.ts +1 -26
  170. package/dist/_esm5.processed/transports/smooth/utils.js +1 -55
  171. package/dist/_esm5.processed/transports/types.d.ts +94 -89
  172. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
  173. package/dist/_esm5.processed/transports/utils/infer_segment_container.d.ts +3 -3
  174. package/dist/_esm5.processed/transports/utils/infer_segment_container.js +5 -7
  175. package/dist/_esm5.processed/transports/utils/parse_text_track.d.ts +8 -12
  176. package/dist/_esm5.processed/transports/utils/parse_text_track.js +19 -21
  177. package/dist/_esm5.processed/utils/array_includes.d.ts +2 -1
  178. package/dist/_esm5.processed/utils/array_includes.js +30 -28
  179. package/dist/_esm5.processed/utils/request/xhr.js +5 -5
  180. package/dist/commonjs/compat/is_codec_supported.js +22 -1
  181. package/dist/commonjs/config.d.ts +1 -0
  182. package/dist/commonjs/core/api/debug/buffer_graph.js +2 -6
  183. package/dist/commonjs/core/api/debug/modules/general_info.js +17 -10
  184. package/dist/commonjs/core/api/option_utils.d.ts +2 -0
  185. package/dist/commonjs/core/api/option_utils.js +2 -3
  186. package/dist/commonjs/core/api/public_api.d.ts +9 -0
  187. package/dist/commonjs/core/api/public_api.js +34 -9
  188. package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
  189. package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.js +11 -3
  190. package/dist/commonjs/core/fetchers/segment/segment_fetcher.d.ts +8 -1
  191. package/dist/commonjs/core/fetchers/segment/segment_fetcher.js +8 -4
  192. package/dist/commonjs/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
  193. package/dist/commonjs/core/fetchers/utils/schedule_request.js +1 -1
  194. package/dist/commonjs/core/init/directfile_content_initializer.js +24 -7
  195. package/dist/commonjs/core/init/media_source_content_initializer.d.ts +6 -0
  196. package/dist/commonjs/core/init/media_source_content_initializer.js +4 -6
  197. package/dist/commonjs/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
  198. package/dist/commonjs/core/init/utils/content_time_boundaries_observer.js +16 -17
  199. package/dist/commonjs/core/init/utils/get_initial_time.d.ts +17 -3
  200. package/dist/commonjs/core/init/utils/get_initial_time.js +9 -7
  201. package/dist/commonjs/core/stream/representation/utils/get_buffer_status.js +3 -3
  202. package/dist/commonjs/core/stream/representation/utils/get_needed_segments.js +1 -1
  203. package/dist/commonjs/default_config.d.ts +5 -0
  204. package/dist/commonjs/default_config.js +5 -0
  205. package/dist/commonjs/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
  206. package/dist/commonjs/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
  207. package/dist/commonjs/manifest/representation_index/static.d.ts +1 -1
  208. package/dist/commonjs/manifest/representation_index/static.js +2 -2
  209. package/dist/commonjs/manifest/representation_index/types.d.ts +4 -4
  210. package/dist/commonjs/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
  211. package/dist/commonjs/parsers/manifest/dash/common/indexes/base.js +4 -3
  212. package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
  213. package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
  214. package/dist/commonjs/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
  215. package/dist/commonjs/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
  216. package/dist/commonjs/parsers/manifest/dash/common/indexes/list.js +2 -2
  217. package/dist/commonjs/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
  218. package/dist/commonjs/parsers/manifest/dash/common/indexes/template.js +42 -29
  219. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
  220. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
  221. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +250 -51
  222. package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
  223. package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
  224. package/dist/commonjs/parsers/manifest/dash/common/parse_adaptation_sets.js +13 -10
  225. package/dist/commonjs/parsers/manifest/dash/common/parse_mpd.js +27 -14
  226. package/dist/commonjs/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
  227. package/dist/commonjs/parsers/manifest/dash/common/parse_periods.js +17 -18
  228. package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
  229. package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.js +21 -8
  230. package/dist/commonjs/parsers/manifest/dash/common/parse_representations.js +7 -3
  231. package/dist/commonjs/parsers/manifest/local/representation_index.d.ts +1 -1
  232. package/dist/commonjs/parsers/manifest/local/representation_index.js +3 -3
  233. package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
  234. package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.js +2 -2
  235. package/dist/commonjs/parsers/manifest/smooth/representation_index.d.ts +5 -5
  236. package/dist/commonjs/parsers/manifest/smooth/representation_index.js +25 -9
  237. package/dist/commonjs/parsers/manifest/utils/index_helpers.js +1 -1
  238. package/dist/commonjs/public_types.d.ts +78 -34
  239. package/dist/commonjs/transports/dash/init_segment_loader.js +10 -5
  240. package/dist/commonjs/transports/dash/manifest_parser.js +5 -2
  241. package/dist/commonjs/transports/dash/segment_loader.js +2 -1
  242. package/dist/commonjs/transports/dash/text_loader.js +2 -0
  243. package/dist/commonjs/transports/metaplaylist/manifest_loader.js +2 -1
  244. package/dist/commonjs/transports/metaplaylist/pipelines.js +4 -1
  245. package/dist/commonjs/transports/smooth/pipelines.js +4 -2
  246. package/dist/commonjs/transports/smooth/segment_loader.js +2 -1
  247. package/dist/commonjs/transports/types.d.ts +12 -0
  248. package/dist/commonjs/transports/utils/generate_manifest_loader.js +6 -3
  249. package/dist/commonjs/utils/request/fetch.d.ts +6 -0
  250. package/dist/commonjs/utils/request/fetch.js +29 -8
  251. package/dist/commonjs/utils/request/xhr.d.ts +11 -5
  252. package/dist/commonjs/utils/request/xhr.js +29 -8
  253. package/dist/es2017/compat/is_codec_supported.js +22 -1
  254. package/dist/es2017/config.d.ts +1 -0
  255. package/dist/es2017/core/api/debug/buffer_graph.js +2 -6
  256. package/dist/es2017/core/api/debug/modules/general_info.js +17 -10
  257. package/dist/es2017/core/api/option_utils.d.ts +2 -0
  258. package/dist/es2017/core/api/option_utils.js +2 -3
  259. package/dist/es2017/core/api/public_api.d.ts +9 -0
  260. package/dist/es2017/core/api/public_api.js +33 -8
  261. package/dist/es2017/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
  262. package/dist/es2017/core/fetchers/manifest/manifest_fetcher.js +11 -3
  263. package/dist/es2017/core/fetchers/segment/segment_fetcher.d.ts +8 -1
  264. package/dist/es2017/core/fetchers/segment/segment_fetcher.js +8 -4
  265. package/dist/es2017/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
  266. package/dist/es2017/core/fetchers/utils/schedule_request.js +1 -1
  267. package/dist/es2017/core/init/directfile_content_initializer.js +24 -7
  268. package/dist/es2017/core/init/media_source_content_initializer.d.ts +6 -0
  269. package/dist/es2017/core/init/media_source_content_initializer.js +4 -6
  270. package/dist/es2017/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
  271. package/dist/es2017/core/init/utils/content_time_boundaries_observer.js +16 -15
  272. package/dist/es2017/core/init/utils/get_initial_time.d.ts +17 -3
  273. package/dist/es2017/core/init/utils/get_initial_time.js +9 -7
  274. package/dist/es2017/core/stream/representation/utils/get_buffer_status.js +3 -3
  275. package/dist/es2017/core/stream/representation/utils/get_needed_segments.js +1 -1
  276. package/dist/es2017/default_config.d.ts +5 -0
  277. package/dist/es2017/default_config.js +5 -0
  278. package/dist/es2017/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
  279. package/dist/es2017/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
  280. package/dist/es2017/manifest/representation_index/static.d.ts +1 -1
  281. package/dist/es2017/manifest/representation_index/static.js +2 -2
  282. package/dist/es2017/manifest/representation_index/types.d.ts +4 -4
  283. package/dist/es2017/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
  284. package/dist/es2017/parsers/manifest/dash/common/indexes/base.js +4 -3
  285. package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
  286. package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
  287. package/dist/es2017/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
  288. package/dist/es2017/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
  289. package/dist/es2017/parsers/manifest/dash/common/indexes/list.js +2 -2
  290. package/dist/es2017/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
  291. package/dist/es2017/parsers/manifest/dash/common/indexes/template.js +40 -27
  292. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
  293. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
  294. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +246 -51
  295. package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
  296. package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
  297. package/dist/es2017/parsers/manifest/dash/common/parse_adaptation_sets.js +11 -8
  298. package/dist/es2017/parsers/manifest/dash/common/parse_mpd.js +27 -13
  299. package/dist/es2017/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
  300. package/dist/es2017/parsers/manifest/dash/common/parse_periods.js +13 -16
  301. package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
  302. package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.js +10 -8
  303. package/dist/es2017/parsers/manifest/dash/common/parse_representations.js +7 -3
  304. package/dist/es2017/parsers/manifest/local/representation_index.d.ts +1 -1
  305. package/dist/es2017/parsers/manifest/local/representation_index.js +3 -3
  306. package/dist/es2017/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
  307. package/dist/es2017/parsers/manifest/metaplaylist/representation_index.js +2 -2
  308. package/dist/es2017/parsers/manifest/smooth/representation_index.d.ts +5 -5
  309. package/dist/es2017/parsers/manifest/smooth/representation_index.js +25 -9
  310. package/dist/es2017/parsers/manifest/utils/index_helpers.js +1 -1
  311. package/dist/es2017/public_types.d.ts +78 -34
  312. package/dist/es2017/transports/dash/init_segment_loader.js +5 -0
  313. package/dist/es2017/transports/dash/manifest_parser.js +3 -0
  314. package/dist/es2017/transports/dash/segment_loader.js +1 -0
  315. package/dist/es2017/transports/dash/text_loader.js +2 -0
  316. package/dist/es2017/transports/metaplaylist/manifest_loader.js +1 -0
  317. package/dist/es2017/transports/metaplaylist/pipelines.js +4 -1
  318. package/dist/es2017/transports/smooth/pipelines.js +2 -0
  319. package/dist/es2017/transports/smooth/segment_loader.js +1 -0
  320. package/dist/es2017/transports/types.d.ts +12 -0
  321. package/dist/es2017/transports/utils/generate_manifest_loader.js +3 -0
  322. package/dist/es2017/utils/request/fetch.d.ts +6 -0
  323. package/dist/es2017/utils/request/fetch.js +29 -8
  324. package/dist/es2017/utils/request/xhr.d.ts +11 -5
  325. package/dist/es2017/utils/request/xhr.js +30 -9
  326. package/dist/rx-player.js +723 -376
  327. package/dist/rx-player.min.js +1 -1
  328. package/package.json +3 -4
  329. package/scripts/update-version +2 -0
  330. package/sonar-project.properties +1 -1
  331. package/src/compat/is_codec_supported.ts +23 -1
  332. package/src/core/api/debug/buffer_graph.ts +2 -5
  333. package/src/core/api/debug/modules/general_info.ts +15 -10
  334. package/src/core/api/option_utils.ts +3 -3
  335. package/src/core/api/public_api.ts +35 -7
  336. package/src/core/fetchers/manifest/manifest_fetcher.ts +21 -3
  337. package/src/core/fetchers/segment/segment_fetcher.ts +19 -5
  338. package/src/core/fetchers/segment/segment_fetcher_creator.ts +1 -0
  339. package/src/core/fetchers/utils/schedule_request.ts +1 -1
  340. package/src/core/init/directfile_content_initializer.ts +23 -7
  341. package/src/core/init/media_source_content_initializer.ts +13 -7
  342. package/src/core/init/utils/content_time_boundaries_observer.ts +23 -22
  343. package/src/core/init/utils/get_initial_time.ts +25 -12
  344. package/src/core/stream/representation/utils/get_buffer_status.ts +3 -3
  345. package/src/core/stream/representation/utils/get_needed_segments.ts +2 -2
  346. package/src/default_config.ts +5 -0
  347. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +3 -1
  348. package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +2 -0
  349. package/src/manifest/representation_index/static.ts +2 -2
  350. package/src/manifest/representation_index/types.ts +4 -4
  351. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +182 -36
  352. package/src/parsers/manifest/dash/common/indexes/base.ts +12 -4
  353. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +19 -5
  354. package/src/parsers/manifest/dash/common/indexes/index.ts +16 -4
  355. package/src/parsers/manifest/dash/common/indexes/list.ts +2 -2
  356. package/src/parsers/manifest/dash/common/indexes/template.ts +52 -31
  357. package/src/parsers/manifest/dash/common/indexes/timeline/index.ts +4 -1
  358. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +366 -60
  359. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +63 -25
  360. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +10 -4
  361. package/src/parsers/manifest/dash/common/parse_mpd.ts +28 -15
  362. package/src/parsers/manifest/dash/common/parse_periods.ts +12 -17
  363. package/src/parsers/manifest/dash/common/parse_representation_index.ts +50 -26
  364. package/src/parsers/manifest/dash/common/parse_representations.ts +9 -3
  365. package/src/parsers/manifest/local/representation_index.ts +3 -3
  366. package/src/parsers/manifest/metaplaylist/representation_index.ts +2 -2
  367. package/src/parsers/manifest/smooth/representation_index.ts +23 -9
  368. package/src/parsers/manifest/utils/__tests__/get_first_time_from_adaptations.test.ts +1 -1
  369. package/src/parsers/manifest/utils/__tests__/get_last_time_from_adaptation.test.ts +1 -1
  370. package/src/parsers/manifest/utils/index_helpers.ts +1 -1
  371. package/src/public_types.ts +79 -34
  372. package/src/transports/dash/init_segment_loader.ts +5 -0
  373. package/src/transports/dash/manifest_parser.ts +6 -0
  374. package/src/transports/dash/segment_loader.ts +1 -0
  375. package/src/transports/dash/text_loader.ts +2 -0
  376. package/src/transports/metaplaylist/manifest_loader.ts +1 -0
  377. package/src/transports/metaplaylist/pipelines.ts +4 -1
  378. package/src/transports/smooth/pipelines.ts +2 -0
  379. package/src/transports/smooth/segment_loader.ts +1 -0
  380. package/src/transports/types.ts +12 -0
  381. package/src/transports/utils/generate_manifest_loader.ts +3 -0
  382. package/src/utils/request/fetch.ts +35 -8
  383. package/src/utils/request/xhr.ts +45 -14
  384. package/dist/_esm5.processed/compat/fullscreen.d.ts +0 -32
  385. package/dist/_esm5.processed/compat/fullscreen.js +0 -78
  386. package/dist/_esm5.processed/compat/is_offline.d.ts +0 -39
  387. package/dist/_esm5.processed/compat/is_offline.js +0 -43
  388. package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.d.ts +0 -258
  389. package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.js +0 -989
  390. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.d.ts +0 -75
  391. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +0 -133
  392. package/dist/_esm5.processed/features/list/bif_parser.d.ts +0 -23
  393. package/dist/_esm5.processed/features/list/bif_parser.js +0 -27
  394. package/dist/_esm5.processed/features/list/image_buffer.js +0 -25
  395. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +0 -38
  396. package/dist/_esm5.processed/transports/dash/image_pipelines.js +0 -129
  397. package/dist/_esm5.processed/utils/list_to_map.js +0 -28
  398. package/dist/_esm5.processed/utils/simple_set.d.ts +0 -51
  399. package/dist/_esm5.processed/utils/simple_set.js +0 -57
  400. package/dist/_esm5.processed/utils/uniq.d.ts +0 -36
  401. package/dist/_esm5.processed/utils/uniq.js +0 -43
  402. package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
  403. package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.js +0 -54
  404. package/dist/es2017/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
  405. package/dist/es2017/parsers/manifest/utils/is_segment_still_available.js +0 -51
  406. package/src/parsers/manifest/utils/is_segment_still_available.ts +0 -58
  407. package/src/typings/object-assign.d.ts +0 -48
@@ -20,7 +20,6 @@ var log_1 = require("../../../log");
20
20
  var assert_1 = require("../../../utils/assert");
21
21
  var monotonic_timestamp_1 = require("../../../utils/monotonic_timestamp");
22
22
  var index_helpers_1 = require("../utils/index_helpers");
23
- var is_segment_still_available_1 = require("../utils/is_segment_still_available");
24
23
  var tokens_1 = require("./utils/tokens");
25
24
  /**
26
25
  * @param {Number} start
@@ -270,7 +269,7 @@ var SmoothRepresentationIndex = /** @class */ (function () {
270
269
  SmoothRepresentationIndex.prototype.awaitSegmentBetween = function (start, end) {
271
270
  var _a;
272
271
  (0, assert_1.default)(start <= end);
273
- if (this.isFinished()) {
272
+ if (this.isStillAwaitingFutureSegments()) {
274
273
  return false;
275
274
  }
276
275
  var lastAvailablePosition = this.getLastAvailablePosition();
@@ -307,7 +306,24 @@ var SmoothRepresentationIndex = /** @class */ (function () {
307
306
  }
308
307
  this._refreshTimeline();
309
308
  var _a = this._sharedSmoothTimeline, timeline = _a.timeline, timescale = _a.timescale;
310
- return (0, is_segment_still_available_1.default)(segment, timeline, timescale, 0);
309
+ for (var i = 0; i < timeline.length; i++) {
310
+ var tSegment = timeline[i];
311
+ var tSegmentTime = tSegment.start / timescale;
312
+ if (tSegmentTime > segment.time) {
313
+ return false; // We went over it without finding it
314
+ }
315
+ else if (tSegmentTime === segment.time) {
316
+ return true;
317
+ }
318
+ else { // tSegment.start < segment.time
319
+ if (tSegment.repeatCount >= 0 && tSegment.duration !== undefined) {
320
+ var timeDiff = tSegmentTime - tSegment.start;
321
+ var repeat = (timeDiff / tSegment.duration) - 1;
322
+ return repeat % 1 === 0 && repeat <= tSegment.repeatCount;
323
+ }
324
+ }
325
+ }
326
+ return false;
311
327
  };
312
328
  /**
313
329
  * @param {Error} error
@@ -341,9 +357,9 @@ var SmoothRepresentationIndex = /** @class */ (function () {
341
357
  this._sharedSmoothTimeline.update(newIndex._sharedSmoothTimeline);
342
358
  };
343
359
  /**
344
- * Returns `true` if the last segments in this index have already been
360
+ * Returns `false` if the last segments in this index have already been
345
361
  * generated.
346
- * Returns `false` if the index is still waiting on future segments to be
362
+ * Returns `true` if the index is still waiting on future segments to be
347
363
  * generated.
348
364
  *
349
365
  * For Smooth, it should only depend on whether the content is a live content
@@ -351,8 +367,8 @@ var SmoothRepresentationIndex = /** @class */ (function () {
351
367
  * TODO What about Smooth live content that finishes at some point?
352
368
  * @returns {boolean}
353
369
  */
354
- SmoothRepresentationIndex.prototype.isFinished = function () {
355
- return !this._isLive;
370
+ SmoothRepresentationIndex.prototype.isStillAwaitingFutureSegments = function () {
371
+ return this._isLive;
356
372
  };
357
373
  /**
358
374
  * @returns {Boolean}
@@ -367,8 +383,8 @@ var SmoothRepresentationIndex = /** @class */ (function () {
367
383
  * Add segments to a `SharedSmoothSegmentTimeline` that were predicted to come
368
384
  * after `currentSegment`.
369
385
  * @param {Array.<Object>} nextSegments - The segment information parsed.
370
- * @param {Object} segment - Information on the segment which contained that
371
- * new segment information.
386
+ * @param {Object} currentSegment - Information on the segment which contained
387
+ * that new segment information.
372
388
  */
373
389
  SmoothRepresentationIndex.prototype.addPredictedSegments = function (nextSegments, currentSegment) {
374
390
  this._sharedSmoothTimeline.addPredictedSegments(nextSegments, currentSegment);
@@ -105,7 +105,7 @@ exports.getTimescaledRange = getTimescaledRange;
105
105
  * timescaled time.
106
106
  * Returns -1 if the given time is lower than the start of the first available
107
107
  * segment.
108
- * @param {Object} index
108
+ * @param {Object} timeline
109
109
  * @param {Number} timeTScaled
110
110
  * @returns {Number}
111
111
  */
@@ -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
  }
@@ -46,14 +46,16 @@ var byte_range_1 = require("../utils/byte_range");
46
46
  function initSegmentLoader(url, segment, options, cancelSignal, callbacks) {
47
47
  if (segment.range === undefined) {
48
48
  return (0, request_1.default)({ url: url, responseType: "arraybuffer",
49
- timeout: options.timeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
49
+ timeout: options.timeout,
50
+ connectionTimeout: options.connectionTimeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
50
51
  .then(function (data) { return ({ resultType: "segment-loaded",
51
52
  resultData: data }); });
52
53
  }
53
54
  if (segment.indexRange === undefined) {
54
55
  return (0, request_1.default)({ url: url, headers: { Range: (0, byte_range_1.default)(segment.range) },
55
56
  responseType: "arraybuffer",
56
- timeout: options.timeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
57
+ timeout: options.timeout,
58
+ connectionTimeout: options.connectionTimeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
57
59
  .then(function (data) { return ({ resultType: "segment-loaded",
58
60
  resultData: data }); });
59
61
  }
@@ -62,16 +64,19 @@ function initSegmentLoader(url, segment, options, cancelSignal, callbacks) {
62
64
  return (0, request_1.default)({ url: url, headers: { Range: (0, byte_range_1.default)([segment.range[0],
63
65
  segment.indexRange[1]]) },
64
66
  responseType: "arraybuffer",
65
- timeout: options.timeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
67
+ timeout: options.timeout,
68
+ connectionTimeout: options.connectionTimeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
66
69
  .then(function (data) { return ({ resultType: "segment-loaded",
67
70
  resultData: data }); });
68
71
  }
69
72
  var rangeRequest$ = (0, request_1.default)({ url: url, headers: { Range: (0, byte_range_1.default)(segment.range) },
70
73
  responseType: "arraybuffer",
71
- timeout: options.timeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress });
74
+ timeout: options.timeout,
75
+ connectionTimeout: options.connectionTimeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress });
72
76
  var indexRequest$ = (0, request_1.default)({ url: url, headers: { Range: (0, byte_range_1.default)(segment.indexRange) },
73
77
  responseType: "arraybuffer",
74
- timeout: options.timeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress });
78
+ timeout: options.timeout,
79
+ connectionTimeout: options.connectionTimeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress });
75
80
  return Promise.all([rangeRequest$, indexRequest$])
76
81
  .then(function (_a) {
77
82
  var _b = __read(_a, 2), initData = _b[0], indexData = _b[1];
@@ -109,12 +109,15 @@ function generateManifestParser(options) {
109
109
  var externalResources = value.urls.map(function (resourceUrl) {
110
110
  return scheduleRequest(function () {
111
111
  var defaultTimeout = config_1.default.getCurrent().DEFAULT_REQUEST_TIMEOUT;
112
+ var defaultConnectionTimeout = config_1.default.getCurrent().DEFAULT_CONNECTION_TIMEOUT;
112
113
  return value.format === "string" ? (0, request_1.default)({ url: resourceUrl,
113
114
  responseType: "text",
114
- timeout: defaultTimeout, cancelSignal: cancelSignal }) :
115
+ timeout: defaultTimeout,
116
+ connectionTimeout: defaultConnectionTimeout, cancelSignal: cancelSignal }) :
115
117
  (0, request_1.default)({ url: resourceUrl,
116
118
  responseType: "arraybuffer",
117
- timeout: defaultTimeout, cancelSignal: cancelSignal });
119
+ timeout: defaultTimeout,
120
+ connectionTimeout: defaultConnectionTimeout, cancelSignal: cancelSignal });
118
121
  }).then(function (res) {
119
122
  if (value.format === "string") {
120
123
  if (typeof res.responseData !== "string") {
@@ -54,7 +54,8 @@ function regularSegmentLoader(url, context, lowLatencyMode, options, callbacks,
54
54
  headers: segment.range !== undefined ?
55
55
  { Range: (0, byte_range_1.default)(segment.range) } :
56
56
  undefined,
57
- timeout: options.timeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
57
+ timeout: options.timeout,
58
+ connectionTimeout: options.connectionTimeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
58
59
  .then(function (data) { return ({ resultType: "segment-loaded",
59
60
  resultData: data }); });
60
61
  }
@@ -68,6 +68,7 @@ function generateTextTrackLoader(_a) {
68
68
  { Range: (0, byte_range_1.default)(range) } :
69
69
  null,
70
70
  timeout: options.timeout,
71
+ connectionTimeout: options.connectionTimeout,
71
72
  onProgress: callbacks.onProgress, cancelSignal: cancelSignal })
72
73
  .then(function (data) { return ({ resultType: "segment-loaded",
73
74
  resultData: data }); });
@@ -77,6 +78,7 @@ function generateTextTrackLoader(_a) {
77
78
  { Range: (0, byte_range_1.default)(range) } :
78
79
  null,
79
80
  timeout: options.timeout,
81
+ connectionTimeout: options.connectionTimeout,
80
82
  onProgress: callbacks.onProgress, cancelSignal: cancelSignal })
81
83
  .then(function (data) { return ({ resultType: "segment-loaded",
82
84
  resultData: data }); });
@@ -28,7 +28,8 @@ function regularManifestLoader(url, loaderOptions, cancelSignal) {
28
28
  throw new Error("Cannot perform HTTP(s) request. URL not known");
29
29
  }
30
30
  return (0, request_1.default)({ url: url, responseType: "text",
31
- timeout: loaderOptions.timeout, cancelSignal: cancelSignal });
31
+ timeout: loaderOptions.timeout,
32
+ connectionTimeout: loaderOptions.connectionTimeout, cancelSignal: cancelSignal });
32
33
  }
33
34
  /**
34
35
  * Generate a manifest loader for the application
@@ -117,7 +117,10 @@ function default_1(options) {
117
117
  * Whether a ManifestLoader's timeout should be relied on here
118
118
  * is ambiguous.
119
119
  */
120
- var manOpts = { timeout: config_1.default.getCurrent().DEFAULT_REQUEST_TIMEOUT };
120
+ var manOpts = {
121
+ timeout: config_1.default.getCurrent().DEFAULT_REQUEST_TIMEOUT,
122
+ connectionTimeout: config_1.default.getCurrent().DEFAULT_CONNECTION_TIMEOUT,
123
+ };
121
124
  return transport.manifest.loadManifest(resource.url, manOpts, cancelSignal);
122
125
  }
123
126
  });
@@ -139,13 +139,15 @@ function default_1(transportOptions) {
139
139
  var isMP4 = (0, is_mp4_embedded_track_1.default)(context.mimeType);
140
140
  if (!isMP4) {
141
141
  return (0, request_1.default)({ url: url, responseType: "text",
142
- timeout: loaderOptions.timeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
142
+ timeout: loaderOptions.timeout,
143
+ connectionTimeout: loaderOptions.connectionTimeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
143
144
  .then(function (data) { return ({ resultType: "segment-loaded",
144
145
  resultData: data }); });
145
146
  }
146
147
  else {
147
148
  return (0, request_1.default)({ url: url, responseType: "arraybuffer",
148
- timeout: loaderOptions.timeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
149
+ timeout: loaderOptions.timeout,
150
+ connectionTimeout: loaderOptions.connectionTimeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
149
151
  .then(function (data) {
150
152
  if (transportOptions.checkMediaSegmentIntegrity !== true) {
151
153
  return { resultType: "segment-loaded",
@@ -49,7 +49,8 @@ function regularSegmentLoader(url, context, callbacks, loaderOptions, cancelSign
49
49
  if (Array.isArray(range)) {
50
50
  headers = { Range: (0, byte_range_1.default)(range) };
51
51
  }
52
- return (0, request_1.default)({ url: url, responseType: "arraybuffer", headers: headers, timeout: loaderOptions.timeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
52
+ return (0, request_1.default)({ url: url, responseType: "arraybuffer", headers: headers, timeout: loaderOptions.timeout,
53
+ connectionTimeout: loaderOptions.connectionTimeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
53
54
  .then(function (data) {
54
55
  var isMP4 = (0, is_mp4_embedded_track_1.default)(context.mimeType);
55
56
  if (!isMP4 || checkMediaSegmentIntegrity !== true) {
@@ -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,13 +34,16 @@ function generateRegularManifestLoader(preferredType) {
34
34
  switch (preferredType) {
35
35
  case "arraybuffer":
36
36
  return (0, request_1.default)({ url: url, responseType: "arraybuffer",
37
- timeout: loaderOptions.timeout, cancelSignal: cancelSignal });
37
+ timeout: loaderOptions.timeout,
38
+ connectionTimeout: loaderOptions.connectionTimeout, cancelSignal: cancelSignal });
38
39
  case "text":
39
40
  return (0, request_1.default)({ url: url, responseType: "text",
40
- timeout: loaderOptions.timeout, cancelSignal: cancelSignal });
41
+ timeout: loaderOptions.timeout,
42
+ connectionTimeout: loaderOptions.connectionTimeout, cancelSignal: cancelSignal });
41
43
  case "document":
42
44
  return (0, request_1.default)({ url: url, responseType: "document",
43
- timeout: loaderOptions.timeout, cancelSignal: cancelSignal });
45
+ timeout: loaderOptions.timeout,
46
+ connectionTimeout: loaderOptions.connectionTimeout, cancelSignal: cancelSignal });
44
47
  default:
45
48
  (0, assert_unreachable_1.default)(preferredType);
46
49
  }
@@ -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
  /**
@@ -79,7 +79,8 @@ function fetchRequest(options) {
79
79
  }
80
80
  log_1.default.debug("Fetch: Called with URL", options.url);
81
81
  var cancellation = null;
82
- var timeouted = false;
82
+ var isTimedOut = false;
83
+ var isConnectionTimedOut = false;
83
84
  var sendingTime = (0, monotonic_timestamp_1.default)();
84
85
  var abortController = !(0, is_null_or_undefined_1.default)(_AbortController) ? new _AbortController() :
85
86
  null;
@@ -94,13 +95,26 @@ function fetchRequest(options) {
94
95
  }
95
96
  abortController.abort();
96
97
  }
97
- var timeout;
98
+ var timeoutId;
98
99
  if (options.timeout !== undefined) {
99
- timeout = setTimeout(function () {
100
- timeouted = true;
100
+ timeoutId = setTimeout(function () {
101
+ isTimedOut = true;
102
+ if (connectionTimeoutId !== undefined) {
103
+ clearTimeout(connectionTimeoutId);
104
+ }
101
105
  abortFetch();
102
106
  }, options.timeout);
103
107
  }
108
+ var connectionTimeoutId;
109
+ if (options.connectionTimeout !== undefined) {
110
+ connectionTimeoutId = setTimeout(function () {
111
+ isConnectionTimedOut = true;
112
+ if (timeoutId !== undefined) {
113
+ clearTimeout(timeoutId);
114
+ }
115
+ abortFetch();
116
+ }, options.connectionTimeout);
117
+ }
104
118
  var deregisterCancelLstnr = options.cancelSignal
105
119
  .register(function abortRequest(err) {
106
120
  cancellation = err;
@@ -113,8 +127,8 @@ function fetchRequest(options) {
113
127
  fetchOpts.signal = !(0, is_null_or_undefined_1.default)(abortController) ? abortController.signal :
114
128
  null;
115
129
  return fetch(options.url, fetchOpts).then(function (response) {
116
- if (!(0, is_null_or_undefined_1.default)(timeout)) {
117
- clearTimeout(timeout);
130
+ if (connectionTimeoutId !== undefined) {
131
+ clearTimeout(connectionTimeoutId);
118
132
  }
119
133
  if (response.status >= 300) {
120
134
  log_1.default.warn("Fetch: Request HTTP Error", response.status, response.url);
@@ -147,6 +161,9 @@ function fetchRequest(options) {
147
161
  return [2 /*return*/, readBufferAndSendEvents()];
148
162
  }
149
163
  else if (data.done) {
164
+ if (timeoutId !== undefined) {
165
+ clearTimeout(timeoutId);
166
+ }
150
167
  deregisterCancelLstnr();
151
168
  receivedTime = (0, monotonic_timestamp_1.default)();
152
169
  requestDuration = receivedTime - sendingTime;
@@ -163,8 +180,12 @@ function fetchRequest(options) {
163
180
  throw cancellation;
164
181
  }
165
182
  deregisterCancelLstnr();
166
- if (timeouted) {
167
- log_1.default.warn("Fetch: Request timeouted.");
183
+ if (isTimedOut) {
184
+ log_1.default.warn("Fetch: Request timed out.");
185
+ throw new errors_1.RequestError(options.url, 0, errors_1.NetworkErrorTypes.TIMEOUT);
186
+ }
187
+ else if (isConnectionTimedOut) {
188
+ log_1.default.warn("Fetch: Request connection timed out.");
168
189
  throw new errors_1.RequestError(options.url, 0, errors_1.NetworkErrorTypes.TIMEOUT);
169
190
  }
170
191
  else if (err instanceof errors_1.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
@@ -27,10 +27,11 @@ function request(options) {
27
27
  responseType: (0, is_null_or_undefined_1.default)(options.responseType) ? DEFAULT_RESPONSE_TYPE :
28
28
  options.responseType,
29
29
  timeout: options.timeout,
30
+ connectionTimeout: options.connectionTimeout,
30
31
  };
31
32
  return new Promise(function (resolve, reject) {
32
33
  var onProgress = options.onProgress, cancelSignal = options.cancelSignal;
33
- var url = requestOptions.url, headers = requestOptions.headers, responseType = requestOptions.responseType, timeout = requestOptions.timeout;
34
+ var url = requestOptions.url, headers = requestOptions.headers, responseType = requestOptions.responseType, timeout = requestOptions.timeout, connectionTimeout = requestOptions.connectionTimeout;
34
35
  var xhr = new XMLHttpRequest();
35
36
  xhr.open("GET", url, true);
36
37
  var timeoutId;
@@ -44,9 +45,19 @@ function request(options) {
44
45
  // is more precise, it might also be more efficient.
45
46
  timeoutId = setTimeout(function () {
46
47
  clearCancellingProcess();
47
- reject(new errors_1.RequestError(url, xhr.status, "TIMEOUT"));
48
+ reject(new errors_1.RequestError(url, xhr.status, errors_1.NetworkErrorTypes.TIMEOUT));
48
49
  }, timeout + 3000);
49
50
  }
51
+ var connectionTimeoutId;
52
+ if (connectionTimeout !== undefined) {
53
+ connectionTimeoutId = setTimeout(function () {
54
+ clearCancellingProcess();
55
+ if (xhr.readyState !== XMLHttpRequest.DONE) {
56
+ xhr.abort();
57
+ }
58
+ reject(new errors_1.RequestError(url, xhr.status, errors_1.NetworkErrorTypes.TIMEOUT));
59
+ }, connectionTimeout);
60
+ }
50
61
  xhr.responseType = responseType;
51
62
  if (xhr.responseType === "document") {
52
63
  xhr.overrideMimeType("text/xml");
@@ -66,7 +77,7 @@ function request(options) {
66
77
  deregisterCancellationListener = cancelSignal
67
78
  .register(function abortRequest(err) {
68
79
  clearCancellingProcess();
69
- if (!(0, is_null_or_undefined_1.default)(xhr) && xhr.readyState !== 4) {
80
+ if (xhr.readyState !== XMLHttpRequest.DONE) {
70
81
  xhr.abort();
71
82
  }
72
83
  reject(err);
@@ -77,12 +88,19 @@ function request(options) {
77
88
  }
78
89
  xhr.onerror = function onXHRError() {
79
90
  clearCancellingProcess();
80
- reject(new errors_1.RequestError(url, xhr.status, "ERROR_EVENT"));
91
+ reject(new errors_1.RequestError(url, xhr.status, errors_1.NetworkErrorTypes.ERROR_EVENT));
81
92
  };
82
93
  xhr.ontimeout = function onXHRTimeout() {
83
94
  clearCancellingProcess();
84
- reject(new errors_1.RequestError(url, xhr.status, "TIMEOUT"));
95
+ reject(new errors_1.RequestError(url, xhr.status, errors_1.NetworkErrorTypes.TIMEOUT));
85
96
  };
97
+ if (connectionTimeout !== undefined) {
98
+ xhr.onreadystatechange = function clearConnectionTimeout() {
99
+ if (xhr.readyState >= XMLHttpRequest.HEADERS_RECEIVED) {
100
+ clearTimeout(connectionTimeoutId);
101
+ }
102
+ };
103
+ }
86
104
  if (onProgress !== undefined) {
87
105
  xhr.onprogress = function onXHRProgress(event) {
88
106
  var currentTime = (0, monotonic_timestamp_1.default)();
@@ -91,7 +109,7 @@ function request(options) {
91
109
  };
92
110
  }
93
111
  xhr.onload = function onXHRLoad(event) {
94
- if (xhr.readyState === 4) {
112
+ if (xhr.readyState === XMLHttpRequest.DONE) {
95
113
  clearCancellingProcess();
96
114
  if (xhr.status >= 200 && xhr.status < 300) {
97
115
  var receivedTime = (0, monotonic_timestamp_1.default)();
@@ -115,7 +133,7 @@ function request(options) {
115
133
  responseData = xhr.response;
116
134
  }
117
135
  if ((0, is_null_or_undefined_1.default)(responseData)) {
118
- reject(new errors_1.RequestError(url, xhr.status, "PARSE_ERROR"));
136
+ reject(new errors_1.RequestError(url, xhr.status, errors_1.NetworkErrorTypes.PARSE_ERROR));
119
137
  return;
120
138
  }
121
139
  resolve({ status: status_1, url: _url,
@@ -123,7 +141,7 @@ function request(options) {
123
141
  size: totalSize, responseData: responseData });
124
142
  }
125
143
  else {
126
- reject(new errors_1.RequestError(url, xhr.status, "ERROR_HTTP_CODE"));
144
+ reject(new errors_1.RequestError(url, xhr.status, errors_1.NetworkErrorTypes.ERROR_HTTP_CODE));
127
145
  }
128
146
  }
129
147
  };
@@ -135,6 +153,9 @@ function request(options) {
135
153
  if (timeoutId !== undefined) {
136
154
  clearTimeout(timeoutId);
137
155
  }
156
+ if (connectionTimeoutId !== undefined) {
157
+ clearTimeout(connectionTimeoutId);
158
+ }
138
159
  if (deregisterCancellationListener !== null) {
139
160
  deregisterCancellationListener();
140
161
  }