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
@@ -87,6 +87,7 @@ pub fn report_adaptation_set_attrs(e: &quick_xml::events::BytesStart) {
87
87
  b"bitstreamSwitching" => BitstreamSwitching.try_report_as_bool(&attr),
88
88
  b"audioSamplingRate" => AudioSamplingRate.try_report_as_string(&attr),
89
89
  b"codecs" => Codecs.try_report_as_string(&attr),
90
+ b"scte214:supplementalCodecs" => SupplementalCodecs.try_report_as_string(&attr),
90
91
  b"profiles" => Profiles.try_report_as_string(&attr),
91
92
  b"segmentProfiles" => SegmentProfiles.try_report_as_string(&attr),
92
93
  b"mimeType" => MimeType.try_report_as_string(&attr),
@@ -116,6 +117,7 @@ pub fn report_representation_attrs(tag_bs: &quick_xml::events::BytesStart) {
116
117
  b"audioSamplingRate" => AudioSamplingRate.try_report_as_string(&attr),
117
118
  b"bandwidth" => Bitrate.try_report_as_u64(&attr),
118
119
  b"codecs" => Codecs.try_report_as_string(&attr),
120
+ b"scte214:supplementalCodecs" => SupplementalCodecs.try_report_as_string(&attr),
119
121
  b"codingDependency" => CodingDependency.try_report_as_bool(&attr),
120
122
  b"frameRate" => FrameRate.try_report_as_maybe_division(&attr),
121
123
  b"height" => Height.try_report_as_u64(&attr),
@@ -287,6 +287,10 @@ export function generateAdaptationSetAttrParser(
287
287
  adaptationAttrs.codecs =
288
288
  parseString(textDecoder, linearMemory.buffer, ptr, len);
289
289
  break;
290
+ case AttributeName.SupplementalCodecs:
291
+ adaptationAttrs.supplementalCodecs =
292
+ parseString(textDecoder, linearMemory.buffer, ptr, len);
293
+ break;
290
294
  case AttributeName.Profiles:
291
295
  adaptationAttrs.profiles =
292
296
  parseString(textDecoder, linearMemory.buffer, ptr, len);
@@ -165,6 +165,10 @@ export function generateRepresentationAttrParser(
165
165
  representationAttrs.codecs =
166
166
  parseString(textDecoder, linearMemory.buffer, ptr, len);
167
167
  break;
168
+ case AttributeName.SupplementalCodecs:
169
+ representationAttrs.supplementalCodecs =
170
+ parseString(textDecoder, linearMemory.buffer, ptr, len);
171
+ break;
168
172
  case AttributeName.CodingDependency:
169
173
  representationAttrs.codingDependency =
170
174
  new DataView(linearMemory.buffer).getUint8(0) === 0;
@@ -293,4 +293,6 @@ export const enum AttributeName {
293
293
 
294
294
  // SegmentTemplate
295
295
  EndNumber = 76, // f64
296
+
297
+ SupplementalCodecs = 77, // String
296
298
  }
@@ -149,7 +149,7 @@ export default class LocalRepresentationIndex implements IRepresentationIndex {
149
149
  * @returns {boolean|undefined}
150
150
  */
151
151
  awaitSegmentBetween(start: number, end: number): boolean | undefined {
152
- if (this.isFinished()) {
152
+ if (this.isStillAwaitingFutureSegments()) {
153
153
  return false;
154
154
  }
155
155
  if (this._index.incomingRanges === undefined) {
@@ -173,8 +173,8 @@ export default class LocalRepresentationIndex implements IRepresentationIndex {
173
173
  return true;
174
174
  }
175
175
 
176
- isFinished() : boolean {
177
- return this._index.isFinished;
176
+ isStillAwaitingFutureSegments() : boolean {
177
+ return !this._index.isFinished;
178
178
  }
179
179
 
180
180
  /**
@@ -203,8 +203,8 @@ export default class MetaRepresentationIndex implements IRepresentationIndex {
203
203
  /**
204
204
  * @returns {Boolean}
205
205
  */
206
- public isFinished() : boolean {
207
- return this._wrappedIndex.isFinished();
206
+ public isStillAwaitingFutureSegments() : boolean {
207
+ return this._wrappedIndex.isStillAwaitingFutureSegments();
208
208
  }
209
209
 
210
210
  /**
@@ -27,7 +27,6 @@ import {
27
27
  checkDiscontinuity,
28
28
  getIndexSegmentEnd,
29
29
  } from "../utils/index_helpers";
30
- import isSegmentStillAvailable from "../utils/is_segment_still_available";
31
30
  import SharedSmoothSegmentTimeline, {
32
31
  IIndexSegment,
33
32
  } from "./shared_smooth_segment_timeline";
@@ -423,7 +422,7 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
423
422
  */
424
423
  awaitSegmentBetween(start: number, end: number): boolean | undefined {
425
424
  assert(start <= end);
426
- if (this.isFinished()) {
425
+ if (this.isStillAwaitingFutureSegments()) {
427
426
  return false;
428
427
  }
429
428
  const lastAvailablePosition = this.getLastAvailablePosition();
@@ -462,7 +461,22 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
462
461
  }
463
462
  this._refreshTimeline();
464
463
  const { timeline, timescale } = this._sharedSmoothTimeline;
465
- return isSegmentStillAvailable(segment, timeline, timescale, 0);
464
+ for (let i = 0; i < timeline.length; i++) {
465
+ const tSegment = timeline[i];
466
+ const tSegmentTime = tSegment.start / timescale;
467
+ if (tSegmentTime > segment.time) {
468
+ return false; // We went over it without finding it
469
+ } else if (tSegmentTime === segment.time) {
470
+ return true;
471
+ } else { // tSegment.start < segment.time
472
+ if (tSegment.repeatCount >= 0 && tSegment.duration !== undefined) {
473
+ const timeDiff = tSegmentTime - tSegment.start;
474
+ const repeat = (timeDiff / tSegment.duration) - 1;
475
+ return repeat % 1 === 0 && repeat <= tSegment.repeatCount;
476
+ }
477
+ }
478
+ }
479
+ return false;
466
480
  }
467
481
 
468
482
  /**
@@ -500,9 +514,9 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
500
514
  }
501
515
 
502
516
  /**
503
- * Returns `true` if the last segments in this index have already been
517
+ * Returns `false` if the last segments in this index have already been
504
518
  * generated.
505
- * Returns `false` if the index is still waiting on future segments to be
519
+ * Returns `true` if the index is still waiting on future segments to be
506
520
  * generated.
507
521
  *
508
522
  * For Smooth, it should only depend on whether the content is a live content
@@ -510,8 +524,8 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
510
524
  * TODO What about Smooth live content that finishes at some point?
511
525
  * @returns {boolean}
512
526
  */
513
- isFinished() : boolean {
514
- return !this._isLive;
527
+ isStillAwaitingFutureSegments() : boolean {
528
+ return this._isLive;
515
529
  }
516
530
 
517
531
  /**
@@ -529,8 +543,8 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
529
543
  * Add segments to a `SharedSmoothSegmentTimeline` that were predicted to come
530
544
  * after `currentSegment`.
531
545
  * @param {Array.<Object>} nextSegments - The segment information parsed.
532
- * @param {Object} segment - Information on the segment which contained that
533
- * new segment information.
546
+ * @param {Object} currentSegment - Information on the segment which contained
547
+ * that new segment information.
534
548
  */
535
549
  addPredictedSegments(
536
550
  nextSegments : Array<{ duration : number; time : number; timescale : number }>,
@@ -160,6 +160,8 @@ export interface IParsedRepresentation {
160
160
  hdrInfo?: IHDRInformation | undefined;
161
161
  /** `true` if audio has Dolby Atmos. */
162
162
  isSpatialAudio?: boolean | undefined;
163
+
164
+ supplementalCodecs? : string | undefined;
163
165
  }
164
166
 
165
167
  /** Every possible types an Adaptation can have. */
@@ -30,7 +30,7 @@ function generateRepresentationIndex(
30
30
  awaitSegmentBetween() : undefined { return ; },
31
31
  checkDiscontinuity() : number | null { return null; },
32
32
  isSegmentStillAvailable() : undefined { return ; },
33
- isFinished() { return false; },
33
+ isStillAwaitingFutureSegments() { return true; },
34
34
  canBeOutOfSyncError() : true { return true; },
35
35
  isInitialized() : true { return true; },
36
36
  initialize() : void { return ; },
@@ -30,7 +30,7 @@ function generateRepresentationIndex(
30
30
  awaitSegmentBetween() : undefined { return ; },
31
31
  checkDiscontinuity() : number | null { return null; },
32
32
  isSegmentStillAvailable() : undefined { return ; },
33
- isFinished() { return false; },
33
+ isStillAwaitingFutureSegments() { return true; },
34
34
  isInitialized() : true { return true; },
35
35
  initialize() : void { return ; },
36
36
  addPredictedSegments() : void { return ; },
@@ -136,7 +136,7 @@ export function getTimescaledRange(
136
136
  * timescaled time.
137
137
  * Returns -1 if the given time is lower than the start of the first available
138
138
  * segment.
139
- * @param {Object} index
139
+ * @param {Object} timeline
140
140
  * @param {Number} timeTScaled
141
141
  * @returns {Number}
142
142
  */
@@ -255,10 +255,20 @@ export type IStartAtOption =
255
255
  percentage : number;
256
256
  } | {
257
257
  /**
258
- * If set, we should begin at this position relative to the content's end,
259
- * in seconds.
258
+ * If set, we should begin at this position relative to the content's maximum
259
+ * seekable position, in seconds.
260
260
  */
261
261
  fromLastPosition : number;
262
+ } | {
263
+ /**
264
+ * If set, we should begin at this position relative to the content's live
265
+ * edge if it makes sense, in seconds.
266
+ *
267
+ * If the live edge is unknown or if it does not make sense for the current
268
+ * content, that position is relative to the content's maximum position
269
+ * instead.
270
+ */
271
+ fromLivePosition : number;
262
272
  } | {
263
273
  /**
264
274
  * If set, we should begin at this position relative to the content's start,
@@ -267,40 +277,38 @@ export type IStartAtOption =
267
277
  fromFirstPosition : number;
268
278
  };
269
279
 
280
+ export interface RequestRetryParameters {
281
+ /**
282
+ * The amount of time maximum we should retry a request before failing on Error.
283
+ * Set to `Infinity` for an infinite number of requests.
284
+ */
285
+ maxRetry? : number | undefined;
286
+ /**
287
+ * Amount of time, in milliseconds, after which a request should be
288
+ * aborted and optionally retried, depending on the maxRetry configuration.
289
+ *
290
+ * Setting it to `-1` allows to disable any timeout.
291
+ * `undefined` means that a default, large, timeout will be used instead.
292
+ */
293
+ timeout? : number | undefined;
294
+ /**
295
+ * Amount of time, in milliseconds, after which a request that hasn't receive
296
+ * the headers and status code should be aborted and optionnaly retried,
297
+ * depending on the maxRetry configuration.
298
+ */
299
+ connectionTimeout?: number | undefined;
300
+ }
301
+
270
302
  /** Value for the `requestConfig` option of the `loadVideo` method. */
271
303
  export interface IRequestConfig {
272
- manifest? : {
273
- /**
274
- * The amount of time maximum we should retry a Manifest or Manifest-related
275
- * request before failing on Error.
276
- * Set to `Infinity` for an infinite number of requests.
277
- */
278
- maxRetry? : number | undefined;
279
- /**
280
- * Amount of time, in milliseconds, after which a manifest request should be
281
- * aborted and optionally retried, depending on the current configuration.
282
- *
283
- * Setting it to `-1` allows to disable any timeout.
284
- * `undefined` means that a default, large, timeout will be used instead.
285
- */
286
- timeout? : number | undefined;
287
- } | undefined;
288
- segment? : {
289
- /**
290
- * The amount of time maximum we should retry a segment or segment-related
291
- * request before failing on Error.
292
- * Set to `Infinity` for an infinite number of requests.
293
- */
294
- maxRetry? : number | undefined;
295
- /**
296
- * Amount of time, in milliseconds, after which a segment request should be
297
- * aborted and optionally retried, depending on the current configuration.
298
- *
299
- * Setting it to `-1` allows to disable any timeout.
300
- * `undefined` means that a default, large, timeout will be used instead.
301
- */
302
- timeout? : number | undefined;
303
- } | undefined;
304
+ /**
305
+ * Defines the retry parameters when requesting manifest
306
+ */
307
+ manifest? : RequestRetryParameters | undefined;
308
+ /**
309
+ * Defines the retry parameters when requesting a segment
310
+ */
311
+ segment? : RequestRetryParameters | undefined;
304
312
  }
305
313
 
306
314
  export type ISegmentLoader = (
@@ -949,20 +957,57 @@ export interface ILockedAudioRepresentationsSettings {
949
957
  }
950
958
 
951
959
  export interface IAudioTrackSetting {
960
+ /** `id` of the audio track you want to set. */
952
961
  trackId : string;
962
+ /**
963
+ * `id` of the Period for which you want that setting applied.
964
+ * Keeping it undefined means it will apply to the currently-playing Period.
965
+ */
953
966
  periodId? : string | undefined;
967
+ /**
968
+ * Behavior wanted when replacing an audio track / Adaptation by another.
969
+ * @see IAudioTrackSwitchingMode
970
+ *
971
+ * Keeping it undefined means that the RxPlayer will automatically select
972
+ * the most adapted choice.
973
+ */
954
974
  switchingMode? : IAudioTrackSwitchingMode | undefined;
975
+ /**
976
+ * Representations (a.k.a. qualities) you want to play in that new track.
977
+ * Keeping it undefined means that all compatible qualities may be played.
978
+ */
955
979
  lockedRepresentations? : string[] | undefined;
956
980
  }
957
981
 
958
982
  export interface IVideoTrackSetting {
983
+ /** `id` of the video track you want to set. */
959
984
  trackId : string;
985
+ /**
986
+ * `id` of the Period for which you want that setting applied.
987
+ * Keeping it undefined means it will apply to the currently-playing Period.
988
+ */
960
989
  periodId? : string | undefined;
990
+ /**
991
+ * Behavior wanted when replacing an video track / Adaptation by another.
992
+ * @see IVideoTrackSwitchingMode
993
+ *
994
+ * Keeping it undefined means that the RxPlayer will automatically select
995
+ * the most adapted choice.
996
+ */
961
997
  switchingMode? : IVideoTrackSwitchingMode | undefined;
998
+ /**
999
+ * Representations (a.k.a. qualities) you want to play in that new track.
1000
+ * Keeping it undefined means that all compatible qualities may be played.
1001
+ */
962
1002
  lockedRepresentations? : string[] | undefined;
963
1003
  }
964
1004
 
965
1005
  export interface ITextTrackSetting {
1006
+ /** `id` of the text track you want to set. */
966
1007
  trackId : string;
1008
+ /**
1009
+ * `id` of the Period for which you want that setting applied.
1010
+ * Keeping it undefined means it will apply to the currently-playing Period.
1011
+ */
967
1012
  periodId? : string | undefined;
968
1013
  }
@@ -50,6 +50,7 @@ export default function initSegmentLoader(
50
50
  return request({ url,
51
51
  responseType: "arraybuffer",
52
52
  timeout: options.timeout,
53
+ connectionTimeout: options.connectionTimeout,
53
54
  cancelSignal,
54
55
  onProgress: callbacks.onProgress })
55
56
  .then(data => ({ resultType: "segment-loaded",
@@ -61,6 +62,7 @@ export default function initSegmentLoader(
61
62
  headers: { Range: byteRange(segment.range) },
62
63
  responseType: "arraybuffer",
63
64
  timeout: options.timeout,
65
+ connectionTimeout: options.connectionTimeout,
64
66
  cancelSignal,
65
67
  onProgress: callbacks.onProgress })
66
68
  .then(data => ({ resultType: "segment-loaded",
@@ -74,6 +76,7 @@ export default function initSegmentLoader(
74
76
  segment.indexRange[1] ]) },
75
77
  responseType: "arraybuffer",
76
78
  timeout: options.timeout,
79
+ connectionTimeout: options.connectionTimeout,
77
80
  cancelSignal,
78
81
  onProgress: callbacks.onProgress })
79
82
  .then(data => ({ resultType: "segment-loaded",
@@ -84,12 +87,14 @@ export default function initSegmentLoader(
84
87
  headers: { Range: byteRange(segment.range) },
85
88
  responseType: "arraybuffer",
86
89
  timeout: options.timeout,
90
+ connectionTimeout: options.connectionTimeout,
87
91
  cancelSignal,
88
92
  onProgress: callbacks.onProgress });
89
93
  const indexRequest$ = request({ url,
90
94
  headers: { Range: byteRange(segment.indexRange) },
91
95
  responseType: "arraybuffer",
92
96
  timeout: options.timeout,
97
+ connectionTimeout: options.connectionTimeout,
93
98
  cancelSignal,
94
99
  onProgress: callbacks.onProgress });
95
100
 
@@ -151,14 +151,20 @@ export default function generateManifestParser(
151
151
  const externalResources = value.urls.map(resourceUrl => {
152
152
  return scheduleRequest(() => {
153
153
  const defaultTimeout = config.getCurrent().DEFAULT_REQUEST_TIMEOUT;
154
+ const defaultConnectionTimeout = config.getCurrent().DEFAULT_CONNECTION_TIMEOUT;
155
+
154
156
  return value.format === "string" ? request({ url: resourceUrl,
155
157
  responseType: "text",
156
158
  timeout: defaultTimeout,
159
+ connectionTimeout:
160
+ defaultConnectionTimeout,
157
161
  cancelSignal }) :
158
162
 
159
163
  request({ url: resourceUrl,
160
164
  responseType: "arraybuffer",
161
165
  timeout: defaultTimeout,
166
+ connectionTimeout:
167
+ defaultConnectionTimeout,
162
168
  cancelSignal });
163
169
  }).then((res) => {
164
170
  if (value.format === "string") {
@@ -84,6 +84,7 @@ export function regularSegmentLoader(
84
84
  { Range: byteRange(segment.range) } :
85
85
  undefined,
86
86
  timeout: options.timeout,
87
+ connectionTimeout: options.connectionTimeout,
87
88
  cancelSignal,
88
89
  onProgress: callbacks.onProgress })
89
90
  .then((data) => ({ resultType: "segment-loaded",
@@ -99,6 +99,7 @@ export default function generateTextTrackLoader(
99
99
  { Range: byteRange(range) } :
100
100
  null,
101
101
  timeout: options.timeout,
102
+ connectionTimeout: options.connectionTimeout,
102
103
  onProgress: callbacks.onProgress,
103
104
  cancelSignal })
104
105
  .then((data) => ({ resultType: "segment-loaded",
@@ -111,6 +112,7 @@ export default function generateTextTrackLoader(
111
112
  { Range: byteRange(range) } :
112
113
  null,
113
114
  timeout: options.timeout,
115
+ connectionTimeout: options.connectionTimeout,
114
116
  onProgress: callbacks.onProgress,
115
117
  cancelSignal })
116
118
  .then((data) => ({ resultType: "segment-loaded",
@@ -40,6 +40,7 @@ function regularManifestLoader(
40
40
  return request({ url,
41
41
  responseType: "text",
42
42
  timeout: loaderOptions.timeout,
43
+ connectionTimeout: loaderOptions.connectionTimeout,
43
44
  cancelSignal });
44
45
  }
45
46
 
@@ -177,7 +177,10 @@ export default function(options : ITransportOptions): ITransportPipelines {
177
177
  * Whether a ManifestLoader's timeout should be relied on here
178
178
  * is ambiguous.
179
179
  */
180
- const manOpts = { timeout: config.getCurrent().DEFAULT_REQUEST_TIMEOUT };
180
+ const manOpts = {
181
+ timeout: config.getCurrent().DEFAULT_REQUEST_TIMEOUT,
182
+ connectionTimeout: config.getCurrent().DEFAULT_CONNECTION_TIMEOUT,
183
+ };
181
184
  return transport.manifest.loadManifest(resource.url, manOpts, cancelSignal);
182
185
  }
183
186
  });
@@ -203,6 +203,7 @@ export default function(transportOptions : ITransportOptions) : ITransportPipeli
203
203
  return request({ url,
204
204
  responseType: "text",
205
205
  timeout: loaderOptions.timeout,
206
+ connectionTimeout: loaderOptions.connectionTimeout,
206
207
  cancelSignal,
207
208
  onProgress: callbacks.onProgress })
208
209
  .then((data) => ({ resultType: "segment-loaded" as const,
@@ -211,6 +212,7 @@ export default function(transportOptions : ITransportOptions) : ITransportPipeli
211
212
  return request({ url,
212
213
  responseType: "arraybuffer",
213
214
  timeout: loaderOptions.timeout,
215
+ connectionTimeout: loaderOptions.connectionTimeout,
214
216
  cancelSignal,
215
217
  onProgress: callbacks.onProgress })
216
218
  .then((data) => {
@@ -65,6 +65,7 @@ function regularSegmentLoader(
65
65
  responseType: "arraybuffer",
66
66
  headers,
67
67
  timeout: loaderOptions.timeout,
68
+ connectionTimeout: loaderOptions.connectionTimeout,
68
69
  cancelSignal,
69
70
  onProgress: callbacks.onProgress })
70
71
  .then((data) => {
@@ -169,6 +169,12 @@ export interface IManifestLoaderOptions {
169
169
  * `undefined` means that no timeout will be enforced.
170
170
  */
171
171
  timeout? : number | undefined;
172
+ /**
173
+ * Connection timeout, in milliseconds, after which the request is canceled
174
+ * if the responses headers has not being received.
175
+ * Do not set or set to "undefined" to disable it.
176
+ */
177
+ connectionTimeout? : number | undefined;
172
178
  }
173
179
 
174
180
  /** Functions allowing to load and parse segments of any type. */
@@ -217,6 +223,12 @@ export interface ISegmentLoaderOptions {
217
223
  * `undefined` means that no timeout will be enforced.
218
224
  */
219
225
  timeout? : number | undefined;
226
+ /**
227
+ * Connection timeout, in milliseconds, after which the request is canceled
228
+ * if the responses headers has not being received.
229
+ * Do not set or set to "undefined" to disable it.
230
+ */
231
+ connectionTimeout? : number | undefined;
220
232
  }
221
233
 
222
234
  /**
@@ -57,16 +57,19 @@ function generateRegularManifestLoader(
57
57
  return request({ url,
58
58
  responseType: "arraybuffer",
59
59
  timeout: loaderOptions.timeout,
60
+ connectionTimeout: loaderOptions.connectionTimeout,
60
61
  cancelSignal });
61
62
  case "text":
62
63
  return request({ url,
63
64
  responseType: "text",
64
65
  timeout: loaderOptions.timeout,
66
+ connectionTimeout: loaderOptions.connectionTimeout,
65
67
  cancelSignal });
66
68
  case "document":
67
69
  return request({ url,
68
70
  responseType: "document",
69
71
  timeout: loaderOptions.timeout,
72
+ connectionTimeout: loaderOptions.connectionTimeout,
70
73
  cancelSignal });
71
74
  default:
72
75
  assertUnreachable(preferredType);
@@ -0,0 +1,7 @@
1
+ export default typeof queueMicrotask === "function" ?
2
+ queueMicrotask :
3
+ function queueMicrotaskPonyfill(
4
+ cb: () => void
5
+ ): void {
6
+ Promise.resolve().then(cb, () => cb());
7
+ };
@@ -95,6 +95,12 @@ export interface IFetchOptions {
95
95
  * if not all data has been received yet.
96
96
  */
97
97
  timeout? : number | undefined;
98
+ /**
99
+ * Optional connection timeout, in milliseconds, after which the request is canceled
100
+ * if the responses headers has not being received.
101
+ * Do not set or set to "undefined" to disable it.
102
+ */
103
+ connectionTimeout? : number | undefined;
98
104
  }
99
105
 
100
106
 
@@ -128,7 +134,8 @@ export default function fetchRequest(
128
134
 
129
135
  log.debug("Fetch: Called with URL", options.url);
130
136
  let cancellation : CancellationError | null = null;
131
- let timeouted = false;
137
+ let isTimedOut = false;
138
+ let isConnectionTimedOut = false;
132
139
  const sendingTime = getMonotonicTimeStamp();
133
140
  const abortController: AbortController | null =
134
141
  !isNullOrUndefined(_AbortController) ? new _AbortController() :
@@ -146,14 +153,28 @@ export default function fetchRequest(
146
153
  abortController.abort();
147
154
  }
148
155
 
149
- let timeout : number | undefined;
156
+ let timeoutId : number | undefined;
150
157
  if (options.timeout !== undefined) {
151
- timeout = setTimeout(() => {
152
- timeouted = true;
158
+ timeoutId = setTimeout(() => {
159
+ isTimedOut = true;
160
+ if (connectionTimeoutId !== undefined) {
161
+ clearTimeout(connectionTimeoutId);
162
+ }
153
163
  abortFetch();
154
164
  }, options.timeout);
155
165
  }
156
166
 
167
+ let connectionTimeoutId: number | undefined;
168
+ if (options.connectionTimeout !== undefined) {
169
+ connectionTimeoutId = setTimeout(() => {
170
+ isConnectionTimedOut = true;
171
+ if (timeoutId !== undefined) {
172
+ clearTimeout(timeoutId);
173
+ }
174
+ abortFetch();
175
+ }, options.connectionTimeout);
176
+ }
177
+
157
178
  const deregisterCancelLstnr = options.cancelSignal
158
179
  .register(function abortRequest(err : CancellationError) {
159
180
  cancellation = err;
@@ -170,8 +191,8 @@ export default function fetchRequest(
170
191
  options.url,
171
192
  fetchOpts
172
193
  ).then((response : Response) : Promise<IFetchedStreamComplete> => {
173
- if (!isNullOrUndefined(timeout)) {
174
- clearTimeout(timeout);
194
+ if (connectionTimeoutId !== undefined) {
195
+ clearTimeout(connectionTimeoutId);
175
196
  }
176
197
  if (response.status >= 300) {
177
198
  log.warn("Fetch: Request HTTP Error", response.status, response.url);
@@ -212,6 +233,9 @@ export default function fetchRequest(
212
233
  options.onData(dataInfo);
213
234
  return readBufferAndSendEvents();
214
235
  } else if (data.done) {
236
+ if (timeoutId !== undefined) {
237
+ clearTimeout(timeoutId);
238
+ }
215
239
  deregisterCancelLstnr();
216
240
  const receivedTime = getMonotonicTimeStamp();
217
241
  const requestDuration = receivedTime - sendingTime;
@@ -229,8 +253,11 @@ export default function fetchRequest(
229
253
  throw cancellation;
230
254
  }
231
255
  deregisterCancelLstnr();
232
- if (timeouted) {
233
- log.warn("Fetch: Request timeouted.");
256
+ if (isTimedOut) {
257
+ log.warn("Fetch: Request timed out.");
258
+ throw new RequestError(options.url, 0, NetworkErrorTypes.TIMEOUT);
259
+ } else if (isConnectionTimedOut) {
260
+ log.warn("Fetch: Request connection timed out.");
234
261
  throw new RequestError(options.url, 0, NetworkErrorTypes.TIMEOUT);
235
262
  } else if (err instanceof RequestError) {
236
263
  throw err;