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
@@ -1,29 +1,51 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
16
37
  import nextTick from "next-tick";
17
38
  import config from "../../../config";
18
39
  import { formatError } from "../../../errors";
19
40
  import log from "../../../log";
41
+ import assertUnreachable from "../../../utils/assert_unreachable";
20
42
  import cancellableSleep from "../../../utils/cancellable_sleep";
21
43
  import noop from "../../../utils/noop";
22
44
  import objectAssign from "../../../utils/object_assign";
23
45
  import SharedReference, { createMappedReference, } from "../../../utils/reference";
24
46
  import TaskCanceller from "../../../utils/task_canceller";
25
47
  import RepresentationStream from "../representation";
26
- import createRepresentationEstimator from "./utils/create_representation_estimator";
48
+ import getRepresentationsSwitchingStrategy from "./get_representations_switch_strategy";
27
49
  /**
28
50
  * Create new `AdaptationStream` whose task will be to download the media data
29
51
  * for a given Adaptation (i.e. "track").
@@ -56,7 +78,6 @@ import createRepresentationEstimator from "./utils/create_representation_estimat
56
78
  */
57
79
  export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
58
80
  var playbackObserver = _a.playbackObserver, content = _a.content, options = _a.options, representationEstimator = _a.representationEstimator, segmentBuffer = _a.segmentBuffer, segmentFetcherCreator = _a.segmentFetcherCreator, wantedBufferAhead = _a.wantedBufferAhead, maxVideoBufferSize = _a.maxVideoBufferSize;
59
- var directManualBitrateSwitching = options.manualBitrateSwitchingMode === "direct";
60
81
  var manifest = content.manifest, period = content.period, adaptation = content.adaptation;
61
82
  /** Allows to cancel everything the `AdaptationStream` is doing. */
62
83
  var adapStreamCanceller = new TaskCanceller();
@@ -75,80 +96,149 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
75
96
  * `null` if no Representation is chosen for now.
76
97
  */
77
98
  var currentRepresentation = new SharedReference(null, adapStreamCanceller.signal);
78
- var _b = createRepresentationEstimator(content, representationEstimator, currentRepresentation, playbackObserver, function (err) {
79
- adapStreamCanceller.cancel();
80
- callbacks.error(err);
81
- }, adapStreamCanceller.signal), estimateRef = _b.estimateRef, abrCallbacks = _b.abrCallbacks;
82
- /** Allows the `RepresentationStream` to easily fetch media segments. */
83
- var segmentFetcher = segmentFetcherCreator
84
- .createSegmentFetcher(adaptation.type,
85
- /* eslint-disable @typescript-eslint/unbound-method */
86
- { onRequestBegin: abrCallbacks.requestBegin,
87
- onRequestEnd: abrCallbacks.requestEnd,
88
- onProgress: abrCallbacks.requestProgress,
89
- onMetrics: abrCallbacks.metrics });
90
- /* eslint-enable @typescript-eslint/unbound-method */
91
99
  /** Stores the last emitted bitrate. */
92
- var previousBitrate;
93
- /** Emit at each bitrate estimate done by the IRepresentationEstimator. */
94
- estimateRef.onUpdate(function (_a) {
95
- var bitrate = _a.bitrate;
96
- if (bitrate === undefined) {
97
- return;
98
- }
99
- if (bitrate === previousBitrate) {
100
- return;
101
- }
102
- previousBitrate = bitrate;
103
- log.debug("Stream: new ".concat(adaptation.type, " bitrate estimate"), bitrate);
104
- callbacks.bitrateEstimationChange({ type: adaptation.type, bitrate: bitrate });
105
- }, { emitCurrentValue: true, clearSignal: adapStreamCanceller.signal });
106
- recursivelyCreateRepresentationStreams(true);
100
+ var previouslyEmittedBitrate;
101
+ /** When triggered, cancel all `RepresentationStream`s currently created. */
102
+ var cancelCurrentStreams;
103
+ // Each time the list of wanted Representations changes, we restart the logic
104
+ content.representations.onUpdate(function (val) {
105
+ cancelCurrentStreams === null || cancelCurrentStreams === void 0 ? void 0 : cancelCurrentStreams.cancel();
106
+ cancelCurrentStreams = new TaskCanceller();
107
+ cancelCurrentStreams.linkToSignal(adapStreamCanceller.signal);
108
+ onRepresentationsChoiceChange(val, cancelCurrentStreams.signal).catch(function (err) {
109
+ if ((cancelCurrentStreams === null || cancelCurrentStreams === void 0 ? void 0 : cancelCurrentStreams.isUsed()) === true &&
110
+ TaskCanceller.isCancellationError(err)) {
111
+ return;
112
+ }
113
+ adapStreamCanceller.cancel();
114
+ callbacks.error(err);
115
+ });
116
+ }, { clearSignal: adapStreamCanceller.signal, emitCurrentValue: true });
117
+ return;
118
+ /**
119
+ * Function called each time the list of wanted Representations is updated.
120
+ *
121
+ * Returns a Promise to profit from async/await syntax. The Promise resolution
122
+ * does not indicate anything. The Promise may reject however, either on some
123
+ * error or on some cancellation.
124
+ * @param {Object} choice - The last Representations choice that has been
125
+ * made.
126
+ * @param {Object} fnCancelSignal - `CancellationSignal` allowing to cancel
127
+ * everything this function is doing and free all related resources.
128
+ */
129
+ function onRepresentationsChoiceChange(choice, fnCancelSignal) {
130
+ return __awaiter(this, void 0, void 0, function () {
131
+ var switchStrat, _a, _i, _b, range, representationsList, _c, estimateRef, abrCallbacks;
132
+ return __generator(this, function (_d) {
133
+ switch (_d.label) {
134
+ case 0:
135
+ switchStrat = getRepresentationsSwitchingStrategy(period, adaptation, choice, segmentBuffer, playbackObserver);
136
+ _a = switchStrat.type;
137
+ switch (_a) {
138
+ case "continue": return [3 /*break*/, 1];
139
+ case "needs-reload": return [3 /*break*/, 2];
140
+ case "flush-buffer": return [3 /*break*/, 3];
141
+ case "clean-buffer": return [3 /*break*/, 3];
142
+ }
143
+ return [3 /*break*/, 8];
144
+ case 1: return [3 /*break*/, 9]; // nothing to do
145
+ case 2: // Just ask to reload
146
+ // We begin by scheduling a micro-task to reduce the possibility of race
147
+ // conditions where the inner logic would be called synchronously before
148
+ // the next observation (which may reflect very different playback conditions)
149
+ // is actually received.
150
+ return [2 /*return*/, nextTick(function () {
151
+ if (fnCancelSignal.isCancelled()) {
152
+ return;
153
+ }
154
+ var DELTA_POSITION_AFTER_RELOAD = config.getCurrent().DELTA_POSITION_AFTER_RELOAD;
155
+ var timeOffset = DELTA_POSITION_AFTER_RELOAD.bitrateSwitch;
156
+ return callbacks.waitingMediaSourceReload({ bufferType: adaptation.type, period: period, timeOffset: timeOffset, stayInPeriod: true });
157
+ })];
158
+ case 3:
159
+ _i = 0, _b = switchStrat.value;
160
+ _d.label = 4;
161
+ case 4:
162
+ if (!(_i < _b.length)) return [3 /*break*/, 7];
163
+ range = _b[_i];
164
+ return [4 /*yield*/, segmentBuffer.removeBuffer(range.start, range.end, fnCancelSignal)];
165
+ case 5:
166
+ _d.sent();
167
+ if (fnCancelSignal.isCancelled()) {
168
+ return [2 /*return*/];
169
+ }
170
+ _d.label = 6;
171
+ case 6:
172
+ _i++;
173
+ return [3 /*break*/, 4];
174
+ case 7:
175
+ if (switchStrat.type === "flush-buffer") {
176
+ callbacks.needsBufferFlush();
177
+ if (fnCancelSignal.isCancelled()) {
178
+ return [2 /*return*/];
179
+ }
180
+ }
181
+ return [3 /*break*/, 9];
182
+ case 8:
183
+ assertUnreachable(switchStrat);
184
+ _d.label = 9;
185
+ case 9:
186
+ representationsList = new SharedReference(choice.representations);
187
+ representationsList.finish();
188
+ _c = representationEstimator({ manifest: manifest, period: period, adaptation: adaptation }, currentRepresentation, representationsList, playbackObserver, fnCancelSignal), estimateRef = _c.estimates, abrCallbacks = _c.callbacks;
189
+ /** Emit at each bitrate estimate done by the IRepresentationEstimator. */
190
+ estimateRef.onUpdate(function (_a) {
191
+ var bitrate = _a.bitrate;
192
+ if (bitrate === undefined || bitrate === previouslyEmittedBitrate) {
193
+ return;
194
+ }
195
+ previouslyEmittedBitrate = bitrate;
196
+ log.debug("Stream: new ".concat(adaptation.type, " bitrate estimate"), bitrate);
197
+ callbacks.bitrateEstimateChange({ type: adaptation.type, bitrate: bitrate });
198
+ }, { emitCurrentValue: true, clearSignal: fnCancelSignal });
199
+ recursivelyCreateRepresentationStreams(estimateRef, abrCallbacks, fnCancelSignal);
200
+ return [2 /*return*/];
201
+ }
202
+ });
203
+ });
204
+ }
107
205
  /**
108
206
  * Create `RepresentationStream`s starting with the Representation of the last
109
207
  * estimate performed.
110
208
  * Each time a new estimate is made, this function will create a new
111
209
  * `RepresentationStream` corresponding to that new estimate.
112
- * @param {boolean} isFirstEstimate - Whether this is the first time we're
113
- * creating a `RepresentationStream` in the corresponding `AdaptationStream`.
114
- * This is important because manual quality switches might need a full reload
115
- * of the MediaSource _except_ if we are talking about the first quality chosen.
210
+ * @param {Object} estimateRef - Reference through which ABR estimates are
211
+ * set. May be updated at any time.
212
+ * @param {Object} abrCallbacks - Callbacks defined by the ABR logic that have
213
+ * to be called at the right time.
214
+ * @param {Object} fnCancelSignal - `CancellationSignal` which will abort
215
+ * anything this function is doing and free allocated resources.
116
216
  */
117
- function recursivelyCreateRepresentationStreams(isFirstEstimate) {
217
+ function recursivelyCreateRepresentationStreams(estimateRef, abrCallbacks, fnCancelSignal) {
218
+ /** Allows a `RepresentationStream` to easily fetch media segments. */
219
+ var segmentFetcher = segmentFetcherCreator
220
+ .createSegmentFetcher(adaptation.type,
221
+ /* eslint-disable @typescript-eslint/unbound-method */
222
+ { onRequestBegin: abrCallbacks.requestBegin,
223
+ onRequestEnd: abrCallbacks.requestEnd,
224
+ onProgress: abrCallbacks.requestProgress,
225
+ onMetrics: abrCallbacks.metrics });
226
+ /* eslint-enable @typescript-eslint/unbound-method */
118
227
  /**
119
228
  * `TaskCanceller` triggered when the current `RepresentationStream` is
120
229
  * terminating and as such the next one might be immediately created
121
230
  * recursively.
122
231
  */
123
232
  var repStreamTerminatingCanceller = new TaskCanceller();
124
- repStreamTerminatingCanceller.linkToSignal(adapStreamCanceller.signal);
125
- var _a = estimateRef.getValue(), representation = _a.representation, manual = _a.manual;
233
+ repStreamTerminatingCanceller.linkToSignal(fnCancelSignal);
234
+ var representation = estimateRef.getValue().representation;
126
235
  if (representation === null) {
127
236
  return;
128
237
  }
129
- // A manual bitrate switch might need an immediate feedback.
130
- // To do that properly, we need to reload the MediaSource
131
- if (directManualBitrateSwitching && manual && !isFirstEstimate) {
132
- var DELTA_POSITION_AFTER_RELOAD_1 = config.getCurrent().DELTA_POSITION_AFTER_RELOAD;
133
- // We begin by scheduling a micro-task to reduce the possibility of race
134
- // conditions where the inner logic would be called synchronously before
135
- // the next observation (which may reflect very different playback conditions)
136
- // is actually received.
137
- return nextTick(function () {
138
- if (repStreamTerminatingCanceller.isUsed()) {
139
- return;
140
- }
141
- var newManual = estimateRef.getValue().manual;
142
- if (!newManual) {
143
- return;
144
- }
145
- var timeOffset = DELTA_POSITION_AFTER_RELOAD_1.bitrateSwitch;
146
- return callbacks.waitingMediaSourceReload({ bufferType: adaptation.type, period: period, timeOffset: timeOffset, stayInPeriod: true });
147
- });
148
- }
149
238
  /**
150
- * Emit when the current RepresentationStream should be terminated to make
151
- * place for a new one (e.g. when switching quality).
239
+ * Stores the last estimate emitted, starting with `null`.
240
+ * This allows to easily rely on that value in inner Observables which might also
241
+ * need the last already-considered value.
152
242
  */
153
243
  var terminateCurrentStream = new SharedReference(null, repStreamTerminatingCanceller.signal);
154
244
  /** Allows to stop listening to estimateRef on the following line. */
@@ -167,15 +257,8 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
167
257
  }
168
258
  }, { clearSignal: repStreamTerminatingCanceller.signal, emitCurrentValue: true });
169
259
  /**
170
- * "Fast-switching" is a behavior allowing to replace low-quality segments
171
- * (i.e. with a low bitrate) with higher-quality segments (higher bitrate) in
172
- * the buffer.
173
- * This threshold defines a bitrate from which "fast-switching" is disabled.
174
- * For example with a fastSwitchThreshold set to `100`, segments with a
175
- * bitrate of `90` can be replaced. But segments with a bitrate of `100`
176
- * onward won't be replaced by higher quality segments.
177
- * Set to `undefined` to indicate that there's no threshold (anything can be
178
- * replaced by higher-quality segments).
260
+ * Recursively create `RepresentationStream`s according to the last
261
+ * Representation estimate.
179
262
  */
180
263
  var fastSwitchThreshold = new SharedReference(0);
181
264
  if (options.enableFastSwitching) {
@@ -215,26 +298,33 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
215
298
  return; // Already handled
216
299
  }
217
300
  repStreamTerminatingCanceller.cancel();
218
- return recursivelyCreateRepresentationStreams(false);
301
+ return recursivelyCreateRepresentationStreams(estimateRef, abrCallbacks, fnCancelSignal);
219
302
  },
220
303
  };
221
- createRepresentationStream(representation, terminateCurrentStream, fastSwitchThreshold, representationStreamCallbacks);
304
+ createRepresentationStream(representation, segmentFetcher, terminateCurrentStream, fastSwitchThreshold, representationStreamCallbacks, fnCancelSignal);
222
305
  }
223
306
  /**
224
307
  * Create and returns a new `RepresentationStream`, linked to the
225
308
  * given Representation.
226
- * @param {Object} representation
227
- * @param {Object} terminateCurrentStream
228
- * @param {Object} fastSwitchThreshold
229
- * @param {Object} representationStreamCallbacks
309
+ * @param {Object} representation - The Representation the
310
+ * `RepresentationStream` has to be created for.
311
+ * @param {Object} segmentFetcher - Allows to easily fetch segments.
312
+ * @param {Object} terminateCurrentStream - Gives termination orders,
313
+ * indicating that the `RepresentationStream` should stop what it's doing.
314
+ * @param {Object} fastSwitchThreshold - Used to determine when
315
+ * "fast-switching" is possible.
316
+ * @param {Object} representationStreamCallbacks - Callbacks to call on
317
+ * various `RepresentationStream` events.
318
+ * @param {Object} fnCancelSignal - `CancellationSignal` which will abort
319
+ * anything this function is doing and free allocated resources.
230
320
  */
231
- function createRepresentationStream(representation, terminateCurrentStream, fastSwitchThreshold, representationStreamCallbacks) {
321
+ function createRepresentationStream(representation, segmentFetcher, terminateCurrentStream, fastSwitchThreshold, representationStreamCallbacks, fnCancelSignal) {
232
322
  /**
233
323
  * `TaskCanceller` triggered when the `RepresentationStream` calls its
234
324
  * `terminating` callback.
235
325
  */
236
326
  var terminatingRepStreamCanceller = new TaskCanceller();
237
- terminatingRepStreamCanceller.linkToSignal(adapStreamCanceller.signal);
327
+ terminatingRepStreamCanceller.linkToSignal(fnCancelSignal);
238
328
  var bufferGoal = createMappedReference(wantedBufferAhead, function (prev) {
239
329
  return prev * getBufferGoalRatio(representation);
240
330
  }, terminatingRepStreamCanceller.signal);
@@ -264,7 +354,7 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
264
354
  // We wait 4 seconds to let the situation evolve by itself before
265
355
  // retrying loading segments with a lower buffer goal
266
356
  cancellableSleep(4000, adapStreamCanceller.signal).then(function () {
267
- return createRepresentationStream(representation, terminateCurrentStream, fastSwitchThreshold, representationStreamCallbacks);
357
+ return createRepresentationStream(representation, segmentFetcher, terminateCurrentStream, fastSwitchThreshold, representationStreamCallbacks, fnCancelSignal);
268
358
  }).catch(noop);
269
359
  }
270
360
  },
@@ -274,7 +364,7 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
274
364
  },
275
365
  });
276
366
  RepresentationStream({ playbackObserver: playbackObserver, content: { representation: representation, adaptation: adaptation, period: period, manifest: manifest }, segmentBuffer: segmentBuffer, segmentFetcher: segmentFetcher, terminate: terminateCurrentStream,
277
- options: { bufferGoal: bufferGoal, maxBufferSize: maxBufferSize, drmSystemId: options.drmSystemId, fastSwitchThreshold: fastSwitchThreshold } }, updatedCallbacks, adapStreamCanceller.signal);
367
+ options: { bufferGoal: bufferGoal, maxBufferSize: maxBufferSize, drmSystemId: options.drmSystemId, fastSwitchThreshold: fastSwitchThreshold } }, updatedCallbacks, fnCancelSignal);
278
368
  }
279
369
  /**
280
370
  * @param {Object} representation
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Copyright 2015 CANAL+ Group
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Adaptation, Period } from "../../../manifest";
17
+ import { IReadOnlyPlaybackObserver } from "../../api";
18
+ import { SegmentBuffer } from "../../segment_buffers";
19
+ import { IRepresentationsChoice } from "../representation";
20
+ export default function getRepresentationsSwitchingStrategy(period: Period, adaptation: Adaptation, settings: IRepresentationsChoice, segmentBuffer: SegmentBuffer, playbackObserver: IReadOnlyPlaybackObserver<unknown>): IRepresentationSwitchStrategy;
21
+ export type IRepresentationSwitchStrategy = {
22
+ type: "continue";
23
+ value: undefined;
24
+ } | {
25
+ type: "clean-buffer";
26
+ value: Array<{
27
+ start: number;
28
+ end: number;
29
+ }>;
30
+ } | {
31
+ type: "flush-buffer";
32
+ value: Array<{
33
+ start: number;
34
+ end: number;
35
+ }>;
36
+ } | {
37
+ type: "needs-reload";
38
+ value: undefined;
39
+ };
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Copyright 2015 CANAL+ Group
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import config from "../../../config";
17
+ import { convertToRanges, excludeFromRanges, isTimeInRange, isTimeInRanges, keepRangeIntersection, } from "../../../utils/ranges";
18
+ import { getFirstSegmentAfterPeriod, getLastSegmentBeforePeriod, } from "../../segment_buffers";
19
+ export default function getRepresentationsSwitchingStrategy(period, adaptation, settings, segmentBuffer, playbackObserver) {
20
+ if (settings.switchingMode === "lazy") {
21
+ return { type: "continue", value: undefined };
22
+ }
23
+ var buffered = segmentBuffer.getBufferedRanges();
24
+ if (buffered.length === 0) {
25
+ return { type: "continue", value: undefined };
26
+ }
27
+ var bufferedRanges = convertToRanges(buffered);
28
+ var start = period.start;
29
+ var end = period.end == null ? Infinity :
30
+ period.end;
31
+ var intersection = keepRangeIntersection(bufferedRanges, [{ start: start, end: end }]);
32
+ if (intersection.length === 0) {
33
+ return { type: "continue", value: undefined };
34
+ }
35
+ segmentBuffer.synchronizeInventory();
36
+ var inventory = segmentBuffer.getInventory();
37
+ /** Data already in the right Adaptation */
38
+ var rangesWithReps = getBufferedRangesFromRepresentations(inventory, period, adaptation, settings.representations);
39
+ /**
40
+ * Data different from the wanted Adaptation in the Period's range.
41
+ * /!\ Could contain some data at the end of the previous Period or at the
42
+ * beginning of the next one.
43
+ */
44
+ var unwantedRange = excludeFromRanges(intersection, rangesWithReps);
45
+ if (unwantedRange.length === 0) {
46
+ return { type: "continue", value: undefined };
47
+ }
48
+ var currentTime = playbackObserver.getCurrentTime();
49
+ var readyState = playbackObserver.getReadyState();
50
+ if (settings.switchingMode === "reload" &&
51
+ // We're playing the current Period
52
+ isTimeInRange({ start: start, end: end }, currentTime) &&
53
+ // There is data for the current position
54
+ readyState > 1 &&
55
+ // We're not playing the current wanted video Adaptation
56
+ !isTimeInRanges(rangesWithReps, currentTime)) {
57
+ return { type: "needs-reload", value: undefined };
58
+ }
59
+ // From here, clean-up data from the previous Adaptation, if one
60
+ var shouldFlush = settings.switchingMode === "direct";
61
+ var rangesToExclude = [];
62
+ // First, we don't want to accidentally remove some segments from the previous
63
+ // Period (which overlap a little with this one)
64
+ /** Last segment before one for the current period. */
65
+ var lastSegmentBefore = getLastSegmentBeforePeriod(inventory, period);
66
+ if (lastSegmentBefore !== null &&
67
+ (lastSegmentBefore.bufferedEnd === undefined ||
68
+ period.start - lastSegmentBefore.bufferedEnd < 1)) // Close to Period's start
69
+ {
70
+ // Exclude data close to the period's start to avoid cleaning
71
+ // to much
72
+ rangesToExclude.push({ start: 0,
73
+ end: period.start + 1 });
74
+ }
75
+ if (!shouldFlush) {
76
+ // exclude data around current position to avoid decoding issues
77
+ var ADAP_REP_SWITCH_BUFFER_PADDINGS = config.getCurrent().ADAP_REP_SWITCH_BUFFER_PADDINGS;
78
+ var bufferType = adaptation.type;
79
+ /** Ranges that won't be cleaned from the current buffer. */
80
+ var paddingBefore = ADAP_REP_SWITCH_BUFFER_PADDINGS[bufferType].before;
81
+ if (paddingBefore == null) {
82
+ paddingBefore = 0;
83
+ }
84
+ var paddingAfter = ADAP_REP_SWITCH_BUFFER_PADDINGS[bufferType].after;
85
+ if (paddingAfter == null) {
86
+ paddingAfter = 0;
87
+ }
88
+ rangesToExclude.push({ start: currentTime - paddingBefore,
89
+ end: currentTime + paddingAfter });
90
+ }
91
+ // Now remove possible small range from the end if there is a segment from the
92
+ // next Period
93
+ if (period.end !== undefined) {
94
+ /** first segment after for the current period. */
95
+ var firstSegmentAfter = getFirstSegmentAfterPeriod(inventory, period);
96
+ if (firstSegmentAfter !== null &&
97
+ (firstSegmentAfter.bufferedStart === undefined ||
98
+ // Close to Period's end
99
+ (firstSegmentAfter.bufferedStart - period.end) < 1)) {
100
+ rangesToExclude.push({ start: period.end - 1,
101
+ end: Number.MAX_VALUE });
102
+ }
103
+ }
104
+ var toRemove = excludeFromRanges(unwantedRange, rangesToExclude);
105
+ if (toRemove.length === 0) {
106
+ return { type: "continue", value: undefined };
107
+ }
108
+ return shouldFlush ? { type: "flush-buffer", value: toRemove } :
109
+ { type: "clean-buffer", value: toRemove };
110
+ }
111
+ /**
112
+ * Returns buffered ranges of what we know correspond to the given `adaptation`
113
+ * in the SegmentBuffer.
114
+ * @param {Array.<Object>} inventory
115
+ * @param {Object} period
116
+ * @param {Object} adaptation
117
+ * @returns {Array.<Object>}
118
+ */
119
+ function getBufferedRangesFromRepresentations(inventory, period, adaptation, representations) {
120
+ return inventory.reduce(function (acc, chunk) {
121
+ if (chunk.infos.period.id !== period.id ||
122
+ chunk.infos.adaptation.id !== adaptation.id ||
123
+ !representations.some(function (rep) { return rep.id === chunk.infos.representation.id; })) {
124
+ return acc;
125
+ }
126
+ var bufferedStart = chunk.bufferedStart, bufferedEnd = chunk.bufferedEnd;
127
+ if (bufferedStart === undefined || bufferedEnd === undefined) {
128
+ return acc;
129
+ }
130
+ acc.push({ start: bufferedStart, end: bufferedEnd });
131
+ return acc;
132
+ }, []);
133
+ }
@@ -1,14 +1,15 @@
1
1
  import Manifest, { Adaptation, Period, Representation } from "../../../manifest";
2
+ import { IAudioTrackSwitchingMode, IVideoTrackSwitchingMode } from "../../../public_types";
2
3
  import { IReadOnlySharedReference } from "../../../utils/reference";
3
4
  import { IRepresentationEstimator } from "../../adaptive";
4
5
  import { IReadOnlyPlaybackObserver } from "../../api";
5
6
  import { SegmentFetcherCreator } from "../../fetchers";
6
7
  import { IBufferType, SegmentBuffer } from "../../segment_buffers";
7
- import { IRepresentationStreamCallbacks, IRepresentationStreamPlaybackObservation } from "../representation";
8
+ import { IRepresentationsChoice, IRepresentationStreamCallbacks, IRepresentationStreamPlaybackObservation } from "../representation";
8
9
  /** Callbacks called by the `AdaptationStream` on various events. */
9
10
  export interface IAdaptationStreamCallbacks<T> extends Omit<IRepresentationStreamCallbacks<T>, "terminating"> {
10
11
  /** Called as new bitrate estimates are done. */
11
- bitrateEstimationChange(payload: IBitrateEstimationChangePayload): void;
12
+ bitrateEstimateChange(payload: IBitrateEstimateChangePayload): void;
12
13
  /**
13
14
  * Called when a new `RepresentationStream` is created to load segments from a
14
15
  * `Representation`.
@@ -19,9 +20,17 @@ export interface IAdaptationStreamCallbacks<T> extends Omit<IRepresentationStrea
19
20
  * needs the `MediaSource` to be reloaded first.
20
21
  */
21
22
  waitingMediaSourceReload(payload: IWaitingMediaSourceReloadPayload): void;
23
+ /**
24
+ * Some situations might require the browser's buffers to be refreshed.
25
+ * This callback is called when such situation arised.
26
+ *
27
+ * Generally flushing/refreshing low-level buffers can be performed simply by
28
+ * performing a very small seek.
29
+ */
30
+ needsBufferFlush(): void;
22
31
  }
23
- /** Payload for the `bitrateEstimationChange` callback. */
24
- export interface IBitrateEstimationChangePayload {
32
+ /** Payload for the `bitrateEstimateChange` callback. */
33
+ export interface IBitrateEstimateChangePayload {
25
34
  /** The type of buffer for which the estimation is done. */
26
35
  type: IBufferType;
27
36
  /**
@@ -113,6 +122,7 @@ export interface IAdaptationStreamArguments {
113
122
  manifest: Manifest;
114
123
  period: Period;
115
124
  adaptation: Adaptation;
125
+ representations: IReadOnlySharedReference<IRepresentationsChoice>;
116
126
  };
117
127
  options: IAdaptationStreamOptions;
118
128
  /** Estimate the right Representation to play. */
@@ -152,15 +162,6 @@ export interface IAdaptationStreamOptions {
152
162
  * - We don't know which DRM system is currently used.
153
163
  */
154
164
  drmSystemId: string | undefined;
155
- /**
156
- * Strategy taken when the user switch manually the current Representation:
157
- * - "seamless": the switch will happen smoothly, with the Representation
158
- * with the new bitrate progressively being pushed alongside the old
159
- * Representation.
160
- * - "direct": hard switch. The Representation switch will be directly
161
- * visible but may necessitate the current MediaSource to be reloaded.
162
- */
163
- manualBitrateSwitchingMode: "seamless" | "direct";
164
165
  /**
165
166
  * If `true`, the AdaptationStream might replace segments of a lower-quality
166
167
  * (with a lower bitrate) with segments of a higher quality (with a higher
@@ -176,3 +177,16 @@ export interface IAdaptationStreamOptions {
176
177
  */
177
178
  enableFastSwitching: boolean;
178
179
  }
180
+ /** Object indicating a choice of Adaptation made by the user. */
181
+ export interface IAdaptationChoice {
182
+ /** The Adaptation choosen. */
183
+ adaptation: Adaptation;
184
+ /** "Switching mode" in which the track switch should happen. */
185
+ switchingMode: ITrackSwitchingMode;
186
+ /**
187
+ * Shared reference allowing to indicate which Representations from
188
+ * that Adaptation are allowed.
189
+ */
190
+ representations: IReadOnlySharedReference<IRepresentationsChoice>;
191
+ }
192
+ export type ITrackSwitchingMode = IAudioTrackSwitchingMode | IVideoTrackSwitchingMode;
@@ -14,8 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import StreamOrchestrator, { INeedsMediaSourceReloadPayload, IStreamOrchestratorOptions, IStreamOrchestratorPlaybackObservation, IStreamOrchestratorCallbacks } from "./orchestrator";
17
- export { IAudioTrackSwitchingMode } from "./period";
18
- export { IInbandEvent, IStreamStatusPayload, } from "./representation";
19
- export { IWaitingMediaSourceReloadPayload, } from "./adaptation";
17
+ export { IRepresentationsChoice, IInbandEvent, IStreamStatusPayload, } from "./representation";
18
+ export { IAdaptationChoice, ITrackSwitchingMode, IWaitingMediaSourceReloadPayload, } from "./adaptation";
20
19
  export default StreamOrchestrator;
21
20
  export { INeedsMediaSourceReloadPayload, IStreamOrchestratorPlaybackObservation, IStreamOrchestratorOptions, IStreamOrchestratorCallbacks, };
@@ -134,6 +134,8 @@ export interface IPeriodStreamClearedPayload {
134
134
  * about which `PeriodStream` has been removed.
135
135
  */
136
136
  type: IBufferType;
137
+ /** The `Manifest` linked to the `PeriodStream` we just cleared. */
138
+ manifest: Manifest;
137
139
  /**
138
140
  * The `Period` linked to the `PeriodStream` we just removed.
139
141
  *