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
@@ -1,932 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- var __extends = (this && this.__extends) || (function () {
17
- var extendStatics = function (d, b) {
18
- extendStatics = Object.setPrototypeOf ||
19
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
20
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
21
- return extendStatics(d, b);
22
- };
23
- return function (d, b) {
24
- if (typeof b !== "function" && b !== null)
25
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
26
- extendStatics(d, b);
27
- function __() { this.constructor = d; }
28
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
29
- };
30
- })();
31
- /**
32
- * This file is used to abstract the notion of text, audio and video tracks
33
- * switching for an easier API management.
34
- */
35
- import config from "../../../config";
36
- import log from "../../../log";
37
- import arrayFind from "../../../utils/array_find";
38
- import assert from "../../../utils/assert";
39
- import EventEmitter from "../../../utils/event_emitter";
40
- import objectAssign from "../../../utils/object_assign";
41
- import SharedReference from "../../../utils/reference";
42
- import TrackDispatcher from "./track_dispatcher";
43
- /**
44
- * Class helping with the management of the audio, video and text tracks and
45
- * qualities.
46
- *
47
- * The `TracksStore` allows to choose a track and qualities for different types
48
- * of media through a simpler API.
49
- *
50
- * @class TracksStore
51
- */
52
- var TracksStore = /** @class */ (function (_super) {
53
- __extends(TracksStore, _super);
54
- function TracksStore(args) {
55
- var _a;
56
- var _this = _super.call(this) || this;
57
- _this._storedPeriodInfo = [];
58
- _this._isDisposed = false;
59
- _this._cachedPeriodInfo = new WeakMap();
60
- _this._isTrickModeTrackEnabled = args.preferTrickModeTracks;
61
- _this._defaultAudioTrackSwitchingMode =
62
- (_a = args.defaultAudioTrackSwitchingMode) !== null && _a !== void 0 ? _a : config.getCurrent().DEFAULT_AUDIO_TRACK_SWITCHING_MODE;
63
- return _this;
64
- }
65
- /**
66
- * Return Array of Period information, to allow an outside application to
67
- * modify the track of any Period.
68
- * @returns {Array.<Object>}
69
- */
70
- TracksStore.prototype.getAvailablePeriods = function () {
71
- // Note: We voluntarly do not include any Period from `_cachedPeriodInfo` here;
72
- // because we do not want to allow the user switching tracks for older
73
- // Periods.
74
- return this._storedPeriodInfo.map(function (p) { return toExposedPeriod(p.period); });
75
- };
76
- /**
77
- * Update the list of Periods handled by the TracksStore and make a
78
- * track choice decision for each of them.
79
- * @param {Object} manifest - The new Manifest object
80
- */
81
- TracksStore.prototype.updatePeriodList = function (manifest) {
82
- var _a;
83
- var _this = this;
84
- var _b, _c, _d;
85
- var DEFAULT_VIDEO_TRACK_SWITCHING_MODE = config.getCurrent().DEFAULT_VIDEO_TRACK_SWITCHING_MODE;
86
- var periods = manifest.periods;
87
- // We assume that they are always sorted chronologically
88
- // In dev mode, perform a runtime check that this is the case
89
- if (0 /* __ENVIRONMENT__.CURRENT_ENV */ === 1 /* __ENVIRONMENT__.DEV */) {
90
- for (var i = 1; i < periods.length; i++) {
91
- assert(periods[i - 1].start <= periods[i].start);
92
- }
93
- }
94
- /** Periods which have just been added. */
95
- var addedPeriods = [];
96
- var newPListIdx = 0;
97
- var _loop_1 = function (i) {
98
- var oldPeriod = this_1._storedPeriodInfo[i].period;
99
- var newPeriod = periods[newPListIdx];
100
- if (newPeriod === undefined) {
101
- // We reached the end of the new Periods, remove remaining old Periods
102
- for (var j = this_1._storedPeriodInfo.length - 1; j >= i; j--) {
103
- this_1._storedPeriodInfo[j].inManifest = false;
104
- if (isPeriodItemRemovable(this_1._storedPeriodInfo[j])) {
105
- this_1._removePeriodObject(j);
106
- }
107
- }
108
- }
109
- else if (oldPeriod === newPeriod) {
110
- newPListIdx++;
111
- var curWantedTextTrack_1 = this_1._storedPeriodInfo[i].text.storedSettings;
112
- if (curWantedTextTrack_1 !== null) {
113
- var textAdaptations = newPeriod.getSupportedAdaptations("text");
114
- var stillHere = textAdaptations
115
- .some(function (a) { return a.id === curWantedTextTrack_1.adaptation.id; });
116
- if (!stillHere) {
117
- log.warn("TracksStore: Chosen text Adaptation not available anymore");
118
- var periodInfo = this_1._storedPeriodInfo[i];
119
- periodInfo.text.storedSettings = null;
120
- this_1.trigger("trackUpdate", { period: toExposedPeriod(newPeriod),
121
- trackType: "text",
122
- reason: "missing" });
123
- // The previous event trigger could have had side-effects, so we
124
- // re-check if we're still mostly in the same state
125
- if (this_1._isDisposed) {
126
- return { value: void 0 };
127
- }
128
- var periodItem = getPeriodItem(this_1._storedPeriodInfo, periodInfo.period.id);
129
- if (periodItem !== undefined && periodItem.text.storedSettings === null) {
130
- (_b = periodItem.text.dispatcher) === null || _b === void 0 ? void 0 : _b.updateTrack(null);
131
- }
132
- }
133
- }
134
- var curWantedVideoTrack_1 = this_1._storedPeriodInfo[i].video.storedSettings;
135
- if (curWantedVideoTrack_1 !== null) {
136
- var videoAdaptations = newPeriod.getSupportedAdaptations("video");
137
- var stillHere = videoAdaptations
138
- .some(function (a) { return a.id === curWantedVideoTrack_1.adaptation.id; });
139
- if (!stillHere) {
140
- log.warn("TracksStore: Chosen video Adaptation not available anymore");
141
- var periodItem = this_1._storedPeriodInfo[i];
142
- var storedSettings = void 0;
143
- if (videoAdaptations.length === 0) {
144
- storedSettings = null;
145
- }
146
- else {
147
- var adaptationBase = videoAdaptations[0];
148
- var adaptation = getRightVideoTrack(adaptationBase, this_1._isTrickModeTrackEnabled);
149
- var lockedRepresentations = new SharedReference(null);
150
- storedSettings = { adaptationBase: adaptationBase, adaptation: adaptation, switchingMode: DEFAULT_VIDEO_TRACK_SWITCHING_MODE, lockedRepresentations: lockedRepresentations };
151
- }
152
- periodItem.video.storedSettings = storedSettings;
153
- this_1.trigger("trackUpdate", { period: toExposedPeriod(newPeriod),
154
- trackType: "video",
155
- reason: "missing" });
156
- // The previous event trigger could have had side-effects, so we
157
- // re-check if we're still mostly in the same state
158
- if (this_1._isDisposed) {
159
- return { value: void 0 };
160
- }
161
- var newPeriodItem = getPeriodItem(this_1._storedPeriodInfo, periodItem.period.id);
162
- if (newPeriodItem !== undefined &&
163
- newPeriodItem.video.storedSettings === storedSettings) {
164
- (_c = newPeriodItem.video.dispatcher) === null || _c === void 0 ? void 0 : _c.updateTrack(storedSettings);
165
- }
166
- }
167
- }
168
- var curWantedAudioTrack_1 = this_1._storedPeriodInfo[i].audio.storedSettings;
169
- if (curWantedAudioTrack_1 !== null) {
170
- var audioAdaptations = newPeriod.getSupportedAdaptations("audio");
171
- var stillHere = audioAdaptations
172
- .some(function (a) { return a.id === curWantedAudioTrack_1.adaptation.id; });
173
- if (!stillHere) {
174
- log.warn("TracksStore: Chosen audio Adaptation not available anymore");
175
- var periodItem = this_1._storedPeriodInfo[i];
176
- var storedSettings = audioAdaptations.length === 0 ?
177
- null :
178
- { adaptation: audioAdaptations[0],
179
- switchingMode: this_1._defaultAudioTrackSwitchingMode,
180
- lockedRepresentations: new SharedReference(null) };
181
- periodItem.audio.storedSettings = storedSettings;
182
- this_1.trigger("trackUpdate", { period: toExposedPeriod(newPeriod),
183
- trackType: "audio",
184
- reason: "missing" });
185
- // The previous event trigger could have had side-effects, so we
186
- // re-check if we're still mostly in the same state
187
- if (this_1._isDisposed) {
188
- return { value: void 0 };
189
- }
190
- var newPeriodItem = getPeriodItem(this_1._storedPeriodInfo, periodItem.period.id);
191
- if (newPeriodItem !== undefined &&
192
- newPeriodItem.audio.storedSettings === storedSettings) {
193
- (_d = newPeriodItem.audio.dispatcher) === null || _d === void 0 ? void 0 : _d.updateTrack(storedSettings);
194
- }
195
- }
196
- }
197
- // (If not, what do?)
198
- }
199
- else if (oldPeriod.start <= newPeriod.start) {
200
- // This old Period does not exist anymore.
201
- this_1._storedPeriodInfo[i].inManifest = false;
202
- if (isPeriodItemRemovable(this_1._storedPeriodInfo[i])) {
203
- this_1._removePeriodObject(i);
204
- i--;
205
- }
206
- }
207
- else {
208
- var newPeriodInfo = generatePeriodInfo(newPeriod, true, this_1._isTrickModeTrackEnabled, this_1._defaultAudioTrackSwitchingMode);
209
- // oldPeriod.start > newPeriod.start: insert newPeriod before
210
- this_1._storedPeriodInfo.splice(i, 0, newPeriodInfo);
211
- addedPeriods.push(newPeriodInfo);
212
- newPListIdx++;
213
- // Note: we don't increment `i` on purpose here, as we want to check the
214
- // same oldPeriod at the next loop iteration
215
- }
216
- out_i_1 = i;
217
- };
218
- var this_1 = this, out_i_1;
219
- for (var i = 0; i < this._storedPeriodInfo.length; i++) {
220
- var state_1 = _loop_1(i);
221
- i = out_i_1;
222
- if (typeof state_1 === "object")
223
- return state_1.value;
224
- }
225
- if (newPListIdx < periods.length) {
226
- // Add further new Period
227
- var periodsToAdd = periods.slice(newPListIdx)
228
- .map(function (p) { return generatePeriodInfo(p, true, _this._isTrickModeTrackEnabled, _this._defaultAudioTrackSwitchingMode); });
229
- (_a = this._storedPeriodInfo).push.apply(_a, periodsToAdd);
230
- addedPeriods.push.apply(addedPeriods, periodsToAdd);
231
- }
232
- var periodsAdded = addedPeriods.reduce(function (acc, p) {
233
- if (!p.isRemoved) {
234
- acc.push({ id: p.period.id, start: p.period.start, end: p.period.end });
235
- }
236
- return acc;
237
- }, []);
238
- if (periodsAdded.length > 0) {
239
- this.trigger("newAvailablePeriods", periodsAdded);
240
- }
241
- };
242
- /**
243
- * Add shared reference to choose Adaptation for new "audio", "video" or
244
- * "text" Period.
245
- *
246
- * Note that such reference has to be removed through `removeTrackReference`
247
- * so ressources can be freed.
248
- * @param {string} bufferType - The concerned buffer type
249
- * @param {Object} manifest
250
- * @param {Period} period - The concerned Period.
251
- * @param {Object} adaptationRef - A reference through which
252
- * the choice will be given.
253
- */
254
- TracksStore.prototype.addTrackReference = function (bufferType, manifest, period, adaptationRef) {
255
- var _this = this;
256
- var periodObj = getPeriodItem(this._storedPeriodInfo, period.id);
257
- if (periodObj === undefined) { // The Period has not yet been added.
258
- periodObj = this._addPeriod(period);
259
- this.trigger("newAvailablePeriods", [{ id: period.id,
260
- start: period.start,
261
- end: period.end }]);
262
- }
263
- if (periodObj[bufferType].dispatcher !== null) {
264
- log.error("TracksStore: Subject already added for ".concat(bufferType, " ") +
265
- "and Period ".concat(period.start));
266
- return;
267
- }
268
- var trackSetting = periodObj[bufferType].storedSettings;
269
- var dispatcher = new TrackDispatcher(manifest, adaptationRef, trackSetting);
270
- periodObj[bufferType].dispatcher = dispatcher;
271
- dispatcher.addEventListener("noPlayableLockedRepresentation", function () {
272
- trackSetting === null || trackSetting === void 0 ? void 0 : trackSetting.lockedRepresentations.setValue(null);
273
- _this.trigger("brokenRepresentationsLock", { period: { id: period.id,
274
- start: period.start,
275
- end: period.end },
276
- trackType: bufferType });
277
- });
278
- };
279
- /**
280
- * Remove shared reference to choose an "audio", "video" or "text" Adaptation
281
- * for a Period.
282
- * @param {string} bufferType - The concerned buffer type
283
- * @param {Period} period - The concerned Period.
284
- */
285
- TracksStore.prototype.removeTrackReference = function (bufferType, period) {
286
- var periodIndex = findPeriodIndex(this._storedPeriodInfo, period);
287
- if (periodIndex === undefined) {
288
- log.warn("TracksStore: ".concat(bufferType, " not found for period"), period.start);
289
- return;
290
- }
291
- var periodObj = this._storedPeriodInfo[periodIndex];
292
- var choiceItem = periodObj[bufferType];
293
- if ((choiceItem === null || choiceItem === void 0 ? void 0 : choiceItem.dispatcher) === null) {
294
- log.warn("TracksStore: TrackDispatcher already removed for ".concat(bufferType, " ") +
295
- "and Period ".concat(period.start));
296
- return;
297
- }
298
- choiceItem.dispatcher.dispose();
299
- choiceItem.dispatcher = null;
300
- if (isPeriodItemRemovable(periodObj)) {
301
- this._removePeriodObject(periodIndex);
302
- }
303
- };
304
- /**
305
- * Allows to recuperate a "Period Object" - used in get/set methods of the
306
- * `TracksStore` - by giving the Period itself.
307
- *
308
- * This method should be preferred when possible over `getPeriodObjectFromId`
309
- * because it is able to fallback on an internal cache in case the
310
- * corresponding Period is not stored anymore.
311
- * This for example could happen when a Period has been removed from the
312
- * Manifest yet may still be needed (e.g. because its linked segments might
313
- * still live in the buffers).
314
- *
315
- * Note however that this cache-retrieval logic is based on a Map whose key
316
- * is the Period's JavaScript reference. As such, the cache won't be used if
317
- * `Period` corresponds to a copy of the original `Period` object.
318
- *
319
- * @param {Object} period
320
- * @returns {Object}
321
- */
322
- TracksStore.prototype.getPeriodObjectFromPeriod = function (period) {
323
- var periodObj = getPeriodItem(this._storedPeriodInfo, period.id);
324
- if (periodObj === undefined && period !== undefined) {
325
- return this._cachedPeriodInfo.get(period);
326
- }
327
- return periodObj;
328
- };
329
- /**
330
- * Allows to recuperate a "Period Object" - used in get/set methods of the
331
- * `TracksStore` - by giving the Period's id.
332
- *
333
- * Note that unlike `getPeriodObjectFromPeriod` this method is only going to look
334
- * into currently stored Period and as such old Periods not in the Manifest
335
- * anymore might not be retrievable.
336
- * If you want to retrieve Period objects linked to such Period, you might
337
- * prefer to use `getPeriodObjectFromPeriod` (which necessitates the original
338
- * Period object).
339
- *
340
- * @param {string} periodId - The concerned Period's id
341
- * @returns {Object}
342
- */
343
- TracksStore.prototype.getPeriodObjectFromId = function (periodId) {
344
- return getPeriodItem(this._storedPeriodInfo, periodId);
345
- };
346
- TracksStore.prototype.disableVideoTrickModeTracks = function () {
347
- if (!this._isTrickModeTrackEnabled) {
348
- return;
349
- }
350
- this._isTrickModeTrackEnabled = false;
351
- this._resetVideoTrackChoices("trickmode-disabled");
352
- };
353
- TracksStore.prototype.enableVideoTrickModeTracks = function () {
354
- if (this._isTrickModeTrackEnabled) {
355
- return;
356
- }
357
- this._isTrickModeTrackEnabled = true;
358
- this._resetVideoTrackChoices("trickmode-enabled");
359
- };
360
- /**
361
- * Reset the TracksStore's Period objects:
362
- * - All Period which are not in the manifest currently will be removed.
363
- * - All References used to communicate the wanted track will be removed.
364
- *
365
- * You might want to call this API when restarting playback.
366
- */
367
- TracksStore.prototype.resetPeriodObjects = function () {
368
- var _a, _b, _c;
369
- for (var i = this._storedPeriodInfo.length - 1; i >= 0; i--) {
370
- var storedObj = this._storedPeriodInfo[i];
371
- (_a = storedObj.audio.dispatcher) === null || _a === void 0 ? void 0 : _a.dispose();
372
- storedObj.audio.dispatcher = null;
373
- (_b = storedObj.video.dispatcher) === null || _b === void 0 ? void 0 : _b.dispose();
374
- storedObj.video.dispatcher = null;
375
- (_c = storedObj.text.dispatcher) === null || _c === void 0 ? void 0 : _c.dispose();
376
- storedObj.text.dispatcher = null;
377
- if (!storedObj.inManifest) {
378
- this._removePeriodObject(i);
379
- }
380
- }
381
- };
382
- /**
383
- * @returns {boolean}
384
- */
385
- TracksStore.prototype.isTrickModeEnabled = function () {
386
- return this._isTrickModeTrackEnabled;
387
- };
388
- /**
389
- * Set audio track based on the ID of its Adaptation for a given added Period.
390
- * @param {Object} periodObj - The concerned Period's object.
391
- * @param {string} wantedId - adaptation id of the wanted track.
392
- * @param {string} switchingMode - Behavior when replacing the track by
393
- * another.
394
- * @param {Object|null} reprsToLock - Audio Representations that should be
395
- * locked after switchingMode to that track.
396
- * `null` if no Audio Representation should be locked.
397
- */
398
- TracksStore.prototype.setAudioTrack = function (periodObj, wantedId, switchingMode, reprsToLock) {
399
- return this._setAudioOrTextTrack("audio", periodObj, wantedId, switchingMode !== null && switchingMode !== void 0 ? switchingMode : this._defaultAudioTrackSwitchingMode, reprsToLock);
400
- };
401
- /**
402
- * Set text track based on the ID of its Adaptation for a given added Period.
403
- * @param {Object} periodObj - The concerned Period's object.
404
- * @param {string} wantedId - adaptation id of the wanted track.
405
- */
406
- TracksStore.prototype.setTextTrack = function (periodObj, wantedId) {
407
- return this._setAudioOrTextTrack("text", periodObj, wantedId, "direct", null);
408
- };
409
- /**
410
- * Set audio track based on the ID of its Adaptation for a given added Period.
411
- * @param {Object} periodObj - The concerned Period's object.
412
- * @param {string} wantedId - adaptation id of the wanted track.
413
- * @param {string} switchingMode - Behavior when replacing the track by
414
- * another.
415
- * @param {Array.<string>|null} reprsToLock - Audio Representations that should be
416
- * locked after switchingMode to that track.
417
- * `null` if no Audio Representation should be locked.
418
- */
419
- TracksStore.prototype._setAudioOrTextTrack = function (bufferType, periodObj, wantedId, switchingMode, reprsToLock) {
420
- var _a;
421
- var period = periodObj.period;
422
- var wantedAdaptation = arrayFind(period.getSupportedAdaptations(bufferType), function (_a) {
423
- var id = _a.id;
424
- return id === wantedId;
425
- });
426
- if (wantedAdaptation === undefined) {
427
- throw new Error("Wanted ".concat(bufferType, " track not found."));
428
- }
429
- var typeInfo = periodObj[bufferType];
430
- var lockedRepresentations;
431
- if (reprsToLock === null) {
432
- lockedRepresentations = new SharedReference(null);
433
- }
434
- else {
435
- var representationsToLock = this._getRepresentationsToLock(wantedAdaptation, reprsToLock);
436
- var repSwitchingMode = bufferType === "audio" ?
437
- this._defaultAudioTrackSwitchingMode :
438
- "direct";
439
- lockedRepresentations = new SharedReference({
440
- representations: representationsToLock,
441
- switchingMode: repSwitchingMode,
442
- });
443
- }
444
- var storedSettings = { adaptation: wantedAdaptation, switchingMode: switchingMode, lockedRepresentations: lockedRepresentations };
445
- typeInfo.storedSettings = storedSettings;
446
- this.trigger("trackUpdate", { period: toExposedPeriod(period),
447
- trackType: bufferType,
448
- reason: "manual" });
449
- // The previous event trigger could have had side-effects, so we
450
- // re-check if we're still mostly in the same state
451
- if (this._isDisposed) {
452
- return; // Someone disposed the `TracksStore` on the previous side-effect
453
- }
454
- var newPeriodItem = getPeriodItem(this._storedPeriodInfo, period.id);
455
- if (newPeriodItem !== undefined &&
456
- newPeriodItem[bufferType].storedSettings === storedSettings) {
457
- (_a = newPeriodItem[bufferType].dispatcher) === null || _a === void 0 ? void 0 : _a.updateTrack(storedSettings);
458
- }
459
- };
460
- /**
461
- * Set video track based on the ID of its Adaptation for a given added Period.
462
- * @param {Object} periodObj - The concerned Period's object.
463
- * @param {string} wantedId - adaptation id of the wanted track.
464
- * @param {string} switchingMode - Behavior when replacing the track by
465
- * another.
466
- * @param {Array.<string>|null} reprsToLock - Video Representations that should be
467
- * locked after switchingMode to that track.
468
- * `null` if no Video Representation should be locked.
469
- */
470
- TracksStore.prototype.setVideoTrack = function (periodObj, wantedId, switchingMode, reprsToLock) {
471
- var _a;
472
- var period = periodObj.period;
473
- var wantedAdaptation = arrayFind(period.getSupportedAdaptations("video"), function (_a) {
474
- var id = _a.id;
475
- return id === wantedId;
476
- });
477
- if (wantedAdaptation === undefined) {
478
- throw new Error("Wanted video track not found.");
479
- }
480
- var DEFAULT_VIDEO_TRACK_SWITCHING_MODE = config.getCurrent().DEFAULT_VIDEO_TRACK_SWITCHING_MODE;
481
- var typeInfo = periodObj.video;
482
- var newAdaptation = getRightVideoTrack(wantedAdaptation, this._isTrickModeTrackEnabled);
483
- var lockedRepresentations;
484
- if (reprsToLock === null) {
485
- lockedRepresentations = new SharedReference(null);
486
- }
487
- else {
488
- var representationsToLock = this._getRepresentationsToLock(wantedAdaptation, reprsToLock);
489
- var repSwitchingMode = DEFAULT_VIDEO_TRACK_SWITCHING_MODE;
490
- lockedRepresentations = new SharedReference({
491
- representations: representationsToLock,
492
- switchingMode: repSwitchingMode,
493
- });
494
- }
495
- var storedSettings = { adaptationBase: wantedAdaptation,
496
- switchingMode: switchingMode !== null && switchingMode !== void 0 ? switchingMode : DEFAULT_VIDEO_TRACK_SWITCHING_MODE,
497
- adaptation: newAdaptation, lockedRepresentations: lockedRepresentations };
498
- typeInfo.storedSettings = storedSettings;
499
- this.trigger("trackUpdate", { period: toExposedPeriod(period),
500
- trackType: "video",
501
- reason: "manual" });
502
- // The previous event trigger could have had side-effects, so we
503
- // re-check if we're still mostly in the same state
504
- if (this._isDisposed) {
505
- return; // Someone disposed the `TracksStore` on the previous side-effect
506
- }
507
- var newPeriodItem = getPeriodItem(this._storedPeriodInfo, period.id);
508
- if (newPeriodItem !== undefined &&
509
- newPeriodItem.video.storedSettings === storedSettings) {
510
- (_a = newPeriodItem.video.dispatcher) === null || _a === void 0 ? void 0 : _a.updateTrack(storedSettings);
511
- }
512
- };
513
- /**
514
- * Disable the current text track for a given period.
515
- *
516
- * @param {Object} periodObj - The concerned Period's object
517
- * @param {string} bufferType - The type of track to disable.
518
- * @throws Error - Throws if the period given has not been added
519
- */
520
- TracksStore.prototype.disableTrack = function (periodObj, bufferType) {
521
- var _a, _b;
522
- var trackInfo = periodObj[bufferType];
523
- if (trackInfo.storedSettings === null) {
524
- return;
525
- }
526
- if (bufferType !== "text") {
527
- // Potentially unneeded, but let's be clean
528
- (_a = periodObj[bufferType].storedSettings) === null || _a === void 0 ? void 0 : _a.lockedRepresentations.finish();
529
- }
530
- trackInfo.storedSettings = null;
531
- this.trigger("trackUpdate", { period: toExposedPeriod(periodObj.period),
532
- trackType: bufferType,
533
- reason: "manual" });
534
- // The previous event trigger could have had side-effects, so we
535
- // re-check if we're still mostly in the same state
536
- if (this._isDisposed) {
537
- return; // Someone disposed the `TracksStore` on the previous side-effect
538
- }
539
- var newPeriodItem = getPeriodItem(this._storedPeriodInfo, periodObj.period.id);
540
- if (newPeriodItem !== undefined &&
541
- newPeriodItem[bufferType].storedSettings === null) {
542
- (_b = newPeriodItem[bufferType].dispatcher) === null || _b === void 0 ? void 0 : _b.updateTrack(null);
543
- }
544
- };
545
- /**
546
- * Returns an object describing the chosen audio track for the given audio
547
- * Period.
548
- *
549
- * Returns `null` is the the current audio track is disabled or not
550
- * set yet.a pas bcp de marge de manoeuvre j'ai l'impression
551
- *
552
- * Returns `undefined` if the given Period's id is not currently found in the
553
- * `TracksStore`. The cause being most probably that the corresponding
554
- * Period is not available anymore.
555
- * If you're in that case and if still have the corresponding JavaScript
556
- * reference to the wanted Period, you can call `getOldAudioTrack` with it. It
557
- * will try retrieving the choice it made from its cache.
558
- * @param {Object} periodObj - The concerned Period's object
559
- * @returns {Object|null|undefined} - The audio track chosen for this Period.
560
- * `null` if audio tracks were disabled and `undefined` if the Period is not
561
- * known.
562
- */
563
- TracksStore.prototype.getChosenAudioTrack = function (periodObj) {
564
- return periodObj.audio.storedSettings === null ?
565
- null :
566
- periodObj.audio.storedSettings.adaptation.toAudioTrack(true);
567
- };
568
- /**
569
- * Returns an object describing the chosen text track for the given text
570
- * Period.
571
- *
572
- * Returns null is the the current text track is disabled or not
573
- * set yet.
574
- *
575
- * @param {Object} periodObj - The concerned Period's object
576
- * @returns {Object|null} - The text track chosen for this Period
577
- */
578
- TracksStore.prototype.getChosenTextTrack = function (periodObj) {
579
- return periodObj.text.storedSettings === null ?
580
- null :
581
- periodObj.text.storedSettings.adaptation.toTextTrack();
582
- };
583
- /**
584
- * Returns an object describing the chosen video track for the given video
585
- * Period.
586
- *
587
- * Returns null is the the current video track is disabled or not
588
- * set yet.
589
- *
590
- * @param {Object} periodObj - The concerned Period's object
591
- * @returns {Object|null} - The video track chosen for this Period
592
- */
593
- TracksStore.prototype.getChosenVideoTrack = function (periodObj) {
594
- if (periodObj.video.storedSettings === null) {
595
- return null;
596
- }
597
- return periodObj.video.storedSettings.adaptation.toVideoTrack(true);
598
- };
599
- /**
600
- * Returns all available audio tracks for a given Period, as an array of
601
- * objects.
602
- *
603
- * Returns `undefined` if the given Period's id is not known.
604
- *
605
- * @param {Object} periodObj - The concerned Period's object
606
- * @returns {Array.<Object>}
607
- */
608
- TracksStore.prototype.getAvailableAudioTracks = function (periodObj) {
609
- var storedSettings = periodObj.audio.storedSettings;
610
- var currentId = storedSettings !== null ?
611
- storedSettings.adaptation.id :
612
- null;
613
- return periodObj.period.getSupportedAdaptations("audio")
614
- .map(function (adaptation) {
615
- var active = currentId === null ? false :
616
- currentId === adaptation.id;
617
- return objectAssign(adaptation.toAudioTrack(true), { active: active });
618
- });
619
- };
620
- /**
621
- * Returns all available text tracks for a given Period, as an array of
622
- * objects.
623
- *
624
- * Returns `undefined` if the given Period's id is not known.
625
- *
626
- * @param {Object} periodObj - The concerned Period's object
627
- * @returns {Array.<Object>}
628
- */
629
- TracksStore.prototype.getAvailableTextTracks = function (periodObj) {
630
- var storedSettings = periodObj.text.storedSettings;
631
- var currentId = storedSettings !== null ?
632
- storedSettings.adaptation.id :
633
- null;
634
- return periodObj.period.getSupportedAdaptations("text")
635
- .map(function (adaptation) {
636
- var active = currentId === null ? false :
637
- currentId === adaptation.id;
638
- return objectAssign(adaptation.toTextTrack(), { active: active });
639
- });
640
- };
641
- /**
642
- * Returns all available video tracks for a given Period, as an array of
643
- * objects.
644
- *
645
- * Returns `undefined` if the given Period's id is not known.
646
- *
647
- * @param {Object} periodObj - The concerned Period's object
648
- * @returns {Array.<Object>}
649
- */
650
- TracksStore.prototype.getAvailableVideoTracks = function (periodObj) {
651
- var storedSettings = periodObj.video.storedSettings;
652
- var currentId = storedSettings === null ?
653
- undefined :
654
- storedSettings.adaptation.id;
655
- return periodObj.period.getSupportedAdaptations("video")
656
- .map(function (adaptation) {
657
- var active = currentId === null ? false :
658
- currentId === adaptation.id;
659
- var track = adaptation.toVideoTrack(true);
660
- var trickModeTracks = track.trickModeTracks !== undefined ?
661
- track.trickModeTracks.map(function (trickModeAdaptation) {
662
- var isActive = currentId === null ? false :
663
- currentId === trickModeAdaptation.id;
664
- return objectAssign(trickModeAdaptation, { active: isActive });
665
- }) :
666
- [];
667
- var availableTrack = objectAssign(track, { active: active });
668
- if (trickModeTracks !== undefined) {
669
- availableTrack.trickModeTracks = trickModeTracks;
670
- }
671
- return availableTrack;
672
- });
673
- };
674
- TracksStore.prototype.getLockedAudioRepresentations = function (periodObj) {
675
- var storedSettings = periodObj.audio.storedSettings;
676
- if (storedSettings === null) {
677
- return null;
678
- }
679
- var lastLockedSettings = storedSettings.lockedRepresentations.getValue();
680
- return lastLockedSettings === null ?
681
- null :
682
- lastLockedSettings.representations.map(function (r) { return r.id; });
683
- };
684
- TracksStore.prototype.getLockedVideoRepresentations = function (periodObj) {
685
- var storedSettings = periodObj.video.storedSettings;
686
- if (storedSettings === null) {
687
- return null;
688
- }
689
- var lastLockedSettings = storedSettings.lockedRepresentations.getValue();
690
- return lastLockedSettings === null ?
691
- null :
692
- lastLockedSettings.representations.map(function (r) { return r.id; });
693
- };
694
- TracksStore.prototype.lockAudioRepresentations = function (periodObj, lockSettings) {
695
- var _a;
696
- var storedSettings = periodObj.audio.storedSettings;
697
- if (storedSettings === null) {
698
- return;
699
- }
700
- var DEFAULT_AUDIO_REPRESENTATIONS_SWITCHING_MODE = config.getCurrent().DEFAULT_AUDIO_REPRESENTATIONS_SWITCHING_MODE;
701
- var filtered = this._getRepresentationsToLock(storedSettings.adaptation, lockSettings.representations);
702
- var switchingMode = (_a = lockSettings.switchingMode) !== null && _a !== void 0 ? _a : DEFAULT_AUDIO_REPRESENTATIONS_SWITCHING_MODE;
703
- storedSettings.lockedRepresentations.setValue({ representations: filtered, switchingMode: switchingMode });
704
- };
705
- TracksStore.prototype.lockVideoRepresentations = function (periodObj, lockSettings) {
706
- var _a;
707
- var storedSettings = periodObj.video.storedSettings;
708
- if (storedSettings === null) {
709
- return;
710
- }
711
- var DEFAULT_VIDEO_REPRESENTATIONS_SWITCHING_MODE = config.getCurrent().DEFAULT_VIDEO_REPRESENTATIONS_SWITCHING_MODE;
712
- var filtered = this._getRepresentationsToLock(storedSettings.adaptation, lockSettings.representations);
713
- var switchingMode = (_a = lockSettings.switchingMode) !== null && _a !== void 0 ? _a : DEFAULT_VIDEO_REPRESENTATIONS_SWITCHING_MODE;
714
- storedSettings.lockedRepresentations.setValue({ representations: filtered, switchingMode: switchingMode });
715
- };
716
- TracksStore.prototype.unlockAudioRepresentations = function (periodObj) {
717
- var storedSettings = periodObj.audio.storedSettings;
718
- if (storedSettings === null ||
719
- storedSettings.lockedRepresentations.getValue() === null) {
720
- return;
721
- }
722
- storedSettings.lockedRepresentations.setValue(null);
723
- };
724
- TracksStore.prototype.unlockVideoRepresentations = function (periodObj) {
725
- var storedSettings = periodObj.video.storedSettings;
726
- if (storedSettings === null ||
727
- storedSettings.lockedRepresentations.getValue() === null) {
728
- return;
729
- }
730
- storedSettings.lockedRepresentations.setValue(null);
731
- };
732
- TracksStore.prototype.dispose = function () {
733
- this._isDisposed = true;
734
- while (true) {
735
- var lastPeriod = this._storedPeriodInfo.pop();
736
- if (lastPeriod === undefined) {
737
- return;
738
- }
739
- lastPeriod.isRemoved = true;
740
- }
741
- };
742
- /**
743
- * @param {Period} period
744
- * @returns {Object}
745
- */
746
- TracksStore.prototype._addPeriod = function (period) {
747
- var periodObj = generatePeriodInfo(period, false, this._isTrickModeTrackEnabled, this._defaultAudioTrackSwitchingMode);
748
- for (var i = 0; i < this._storedPeriodInfo.length; i++) {
749
- if (this._storedPeriodInfo[i].period.start > period.start) {
750
- this._storedPeriodInfo.splice(i, 0, periodObj);
751
- return periodObj;
752
- }
753
- }
754
- this._storedPeriodInfo.push(periodObj);
755
- return periodObj;
756
- };
757
- TracksStore.prototype._resetVideoTrackChoices = function (reason) {
758
- var _a;
759
- for (var i = 0; i < this._storedPeriodInfo.length; i++) {
760
- var periodObj = this._storedPeriodInfo[i];
761
- if (periodObj.video.storedSettings !== null) {
762
- var chosenBaseTrack = periodObj.video.storedSettings.adaptationBase;
763
- if (chosenBaseTrack !== null) {
764
- var chosenTrack = getRightVideoTrack(chosenBaseTrack, this._isTrickModeTrackEnabled);
765
- periodObj.video.storedSettings.adaptationBase = chosenBaseTrack;
766
- periodObj.video.storedSettings.adaptation = chosenTrack;
767
- }
768
- }
769
- }
770
- // Clone the current Period list to not be influenced if Periods are removed
771
- // or added while the loop is running.
772
- var sliced = this._storedPeriodInfo.slice();
773
- for (var i = 0; i < sliced.length; i++) {
774
- var period = sliced[i].period;
775
- var videoItem = sliced[i].video;
776
- var storedSettings = videoItem.storedSettings;
777
- this.trigger("trackUpdate", { period: toExposedPeriod(period),
778
- trackType: "video", reason: reason });
779
- // The previous event trigger could have had side-effects, so we
780
- // re-check if we're still mostly in the same state
781
- if (this._isDisposed) {
782
- return; // Someone disposed the `TracksStore` on the previous side-effect
783
- }
784
- var newPeriodItem = getPeriodItem(this._storedPeriodInfo, period.id);
785
- if (newPeriodItem !== undefined &&
786
- newPeriodItem.video.storedSettings === storedSettings) {
787
- (_a = newPeriodItem.video.dispatcher) === null || _a === void 0 ? void 0 : _a.updateTrack(storedSettings);
788
- }
789
- }
790
- };
791
- TracksStore.prototype._removePeriodObject = function (index) {
792
- if (0 /* __ENVIRONMENT__.CURRENT_ENV */ === 1 /* __ENVIRONMENT__.DEV */) {
793
- assert(index < this._storedPeriodInfo.length, "Invalid index for Period removal");
794
- }
795
- var oldPeriodItem = this._storedPeriodInfo[index];
796
- this._storedPeriodInfo[index].isRemoved = true;
797
- this._storedPeriodInfo.splice(index, 1);
798
- this._cachedPeriodInfo.set(oldPeriodItem.period, oldPeriodItem);
799
- };
800
- TracksStore.prototype._getRepresentationsToLock = function (adaptation, representationIds) {
801
- var filtered = representationIds.reduce(function (acc, repId) {
802
- var foundRep = arrayFind(adaptation.representations, function (r) {
803
- return r.id === repId;
804
- });
805
- if (foundRep === undefined) {
806
- log.warn("API: Wanted locked Representation not found.");
807
- }
808
- else {
809
- acc.push(foundRep);
810
- }
811
- return acc;
812
- }, []);
813
- if (filtered.length === 0) {
814
- throw new Error("Cannot lock Representations: " +
815
- "None of the given Representation id are found");
816
- }
817
- return filtered;
818
- };
819
- return TracksStore;
820
- }(EventEmitter));
821
- export default TracksStore;
822
- /**
823
- * Returns the index of the given `period` in the given `periods`
824
- * Array.
825
- * Returns `undefined` if that `period` is not found.
826
- * @param {Object} periods
827
- * @param {Object} period
828
- * @returns {number|undefined}
829
- */
830
- function findPeriodIndex(periods, period) {
831
- for (var i = 0; i < periods.length; i++) {
832
- var periodI = periods[i];
833
- if (periodI.period.id === period.id) {
834
- return i;
835
- }
836
- }
837
- }
838
- /**
839
- * Returns element in the given `periods` Array that corresponds to the
840
- * `period` given.
841
- * Returns `undefined` if that `period` is not found.
842
- * @param {Object} periods
843
- * @param {string} periodId
844
- * @returns {Object|undefined}
845
- */
846
- function getPeriodItem(periods, periodId) {
847
- for (var i = 0; i < periods.length; i++) {
848
- var periodI = periods[i];
849
- if (periodI.period.id === periodId) {
850
- return periodI;
851
- }
852
- }
853
- }
854
- /**
855
- * A `ITMPeriodObject` should only be removed once all References linked to it
856
- * do not exist anymore, to keep the possibility of making track choices.
857
- * @param {Object} periodObj
858
- * @returns {boolean}
859
- */
860
- function isPeriodItemRemovable(periodObj) {
861
- var _a, _b, _c;
862
- return !periodObj.inManifest &&
863
- ((_a = periodObj.text) === null || _a === void 0 ? void 0 : _a.dispatcher) === null &&
864
- ((_b = periodObj.audio) === null || _b === void 0 ? void 0 : _b.dispatcher) === null &&
865
- ((_c = periodObj.video) === null || _c === void 0 ? void 0 : _c.dispatcher) === null;
866
- }
867
- function getRightVideoTrack(adaptation, isTrickModeEnabled) {
868
- var _a;
869
- if (isTrickModeEnabled &&
870
- ((_a = adaptation.trickModeTracks) === null || _a === void 0 ? void 0 : _a[0]) !== undefined) {
871
- return adaptation.trickModeTracks[0];
872
- }
873
- return adaptation;
874
- }
875
- /**
876
- * Generate an `ITMPeriodObject` object for the given Period, selecting the
877
- * default track for each type.
878
- * @param {Object} period
879
- * @param {boolean} inManifest
880
- * @param {boolean} isTrickModeTrackEnabled
881
- * @returns {object}
882
- */
883
- function generatePeriodInfo(period, inManifest, isTrickModeTrackEnabled, defaultAudioTrackSwitchingMode) {
884
- var _a;
885
- var audioAdaptation = period.getSupportedAdaptations("audio")[0];
886
- var baseVideoAdaptation = period.getSupportedAdaptations("video")[0];
887
- var videoAdaptation = getRightVideoTrack(baseVideoAdaptation, isTrickModeTrackEnabled);
888
- var DEFAULT_VIDEO_TRACK_SWITCHING_MODE = config.getCurrent().DEFAULT_VIDEO_TRACK_SWITCHING_MODE;
889
- var audioSettings = audioAdaptation !== undefined ?
890
- { adaptation: audioAdaptation,
891
- switchingMode: defaultAudioTrackSwitchingMode,
892
- lockedRepresentations: new SharedReference(null) } :
893
- null;
894
- var videoSettings = videoAdaptation !== undefined ?
895
- { adaptation: videoAdaptation,
896
- adaptationBase: baseVideoAdaptation,
897
- switchingMode: DEFAULT_VIDEO_TRACK_SWITCHING_MODE,
898
- lockedRepresentations: new SharedReference(null) } :
899
- null;
900
- var textAdaptation = null;
901
- var forcedSubtitles = period.getAdaptationsForType("text")
902
- .filter(function (ad) { return ad.isForcedSubtitles === true; });
903
- if (forcedSubtitles.length > 0) {
904
- if (audioAdaptation !== null && audioAdaptation !== undefined) {
905
- var sameLanguage = arrayFind(forcedSubtitles, function (f) {
906
- return f.normalizedLanguage === audioAdaptation.normalizedLanguage;
907
- });
908
- if (sameLanguage !== undefined) {
909
- textAdaptation = sameLanguage;
910
- }
911
- }
912
- if (textAdaptation === null) {
913
- textAdaptation = (_a = arrayFind(forcedSubtitles, function (f) { return f.normalizedLanguage === undefined; })) !== null && _a !== void 0 ? _a : null;
914
- }
915
- }
916
- var textSettings = null;
917
- if (textAdaptation !== null) {
918
- textSettings = { adaptation: textAdaptation,
919
- switchingMode: "direct",
920
- lockedRepresentations: new SharedReference(null) };
921
- }
922
- return { period: period, inManifest: inManifest, isRemoved: false,
923
- audio: { storedSettings: audioSettings,
924
- dispatcher: null },
925
- video: { storedSettings: videoSettings,
926
- dispatcher: null },
927
- text: { storedSettings: textSettings,
928
- dispatcher: null } };
929
- }
930
- function toExposedPeriod(p) {
931
- return { start: p.start, end: p.end, id: p.id };
932
- }