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
@@ -34,6 +34,7 @@ var __extends = (this && this.__extends) || (function () {
34
34
  */
35
35
  import { enableAudioTrack } from "../../../compat";
36
36
  import EventEmitter from "../../../utils/event_emitter";
37
+ import isNullOrUndefined from "../../../utils/is_null_or_undefined";
37
38
  import normalizeLanguage from "../../../utils/languages";
38
39
  /**
39
40
  * Check if track array is different from an other one
@@ -140,16 +141,13 @@ function createVideoTracks(videoTracks) {
140
141
  }
141
142
  /**
142
143
  * Manage video, audio and text tracks for current direct file content.
143
- * @class MediaElementTrackChoiceManager
144
+ * @class MediaElementTracksStore
144
145
  */
145
- var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
146
- __extends(MediaElementTrackChoiceManager, _super);
147
- function MediaElementTrackChoiceManager(mediaElement) {
146
+ var MediaElementTracksStore = /** @class */ (function (_super) {
147
+ __extends(MediaElementTracksStore, _super);
148
+ function MediaElementTracksStore(mediaElement) {
148
149
  var _a, _b, _c;
149
150
  var _this = _super.call(this) || this;
150
- _this._preferredAudioTracks = [];
151
- _this._preferredTextTracks = [];
152
- _this._preferredVideoTracks = [];
153
151
  // TODO In practice, the audio/video/text tracks API are not always implemented on
154
152
  // the media element, although Typescript HTMLMediaElement types tend to mean
155
153
  // that can't be undefined.
@@ -165,58 +163,19 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
165
163
  _this._textTracks =
166
164
  _this._nativeTextTracks !== undefined ? createTextTracks(_this._nativeTextTracks) :
167
165
  [];
168
- _this._lastEmittedNativeAudioTrack = (_a = _this._getPrivateChosenAudioTrack()) === null || _a === void 0 ? void 0 : _a.nativeTrack;
169
- _this._lastEmittedNativeVideoTrack = (_b = _this._getPrivateChosenVideoTrack()) === null || _b === void 0 ? void 0 : _b.nativeTrack;
170
- _this._lastEmittedNativeTextTrack = (_c = _this._getPrivateChosenTextTrack()) === null || _c === void 0 ? void 0 : _c.nativeTrack;
166
+ _this._lastEmittedNativeAudioTrack = (_a = _this._getCurrentAudioTrack()) === null || _a === void 0 ? void 0 : _a.nativeTrack;
167
+ _this._lastEmittedNativeVideoTrack = (_b = _this._getCurrentVideoTrack()) === null || _b === void 0 ? void 0 : _b.nativeTrack;
168
+ _this._lastEmittedNativeTextTrack = (_c = _this._getCurrentTextTrack()) === null || _c === void 0 ? void 0 : _c.nativeTrack;
171
169
  _this._handleNativeTracksCallbacks();
172
170
  return _this;
173
171
  }
174
- /**
175
- * Set the list of preferred audio tracks, in preference order.
176
- * @param {Array.<Object>} preferredAudioTracks
177
- * @param {boolean} shouldApply - `true` if those preferences should be
178
- * applied on the currently loaded Period. `false` if it should only
179
- * be applied to new content.
180
- */
181
- MediaElementTrackChoiceManager.prototype.setPreferredAudioTracks = function (preferredAudioTracks, shouldApply) {
182
- this._preferredAudioTracks = preferredAudioTracks;
183
- if (shouldApply) {
184
- this._applyAudioPreferences();
185
- }
186
- };
187
- /**
188
- * Set the list of preferred text tracks, in preference order.
189
- * @param {Array.<Object>} preferredTextTracks
190
- * @param {boolean} shouldApply - `true` if those preferences should be
191
- * applied on the currently loaded Period. `false` if it should only
192
- * be applied to new content.
193
- */
194
- MediaElementTrackChoiceManager.prototype.setPreferredTextTracks = function (preferredTextTracks, shouldApply) {
195
- this._preferredTextTracks = preferredTextTracks;
196
- if (shouldApply) {
197
- this._applyTextPreferences();
198
- }
199
- };
200
- /**
201
- * Set the list of preferred video tracks, in preference order.
202
- * @param {Array.<Object>} preferredVideoTracks
203
- * @param {boolean} shouldApply - `true` if those preferences should be
204
- * applied on the currently loaded Period. `false` if it should only
205
- * be applied to new content.
206
- */
207
- MediaElementTrackChoiceManager.prototype.setPreferredVideoTracks = function (preferredVideoTracks, shouldApply) {
208
- this._preferredVideoTracks = preferredVideoTracks;
209
- if (shouldApply) {
210
- this._applyVideoPreferences();
211
- }
212
- };
213
172
  /**
214
173
  * Update the currently active audio track by setting the wanted audio track's
215
174
  * ID property.
216
175
  * Throws if the wanted audio track is not found.
217
176
  * @param {string|number|undefined} id
218
177
  */
219
- MediaElementTrackChoiceManager.prototype.setAudioTrackById = function (id) {
178
+ MediaElementTracksStore.prototype.setAudioTrackById = function (id) {
220
179
  for (var i = 0; i < this._audioTracks.length; i++) {
221
180
  var _a = this._audioTracks[i], track = _a.track, nativeTrack = _a.nativeTrack;
222
181
  if (track.id === id) {
@@ -230,7 +189,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
230
189
  /**
231
190
  * Disable the currently-active text track, if one.
232
191
  */
233
- MediaElementTrackChoiceManager.prototype.disableTextTrack = function () {
192
+ MediaElementTracksStore.prototype.disableTextTrack = function () {
234
193
  disableTextTracks(this._textTracks);
235
194
  this._textTrackLockedOn = null;
236
195
  };
@@ -240,7 +199,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
240
199
  * Throws if the wanted text track is not found.
241
200
  * @param {string|number|undefined} id
242
201
  */
243
- MediaElementTrackChoiceManager.prototype.setTextTrackById = function (id) {
202
+ MediaElementTracksStore.prototype.setTextTrackById = function (id) {
244
203
  var hasSetTrack = false;
245
204
  for (var i = 0; i < this._textTracks.length; i++) {
246
205
  var _a = this._textTracks[i], track = _a.track, nativeTrack = _a.nativeTrack;
@@ -260,7 +219,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
260
219
  /**
261
220
  * Disable the currently-active video track, if one.
262
221
  */
263
- MediaElementTrackChoiceManager.prototype.disableVideoTrack = function () {
222
+ MediaElementTracksStore.prototype.disableVideoTrack = function () {
264
223
  disableVideoTracks(this._videoTracks);
265
224
  this._videoTrackLockedOn = null;
266
225
  };
@@ -270,7 +229,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
270
229
  * Throws if the wanted video track is not found.
271
230
  * @param {string|number|undefined} id
272
231
  */
273
- MediaElementTrackChoiceManager.prototype.setVideoTrackById = function (id) {
232
+ MediaElementTracksStore.prototype.setVideoTrackById = function (id) {
274
233
  for (var i = 0; i < this._videoTracks.length; i++) {
275
234
  var _a = this._videoTracks[i], track = _a.track, nativeTrack = _a.nativeTrack;
276
235
  if (track.id === id) {
@@ -287,12 +246,11 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
287
246
  * Returns `undefined` if we cannot know which audio track is active.
288
247
  * @returns {Object|null|undefined}
289
248
  */
290
- MediaElementTrackChoiceManager.prototype.getChosenAudioTrack = function () {
291
- var chosenPrivateAudioTrack = this._getPrivateChosenAudioTrack();
292
- if (chosenPrivateAudioTrack != null) {
293
- return chosenPrivateAudioTrack.track;
294
- }
295
- return chosenPrivateAudioTrack;
249
+ MediaElementTracksStore.prototype.getChosenAudioTrack = function () {
250
+ var currentAudioTrack = this._getCurrentAudioTrack();
251
+ return isNullOrUndefined(currentAudioTrack) ?
252
+ currentAudioTrack :
253
+ currentAudioTrack.track;
296
254
  };
297
255
  /**
298
256
  * Returns the currently active text track.
@@ -300,12 +258,11 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
300
258
  * Returns `undefined` if we cannot know which text track is active.
301
259
  * @returns {Object|null|undefined}
302
260
  */
303
- MediaElementTrackChoiceManager.prototype.getChosenTextTrack = function () {
304
- var chosenPrivateTextTrack = this._getPrivateChosenTextTrack();
305
- if (chosenPrivateTextTrack != null) {
306
- return chosenPrivateTextTrack.track;
307
- }
308
- return chosenPrivateTextTrack;
261
+ MediaElementTracksStore.prototype.getChosenTextTrack = function () {
262
+ var currentTextTrack = this._getCurrentTextTrack();
263
+ return isNullOrUndefined(currentTextTrack) ?
264
+ currentTextTrack :
265
+ currentTextTrack.track;
309
266
  };
310
267
  /**
311
268
  * Returns the currently active video track.
@@ -313,18 +270,17 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
313
270
  * Returns `undefined` if we cannot know which video track is active.
314
271
  * @returns {Object|null|undefined}
315
272
  */
316
- MediaElementTrackChoiceManager.prototype.getChosenVideoTrack = function () {
317
- var chosenPrivateVideoTrack = this._getPrivateChosenVideoTrack();
318
- if (chosenPrivateVideoTrack != null) {
319
- return chosenPrivateVideoTrack.track;
320
- }
321
- return chosenPrivateVideoTrack;
273
+ MediaElementTracksStore.prototype.getChosenVideoTrack = function () {
274
+ var currentVideoTrack = this._getCurrentVideoTrack();
275
+ return isNullOrUndefined(currentVideoTrack) ?
276
+ currentVideoTrack :
277
+ currentVideoTrack.track;
322
278
  };
323
279
  /**
324
280
  * Returns a description of every available audio tracks.
325
281
  * @returns {Array.<Object>}
326
282
  */
327
- MediaElementTrackChoiceManager.prototype.getAvailableAudioTracks = function () {
283
+ MediaElementTracksStore.prototype.getAvailableAudioTracks = function () {
328
284
  return this._audioTracks.map(function (_a) {
329
285
  var track = _a.track, nativeTrack = _a.nativeTrack;
330
286
  return { id: track.id,
@@ -339,7 +295,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
339
295
  * Returns a description of every available text tracks.
340
296
  * @returns {Array.<Object>}
341
297
  */
342
- MediaElementTrackChoiceManager.prototype.getAvailableTextTracks = function () {
298
+ MediaElementTracksStore.prototype.getAvailableTextTracks = function () {
343
299
  return this._textTracks.map(function (_a) {
344
300
  var track = _a.track, nativeTrack = _a.nativeTrack;
345
301
  return { id: track.id,
@@ -355,7 +311,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
355
311
  * Returns a description of every available video tracks.
356
312
  * @returns {Array.<Object>}
357
313
  */
358
- MediaElementTrackChoiceManager.prototype.getAvailableVideoTracks = function () {
314
+ MediaElementTracksStore.prototype.getAvailableVideoTracks = function () {
359
315
  return this._videoTracks.map(function (_a) {
360
316
  var track = _a.track, nativeTrack = _a.nativeTrack;
361
317
  return { id: track.id,
@@ -364,9 +320,9 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
364
320
  });
365
321
  };
366
322
  /**
367
- * Free the resources used by the MediaElementTrackChoiceManager.
323
+ * Free the resources used by the MediaElementTracksStore.
368
324
  */
369
- MediaElementTrackChoiceManager.prototype.dispose = function () {
325
+ MediaElementTracksStore.prototype.dispose = function () {
370
326
  if (this._nativeVideoTracks !== undefined) {
371
327
  this._nativeVideoTracks.onchange = null;
372
328
  this._nativeVideoTracks.onaddtrack = null;
@@ -390,7 +346,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
390
346
  * `null` if no audio track is chosen.
391
347
  * @returns {Object|undefined|null}
392
348
  */
393
- MediaElementTrackChoiceManager.prototype._getPrivateChosenAudioTrack = function () {
349
+ MediaElementTracksStore.prototype._getCurrentAudioTrack = function () {
394
350
  if (this._nativeAudioTracks === undefined) {
395
351
  return undefined;
396
352
  }
@@ -408,7 +364,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
408
364
  * `null` if no video track is chosen.
409
365
  * @returns {Object|undefined|null}
410
366
  */
411
- MediaElementTrackChoiceManager.prototype._getPrivateChosenVideoTrack = function () {
367
+ MediaElementTracksStore.prototype._getCurrentVideoTrack = function () {
412
368
  if (this._nativeVideoTracks === undefined) {
413
369
  return undefined;
414
370
  }
@@ -426,7 +382,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
426
382
  * `null` if no text track is chosen.
427
383
  * @returns {Object|undefined|null}
428
384
  */
429
- MediaElementTrackChoiceManager.prototype._getPrivateChosenTextTrack = function () {
385
+ MediaElementTracksStore.prototype._getCurrentTextTrack = function () {
430
386
  if (this._nativeTextTracks === undefined) {
431
387
  return undefined;
432
388
  }
@@ -441,12 +397,19 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
441
397
  /**
442
398
  * Iterate over every available audio tracks on the media element and either:
443
399
  * - if the last manually set audio track is found, set that one.
444
- * - if not, set the most preferred one
445
400
  * - if we still do not find an optimal track, let the one chosen by default
446
401
  */
447
- MediaElementTrackChoiceManager.prototype._setOptimalAudioTrack = function () {
448
- // First check if the last set track is available, set it if that's the case
449
- if (this._audioTrackLockedOn !== undefined) {
402
+ MediaElementTracksStore.prototype._setPreviouslyLockedAudioTrack = function () {
403
+ if (this._audioTrackLockedOn === undefined) {
404
+ return;
405
+ }
406
+ else if (this._audioTrackLockedOn === null) {
407
+ for (var i = 0; i < this._audioTracks.length; i++) {
408
+ var nativeTrack = this._audioTracks[i].nativeTrack;
409
+ nativeTrack.enabled = false;
410
+ }
411
+ }
412
+ else {
450
413
  for (var i = 0; i < this._audioTracks.length; i++) {
451
414
  var nativeTrack = this._audioTracks[i].nativeTrack;
452
415
  if (nativeTrack === this._audioTrackLockedOn) {
@@ -455,46 +418,21 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
455
418
  }
456
419
  }
457
420
  }
458
- this._applyAudioPreferences();
459
- };
460
- /**
461
- * Try to find a track corresponding to the audio track preferences:
462
- * - if found, set it as the active track
463
- * - if not found, let the chosen audio track by default
464
- */
465
- MediaElementTrackChoiceManager.prototype._applyAudioPreferences = function () {
466
- // Re-set the last manually set audio track
467
- this._audioTrackLockedOn = undefined;
468
- var preferredAudioTracks = this._preferredAudioTracks;
469
- for (var i = 0; i < preferredAudioTracks.length; i++) {
470
- var track = preferredAudioTracks[i];
471
- if (track !== null && track.language !== undefined) {
472
- var normalized = normalizeLanguage(track.language);
473
- for (var j = 0; j < this._audioTracks.length; j++) {
474
- var audioTrack = this._audioTracks[j];
475
- if (audioTrack.track.normalized === normalized &&
476
- audioTrack.track.audioDescription === track.audioDescription) {
477
- this._enableAudioTrackFromIndex(j);
478
- return;
479
- }
480
- }
481
- }
482
- }
483
- // else just let the default one instead
484
421
  };
485
422
  /**
486
423
  * Iterate over every available text tracks on the media element and either:
487
424
  * - if the last manually set text track is found, set that one.
488
- * - if not, set the most preferred one
489
425
  * - if we still do not find an optimal track, just disable it.
490
426
  */
491
- MediaElementTrackChoiceManager.prototype._setOptimalTextTrack = function () {
492
- // First check if the last set track is available, set it if that's the case
493
- if (this._textTrackLockedOn === null) {
427
+ MediaElementTracksStore.prototype._setPreviouslyLockedTextTrack = function () {
428
+ if (this._textTrackLockedOn === undefined) {
429
+ return;
430
+ }
431
+ else if (this._textTrackLockedOn === null) {
494
432
  disableTextTracks(this._textTracks);
495
433
  return;
496
434
  }
497
- else if (this._textTrackLockedOn !== undefined) {
435
+ else {
498
436
  for (var i = 0; i < this._textTracks.length; i++) {
499
437
  var nativeTrack = this._textTracks[i].nativeTrack;
500
438
  if (nativeTrack === this._textTrackLockedOn) {
@@ -507,54 +445,21 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
507
445
  }
508
446
  }
509
447
  }
510
- // Else set the preferred one
511
- this._applyTextPreferences();
512
- };
513
- /**
514
- * Try to find a track corresponding to the text track preferences:
515
- * - if found, set it as the active track
516
- * - if not found, let the chosen text track by default
517
- */
518
- MediaElementTrackChoiceManager.prototype._applyTextPreferences = function () {
519
- // Re-set the last manually set audio track
520
- this._textTrackLockedOn = undefined;
521
- var preferredTextTracks = this._preferredTextTracks;
522
- for (var i = 0; i < preferredTextTracks.length; i++) {
523
- var track = preferredTextTracks[i];
524
- if (track === null) {
525
- disableTextTracks(this._textTracks);
526
- return;
527
- }
528
- var normalized = normalizeLanguage(track.language);
529
- for (var j = 0; j < this._textTracks.length; j++) {
530
- var textTrack = this._textTracks[j];
531
- if (textTrack.track.normalized === normalized &&
532
- textTrack.track.closedCaption === track.closedCaption) {
533
- // disable the rest
534
- disableAllTextTracksBut(this._textTracks, textTrack.nativeTrack);
535
- if (textTrack.nativeTrack.mode !== "showing") {
536
- textTrack.nativeTrack.mode = "showing";
537
- }
538
- return;
539
- }
540
- }
541
- }
542
- // Else just disable text tracks
543
- disableTextTracks(this._textTracks);
544
448
  };
545
449
  /**
546
450
  * Iterate over every available video tracks on the media element and either:
547
451
  * - if the last manually set video track is found, set that one.
548
- * - if not, set the most preferred one
549
452
  * - if we still do not find an optimal track, let the one chosen by default
550
453
  */
551
- MediaElementTrackChoiceManager.prototype._setOptimalVideoTrack = function () {
552
- // 1. first check if the last set track is available, set it if that's the case
553
- if (this._videoTrackLockedOn === null) {
454
+ MediaElementTracksStore.prototype._setPreviouslyLockedVideoTrack = function () {
455
+ if (this._videoTrackLockedOn === undefined) {
456
+ return;
457
+ }
458
+ else if (this._videoTrackLockedOn === null) {
554
459
  disableVideoTracks(this._videoTracks);
555
460
  return;
556
461
  }
557
- else if (this._videoTrackLockedOn !== undefined) {
462
+ else {
558
463
  for (var i = 0; i < this._videoTracks.length; i++) {
559
464
  var nativeTrack = this._videoTracks[i].nativeTrack;
560
465
  if (nativeTrack === this._videoTrackLockedOn) {
@@ -563,36 +468,12 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
563
468
  }
564
469
  }
565
470
  }
566
- // Else set the preferred one
567
- this._applyVideoPreferences();
568
- };
569
- /**
570
- * Try to find a track corresponding to the text track preferences:
571
- * - if found, set it as the active track
572
- * - if not found, let the chosen text track by default
573
- */
574
- MediaElementTrackChoiceManager.prototype._applyVideoPreferences = function () {
575
- // Re-set the last manually set video track
576
- this._videoTrackLockedOn = undefined;
577
- // NOTE: As we cannot access either codec information or sign interpretation
578
- // information easily about the different codecs. It is the same case than
579
- // if we had only tracks where those were set to undefined.
580
- // Based on that, we should disable the video track as long as one of the
581
- // set preferrence is "no video track" (i.e. `null`) as this is the only
582
- // constraint that we know we can respect.
583
- // Else, just chose the first track.
584
- var preferredVideoTracks = this._preferredVideoTracks;
585
- var hasNullPreference = preferredVideoTracks.some(function (p) { return p === null; });
586
- if (hasNullPreference) {
587
- disableVideoTracks(this._videoTracks);
588
- }
589
- // else just let the default one instead
590
471
  };
591
472
  /**
592
473
  * Monitor native tracks add, remove and change callback and trigger the
593
474
  * change events.
594
475
  */
595
- MediaElementTrackChoiceManager.prototype._handleNativeTracksCallbacks = function () {
476
+ MediaElementTracksStore.prototype._handleNativeTracksCallbacks = function () {
596
477
  var _this = this;
597
478
  if (this._nativeAudioTracks !== undefined) {
598
479
  this._nativeAudioTracks.onaddtrack = function () {
@@ -601,9 +482,9 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
601
482
  var newAudioTracks = createAudioTracks(_this._nativeAudioTracks);
602
483
  if (areTrackArraysDifferent(_this._audioTracks, newAudioTracks)) {
603
484
  _this._audioTracks = newAudioTracks;
604
- _this._setOptimalAudioTrack();
485
+ _this._setPreviouslyLockedAudioTrack();
605
486
  _this.trigger("availableAudioTracksChange", _this.getAvailableAudioTracks());
606
- var chosenAudioTrack = _this._getPrivateChosenAudioTrack();
487
+ var chosenAudioTrack = _this._getCurrentAudioTrack();
607
488
  if ((chosenAudioTrack === null || chosenAudioTrack === void 0 ? void 0 : chosenAudioTrack.nativeTrack) !== _this._lastEmittedNativeAudioTrack) {
608
489
  _this.trigger("audioTrackChange", (_a = chosenAudioTrack === null || chosenAudioTrack === void 0 ? void 0 : chosenAudioTrack.track) !== null && _a !== void 0 ? _a : null);
609
490
  _this._lastEmittedNativeAudioTrack = (_b = chosenAudioTrack === null || chosenAudioTrack === void 0 ? void 0 : chosenAudioTrack.nativeTrack) !== null && _b !== void 0 ? _b : null;
@@ -618,7 +499,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
618
499
  if (areTrackArraysDifferent(_this._audioTracks, newAudioTracks)) {
619
500
  _this._audioTracks = newAudioTracks;
620
501
  _this.trigger("availableAudioTracksChange", _this.getAvailableAudioTracks());
621
- var chosenAudioTrack = _this._getPrivateChosenAudioTrack();
502
+ var chosenAudioTrack = _this._getCurrentAudioTrack();
622
503
  if ((chosenAudioTrack === null || chosenAudioTrack === void 0 ? void 0 : chosenAudioTrack.nativeTrack) !== _this._lastEmittedNativeAudioTrack) {
623
504
  _this.trigger("audioTrackChange", (_a = chosenAudioTrack === null || chosenAudioTrack === void 0 ? void 0 : chosenAudioTrack.track) !== null && _a !== void 0 ? _a : null);
624
505
  _this._lastEmittedNativeAudioTrack = (_b = chosenAudioTrack === null || chosenAudioTrack === void 0 ? void 0 : chosenAudioTrack.nativeTrack) !== null && _b !== void 0 ? _b : null;
@@ -653,9 +534,9 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
653
534
  var newTextTracks = createTextTracks(_this._nativeTextTracks);
654
535
  if (areTrackArraysDifferent(_this._textTracks, newTextTracks)) {
655
536
  _this._textTracks = newTextTracks;
656
- _this._setOptimalTextTrack();
537
+ _this._setPreviouslyLockedTextTrack();
657
538
  _this.trigger("availableTextTracksChange", _this.getAvailableTextTracks());
658
- var chosenTextTrack = _this._getPrivateChosenTextTrack();
539
+ var chosenTextTrack = _this._getCurrentTextTrack();
659
540
  if ((chosenTextTrack === null || chosenTextTrack === void 0 ? void 0 : chosenTextTrack.nativeTrack) !== _this._lastEmittedNativeTextTrack) {
660
541
  _this.trigger("textTrackChange", (_a = chosenTextTrack === null || chosenTextTrack === void 0 ? void 0 : chosenTextTrack.track) !== null && _a !== void 0 ? _a : null);
661
542
  _this._lastEmittedNativeTextTrack = (_b = chosenTextTrack === null || chosenTextTrack === void 0 ? void 0 : chosenTextTrack.nativeTrack) !== null && _b !== void 0 ? _b : null;
@@ -669,9 +550,9 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
669
550
  var newTextTracks = createTextTracks(_this._nativeTextTracks);
670
551
  if (areTrackArraysDifferent(_this._textTracks, newTextTracks)) {
671
552
  _this._textTracks = newTextTracks;
672
- _this._setOptimalTextTrack();
553
+ _this._setPreviouslyLockedTextTrack();
673
554
  _this.trigger("availableTextTracksChange", _this.getAvailableTextTracks());
674
- var chosenTextTrack = _this._getPrivateChosenTextTrack();
555
+ var chosenTextTrack = _this._getCurrentTextTrack();
675
556
  if ((chosenTextTrack === null || chosenTextTrack === void 0 ? void 0 : chosenTextTrack.nativeTrack) !== _this._lastEmittedNativeTextTrack) {
676
557
  _this.trigger("textTrackChange", (_a = chosenTextTrack === null || chosenTextTrack === void 0 ? void 0 : chosenTextTrack.track) !== null && _a !== void 0 ? _a : null);
677
558
  _this._lastEmittedNativeTextTrack = (_b = chosenTextTrack === null || chosenTextTrack === void 0 ? void 0 : chosenTextTrack.nativeTrack) !== null && _b !== void 0 ? _b : null;
@@ -706,9 +587,9 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
706
587
  var newVideoTracks = createVideoTracks(_this._nativeVideoTracks);
707
588
  if (areTrackArraysDifferent(_this._videoTracks, newVideoTracks)) {
708
589
  _this._videoTracks = newVideoTracks;
709
- _this._setOptimalVideoTrack();
590
+ _this._setPreviouslyLockedVideoTrack();
710
591
  _this.trigger("availableVideoTracksChange", _this.getAvailableVideoTracks());
711
- var chosenVideoTrack = _this._getPrivateChosenVideoTrack();
592
+ var chosenVideoTrack = _this._getCurrentVideoTrack();
712
593
  if ((chosenVideoTrack === null || chosenVideoTrack === void 0 ? void 0 : chosenVideoTrack.nativeTrack) !== _this._lastEmittedNativeVideoTrack) {
713
594
  _this.trigger("videoTrackChange", (_a = chosenVideoTrack === null || chosenVideoTrack === void 0 ? void 0 : chosenVideoTrack.track) !== null && _a !== void 0 ? _a : null);
714
595
  _this._lastEmittedNativeVideoTrack = (_b = chosenVideoTrack === null || chosenVideoTrack === void 0 ? void 0 : chosenVideoTrack.nativeTrack) !== null && _b !== void 0 ? _b : null;
@@ -722,9 +603,9 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
722
603
  var newVideoTracks = createVideoTracks(_this._nativeVideoTracks);
723
604
  if (areTrackArraysDifferent(_this._videoTracks, newVideoTracks)) {
724
605
  _this._videoTracks = newVideoTracks;
725
- _this._setOptimalVideoTrack();
606
+ _this._setPreviouslyLockedVideoTrack();
726
607
  _this.trigger("availableVideoTracksChange", _this.getAvailableVideoTracks());
727
- var chosenVideoTrack = _this._getPrivateChosenVideoTrack();
608
+ var chosenVideoTrack = _this._getCurrentVideoTrack();
728
609
  if ((chosenVideoTrack === null || chosenVideoTrack === void 0 ? void 0 : chosenVideoTrack.nativeTrack) !== _this._lastEmittedNativeVideoTrack) {
729
610
  _this.trigger("videoTrackChange", (_a = chosenVideoTrack === null || chosenVideoTrack === void 0 ? void 0 : chosenVideoTrack.track) !== null && _a !== void 0 ? _a : null);
730
611
  _this._lastEmittedNativeVideoTrack = (_b = chosenVideoTrack === null || chosenVideoTrack === void 0 ? void 0 : chosenVideoTrack.nativeTrack) !== null && _b !== void 0 ? _b : null;
@@ -758,15 +639,15 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
758
639
  * `this._audioTracks` array.
759
640
  * @param {number} index}
760
641
  */
761
- MediaElementTrackChoiceManager.prototype._enableAudioTrackFromIndex = function (index) {
642
+ MediaElementTracksStore.prototype._enableAudioTrackFromIndex = function (index) {
762
643
  enableAudioTrack(this._audioTracks.map(function (_a) {
763
644
  var nativeTrack = _a.nativeTrack;
764
645
  return nativeTrack;
765
646
  }), index);
766
647
  };
767
- return MediaElementTrackChoiceManager;
648
+ return MediaElementTracksStore;
768
649
  }(EventEmitter));
769
- export default MediaElementTrackChoiceManager;
650
+ export default MediaElementTracksStore;
770
651
  /**
771
652
  * Disable all text track elements in the given array from showing.
772
653
  * @param {Array.<Object>} textTracks
@@ -0,0 +1,84 @@
1
+ import Manifest, { Adaptation } from "../../../manifest";
2
+ import EventEmitter from "../../../utils/event_emitter";
3
+ import SharedReference, { IReadOnlySharedReference } from "../../../utils/reference";
4
+ import { IAdaptationChoice, IRepresentationsChoice, ITrackSwitchingMode } from "../../stream";
5
+ /**
6
+ * Class handling track changes and quality locking for a single Period and
7
+ * Adaptation type.
8
+ * @class TrackDispatcher
9
+ */
10
+ export default class TrackDispatcher extends EventEmitter<ITrackDispatcherEvent> {
11
+ /**
12
+ * `Manifest` object linked to the current content handled by the
13
+ * `TrackDispatcher`.
14
+ * Needed to subscribe to various events.
15
+ */
16
+ private readonly _manifest;
17
+ /**
18
+ * Reference through which the wanted track will be emitted.
19
+ * `null` is emitted if no track for that type is wanted.
20
+ */
21
+ private readonly _adaptationRef;
22
+ /**
23
+ * Last values emitted through `adaptationRef`.
24
+ * This value is mutated just before `adaptationRef` is "nexted".
25
+ *
26
+ * Storing this information allows to detect if some potential
27
+ * side-effects already led to the "nexting" of `adaptationRef` with the wanted
28
+ * settings, preventing the the `TrackDispatcher` from doing it again.
29
+ */
30
+ private _lastEmitted;
31
+ /** Interface allowing to clean-up resources when they are not needed anymore. */
32
+ private _canceller;
33
+ /**
34
+ * Create a new `TrackDispatcher` by giving its Reference and an initial track
35
+ * setting.
36
+ * This constructor will update the Reference with the right preferences
37
+ * synchronously.
38
+ * @param {Object} manifest
39
+ * @param {Object} adaptationRef
40
+ * @param {Object|null} initialTrackInfo
41
+ */
42
+ constructor(manifest: Manifest, adaptationRef: SharedReference<IAdaptationChoice | null | undefined>, initialTrackInfo: ITrackSetting | null);
43
+ /**
44
+ * Update the wanted track on the Reference linked to this `TrackDispatcher`.
45
+ * @param {Object|null} newTrackInfo
46
+ */
47
+ updateTrack(newTrackInfo: ITrackSetting | null): void;
48
+ /**
49
+ * Create a shared reference which will emit the wanted locked Representations
50
+ * based on the current capabilities and the last user settings.
51
+ *
52
+ * @param {Object} trackInfo
53
+ * @returns {Object}
54
+ */
55
+ private _constructLockedRepresentationsReference;
56
+ /**
57
+ * Free the resources (e.g. `Manifest` event listeners) linked to this
58
+ * `TrackDispatcher`.
59
+ */
60
+ dispose(): void;
61
+ }
62
+ export interface ITrackDispatcherEvent {
63
+ /**
64
+ * Event sent when given locked Representations cannot be respected because
65
+ * none of them are currently "playable".
66
+ */
67
+ noPlayableLockedRepresentation: null;
68
+ }
69
+ /** Define a new Track preference given to the `TrackDispatcher`. */
70
+ export interface ITrackSetting {
71
+ /** Contains the `Adaptation` wanted by the user. */
72
+ adaptation: Adaptation;
73
+ /** "Switching mode" in which the track switch should happen. */
74
+ switchingMode: ITrackSwitchingMode;
75
+ /**
76
+ * Contains the last locked `Representation`s for this `Adaptation` wanted
77
+ * by the user.
78
+ * `null` if no Representation is locked.
79
+ *
80
+ * Can be updated continuously while the `TrackDispatcher` is in possession
81
+ * of this shared reference.
82
+ */
83
+ lockedRepresentations: IReadOnlySharedReference<IRepresentationsChoice | null>;
84
+ }