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

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 (326) hide show
  1. package/CHANGELOG.md +178 -2
  2. package/README.md +2 -33
  3. package/VERSION +1 -1
  4. package/dist/_esm5.processed/compat/add_text_track.d.ts +3 -1
  5. package/dist/_esm5.processed/compat/add_text_track.js +7 -4
  6. package/dist/_esm5.processed/compat/browser_compatibility_types.d.ts +7 -0
  7. package/dist/_esm5.processed/compat/event_listeners.d.ts +15 -2
  8. package/dist/_esm5.processed/compat/event_listeners.js +37 -2
  9. package/dist/_esm5.processed/compat/fullscreen.d.ts +32 -0
  10. package/dist/_esm5.processed/compat/fullscreen.js +78 -0
  11. package/dist/_esm5.processed/compat/index.d.ts +3 -1
  12. package/dist/_esm5.processed/compat/index.js +3 -1
  13. package/dist/_esm5.processed/compat/is_offline.d.ts +39 -0
  14. package/dist/_esm5.processed/compat/is_offline.js +43 -0
  15. package/dist/_esm5.processed/config.d.ts +21 -9
  16. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.d.ts +58 -0
  17. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +54 -14
  18. package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.d.ts +8 -2
  19. package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.js +11 -2
  20. package/dist/_esm5.processed/core/api/debug/modules/general_info.js +46 -17
  21. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +3 -3
  22. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +1 -1
  23. package/dist/_esm5.processed/core/api/option_utils.d.ts +35 -14
  24. package/dist/_esm5.processed/core/api/option_utils.js +230 -47
  25. package/dist/_esm5.processed/core/api/public_api.d.ts +266 -92
  26. package/dist/_esm5.processed/core/api/public_api.js +802 -444
  27. package/dist/_esm5.processed/core/api/{track_management/media_element_tracks_store.d.ts → tracks_management/media_element_track_choice_manager.d.ts} +75 -15
  28. package/dist/_esm5.processed/core/api/{track_management/media_element_tracks_store.js → tracks_management/media_element_track_choice_manager.js} +193 -74
  29. package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.d.ts +258 -0
  30. package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.js +989 -0
  31. package/dist/_esm5.processed/core/api/utils.d.ts +0 -1
  32. package/dist/_esm5.processed/core/api/utils.js +11 -28
  33. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +3 -3
  34. package/dist/_esm5.processed/core/decrypt/find_key_system.js +71 -83
  35. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +5 -6
  36. package/dist/_esm5.processed/core/decrypt/session_events_listener.js +72 -10
  37. package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.d.ts +4 -4
  38. package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.js +4 -6
  39. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +3 -1
  40. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +26 -7
  41. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +9 -3
  42. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +9 -16
  43. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +3 -1
  44. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  45. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.d.ts +6 -1
  46. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +41 -4
  47. package/dist/_esm5.processed/core/init/media_source_content_initializer.d.ts +8 -1
  48. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +5 -2
  49. package/dist/_esm5.processed/core/init/types.d.ts +15 -5
  50. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
  51. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.d.ts +75 -0
  52. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +133 -0
  53. package/dist/_esm5.processed/core/{api/track_management → segment_buffers/implementations/image}/index.d.ts +2 -3
  54. package/dist/_esm5.processed/core/{api/track_management → segment_buffers/implementations/image}/index.js +2 -3
  55. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
  56. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +2 -1
  57. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +4 -3
  58. package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +2 -2
  59. package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
  60. package/dist/_esm5.processed/core/segment_buffers/index.js +1 -2
  61. package/dist/_esm5.processed/core/segment_buffers/inventory/index.d.ts +2 -3
  62. package/dist/_esm5.processed/core/segment_buffers/inventory/index.js +0 -1
  63. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
  64. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +19 -10
  65. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +1 -0
  66. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +16 -2
  67. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +15 -0
  68. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +93 -183
  69. package/dist/_esm5.processed/core/stream/adaptation/types.d.ts +13 -27
  70. package/dist/_esm5.processed/core/stream/index.d.ts +3 -2
  71. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +0 -2
  72. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +7 -5
  73. package/dist/_esm5.processed/core/stream/period/period_stream.js +12 -13
  74. package/dist/_esm5.processed/core/stream/period/types.d.ts +14 -5
  75. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +4 -2
  76. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.js +46 -10
  77. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +23 -29
  78. package/dist/_esm5.processed/core/stream/representation/types.d.ts +1 -11
  79. package/dist/_esm5.processed/core/stream/representation/utils/get_buffer_status.js +1 -1
  80. package/dist/_esm5.processed/core/stream/representation/utils/get_needed_segments.js +1 -1
  81. package/dist/_esm5.processed/default_config.d.ts +98 -35
  82. package/dist/_esm5.processed/default_config.js +113 -36
  83. package/dist/_esm5.processed/errors/custom_loader_error.d.ts +3 -1
  84. package/dist/_esm5.processed/errors/custom_loader_error.js +3 -1
  85. package/dist/_esm5.processed/errors/media_error.js +2 -2
  86. package/dist/_esm5.processed/errors/network_error.d.ts +1 -0
  87. package/dist/_esm5.processed/errors/network_error.js +1 -0
  88. package/dist/_esm5.processed/errors/request_error.d.ts +3 -2
  89. package/dist/_esm5.processed/errors/request_error.js +5 -2
  90. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -3
  91. package/dist/_esm5.processed/features/features_object.js +2 -0
  92. package/dist/_esm5.processed/{transports/smooth/is_mp4_embedded_track.js → features/list/bif_parser.d.ts} +6 -7
  93. package/dist/_esm5.processed/features/list/bif_parser.js +27 -0
  94. package/dist/_esm5.processed/features/list/directfile.js +5 -2
  95. package/dist/_esm5.processed/features/list/image_buffer.d.ts +23 -0
  96. package/dist/_esm5.processed/features/list/image_buffer.js +25 -0
  97. package/dist/_esm5.processed/features/list/index.d.ts +2 -0
  98. package/dist/_esm5.processed/features/list/index.js +2 -0
  99. package/dist/_esm5.processed/features/types.d.ts +27 -3
  100. package/dist/_esm5.processed/manifest/adaptation.d.ts +11 -9
  101. package/dist/_esm5.processed/manifest/adaptation.js +30 -41
  102. package/dist/_esm5.processed/manifest/index.d.ts +4 -3
  103. package/dist/_esm5.processed/manifest/manifest.d.ts +54 -5
  104. package/dist/_esm5.processed/manifest/manifest.js +110 -5
  105. package/dist/_esm5.processed/manifest/period.d.ts +5 -4
  106. package/dist/_esm5.processed/manifest/representation.d.ts +5 -10
  107. package/dist/_esm5.processed/manifest/representation.js +5 -15
  108. package/dist/_esm5.processed/manifest/representation_index/index.d.ts +2 -2
  109. package/dist/_esm5.processed/manifest/representation_index/static.d.ts +0 -2
  110. package/dist/_esm5.processed/manifest/representation_index/static.js +0 -6
  111. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +21 -42
  112. package/dist/_esm5.processed/manifest/types.d.ts +2 -0
  113. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +31 -17
  114. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +19 -26
  115. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +0 -2
  116. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +1 -7
  117. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +6 -2
  118. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +8 -11
  119. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +0 -2
  120. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +0 -6
  121. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  122. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.js +6 -1
  123. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +5 -3
  124. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +2 -0
  125. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -1
  126. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +2 -2
  127. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +2 -0
  128. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +2 -2
  129. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +6 -10
  130. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +2 -4
  131. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.d.ts +1 -10
  132. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +2 -18
  133. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +4 -4
  134. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +6 -3
  135. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +2 -1
  136. package/dist/_esm5.processed/parsers/manifest/local/representation_index.d.ts +0 -2
  137. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +0 -6
  138. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +6 -6
  139. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.d.ts +3 -12
  140. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.js +2 -11
  141. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +1 -0
  142. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +17 -11
  143. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +83 -21
  144. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +125 -53
  145. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.d.ts +6 -3
  146. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.js +4 -4
  147. package/dist/_esm5.processed/parsers/manifest/types.d.ts +3 -3
  148. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
  149. package/dist/_esm5.processed/public_types.d.ts +310 -396
  150. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.d.ts +4 -5
  151. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +4 -5
  152. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +4 -4
  153. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +38 -0
  154. package/dist/_esm5.processed/transports/dash/image_pipelines.js +129 -0
  155. package/dist/_esm5.processed/transports/dash/manifest_parser.js +3 -2
  156. package/dist/_esm5.processed/transports/dash/pipelines.js +4 -1
  157. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
  158. package/dist/_esm5.processed/transports/dash/segment_loader.js +20 -26
  159. package/dist/_esm5.processed/transports/dash/segment_parser.js +24 -19
  160. package/dist/_esm5.processed/transports/dash/text_loader.js +5 -5
  161. package/dist/_esm5.processed/transports/dash/text_parser.js +33 -28
  162. package/dist/_esm5.processed/transports/local/pipelines.js +10 -1
  163. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
  164. package/dist/_esm5.processed/transports/local/segment_parser.d.ts +1 -1
  165. package/dist/_esm5.processed/transports/local/segment_parser.js +10 -10
  166. package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
  167. package/dist/_esm5.processed/transports/local/text_parser.js +23 -23
  168. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +52 -34
  169. package/dist/_esm5.processed/transports/smooth/pipelines.js +190 -33
  170. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +1 -1
  171. package/dist/_esm5.processed/transports/smooth/segment_loader.js +22 -28
  172. package/dist/_esm5.processed/transports/smooth/utils.d.ts +26 -1
  173. package/dist/_esm5.processed/transports/smooth/utils.js +55 -1
  174. package/dist/_esm5.processed/transports/types.d.ts +89 -94
  175. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
  176. package/dist/_esm5.processed/transports/utils/infer_segment_container.d.ts +3 -3
  177. package/dist/_esm5.processed/transports/utils/infer_segment_container.js +7 -5
  178. package/dist/_esm5.processed/transports/utils/parse_text_track.d.ts +12 -8
  179. package/dist/_esm5.processed/transports/utils/parse_text_track.js +21 -19
  180. package/dist/_esm5.processed/utils/array_includes.d.ts +1 -2
  181. package/dist/_esm5.processed/utils/array_includes.js +28 -30
  182. package/dist/_esm5.processed/{transports/smooth/is_mp4_embedded_track.d.ts → utils/list_to_map.d.ts} +5 -5
  183. package/dist/_esm5.processed/utils/list_to_map.js +28 -0
  184. package/dist/_esm5.processed/utils/request/xhr.js +5 -5
  185. package/dist/_esm5.processed/utils/simple_set.d.ts +51 -0
  186. package/dist/_esm5.processed/utils/simple_set.js +57 -0
  187. package/dist/_esm5.processed/utils/uniq.d.ts +36 -0
  188. package/dist/_esm5.processed/utils/uniq.js +43 -0
  189. package/dist/commonjs/config.d.ts +1 -1
  190. package/dist/commonjs/core/adaptive/adaptive_representation_selector.d.ts +2 -19
  191. package/dist/commonjs/core/adaptive/adaptive_representation_selector.js +2 -2
  192. package/dist/commonjs/core/adaptive/network_analyzer.js +3 -3
  193. package/dist/commonjs/core/api/index.d.ts +1 -1
  194. package/dist/commonjs/core/api/playback_observer.d.ts +128 -8
  195. package/dist/commonjs/core/api/playback_observer.js +217 -64
  196. package/dist/commonjs/core/api/public_api.js +9 -9
  197. package/dist/commonjs/core/api/utils.js +1 -1
  198. package/dist/commonjs/core/decrypt/get_media_keys.js +2 -6
  199. package/dist/commonjs/core/init/directfile_content_initializer.js +5 -1
  200. package/dist/commonjs/core/init/media_source_content_initializer.js +28 -14
  201. package/dist/commonjs/core/init/utils/content_time_boundaries_observer.js +1 -2
  202. package/dist/commonjs/core/init/utils/create_stream_playback_observer.d.ts +1 -5
  203. package/dist/commonjs/core/init/utils/create_stream_playback_observer.js +16 -14
  204. package/dist/commonjs/core/init/utils/initial_seek_and_play.d.ts +9 -11
  205. package/dist/commonjs/core/init/utils/initial_seek_and_play.js +121 -91
  206. package/dist/commonjs/core/init/utils/rebuffering_controller.js +27 -70
  207. package/dist/commonjs/core/init/utils/stream_events_emitter/stream_events_emitter.js +4 -2
  208. package/dist/commonjs/core/segment_buffers/garbage_collector.js +1 -2
  209. package/dist/commonjs/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
  210. package/dist/commonjs/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
  211. package/dist/commonjs/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +1 -1
  212. package/dist/commonjs/core/segment_buffers/index.d.ts +2 -2
  213. package/dist/commonjs/core/segment_buffers/inventory/index.d.ts +2 -2
  214. package/dist/commonjs/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
  215. package/dist/commonjs/core/segment_buffers/inventory/segment_inventory.js +19 -10
  216. package/dist/commonjs/core/stream/adaptation/get_representations_switch_strategy.d.ts +2 -2
  217. package/dist/commonjs/core/stream/adaptation/get_representations_switch_strategy.js +16 -9
  218. package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.js +14 -18
  219. package/dist/commonjs/core/stream/period/period_stream.js +5 -8
  220. package/dist/commonjs/core/stream/period/types.d.ts +2 -3
  221. package/dist/commonjs/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +4 -5
  222. package/dist/commonjs/core/stream/period/utils/get_adaptation_switch_strategy.js +17 -13
  223. package/dist/commonjs/core/stream/representation/representation_stream.js +3 -4
  224. package/dist/commonjs/core/stream/representation/types.d.ts +2 -2
  225. package/dist/commonjs/core/stream/representation/utils/append_segment_to_buffer.js +11 -12
  226. package/dist/commonjs/core/stream/representation/utils/get_buffer_status.js +1 -1
  227. package/dist/commonjs/default_config.d.ts +7 -16
  228. package/dist/commonjs/default_config.js +16 -16
  229. package/dist/commonjs/manifest/adaptation.js +2 -1
  230. package/dist/commonjs/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
  231. package/dist/commonjs/public_types.d.ts +29 -2
  232. package/dist/es2017/config.d.ts +1 -1
  233. package/dist/es2017/core/adaptive/adaptive_representation_selector.d.ts +2 -19
  234. package/dist/es2017/core/adaptive/adaptive_representation_selector.js +2 -2
  235. package/dist/es2017/core/adaptive/network_analyzer.js +3 -3
  236. package/dist/es2017/core/api/index.d.ts +1 -1
  237. package/dist/es2017/core/api/playback_observer.d.ts +128 -8
  238. package/dist/es2017/core/api/playback_observer.js +217 -66
  239. package/dist/es2017/core/api/public_api.js +9 -9
  240. package/dist/es2017/core/api/utils.js +1 -1
  241. package/dist/es2017/core/decrypt/get_media_keys.js +2 -6
  242. package/dist/es2017/core/init/directfile_content_initializer.js +7 -1
  243. package/dist/es2017/core/init/media_source_content_initializer.js +30 -16
  244. package/dist/es2017/core/init/utils/content_time_boundaries_observer.js +1 -2
  245. package/dist/es2017/core/init/utils/create_stream_playback_observer.d.ts +1 -5
  246. package/dist/es2017/core/init/utils/create_stream_playback_observer.js +16 -14
  247. package/dist/es2017/core/init/utils/initial_seek_and_play.d.ts +9 -11
  248. package/dist/es2017/core/init/utils/initial_seek_and_play.js +120 -91
  249. package/dist/es2017/core/init/utils/rebuffering_controller.js +27 -70
  250. package/dist/es2017/core/init/utils/stream_events_emitter/stream_events_emitter.js +4 -2
  251. package/dist/es2017/core/segment_buffers/garbage_collector.js +1 -2
  252. package/dist/es2017/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
  253. package/dist/es2017/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
  254. package/dist/es2017/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +1 -1
  255. package/dist/es2017/core/segment_buffers/index.d.ts +2 -2
  256. package/dist/es2017/core/segment_buffers/inventory/index.d.ts +2 -2
  257. package/dist/es2017/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
  258. package/dist/es2017/core/segment_buffers/inventory/segment_inventory.js +19 -10
  259. package/dist/es2017/core/stream/adaptation/get_representations_switch_strategy.d.ts +2 -2
  260. package/dist/es2017/core/stream/adaptation/get_representations_switch_strategy.js +16 -9
  261. package/dist/es2017/core/stream/orchestrator/stream_orchestrator.js +16 -18
  262. package/dist/es2017/core/stream/period/period_stream.js +4 -7
  263. package/dist/es2017/core/stream/period/types.d.ts +2 -3
  264. package/dist/es2017/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +4 -5
  265. package/dist/es2017/core/stream/period/utils/get_adaptation_switch_strategy.js +17 -13
  266. package/dist/es2017/core/stream/representation/representation_stream.js +3 -4
  267. package/dist/es2017/core/stream/representation/types.d.ts +2 -2
  268. package/dist/es2017/core/stream/representation/utils/append_segment_to_buffer.js +1 -2
  269. package/dist/es2017/core/stream/representation/utils/get_buffer_status.js +1 -1
  270. package/dist/es2017/default_config.d.ts +7 -16
  271. package/dist/es2017/default_config.js +16 -16
  272. package/dist/es2017/manifest/adaptation.js +2 -1
  273. package/dist/es2017/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
  274. package/dist/es2017/public_types.d.ts +29 -2
  275. package/dist/mpd-parser.wasm +0 -0
  276. package/dist/rx-player.js +614 -438
  277. package/dist/rx-player.min.js +1 -1
  278. package/package.json +5 -1
  279. package/scripts/canal-release.patch +78 -0
  280. package/scripts/make-dev-releases +65 -0
  281. package/scripts/update-version +5 -0
  282. package/sonar-project.properties +1 -1
  283. package/src/core/adaptive/adaptive_representation_selector.ts +4 -21
  284. package/src/core/adaptive/network_analyzer.ts +3 -3
  285. package/src/core/api/index.ts +1 -0
  286. package/src/core/api/playback_observer.ts +327 -107
  287. package/src/core/api/public_api.ts +9 -9
  288. package/src/core/api/utils.ts +3 -1
  289. package/src/core/decrypt/get_media_keys.ts +2 -8
  290. package/src/core/init/directfile_content_initializer.ts +8 -8
  291. package/src/core/init/media_source_content_initializer.ts +27 -20
  292. package/src/core/init/utils/content_time_boundaries_observer.ts +1 -1
  293. package/src/core/init/utils/create_stream_playback_observer.ts +19 -20
  294. package/src/core/init/utils/initial_seek_and_play.ts +140 -108
  295. package/src/core/init/utils/rebuffering_controller.ts +32 -77
  296. package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +5 -2
  297. package/src/core/segment_buffers/garbage_collector.ts +1 -1
  298. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +10 -2
  299. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +1 -1
  300. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +1 -1
  301. package/src/core/segment_buffers/index.ts +2 -0
  302. package/src/core/segment_buffers/inventory/index.ts +2 -0
  303. package/src/core/segment_buffers/inventory/segment_inventory.ts +49 -17
  304. package/src/core/stream/adaptation/get_representations_switch_strategy.ts +21 -12
  305. package/src/core/stream/orchestrator/stream_orchestrator.ts +14 -19
  306. package/src/core/stream/period/period_stream.ts +7 -8
  307. package/src/core/stream/period/types.ts +2 -3
  308. package/src/core/stream/period/utils/get_adaptation_switch_strategy.ts +21 -15
  309. package/src/core/stream/representation/representation_stream.ts +3 -5
  310. package/src/core/stream/representation/types.ts +2 -2
  311. package/src/core/stream/representation/utils/append_segment_to_buffer.ts +1 -1
  312. package/src/core/stream/representation/utils/get_buffer_status.ts +2 -1
  313. package/src/default_config.ts +17 -17
  314. package/src/manifest/adaptation.ts +2 -1
  315. package/src/parsers/texttracks/ttml/html/apply_line_height.ts +3 -1
  316. package/src/public_types.ts +29 -2
  317. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.d.ts +0 -84
  318. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +0 -158
  319. package/dist/_esm5.processed/core/api/track_management/tracks_store.d.ts +0 -406
  320. package/dist/_esm5.processed/core/api/track_management/tracks_store.js +0 -932
  321. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.d.ts +0 -33
  322. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.js +0 -49
  323. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.d.ts +0 -39
  324. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.js +0 -133
  325. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.d.ts +0 -119
  326. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.js +0 -159
@@ -34,7 +34,6 @@ 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";
38
37
  import normalizeLanguage from "../../../utils/languages";
39
38
  /**
40
39
  * Check if track array is different from an other one
@@ -141,13 +140,16 @@ function createVideoTracks(videoTracks) {
141
140
  }
142
141
  /**
143
142
  * Manage video, audio and text tracks for current direct file content.
144
- * @class MediaElementTracksStore
143
+ * @class MediaElementTrackChoiceManager
145
144
  */
146
- var MediaElementTracksStore = /** @class */ (function (_super) {
147
- __extends(MediaElementTracksStore, _super);
148
- function MediaElementTracksStore(mediaElement) {
145
+ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
146
+ __extends(MediaElementTrackChoiceManager, _super);
147
+ function MediaElementTrackChoiceManager(mediaElement) {
149
148
  var _a, _b, _c;
150
149
  var _this = _super.call(this) || this;
150
+ _this._preferredAudioTracks = [];
151
+ _this._preferredTextTracks = [];
152
+ _this._preferredVideoTracks = [];
151
153
  // TODO In practice, the audio/video/text tracks API are not always implemented on
152
154
  // the media element, although Typescript HTMLMediaElement types tend to mean
153
155
  // that can't be undefined.
@@ -163,19 +165,58 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
163
165
  _this._textTracks =
164
166
  _this._nativeTextTracks !== undefined ? createTextTracks(_this._nativeTextTracks) :
165
167
  [];
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;
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;
169
171
  _this._handleNativeTracksCallbacks();
170
172
  return _this;
171
173
  }
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
+ };
172
213
  /**
173
214
  * Update the currently active audio track by setting the wanted audio track's
174
215
  * ID property.
175
216
  * Throws if the wanted audio track is not found.
176
217
  * @param {string|number|undefined} id
177
218
  */
178
- MediaElementTracksStore.prototype.setAudioTrackById = function (id) {
219
+ MediaElementTrackChoiceManager.prototype.setAudioTrackById = function (id) {
179
220
  for (var i = 0; i < this._audioTracks.length; i++) {
180
221
  var _a = this._audioTracks[i], track = _a.track, nativeTrack = _a.nativeTrack;
181
222
  if (track.id === id) {
@@ -189,7 +230,7 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
189
230
  /**
190
231
  * Disable the currently-active text track, if one.
191
232
  */
192
- MediaElementTracksStore.prototype.disableTextTrack = function () {
233
+ MediaElementTrackChoiceManager.prototype.disableTextTrack = function () {
193
234
  disableTextTracks(this._textTracks);
194
235
  this._textTrackLockedOn = null;
195
236
  };
@@ -199,7 +240,7 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
199
240
  * Throws if the wanted text track is not found.
200
241
  * @param {string|number|undefined} id
201
242
  */
202
- MediaElementTracksStore.prototype.setTextTrackById = function (id) {
243
+ MediaElementTrackChoiceManager.prototype.setTextTrackById = function (id) {
203
244
  var hasSetTrack = false;
204
245
  for (var i = 0; i < this._textTracks.length; i++) {
205
246
  var _a = this._textTracks[i], track = _a.track, nativeTrack = _a.nativeTrack;
@@ -219,7 +260,7 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
219
260
  /**
220
261
  * Disable the currently-active video track, if one.
221
262
  */
222
- MediaElementTracksStore.prototype.disableVideoTrack = function () {
263
+ MediaElementTrackChoiceManager.prototype.disableVideoTrack = function () {
223
264
  disableVideoTracks(this._videoTracks);
224
265
  this._videoTrackLockedOn = null;
225
266
  };
@@ -229,7 +270,7 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
229
270
  * Throws if the wanted video track is not found.
230
271
  * @param {string|number|undefined} id
231
272
  */
232
- MediaElementTracksStore.prototype.setVideoTrackById = function (id) {
273
+ MediaElementTrackChoiceManager.prototype.setVideoTrackById = function (id) {
233
274
  for (var i = 0; i < this._videoTracks.length; i++) {
234
275
  var _a = this._videoTracks[i], track = _a.track, nativeTrack = _a.nativeTrack;
235
276
  if (track.id === id) {
@@ -246,11 +287,12 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
246
287
  * Returns `undefined` if we cannot know which audio track is active.
247
288
  * @returns {Object|null|undefined}
248
289
  */
249
- MediaElementTracksStore.prototype.getChosenAudioTrack = function () {
250
- var currentAudioTrack = this._getCurrentAudioTrack();
251
- return isNullOrUndefined(currentAudioTrack) ?
252
- currentAudioTrack :
253
- currentAudioTrack.track;
290
+ MediaElementTrackChoiceManager.prototype.getChosenAudioTrack = function () {
291
+ var chosenPrivateAudioTrack = this._getPrivateChosenAudioTrack();
292
+ if (chosenPrivateAudioTrack != null) {
293
+ return chosenPrivateAudioTrack.track;
294
+ }
295
+ return chosenPrivateAudioTrack;
254
296
  };
255
297
  /**
256
298
  * Returns the currently active text track.
@@ -258,11 +300,12 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
258
300
  * Returns `undefined` if we cannot know which text track is active.
259
301
  * @returns {Object|null|undefined}
260
302
  */
261
- MediaElementTracksStore.prototype.getChosenTextTrack = function () {
262
- var currentTextTrack = this._getCurrentTextTrack();
263
- return isNullOrUndefined(currentTextTrack) ?
264
- currentTextTrack :
265
- currentTextTrack.track;
303
+ MediaElementTrackChoiceManager.prototype.getChosenTextTrack = function () {
304
+ var chosenPrivateTextTrack = this._getPrivateChosenTextTrack();
305
+ if (chosenPrivateTextTrack != null) {
306
+ return chosenPrivateTextTrack.track;
307
+ }
308
+ return chosenPrivateTextTrack;
266
309
  };
267
310
  /**
268
311
  * Returns the currently active video track.
@@ -270,17 +313,18 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
270
313
  * Returns `undefined` if we cannot know which video track is active.
271
314
  * @returns {Object|null|undefined}
272
315
  */
273
- MediaElementTracksStore.prototype.getChosenVideoTrack = function () {
274
- var currentVideoTrack = this._getCurrentVideoTrack();
275
- return isNullOrUndefined(currentVideoTrack) ?
276
- currentVideoTrack :
277
- currentVideoTrack.track;
316
+ MediaElementTrackChoiceManager.prototype.getChosenVideoTrack = function () {
317
+ var chosenPrivateVideoTrack = this._getPrivateChosenVideoTrack();
318
+ if (chosenPrivateVideoTrack != null) {
319
+ return chosenPrivateVideoTrack.track;
320
+ }
321
+ return chosenPrivateVideoTrack;
278
322
  };
279
323
  /**
280
324
  * Returns a description of every available audio tracks.
281
325
  * @returns {Array.<Object>}
282
326
  */
283
- MediaElementTracksStore.prototype.getAvailableAudioTracks = function () {
327
+ MediaElementTrackChoiceManager.prototype.getAvailableAudioTracks = function () {
284
328
  return this._audioTracks.map(function (_a) {
285
329
  var track = _a.track, nativeTrack = _a.nativeTrack;
286
330
  return { id: track.id,
@@ -295,7 +339,7 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
295
339
  * Returns a description of every available text tracks.
296
340
  * @returns {Array.<Object>}
297
341
  */
298
- MediaElementTracksStore.prototype.getAvailableTextTracks = function () {
342
+ MediaElementTrackChoiceManager.prototype.getAvailableTextTracks = function () {
299
343
  return this._textTracks.map(function (_a) {
300
344
  var track = _a.track, nativeTrack = _a.nativeTrack;
301
345
  return { id: track.id,
@@ -311,7 +355,7 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
311
355
  * Returns a description of every available video tracks.
312
356
  * @returns {Array.<Object>}
313
357
  */
314
- MediaElementTracksStore.prototype.getAvailableVideoTracks = function () {
358
+ MediaElementTrackChoiceManager.prototype.getAvailableVideoTracks = function () {
315
359
  return this._videoTracks.map(function (_a) {
316
360
  var track = _a.track, nativeTrack = _a.nativeTrack;
317
361
  return { id: track.id,
@@ -320,9 +364,9 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
320
364
  });
321
365
  };
322
366
  /**
323
- * Free the resources used by the MediaElementTracksStore.
367
+ * Free the resources used by the MediaElementTrackChoiceManager.
324
368
  */
325
- MediaElementTracksStore.prototype.dispose = function () {
369
+ MediaElementTrackChoiceManager.prototype.dispose = function () {
326
370
  if (this._nativeVideoTracks !== undefined) {
327
371
  this._nativeVideoTracks.onchange = null;
328
372
  this._nativeVideoTracks.onaddtrack = null;
@@ -346,7 +390,7 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
346
390
  * `null` if no audio track is chosen.
347
391
  * @returns {Object|undefined|null}
348
392
  */
349
- MediaElementTracksStore.prototype._getCurrentAudioTrack = function () {
393
+ MediaElementTrackChoiceManager.prototype._getPrivateChosenAudioTrack = function () {
350
394
  if (this._nativeAudioTracks === undefined) {
351
395
  return undefined;
352
396
  }
@@ -364,7 +408,7 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
364
408
  * `null` if no video track is chosen.
365
409
  * @returns {Object|undefined|null}
366
410
  */
367
- MediaElementTracksStore.prototype._getCurrentVideoTrack = function () {
411
+ MediaElementTrackChoiceManager.prototype._getPrivateChosenVideoTrack = function () {
368
412
  if (this._nativeVideoTracks === undefined) {
369
413
  return undefined;
370
414
  }
@@ -382,7 +426,7 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
382
426
  * `null` if no text track is chosen.
383
427
  * @returns {Object|undefined|null}
384
428
  */
385
- MediaElementTracksStore.prototype._getCurrentTextTrack = function () {
429
+ MediaElementTrackChoiceManager.prototype._getPrivateChosenTextTrack = function () {
386
430
  if (this._nativeTextTracks === undefined) {
387
431
  return undefined;
388
432
  }
@@ -397,19 +441,12 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
397
441
  /**
398
442
  * Iterate over every available audio tracks on the media element and either:
399
443
  * - if the last manually set audio track is found, set that one.
444
+ * - if not, set the most preferred one
400
445
  * - if we still do not find an optimal track, let the one chosen by default
401
446
  */
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 {
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) {
413
450
  for (var i = 0; i < this._audioTracks.length; i++) {
414
451
  var nativeTrack = this._audioTracks[i].nativeTrack;
415
452
  if (nativeTrack === this._audioTrackLockedOn) {
@@ -418,21 +455,46 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
418
455
  }
419
456
  }
420
457
  }
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
421
484
  };
422
485
  /**
423
486
  * Iterate over every available text tracks on the media element and either:
424
487
  * - if the last manually set text track is found, set that one.
488
+ * - if not, set the most preferred one
425
489
  * - if we still do not find an optimal track, just disable it.
426
490
  */
427
- MediaElementTracksStore.prototype._setPreviouslyLockedTextTrack = function () {
428
- if (this._textTrackLockedOn === undefined) {
429
- return;
430
- }
431
- else if (this._textTrackLockedOn === null) {
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) {
432
494
  disableTextTracks(this._textTracks);
433
495
  return;
434
496
  }
435
- else {
497
+ else if (this._textTrackLockedOn !== undefined) {
436
498
  for (var i = 0; i < this._textTracks.length; i++) {
437
499
  var nativeTrack = this._textTracks[i].nativeTrack;
438
500
  if (nativeTrack === this._textTrackLockedOn) {
@@ -445,21 +507,54 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
445
507
  }
446
508
  }
447
509
  }
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);
448
544
  };
449
545
  /**
450
546
  * Iterate over every available video tracks on the media element and either:
451
547
  * - if the last manually set video track is found, set that one.
548
+ * - if not, set the most preferred one
452
549
  * - if we still do not find an optimal track, let the one chosen by default
453
550
  */
454
- MediaElementTracksStore.prototype._setPreviouslyLockedVideoTrack = function () {
455
- if (this._videoTrackLockedOn === undefined) {
456
- return;
457
- }
458
- else if (this._videoTrackLockedOn === null) {
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) {
459
554
  disableVideoTracks(this._videoTracks);
460
555
  return;
461
556
  }
462
- else {
557
+ else if (this._videoTrackLockedOn !== undefined) {
463
558
  for (var i = 0; i < this._videoTracks.length; i++) {
464
559
  var nativeTrack = this._videoTracks[i].nativeTrack;
465
560
  if (nativeTrack === this._videoTrackLockedOn) {
@@ -468,12 +563,36 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
468
563
  }
469
564
  }
470
565
  }
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
471
590
  };
472
591
  /**
473
592
  * Monitor native tracks add, remove and change callback and trigger the
474
593
  * change events.
475
594
  */
476
- MediaElementTracksStore.prototype._handleNativeTracksCallbacks = function () {
595
+ MediaElementTrackChoiceManager.prototype._handleNativeTracksCallbacks = function () {
477
596
  var _this = this;
478
597
  if (this._nativeAudioTracks !== undefined) {
479
598
  this._nativeAudioTracks.onaddtrack = function () {
@@ -482,9 +601,9 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
482
601
  var newAudioTracks = createAudioTracks(_this._nativeAudioTracks);
483
602
  if (areTrackArraysDifferent(_this._audioTracks, newAudioTracks)) {
484
603
  _this._audioTracks = newAudioTracks;
485
- _this._setPreviouslyLockedAudioTrack();
604
+ _this._setOptimalAudioTrack();
486
605
  _this.trigger("availableAudioTracksChange", _this.getAvailableAudioTracks());
487
- var chosenAudioTrack = _this._getCurrentAudioTrack();
606
+ var chosenAudioTrack = _this._getPrivateChosenAudioTrack();
488
607
  if ((chosenAudioTrack === null || chosenAudioTrack === void 0 ? void 0 : chosenAudioTrack.nativeTrack) !== _this._lastEmittedNativeAudioTrack) {
489
608
  _this.trigger("audioTrackChange", (_a = chosenAudioTrack === null || chosenAudioTrack === void 0 ? void 0 : chosenAudioTrack.track) !== null && _a !== void 0 ? _a : null);
490
609
  _this._lastEmittedNativeAudioTrack = (_b = chosenAudioTrack === null || chosenAudioTrack === void 0 ? void 0 : chosenAudioTrack.nativeTrack) !== null && _b !== void 0 ? _b : null;
@@ -499,7 +618,7 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
499
618
  if (areTrackArraysDifferent(_this._audioTracks, newAudioTracks)) {
500
619
  _this._audioTracks = newAudioTracks;
501
620
  _this.trigger("availableAudioTracksChange", _this.getAvailableAudioTracks());
502
- var chosenAudioTrack = _this._getCurrentAudioTrack();
621
+ var chosenAudioTrack = _this._getPrivateChosenAudioTrack();
503
622
  if ((chosenAudioTrack === null || chosenAudioTrack === void 0 ? void 0 : chosenAudioTrack.nativeTrack) !== _this._lastEmittedNativeAudioTrack) {
504
623
  _this.trigger("audioTrackChange", (_a = chosenAudioTrack === null || chosenAudioTrack === void 0 ? void 0 : chosenAudioTrack.track) !== null && _a !== void 0 ? _a : null);
505
624
  _this._lastEmittedNativeAudioTrack = (_b = chosenAudioTrack === null || chosenAudioTrack === void 0 ? void 0 : chosenAudioTrack.nativeTrack) !== null && _b !== void 0 ? _b : null;
@@ -534,9 +653,9 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
534
653
  var newTextTracks = createTextTracks(_this._nativeTextTracks);
535
654
  if (areTrackArraysDifferent(_this._textTracks, newTextTracks)) {
536
655
  _this._textTracks = newTextTracks;
537
- _this._setPreviouslyLockedTextTrack();
656
+ _this._setOptimalTextTrack();
538
657
  _this.trigger("availableTextTracksChange", _this.getAvailableTextTracks());
539
- var chosenTextTrack = _this._getCurrentTextTrack();
658
+ var chosenTextTrack = _this._getPrivateChosenTextTrack();
540
659
  if ((chosenTextTrack === null || chosenTextTrack === void 0 ? void 0 : chosenTextTrack.nativeTrack) !== _this._lastEmittedNativeTextTrack) {
541
660
  _this.trigger("textTrackChange", (_a = chosenTextTrack === null || chosenTextTrack === void 0 ? void 0 : chosenTextTrack.track) !== null && _a !== void 0 ? _a : null);
542
661
  _this._lastEmittedNativeTextTrack = (_b = chosenTextTrack === null || chosenTextTrack === void 0 ? void 0 : chosenTextTrack.nativeTrack) !== null && _b !== void 0 ? _b : null;
@@ -550,9 +669,9 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
550
669
  var newTextTracks = createTextTracks(_this._nativeTextTracks);
551
670
  if (areTrackArraysDifferent(_this._textTracks, newTextTracks)) {
552
671
  _this._textTracks = newTextTracks;
553
- _this._setPreviouslyLockedTextTrack();
672
+ _this._setOptimalTextTrack();
554
673
  _this.trigger("availableTextTracksChange", _this.getAvailableTextTracks());
555
- var chosenTextTrack = _this._getCurrentTextTrack();
674
+ var chosenTextTrack = _this._getPrivateChosenTextTrack();
556
675
  if ((chosenTextTrack === null || chosenTextTrack === void 0 ? void 0 : chosenTextTrack.nativeTrack) !== _this._lastEmittedNativeTextTrack) {
557
676
  _this.trigger("textTrackChange", (_a = chosenTextTrack === null || chosenTextTrack === void 0 ? void 0 : chosenTextTrack.track) !== null && _a !== void 0 ? _a : null);
558
677
  _this._lastEmittedNativeTextTrack = (_b = chosenTextTrack === null || chosenTextTrack === void 0 ? void 0 : chosenTextTrack.nativeTrack) !== null && _b !== void 0 ? _b : null;
@@ -587,9 +706,9 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
587
706
  var newVideoTracks = createVideoTracks(_this._nativeVideoTracks);
588
707
  if (areTrackArraysDifferent(_this._videoTracks, newVideoTracks)) {
589
708
  _this._videoTracks = newVideoTracks;
590
- _this._setPreviouslyLockedVideoTrack();
709
+ _this._setOptimalVideoTrack();
591
710
  _this.trigger("availableVideoTracksChange", _this.getAvailableVideoTracks());
592
- var chosenVideoTrack = _this._getCurrentVideoTrack();
711
+ var chosenVideoTrack = _this._getPrivateChosenVideoTrack();
593
712
  if ((chosenVideoTrack === null || chosenVideoTrack === void 0 ? void 0 : chosenVideoTrack.nativeTrack) !== _this._lastEmittedNativeVideoTrack) {
594
713
  _this.trigger("videoTrackChange", (_a = chosenVideoTrack === null || chosenVideoTrack === void 0 ? void 0 : chosenVideoTrack.track) !== null && _a !== void 0 ? _a : null);
595
714
  _this._lastEmittedNativeVideoTrack = (_b = chosenVideoTrack === null || chosenVideoTrack === void 0 ? void 0 : chosenVideoTrack.nativeTrack) !== null && _b !== void 0 ? _b : null;
@@ -603,9 +722,9 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
603
722
  var newVideoTracks = createVideoTracks(_this._nativeVideoTracks);
604
723
  if (areTrackArraysDifferent(_this._videoTracks, newVideoTracks)) {
605
724
  _this._videoTracks = newVideoTracks;
606
- _this._setPreviouslyLockedVideoTrack();
725
+ _this._setOptimalVideoTrack();
607
726
  _this.trigger("availableVideoTracksChange", _this.getAvailableVideoTracks());
608
- var chosenVideoTrack = _this._getCurrentVideoTrack();
727
+ var chosenVideoTrack = _this._getPrivateChosenVideoTrack();
609
728
  if ((chosenVideoTrack === null || chosenVideoTrack === void 0 ? void 0 : chosenVideoTrack.nativeTrack) !== _this._lastEmittedNativeVideoTrack) {
610
729
  _this.trigger("videoTrackChange", (_a = chosenVideoTrack === null || chosenVideoTrack === void 0 ? void 0 : chosenVideoTrack.track) !== null && _a !== void 0 ? _a : null);
611
730
  _this._lastEmittedNativeVideoTrack = (_b = chosenVideoTrack === null || chosenVideoTrack === void 0 ? void 0 : chosenVideoTrack.nativeTrack) !== null && _b !== void 0 ? _b : null;
@@ -639,15 +758,15 @@ var MediaElementTracksStore = /** @class */ (function (_super) {
639
758
  * `this._audioTracks` array.
640
759
  * @param {number} index}
641
760
  */
642
- MediaElementTracksStore.prototype._enableAudioTrackFromIndex = function (index) {
761
+ MediaElementTrackChoiceManager.prototype._enableAudioTrackFromIndex = function (index) {
643
762
  enableAudioTrack(this._audioTracks.map(function (_a) {
644
763
  var nativeTrack = _a.nativeTrack;
645
764
  return nativeTrack;
646
765
  }), index);
647
766
  };
648
- return MediaElementTracksStore;
767
+ return MediaElementTrackChoiceManager;
649
768
  }(EventEmitter));
650
- export default MediaElementTracksStore;
769
+ export default MediaElementTrackChoiceManager;
651
770
  /**
652
771
  * Disable all text track elements in the given array from showing.
653
772
  * @param {Array.<Object>} textTracks