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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/CHANGELOG.md +11 -227
  2. package/FILES.md +1 -1
  3. package/VERSION +1 -1
  4. package/dist/_esm5.processed/compat/add_text_track.d.ts +1 -3
  5. package/dist/_esm5.processed/compat/add_text_track.js +4 -7
  6. package/dist/_esm5.processed/compat/browser_compatibility_types.d.ts +0 -7
  7. package/dist/_esm5.processed/compat/event_listeners.d.ts +2 -15
  8. package/dist/_esm5.processed/compat/event_listeners.js +2 -37
  9. package/dist/_esm5.processed/compat/index.d.ts +1 -3
  10. package/dist/_esm5.processed/compat/index.js +1 -3
  11. package/dist/_esm5.processed/config.d.ts +9 -21
  12. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.d.ts +0 -58
  13. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +14 -54
  14. package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.d.ts +2 -8
  15. package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.js +2 -11
  16. package/dist/_esm5.processed/core/api/debug/buffer_graph.js +2 -6
  17. package/dist/_esm5.processed/core/api/debug/modules/general_info.js +13 -32
  18. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +3 -3
  19. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +1 -1
  20. package/dist/_esm5.processed/core/api/option_utils.d.ts +12 -35
  21. package/dist/_esm5.processed/core/api/option_utils.js +41 -230
  22. package/dist/_esm5.processed/core/api/public_api.d.ts +91 -266
  23. package/dist/_esm5.processed/core/api/public_api.js +439 -805
  24. package/dist/_esm5.processed/core/{segment_buffers/implementations/image → api/track_management}/index.d.ts +3 -2
  25. package/dist/_esm5.processed/core/{segment_buffers/implementations/image → api/track_management}/index.js +3 -2
  26. package/dist/_esm5.processed/core/api/{tracks_management/media_element_track_choice_manager.d.ts → track_management/media_element_tracks_store.d.ts} +15 -75
  27. package/dist/_esm5.processed/core/api/{tracks_management/media_element_track_choice_manager.js → track_management/media_element_tracks_store.js} +74 -193
  28. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.d.ts +84 -0
  29. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +158 -0
  30. package/dist/_esm5.processed/core/api/track_management/tracks_store.d.ts +406 -0
  31. package/dist/_esm5.processed/core/api/track_management/tracks_store.js +932 -0
  32. package/dist/_esm5.processed/core/api/utils.d.ts +1 -0
  33. package/dist/_esm5.processed/core/api/utils.js +28 -11
  34. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +3 -3
  35. package/dist/_esm5.processed/core/decrypt/find_key_system.js +83 -71
  36. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +6 -5
  37. package/dist/_esm5.processed/core/decrypt/session_events_listener.js +10 -72
  38. package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.d.ts +4 -4
  39. package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.js +6 -4
  40. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +1 -3
  41. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +7 -26
  42. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +3 -9
  43. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +16 -9
  44. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -3
  45. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  46. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.d.ts +1 -6
  47. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +4 -41
  48. package/dist/_esm5.processed/core/init/directfile_content_initializer.js +1 -1
  49. package/dist/_esm5.processed/core/init/media_source_content_initializer.d.ts +1 -8
  50. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +5 -19
  51. package/dist/_esm5.processed/core/init/types.d.ts +5 -15
  52. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.d.ts +2 -36
  53. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +2 -82
  54. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +1 -2
  55. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +2 -3
  56. package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +2 -2
  57. package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
  58. package/dist/_esm5.processed/core/segment_buffers/index.js +2 -1
  59. package/dist/_esm5.processed/core/segment_buffers/inventory/index.d.ts +1 -0
  60. package/dist/_esm5.processed/core/segment_buffers/inventory/index.js +1 -0
  61. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.d.ts +33 -0
  62. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.js +49 -0
  63. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +0 -1
  64. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +2 -16
  65. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +0 -15
  66. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +183 -93
  67. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.d.ts +39 -0
  68. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.js +133 -0
  69. package/dist/_esm5.processed/core/stream/adaptation/types.d.ts +27 -13
  70. package/dist/_esm5.processed/core/stream/index.d.ts +2 -3
  71. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +2 -0
  72. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +5 -7
  73. package/dist/_esm5.processed/core/stream/period/period_stream.js +13 -12
  74. package/dist/_esm5.processed/core/stream/period/types.d.ts +5 -14
  75. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +2 -4
  76. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.js +10 -46
  77. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +29 -23
  78. package/dist/_esm5.processed/core/stream/representation/types.d.ts +11 -1
  79. package/dist/_esm5.processed/default_config.d.ts +35 -98
  80. package/dist/_esm5.processed/default_config.js +36 -113
  81. package/dist/_esm5.processed/errors/custom_loader_error.d.ts +1 -3
  82. package/dist/_esm5.processed/errors/custom_loader_error.js +1 -3
  83. package/dist/_esm5.processed/errors/media_error.js +2 -2
  84. package/dist/_esm5.processed/errors/network_error.d.ts +0 -1
  85. package/dist/_esm5.processed/errors/network_error.js +0 -1
  86. package/dist/_esm5.processed/errors/request_error.d.ts +2 -3
  87. package/dist/_esm5.processed/errors/request_error.js +2 -5
  88. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -3
  89. package/dist/_esm5.processed/features/features_object.js +0 -2
  90. package/dist/_esm5.processed/features/list/directfile.js +2 -5
  91. package/dist/_esm5.processed/features/list/index.d.ts +0 -2
  92. package/dist/_esm5.processed/features/list/index.js +0 -2
  93. package/dist/_esm5.processed/features/types.d.ts +3 -27
  94. package/dist/_esm5.processed/manifest/adaptation.d.ts +9 -11
  95. package/dist/_esm5.processed/manifest/adaptation.js +41 -30
  96. package/dist/_esm5.processed/manifest/index.d.ts +3 -4
  97. package/dist/_esm5.processed/manifest/manifest.d.ts +5 -54
  98. package/dist/_esm5.processed/manifest/manifest.js +5 -110
  99. package/dist/_esm5.processed/manifest/period.d.ts +4 -5
  100. package/dist/_esm5.processed/manifest/representation.d.ts +10 -5
  101. package/dist/_esm5.processed/manifest/representation.js +15 -5
  102. package/dist/_esm5.processed/manifest/representation_index/index.d.ts +2 -2
  103. package/dist/_esm5.processed/manifest/representation_index/static.d.ts +2 -0
  104. package/dist/_esm5.processed/manifest/representation_index/static.js +6 -0
  105. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +42 -21
  106. package/dist/_esm5.processed/manifest/types.d.ts +0 -2
  107. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +17 -31
  108. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +26 -19
  109. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +2 -0
  110. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +7 -1
  111. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +2 -6
  112. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +11 -8
  113. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +2 -0
  114. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +6 -0
  115. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  116. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.js +1 -6
  117. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +3 -5
  118. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +0 -2
  119. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -1
  120. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +2 -2
  121. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +0 -2
  122. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +2 -2
  123. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +10 -6
  124. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +4 -2
  125. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.d.ts +10 -1
  126. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +18 -2
  127. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +4 -4
  128. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +3 -6
  129. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +1 -2
  130. package/dist/_esm5.processed/parsers/manifest/local/representation_index.d.ts +2 -0
  131. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +6 -0
  132. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +6 -6
  133. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.d.ts +12 -3
  134. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.js +11 -2
  135. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +0 -1
  136. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +11 -17
  137. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +21 -83
  138. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +53 -125
  139. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.d.ts +119 -0
  140. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.js +159 -0
  141. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.d.ts +3 -6
  142. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.js +4 -4
  143. package/dist/_esm5.processed/parsers/manifest/types.d.ts +3 -3
  144. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_extent.js +1 -8
  145. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_origin.js +1 -9
  146. package/dist/_esm5.processed/public_types.d.ts +396 -308
  147. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.d.ts +5 -4
  148. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +5 -4
  149. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +4 -4
  150. package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
  151. package/dist/_esm5.processed/transports/dash/pipelines.js +1 -4
  152. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
  153. package/dist/_esm5.processed/transports/dash/segment_loader.js +26 -20
  154. package/dist/_esm5.processed/transports/dash/segment_parser.js +19 -24
  155. package/dist/_esm5.processed/transports/dash/text_loader.js +5 -5
  156. package/dist/_esm5.processed/transports/dash/text_parser.js +28 -33
  157. package/dist/_esm5.processed/transports/local/pipelines.js +1 -10
  158. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
  159. package/dist/_esm5.processed/transports/local/segment_parser.d.ts +1 -1
  160. package/dist/_esm5.processed/transports/local/segment_parser.js +10 -10
  161. package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
  162. package/dist/_esm5.processed/transports/local/text_parser.js +23 -23
  163. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +34 -52
  164. package/dist/_esm5.processed/{utils/list_to_map.d.ts → transports/smooth/is_mp4_embedded_track.d.ts} +5 -5
  165. package/dist/_esm5.processed/{features/list/image_buffer.d.ts → transports/smooth/is_mp4_embedded_track.js} +7 -6
  166. package/dist/_esm5.processed/transports/smooth/pipelines.js +33 -190
  167. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +1 -1
  168. package/dist/_esm5.processed/transports/smooth/segment_loader.js +28 -22
  169. package/dist/_esm5.processed/transports/smooth/utils.d.ts +1 -26
  170. package/dist/_esm5.processed/transports/smooth/utils.js +1 -55
  171. package/dist/_esm5.processed/transports/types.d.ts +94 -89
  172. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
  173. package/dist/_esm5.processed/transports/utils/infer_segment_container.d.ts +3 -3
  174. package/dist/_esm5.processed/transports/utils/infer_segment_container.js +5 -7
  175. package/dist/_esm5.processed/transports/utils/parse_text_track.d.ts +8 -12
  176. package/dist/_esm5.processed/transports/utils/parse_text_track.js +19 -21
  177. package/dist/_esm5.processed/utils/array_includes.d.ts +2 -1
  178. package/dist/_esm5.processed/utils/array_includes.js +30 -28
  179. package/dist/_esm5.processed/utils/request/xhr.js +5 -5
  180. package/dist/commonjs/compat/is_codec_supported.js +22 -1
  181. package/dist/commonjs/config.d.ts +1 -0
  182. package/dist/commonjs/core/api/debug/buffer_graph.js +2 -6
  183. package/dist/commonjs/core/api/debug/modules/general_info.js +17 -10
  184. package/dist/commonjs/core/api/option_utils.d.ts +2 -0
  185. package/dist/commonjs/core/api/option_utils.js +2 -3
  186. package/dist/commonjs/core/api/public_api.d.ts +9 -0
  187. package/dist/commonjs/core/api/public_api.js +34 -9
  188. package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
  189. package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.js +11 -3
  190. package/dist/commonjs/core/fetchers/segment/segment_fetcher.d.ts +8 -1
  191. package/dist/commonjs/core/fetchers/segment/segment_fetcher.js +8 -4
  192. package/dist/commonjs/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
  193. package/dist/commonjs/core/fetchers/utils/schedule_request.js +1 -1
  194. package/dist/commonjs/core/init/directfile_content_initializer.js +24 -7
  195. package/dist/commonjs/core/init/media_source_content_initializer.d.ts +6 -0
  196. package/dist/commonjs/core/init/media_source_content_initializer.js +4 -6
  197. package/dist/commonjs/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
  198. package/dist/commonjs/core/init/utils/content_time_boundaries_observer.js +16 -17
  199. package/dist/commonjs/core/init/utils/get_initial_time.d.ts +17 -3
  200. package/dist/commonjs/core/init/utils/get_initial_time.js +9 -7
  201. package/dist/commonjs/core/stream/representation/utils/get_buffer_status.js +3 -3
  202. package/dist/commonjs/core/stream/representation/utils/get_needed_segments.js +1 -1
  203. package/dist/commonjs/default_config.d.ts +5 -0
  204. package/dist/commonjs/default_config.js +5 -0
  205. package/dist/commonjs/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
  206. package/dist/commonjs/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
  207. package/dist/commonjs/manifest/representation_index/static.d.ts +1 -1
  208. package/dist/commonjs/manifest/representation_index/static.js +2 -2
  209. package/dist/commonjs/manifest/representation_index/types.d.ts +4 -4
  210. package/dist/commonjs/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
  211. package/dist/commonjs/parsers/manifest/dash/common/indexes/base.js +4 -3
  212. package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
  213. package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
  214. package/dist/commonjs/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
  215. package/dist/commonjs/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
  216. package/dist/commonjs/parsers/manifest/dash/common/indexes/list.js +2 -2
  217. package/dist/commonjs/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
  218. package/dist/commonjs/parsers/manifest/dash/common/indexes/template.js +42 -29
  219. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
  220. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
  221. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +250 -51
  222. package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
  223. package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
  224. package/dist/commonjs/parsers/manifest/dash/common/parse_adaptation_sets.js +13 -10
  225. package/dist/commonjs/parsers/manifest/dash/common/parse_mpd.js +27 -14
  226. package/dist/commonjs/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
  227. package/dist/commonjs/parsers/manifest/dash/common/parse_periods.js +17 -18
  228. package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
  229. package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.js +21 -8
  230. package/dist/commonjs/parsers/manifest/dash/common/parse_representations.js +7 -3
  231. package/dist/commonjs/parsers/manifest/local/representation_index.d.ts +1 -1
  232. package/dist/commonjs/parsers/manifest/local/representation_index.js +3 -3
  233. package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
  234. package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.js +2 -2
  235. package/dist/commonjs/parsers/manifest/smooth/representation_index.d.ts +5 -5
  236. package/dist/commonjs/parsers/manifest/smooth/representation_index.js +25 -9
  237. package/dist/commonjs/parsers/manifest/utils/index_helpers.js +1 -1
  238. package/dist/commonjs/public_types.d.ts +78 -34
  239. package/dist/commonjs/transports/dash/init_segment_loader.js +10 -5
  240. package/dist/commonjs/transports/dash/manifest_parser.js +5 -2
  241. package/dist/commonjs/transports/dash/segment_loader.js +2 -1
  242. package/dist/commonjs/transports/dash/text_loader.js +2 -0
  243. package/dist/commonjs/transports/metaplaylist/manifest_loader.js +2 -1
  244. package/dist/commonjs/transports/metaplaylist/pipelines.js +4 -1
  245. package/dist/commonjs/transports/smooth/pipelines.js +4 -2
  246. package/dist/commonjs/transports/smooth/segment_loader.js +2 -1
  247. package/dist/commonjs/transports/types.d.ts +12 -0
  248. package/dist/commonjs/transports/utils/generate_manifest_loader.js +6 -3
  249. package/dist/commonjs/utils/request/fetch.d.ts +6 -0
  250. package/dist/commonjs/utils/request/fetch.js +29 -8
  251. package/dist/commonjs/utils/request/xhr.d.ts +11 -5
  252. package/dist/commonjs/utils/request/xhr.js +29 -8
  253. package/dist/es2017/compat/is_codec_supported.js +22 -1
  254. package/dist/es2017/config.d.ts +1 -0
  255. package/dist/es2017/core/api/debug/buffer_graph.js +2 -6
  256. package/dist/es2017/core/api/debug/modules/general_info.js +17 -10
  257. package/dist/es2017/core/api/option_utils.d.ts +2 -0
  258. package/dist/es2017/core/api/option_utils.js +2 -3
  259. package/dist/es2017/core/api/public_api.d.ts +9 -0
  260. package/dist/es2017/core/api/public_api.js +33 -8
  261. package/dist/es2017/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
  262. package/dist/es2017/core/fetchers/manifest/manifest_fetcher.js +11 -3
  263. package/dist/es2017/core/fetchers/segment/segment_fetcher.d.ts +8 -1
  264. package/dist/es2017/core/fetchers/segment/segment_fetcher.js +8 -4
  265. package/dist/es2017/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
  266. package/dist/es2017/core/fetchers/utils/schedule_request.js +1 -1
  267. package/dist/es2017/core/init/directfile_content_initializer.js +24 -7
  268. package/dist/es2017/core/init/media_source_content_initializer.d.ts +6 -0
  269. package/dist/es2017/core/init/media_source_content_initializer.js +4 -6
  270. package/dist/es2017/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
  271. package/dist/es2017/core/init/utils/content_time_boundaries_observer.js +16 -15
  272. package/dist/es2017/core/init/utils/get_initial_time.d.ts +17 -3
  273. package/dist/es2017/core/init/utils/get_initial_time.js +9 -7
  274. package/dist/es2017/core/stream/representation/utils/get_buffer_status.js +3 -3
  275. package/dist/es2017/core/stream/representation/utils/get_needed_segments.js +1 -1
  276. package/dist/es2017/default_config.d.ts +5 -0
  277. package/dist/es2017/default_config.js +5 -0
  278. package/dist/es2017/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
  279. package/dist/es2017/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
  280. package/dist/es2017/manifest/representation_index/static.d.ts +1 -1
  281. package/dist/es2017/manifest/representation_index/static.js +2 -2
  282. package/dist/es2017/manifest/representation_index/types.d.ts +4 -4
  283. package/dist/es2017/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
  284. package/dist/es2017/parsers/manifest/dash/common/indexes/base.js +4 -3
  285. package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
  286. package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
  287. package/dist/es2017/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
  288. package/dist/es2017/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
  289. package/dist/es2017/parsers/manifest/dash/common/indexes/list.js +2 -2
  290. package/dist/es2017/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
  291. package/dist/es2017/parsers/manifest/dash/common/indexes/template.js +40 -27
  292. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
  293. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
  294. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +246 -51
  295. package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
  296. package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
  297. package/dist/es2017/parsers/manifest/dash/common/parse_adaptation_sets.js +11 -8
  298. package/dist/es2017/parsers/manifest/dash/common/parse_mpd.js +27 -13
  299. package/dist/es2017/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
  300. package/dist/es2017/parsers/manifest/dash/common/parse_periods.js +13 -16
  301. package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
  302. package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.js +10 -8
  303. package/dist/es2017/parsers/manifest/dash/common/parse_representations.js +7 -3
  304. package/dist/es2017/parsers/manifest/local/representation_index.d.ts +1 -1
  305. package/dist/es2017/parsers/manifest/local/representation_index.js +3 -3
  306. package/dist/es2017/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
  307. package/dist/es2017/parsers/manifest/metaplaylist/representation_index.js +2 -2
  308. package/dist/es2017/parsers/manifest/smooth/representation_index.d.ts +5 -5
  309. package/dist/es2017/parsers/manifest/smooth/representation_index.js +25 -9
  310. package/dist/es2017/parsers/manifest/utils/index_helpers.js +1 -1
  311. package/dist/es2017/public_types.d.ts +78 -34
  312. package/dist/es2017/transports/dash/init_segment_loader.js +5 -0
  313. package/dist/es2017/transports/dash/manifest_parser.js +3 -0
  314. package/dist/es2017/transports/dash/segment_loader.js +1 -0
  315. package/dist/es2017/transports/dash/text_loader.js +2 -0
  316. package/dist/es2017/transports/metaplaylist/manifest_loader.js +1 -0
  317. package/dist/es2017/transports/metaplaylist/pipelines.js +4 -1
  318. package/dist/es2017/transports/smooth/pipelines.js +2 -0
  319. package/dist/es2017/transports/smooth/segment_loader.js +1 -0
  320. package/dist/es2017/transports/types.d.ts +12 -0
  321. package/dist/es2017/transports/utils/generate_manifest_loader.js +3 -0
  322. package/dist/es2017/utils/request/fetch.d.ts +6 -0
  323. package/dist/es2017/utils/request/fetch.js +29 -8
  324. package/dist/es2017/utils/request/xhr.d.ts +11 -5
  325. package/dist/es2017/utils/request/xhr.js +30 -9
  326. package/dist/rx-player.js +723 -376
  327. package/dist/rx-player.min.js +1 -1
  328. package/package.json +3 -4
  329. package/scripts/update-version +2 -0
  330. package/sonar-project.properties +1 -1
  331. package/src/compat/is_codec_supported.ts +23 -1
  332. package/src/core/api/debug/buffer_graph.ts +2 -5
  333. package/src/core/api/debug/modules/general_info.ts +15 -10
  334. package/src/core/api/option_utils.ts +3 -3
  335. package/src/core/api/public_api.ts +35 -7
  336. package/src/core/fetchers/manifest/manifest_fetcher.ts +21 -3
  337. package/src/core/fetchers/segment/segment_fetcher.ts +19 -5
  338. package/src/core/fetchers/segment/segment_fetcher_creator.ts +1 -0
  339. package/src/core/fetchers/utils/schedule_request.ts +1 -1
  340. package/src/core/init/directfile_content_initializer.ts +23 -7
  341. package/src/core/init/media_source_content_initializer.ts +13 -7
  342. package/src/core/init/utils/content_time_boundaries_observer.ts +23 -22
  343. package/src/core/init/utils/get_initial_time.ts +25 -12
  344. package/src/core/stream/representation/utils/get_buffer_status.ts +3 -3
  345. package/src/core/stream/representation/utils/get_needed_segments.ts +2 -2
  346. package/src/default_config.ts +5 -0
  347. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +3 -1
  348. package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +2 -0
  349. package/src/manifest/representation_index/static.ts +2 -2
  350. package/src/manifest/representation_index/types.ts +4 -4
  351. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +182 -36
  352. package/src/parsers/manifest/dash/common/indexes/base.ts +12 -4
  353. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +19 -5
  354. package/src/parsers/manifest/dash/common/indexes/index.ts +16 -4
  355. package/src/parsers/manifest/dash/common/indexes/list.ts +2 -2
  356. package/src/parsers/manifest/dash/common/indexes/template.ts +52 -31
  357. package/src/parsers/manifest/dash/common/indexes/timeline/index.ts +4 -1
  358. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +366 -60
  359. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +63 -25
  360. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +10 -4
  361. package/src/parsers/manifest/dash/common/parse_mpd.ts +28 -15
  362. package/src/parsers/manifest/dash/common/parse_periods.ts +12 -17
  363. package/src/parsers/manifest/dash/common/parse_representation_index.ts +50 -26
  364. package/src/parsers/manifest/dash/common/parse_representations.ts +9 -3
  365. package/src/parsers/manifest/local/representation_index.ts +3 -3
  366. package/src/parsers/manifest/metaplaylist/representation_index.ts +2 -2
  367. package/src/parsers/manifest/smooth/representation_index.ts +23 -9
  368. package/src/parsers/manifest/utils/__tests__/get_first_time_from_adaptations.test.ts +1 -1
  369. package/src/parsers/manifest/utils/__tests__/get_last_time_from_adaptation.test.ts +1 -1
  370. package/src/parsers/manifest/utils/index_helpers.ts +1 -1
  371. package/src/public_types.ts +79 -34
  372. package/src/transports/dash/init_segment_loader.ts +5 -0
  373. package/src/transports/dash/manifest_parser.ts +6 -0
  374. package/src/transports/dash/segment_loader.ts +1 -0
  375. package/src/transports/dash/text_loader.ts +2 -0
  376. package/src/transports/metaplaylist/manifest_loader.ts +1 -0
  377. package/src/transports/metaplaylist/pipelines.ts +4 -1
  378. package/src/transports/smooth/pipelines.ts +2 -0
  379. package/src/transports/smooth/segment_loader.ts +1 -0
  380. package/src/transports/types.ts +12 -0
  381. package/src/transports/utils/generate_manifest_loader.ts +3 -0
  382. package/src/utils/request/fetch.ts +35 -8
  383. package/src/utils/request/xhr.ts +45 -14
  384. package/dist/_esm5.processed/compat/fullscreen.d.ts +0 -32
  385. package/dist/_esm5.processed/compat/fullscreen.js +0 -78
  386. package/dist/_esm5.processed/compat/is_offline.d.ts +0 -39
  387. package/dist/_esm5.processed/compat/is_offline.js +0 -43
  388. package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.d.ts +0 -258
  389. package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.js +0 -989
  390. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.d.ts +0 -75
  391. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +0 -133
  392. package/dist/_esm5.processed/features/list/bif_parser.d.ts +0 -23
  393. package/dist/_esm5.processed/features/list/bif_parser.js +0 -27
  394. package/dist/_esm5.processed/features/list/image_buffer.js +0 -25
  395. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +0 -38
  396. package/dist/_esm5.processed/transports/dash/image_pipelines.js +0 -129
  397. package/dist/_esm5.processed/utils/list_to_map.js +0 -28
  398. package/dist/_esm5.processed/utils/simple_set.d.ts +0 -51
  399. package/dist/_esm5.processed/utils/simple_set.js +0 -57
  400. package/dist/_esm5.processed/utils/uniq.d.ts +0 -36
  401. package/dist/_esm5.processed/utils/uniq.js +0 -43
  402. package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
  403. package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.js +0 -54
  404. package/dist/es2017/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
  405. package/dist/es2017/parsers/manifest/utils/is_segment_still_available.js +0 -51
  406. package/src/parsers/manifest/utils/is_segment_still_available.ts +0 -58
  407. package/src/typings/object-assign.d.ts +0 -48
@@ -0,0 +1,158 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
11
+ extendStatics(d, b);
12
+ function __() { this.constructor = d; }
13
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
+ };
15
+ })();
16
+ import { MediaError } from "../../../errors";
17
+ import EventEmitter from "../../../utils/event_emitter";
18
+ import SharedReference from "../../../utils/reference";
19
+ import TaskCanceller from "../../../utils/task_canceller";
20
+ /**
21
+ * Class handling track changes and quality locking for a single Period and
22
+ * Adaptation type.
23
+ * @class TrackDispatcher
24
+ */
25
+ var TrackDispatcher = /** @class */ (function (_super) {
26
+ __extends(TrackDispatcher, _super);
27
+ /**
28
+ * Create a new `TrackDispatcher` by giving its Reference and an initial track
29
+ * setting.
30
+ * This constructor will update the Reference with the right preferences
31
+ * synchronously.
32
+ * @param {Object} manifest
33
+ * @param {Object} adaptationRef
34
+ * @param {Object|null} initialTrackInfo
35
+ */
36
+ function TrackDispatcher(manifest, adaptationRef, initialTrackInfo) {
37
+ var _this = _super.call(this) || this;
38
+ _this._canceller = new TaskCanceller();
39
+ _this._manifest = manifest;
40
+ _this._adaptationRef = adaptationRef;
41
+ if (initialTrackInfo === null) {
42
+ _this._lastEmitted = initialTrackInfo;
43
+ adaptationRef.setValue(null);
44
+ return _this;
45
+ }
46
+ var reference = _this._constructLockedRepresentationsReference(initialTrackInfo);
47
+ _this._lastEmitted = { adaptation: initialTrackInfo.adaptation,
48
+ switchingMode: initialTrackInfo.switchingMode,
49
+ lockedRepresentations: null };
50
+ adaptationRef.setValue({ adaptation: initialTrackInfo.adaptation,
51
+ switchingMode: initialTrackInfo.switchingMode,
52
+ representations: reference });
53
+ return _this;
54
+ }
55
+ /**
56
+ * Update the wanted track on the Reference linked to this `TrackDispatcher`.
57
+ * @param {Object|null} newTrackInfo
58
+ */
59
+ TrackDispatcher.prototype.updateTrack = function (newTrackInfo) {
60
+ if (newTrackInfo === null) {
61
+ if (this._lastEmitted === null) {
62
+ return;
63
+ }
64
+ this._canceller.cancel();
65
+ // has no point but let's still create one for simplicity sake
66
+ this._canceller = new TaskCanceller();
67
+ this._lastEmitted = null;
68
+ this._adaptationRef.setValue(null);
69
+ return;
70
+ }
71
+ var adaptation = newTrackInfo.adaptation, switchingMode = newTrackInfo.switchingMode;
72
+ this._canceller.cancel();
73
+ this._canceller = new TaskCanceller();
74
+ var reference = this._constructLockedRepresentationsReference(newTrackInfo);
75
+ this._lastEmitted = { adaptation: adaptation, switchingMode: switchingMode, lockedRepresentations: null };
76
+ this._adaptationRef.setValue({ adaptation: adaptation, switchingMode: switchingMode, representations: reference });
77
+ };
78
+ /**
79
+ * Create a shared reference which will emit the wanted locked Representations
80
+ * based on the current capabilities and the last user settings.
81
+ *
82
+ * @param {Object} trackInfo
83
+ * @returns {Object}
84
+ */
85
+ TrackDispatcher.prototype._constructLockedRepresentationsReference = function (trackInfo) {
86
+ var manifest = this._manifest;
87
+ /* Initialize it. Will be at its true value at the end of the function. */
88
+ var reference = new SharedReference({
89
+ representations: [],
90
+ switchingMode: "lazy",
91
+ });
92
+ /* eslint-disable-next-line @typescript-eslint/no-this-alias */
93
+ var self = this;
94
+ manifest.addEventListener("decipherabilityUpdate", updateReferenceIfNeeded);
95
+ manifest.addEventListener("manifestUpdate", updateReferenceIfNeeded);
96
+ this._canceller.signal.register(removeListeners);
97
+ trackInfo.lockedRepresentations.onUpdate(updateReferenceIfNeeded, {
98
+ clearSignal: this._canceller.signal,
99
+ emitCurrentValue: false,
100
+ });
101
+ updateReferenceIfNeeded();
102
+ return reference;
103
+ function updateReferenceIfNeeded() {
104
+ var repSettings = trackInfo.lockedRepresentations.getValue();
105
+ var switchingMode;
106
+ /** Representations for which a `RepresentationStream` can be created. */
107
+ var playableRepresentations;
108
+ if (repSettings === null) { // unlocking
109
+ playableRepresentations = trackInfo.adaptation.getPlayableRepresentations();
110
+ // No need to remove the previous content when unlocking
111
+ switchingMode = "lazy";
112
+ }
113
+ else {
114
+ var representations = repSettings.representations;
115
+ switchingMode = repSettings.switchingMode;
116
+ playableRepresentations = representations.filter(function (r) { return r.isPlayable(); });
117
+ if (playableRepresentations.length === 0) {
118
+ self.trigger("noPlayableLockedRepresentation", null);
119
+ return;
120
+ }
121
+ }
122
+ if (playableRepresentations.length <= 0) {
123
+ var adaptationType = trackInfo.adaptation.type;
124
+ var noRepErr = new MediaError("NO_PLAYABLE_REPRESENTATION", "No Representation in the chosen " +
125
+ adaptationType + " Adaptation can be played", { adaptation: trackInfo.adaptation });
126
+ throw noRepErr;
127
+ }
128
+ // Check if Locked Representations have changed
129
+ var oldRef = reference.getValue();
130
+ var sortedReps = playableRepresentations.slice().sort();
131
+ if (sortedReps.length !== oldRef.representations.length) {
132
+ reference.setValue({ representations: sortedReps, switchingMode: switchingMode });
133
+ return;
134
+ }
135
+ for (var i = 0; i < sortedReps.length; i++) {
136
+ if (oldRef.representations[i].id !== sortedReps[i].id) {
137
+ reference.setValue({ representations: sortedReps, switchingMode: switchingMode });
138
+ return;
139
+ }
140
+ }
141
+ }
142
+ function removeListeners() {
143
+ manifest.removeEventListener("decipherabilityUpdate", updateReferenceIfNeeded);
144
+ manifest.removeEventListener("manifestUpdate", updateReferenceIfNeeded);
145
+ }
146
+ };
147
+ /**
148
+ * Free the resources (e.g. `Manifest` event listeners) linked to this
149
+ * `TrackDispatcher`.
150
+ */
151
+ TrackDispatcher.prototype.dispose = function () {
152
+ this.removeEventListener();
153
+ this._canceller.cancel();
154
+ this._adaptationRef.finish();
155
+ };
156
+ return TrackDispatcher;
157
+ }(EventEmitter));
158
+ export default TrackDispatcher;
@@ -0,0 +1,406 @@
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 Manifest, { Adaptation, Period } from "../../../manifest";
17
+ import { IAudioRepresentationsSwitchingMode, IAudioTrack, IAudioTrackSwitchingMode, ITrackUpdateEventPayload, IAvailableAudioTrack, IAvailableTextTrack, IAvailableVideoTrack, IBrokenRepresentationsLockContext, IPeriod, ITextTrack, IVideoRepresentationsSwitchingMode, IVideoTrack, IVideoTrackSwitchingMode } from "../../../public_types";
18
+ import EventEmitter from "../../../utils/event_emitter";
19
+ import SharedReference from "../../../utils/reference";
20
+ import { IAdaptationChoice, IRepresentationsChoice } from "../../stream";
21
+ import TrackDispatcher from "./track_dispatcher";
22
+ /**
23
+ * Class helping with the management of the audio, video and text tracks and
24
+ * qualities.
25
+ *
26
+ * The `TracksStore` allows to choose a track and qualities for different types
27
+ * of media through a simpler API.
28
+ *
29
+ * @class TracksStore
30
+ */
31
+ export default class TracksStore extends EventEmitter<ITracksStoreEvents> {
32
+ /**
33
+ * Store track selection information, per Period.
34
+ * Sorted by Period's start time ascending
35
+ */
36
+ private _storedPeriodInfo;
37
+ private _isDisposed;
38
+ /**
39
+ * Period information that was before in `_storedPeriodInfo` but has since
40
+ * been removed is added to the `_cachedPeriodInfo` cache as a weak reference.
41
+ *
42
+ * This allows to still retrieve old track information for Periods which are
43
+ * for example not in the Manifest anymore as long as the same Period's
44
+ * reference is still kept.
45
+ */
46
+ private _cachedPeriodInfo;
47
+ /** Tells if trick mode has been enabled by the RxPlayer user */
48
+ private _isTrickModeTrackEnabled;
49
+ private _defaultAudioTrackSwitchingMode;
50
+ constructor(args: {
51
+ preferTrickModeTracks: boolean;
52
+ defaultAudioTrackSwitchingMode: IAudioTrackSwitchingMode | undefined;
53
+ });
54
+ /**
55
+ * Return Array of Period information, to allow an outside application to
56
+ * modify the track of any Period.
57
+ * @returns {Array.<Object>}
58
+ */
59
+ getAvailablePeriods(): IPeriod[];
60
+ /**
61
+ * Update the list of Periods handled by the TracksStore and make a
62
+ * track choice decision for each of them.
63
+ * @param {Object} manifest - The new Manifest object
64
+ */
65
+ updatePeriodList(manifest: Manifest): void;
66
+ /**
67
+ * Add shared reference to choose Adaptation for new "audio", "video" or
68
+ * "text" Period.
69
+ *
70
+ * Note that such reference has to be removed through `removeTrackReference`
71
+ * so ressources can be freed.
72
+ * @param {string} bufferType - The concerned buffer type
73
+ * @param {Object} manifest
74
+ * @param {Period} period - The concerned Period.
75
+ * @param {Object} adaptationRef - A reference through which
76
+ * the choice will be given.
77
+ */
78
+ addTrackReference(bufferType: "audio" | "text" | "video", manifest: Manifest, period: Period, adaptationRef: SharedReference<IAdaptationChoice | null | undefined>): void;
79
+ /**
80
+ * Remove shared reference to choose an "audio", "video" or "text" Adaptation
81
+ * for a Period.
82
+ * @param {string} bufferType - The concerned buffer type
83
+ * @param {Period} period - The concerned Period.
84
+ */
85
+ removeTrackReference(bufferType: "audio" | "text" | "video", period: Period): void;
86
+ /**
87
+ * Allows to recuperate a "Period Object" - used in get/set methods of the
88
+ * `TracksStore` - by giving the Period itself.
89
+ *
90
+ * This method should be preferred when possible over `getPeriodObjectFromId`
91
+ * because it is able to fallback on an internal cache in case the
92
+ * corresponding Period is not stored anymore.
93
+ * This for example could happen when a Period has been removed from the
94
+ * Manifest yet may still be needed (e.g. because its linked segments might
95
+ * still live in the buffers).
96
+ *
97
+ * Note however that this cache-retrieval logic is based on a Map whose key
98
+ * is the Period's JavaScript reference. As such, the cache won't be used if
99
+ * `Period` corresponds to a copy of the original `Period` object.
100
+ *
101
+ * @param {Object} period
102
+ * @returns {Object}
103
+ */
104
+ getPeriodObjectFromPeriod(period: Period): ITMPeriodObject | undefined;
105
+ /**
106
+ * Allows to recuperate a "Period Object" - used in get/set methods of the
107
+ * `TracksStore` - by giving the Period's id.
108
+ *
109
+ * Note that unlike `getPeriodObjectFromPeriod` this method is only going to look
110
+ * into currently stored Period and as such old Periods not in the Manifest
111
+ * anymore might not be retrievable.
112
+ * If you want to retrieve Period objects linked to such Period, you might
113
+ * prefer to use `getPeriodObjectFromPeriod` (which necessitates the original
114
+ * Period object).
115
+ *
116
+ * @param {string} periodId - The concerned Period's id
117
+ * @returns {Object}
118
+ */
119
+ getPeriodObjectFromId(periodId: string): ITMPeriodObject | undefined;
120
+ disableVideoTrickModeTracks(): void;
121
+ enableVideoTrickModeTracks(): void;
122
+ /**
123
+ * Reset the TracksStore's Period objects:
124
+ * - All Period which are not in the manifest currently will be removed.
125
+ * - All References used to communicate the wanted track will be removed.
126
+ *
127
+ * You might want to call this API when restarting playback.
128
+ */
129
+ resetPeriodObjects(): void;
130
+ /**
131
+ * @returns {boolean}
132
+ */
133
+ isTrickModeEnabled(): boolean;
134
+ /**
135
+ * Set audio track based on the ID of its Adaptation for a given added Period.
136
+ * @param {Object} periodObj - The concerned Period's object.
137
+ * @param {string} wantedId - adaptation id of the wanted track.
138
+ * @param {string} switchingMode - Behavior when replacing the track by
139
+ * another.
140
+ * @param {Object|null} reprsToLock - Audio Representations that should be
141
+ * locked after switchingMode to that track.
142
+ * `null` if no Audio Representation should be locked.
143
+ */
144
+ setAudioTrack(periodObj: ITMPeriodObject, wantedId: string, switchingMode: IAudioTrackSwitchingMode | undefined, reprsToLock: string[] | null): void;
145
+ /**
146
+ * Set text track based on the ID of its Adaptation for a given added Period.
147
+ * @param {Object} periodObj - The concerned Period's object.
148
+ * @param {string} wantedId - adaptation id of the wanted track.
149
+ */
150
+ setTextTrack(periodObj: ITMPeriodObject, wantedId: string): void;
151
+ /**
152
+ * Set audio track based on the ID of its Adaptation for a given added Period.
153
+ * @param {Object} periodObj - The concerned Period's object.
154
+ * @param {string} wantedId - adaptation id of the wanted track.
155
+ * @param {string} switchingMode - Behavior when replacing the track by
156
+ * another.
157
+ * @param {Array.<string>|null} reprsToLock - Audio Representations that should be
158
+ * locked after switchingMode to that track.
159
+ * `null` if no Audio Representation should be locked.
160
+ */
161
+ private _setAudioOrTextTrack;
162
+ /**
163
+ * Set video track based on the ID of its Adaptation for a given added Period.
164
+ * @param {Object} periodObj - The concerned Period's object.
165
+ * @param {string} wantedId - adaptation id of the wanted track.
166
+ * @param {string} switchingMode - Behavior when replacing the track by
167
+ * another.
168
+ * @param {Array.<string>|null} reprsToLock - Video Representations that should be
169
+ * locked after switchingMode to that track.
170
+ * `null` if no Video Representation should be locked.
171
+ */
172
+ setVideoTrack(periodObj: ITMPeriodObject, wantedId: string, switchingMode: IVideoTrackSwitchingMode | undefined, reprsToLock: string[] | null): void;
173
+ /**
174
+ * Disable the current text track for a given period.
175
+ *
176
+ * @param {Object} periodObj - The concerned Period's object
177
+ * @param {string} bufferType - The type of track to disable.
178
+ * @throws Error - Throws if the period given has not been added
179
+ */
180
+ disableTrack(periodObj: ITMPeriodObject, bufferType: "audio" | "video" | "text"): void;
181
+ /**
182
+ * Returns an object describing the chosen audio track for the given audio
183
+ * Period.
184
+ *
185
+ * Returns `null` is the the current audio track is disabled or not
186
+ * set yet.a pas bcp de marge de manoeuvre j'ai l'impression
187
+ *
188
+ * Returns `undefined` if the given Period's id is not currently found in the
189
+ * `TracksStore`. The cause being most probably that the corresponding
190
+ * Period is not available anymore.
191
+ * If you're in that case and if still have the corresponding JavaScript
192
+ * reference to the wanted Period, you can call `getOldAudioTrack` with it. It
193
+ * will try retrieving the choice it made from its cache.
194
+ * @param {Object} periodObj - The concerned Period's object
195
+ * @returns {Object|null|undefined} - The audio track chosen for this Period.
196
+ * `null` if audio tracks were disabled and `undefined` if the Period is not
197
+ * known.
198
+ */
199
+ getChosenAudioTrack(periodObj: ITMPeriodObject): IAudioTrack | null;
200
+ /**
201
+ * Returns an object describing the chosen text track for the given text
202
+ * Period.
203
+ *
204
+ * Returns null is the the current text track is disabled or not
205
+ * set yet.
206
+ *
207
+ * @param {Object} periodObj - The concerned Period's object
208
+ * @returns {Object|null} - The text track chosen for this Period
209
+ */
210
+ getChosenTextTrack(periodObj: ITMPeriodObject): ITextTrack | null;
211
+ /**
212
+ * Returns an object describing the chosen video track for the given video
213
+ * Period.
214
+ *
215
+ * Returns null is the the current video track is disabled or not
216
+ * set yet.
217
+ *
218
+ * @param {Object} periodObj - The concerned Period's object
219
+ * @returns {Object|null} - The video track chosen for this Period
220
+ */
221
+ getChosenVideoTrack(periodObj: ITMPeriodObject): IVideoTrack | null;
222
+ /**
223
+ * Returns all available audio tracks for a given Period, as an array of
224
+ * objects.
225
+ *
226
+ * Returns `undefined` if the given Period's id is not known.
227
+ *
228
+ * @param {Object} periodObj - The concerned Period's object
229
+ * @returns {Array.<Object>}
230
+ */
231
+ getAvailableAudioTracks(periodObj: ITMPeriodObject): IAvailableAudioTrack[] | undefined;
232
+ /**
233
+ * Returns all available text tracks for a given Period, as an array of
234
+ * objects.
235
+ *
236
+ * Returns `undefined` if the given Period's id is not known.
237
+ *
238
+ * @param {Object} periodObj - The concerned Period's object
239
+ * @returns {Array.<Object>}
240
+ */
241
+ getAvailableTextTracks(periodObj: ITMPeriodObject): IAvailableTextTrack[] | undefined;
242
+ /**
243
+ * Returns all available video tracks for a given Period, as an array of
244
+ * objects.
245
+ *
246
+ * Returns `undefined` if the given Period's id is not known.
247
+ *
248
+ * @param {Object} periodObj - The concerned Period's object
249
+ * @returns {Array.<Object>}
250
+ */
251
+ getAvailableVideoTracks(periodObj: ITMPeriodObject): IAvailableVideoTrack[] | undefined;
252
+ getLockedAudioRepresentations(periodObj: ITMPeriodObject): string[] | null;
253
+ getLockedVideoRepresentations(periodObj: ITMPeriodObject): string[] | null;
254
+ lockAudioRepresentations(periodObj: ITMPeriodObject, lockSettings: IAudioRepresentationsLockSettings): void;
255
+ lockVideoRepresentations(periodObj: ITMPeriodObject, lockSettings: IVideoRepresentationsLockSettings): void;
256
+ unlockAudioRepresentations(periodObj: ITMPeriodObject): void;
257
+ unlockVideoRepresentations(periodObj: ITMPeriodObject): void;
258
+ dispose(): void;
259
+ /**
260
+ * @param {Period} period
261
+ * @returns {Object}
262
+ */
263
+ private _addPeriod;
264
+ private _resetVideoTrackChoices;
265
+ private _removePeriodObject;
266
+ private _getRepresentationsToLock;
267
+ }
268
+ /** Every information stored for a single Period. */
269
+ export interface ITMPeriodObject {
270
+ /** The Period in question. */
271
+ period: Period;
272
+ /**
273
+ * If `true`, this Period was present at the last `updatePeriodList` call,
274
+ * meaning it's probably still in the Manifest.
275
+ *
276
+ * If `false`, this Period was not. In that case it is probably just here
277
+ * because some audio/video/text buffer still contains data of the given type.
278
+ */
279
+ inManifest: boolean;
280
+ audio: IAudioPeriodInfo;
281
+ text: ITextPeriodInfo;
282
+ video: IVideoPeriodInfo;
283
+ isRemoved: boolean;
284
+ }
285
+ /**
286
+ * Internal representation of audio track preferences for a given `Period` of
287
+ * the Manifest.
288
+ */
289
+ interface IAudioPeriodInfo {
290
+ /**
291
+ * Information on the last audio track settings wanted by the user.
292
+ * `null` if no audio track is wanted.
293
+ */
294
+ storedSettings: {
295
+ /** Contains the last `Adaptation` wanted by the user. */
296
+ adaptation: Adaptation;
297
+ /** "Switching mode" in which the track switch should happen. */
298
+ switchingMode: IAudioTrackSwitchingMode;
299
+ /**
300
+ * Contains the last locked `Representation`s for this `Adaptation` wanted
301
+ * by the user.
302
+ * `null` if no Representation is locked.
303
+ */
304
+ lockedRepresentations: SharedReference<IRepresentationsChoice | null>;
305
+ } | null;
306
+ /**
307
+ * Tracks are internally emitted through RxJS's `Subject`s.
308
+ * A `TrackDispatcher` allows to facilitate and centralize the management of
309
+ * that Subject so that the right wanted track and qualities are emitted
310
+ * through it.
311
+ *
312
+ * `null` if no `Subject` has been linked for this `Period` and buffer type
313
+ * for now.
314
+ */
315
+ dispatcher: TrackDispatcher | null;
316
+ }
317
+ /**
318
+ * Internal representation of text track preferences for a given `Period` of
319
+ * the Manifest.
320
+ */
321
+ export interface ITextPeriodInfo {
322
+ /**
323
+ * Information on the last text track settings wanted.
324
+ * `null` if no text track is wanted.
325
+ */
326
+ storedSettings: {
327
+ /** Contains the last `Adaptation` wanted by the user. */
328
+ adaptation: Adaptation;
329
+ /** "Switching mode" in which the track switch should happen. */
330
+ switchingMode: "direct";
331
+ /**
332
+ * Contains the last locked `Representation`s for this `Adaptation` wanted
333
+ * by the user.
334
+ * `null` if no Representation is locked.
335
+ */
336
+ lockedRepresentations: SharedReference<IRepresentationsChoice | null>;
337
+ } | null;
338
+ /**
339
+ * Tracks are internally emitted through RxJS's `Subject`s.
340
+ * A `TrackDispatcher` allows to facilitate and centralize the management of
341
+ * that Subject so that the right wanted track and qualities are emitted
342
+ * through it.
343
+ *
344
+ * `null` if no `Subject` has been linked for this `Period` and buffer type
345
+ * for now.
346
+ */
347
+ dispatcher: TrackDispatcher | null;
348
+ }
349
+ /**
350
+ * Internal representation of video track preferences for a given `Period` of
351
+ * the Manifest.
352
+ */
353
+ export interface IVideoPeriodInfo {
354
+ /**
355
+ * Information on the last video track settings wanted.
356
+ * `null` if no video track is wanted.
357
+ */
358
+ storedSettings: {
359
+ /**
360
+ * The wanted Adaptation itself (may be different from `adaptationBase`
361
+ * when a trickmode track is chosen, in which case `adaptationBase` is
362
+ * the Adaptation the trickmode track is linked to and `adaptation` is
363
+ * the trickmode track).
364
+ */
365
+ adaptation: Adaptation;
366
+ /** "Switching mode" in which the track switch should happen. */
367
+ switchingMode: IVideoTrackSwitchingMode;
368
+ /**
369
+ * The "base" Adaptation for `storedSettings` (if a trickmode track was
370
+ * chosen, this is the Adaptation the trickmode track is linked to, and not
371
+ * the trickmode track itself).
372
+ */
373
+ adaptationBase: Adaptation;
374
+ /**
375
+ * Contains the last locked `Representation`s for this `Adaptation` wanted
376
+ * by the user.
377
+ * `null` if no Representation is locked.
378
+ */
379
+ lockedRepresentations: SharedReference<IRepresentationsChoice | null>;
380
+ } | null;
381
+ /**
382
+ * Tracks are internally emitted through RxJS's `Subject`s.
383
+ * A `TrackDispatcher` allows to facilitate and centralize the management of
384
+ * that Subject so that the right wanted track and qualities are emitted
385
+ * through it.
386
+ *
387
+ * `null` if no `Subject` has been linked for this `Period` and buffer type
388
+ * for now.
389
+ */
390
+ dispatcher: TrackDispatcher | null;
391
+ }
392
+ /** Events emitted by the TracksStore. */
393
+ interface ITracksStoreEvents {
394
+ newAvailablePeriods: IPeriod[];
395
+ brokenRepresentationsLock: IBrokenRepresentationsLockContext;
396
+ trackUpdate: ITrackUpdateEventPayload;
397
+ }
398
+ export interface IAudioRepresentationsLockSettings {
399
+ representations: string[];
400
+ switchingMode?: IAudioRepresentationsSwitchingMode | undefined;
401
+ }
402
+ export interface IVideoRepresentationsLockSettings {
403
+ representations: string[];
404
+ switchingMode?: IVideoRepresentationsSwitchingMode | undefined;
405
+ }
406
+ export {};