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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/CHANGELOG.md +18 -226
  2. package/FILES.md +1 -1
  3. package/VERSION +1 -1
  4. package/dist/_esm5.processed/compat/add_text_track.d.ts +1 -3
  5. package/dist/_esm5.processed/compat/add_text_track.js +4 -7
  6. package/dist/_esm5.processed/compat/browser_compatibility_types.d.ts +0 -7
  7. package/dist/_esm5.processed/compat/event_listeners.d.ts +2 -15
  8. package/dist/_esm5.processed/compat/event_listeners.js +2 -37
  9. package/dist/_esm5.processed/compat/index.d.ts +1 -3
  10. package/dist/_esm5.processed/compat/index.js +1 -3
  11. package/dist/_esm5.processed/config.d.ts +9 -21
  12. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.d.ts +0 -58
  13. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +14 -54
  14. package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.d.ts +2 -8
  15. package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.js +2 -11
  16. package/dist/_esm5.processed/core/api/debug/buffer_graph.js +2 -6
  17. package/dist/_esm5.processed/core/api/debug/modules/general_info.js +13 -32
  18. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +3 -3
  19. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +1 -1
  20. package/dist/_esm5.processed/core/api/option_utils.d.ts +14 -35
  21. package/dist/_esm5.processed/core/api/option_utils.js +47 -230
  22. package/dist/_esm5.processed/core/api/public_api.d.ts +92 -266
  23. package/dist/_esm5.processed/core/api/public_api.js +451 -807
  24. package/dist/_esm5.processed/core/{segment_buffers/implementations/image → api/track_management}/index.d.ts +3 -2
  25. package/dist/_esm5.processed/core/{segment_buffers/implementations/image → api/track_management}/index.js +3 -2
  26. package/dist/_esm5.processed/core/api/{tracks_management/media_element_track_choice_manager.d.ts → track_management/media_element_tracks_store.d.ts} +15 -75
  27. package/dist/_esm5.processed/core/api/{tracks_management/media_element_track_choice_manager.js → track_management/media_element_tracks_store.js} +74 -193
  28. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.d.ts +84 -0
  29. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +158 -0
  30. package/dist/_esm5.processed/core/api/track_management/tracks_store.d.ts +406 -0
  31. package/dist/_esm5.processed/core/api/track_management/tracks_store.js +932 -0
  32. package/dist/_esm5.processed/core/api/utils.d.ts +1 -0
  33. package/dist/_esm5.processed/core/api/utils.js +28 -11
  34. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +3 -3
  35. package/dist/_esm5.processed/core/decrypt/find_key_system.js +83 -71
  36. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +6 -5
  37. package/dist/_esm5.processed/core/decrypt/session_events_listener.js +10 -72
  38. package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.d.ts +4 -4
  39. package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.js +6 -4
  40. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +1 -3
  41. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +7 -26
  42. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +3 -9
  43. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +16 -9
  44. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -3
  45. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  46. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.d.ts +1 -6
  47. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +4 -41
  48. package/dist/_esm5.processed/core/init/directfile_content_initializer.js +1 -1
  49. package/dist/_esm5.processed/core/init/media_source_content_initializer.d.ts +1 -8
  50. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +5 -19
  51. package/dist/_esm5.processed/core/init/types.d.ts +5 -15
  52. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.d.ts +2 -36
  53. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +2 -82
  54. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +54 -6
  55. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
  56. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.js +19 -2
  57. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +1 -2
  58. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +2 -3
  59. package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +2 -2
  60. package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
  61. package/dist/_esm5.processed/core/segment_buffers/index.js +2 -1
  62. package/dist/_esm5.processed/core/segment_buffers/inventory/index.d.ts +1 -0
  63. package/dist/_esm5.processed/core/segment_buffers/inventory/index.js +1 -0
  64. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.d.ts +33 -0
  65. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.js +49 -0
  66. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +0 -1
  67. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +2 -16
  68. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +0 -15
  69. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +183 -93
  70. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.d.ts +39 -0
  71. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.js +133 -0
  72. package/dist/_esm5.processed/core/stream/adaptation/types.d.ts +27 -13
  73. package/dist/_esm5.processed/core/stream/index.d.ts +2 -3
  74. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +2 -0
  75. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +5 -7
  76. package/dist/_esm5.processed/core/stream/period/period_stream.js +13 -12
  77. package/dist/_esm5.processed/core/stream/period/types.d.ts +5 -14
  78. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +2 -4
  79. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.js +10 -46
  80. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +29 -23
  81. package/dist/_esm5.processed/core/stream/representation/types.d.ts +11 -1
  82. package/dist/_esm5.processed/default_config.d.ts +35 -98
  83. package/dist/_esm5.processed/default_config.js +36 -113
  84. package/dist/_esm5.processed/errors/custom_loader_error.d.ts +1 -3
  85. package/dist/_esm5.processed/errors/custom_loader_error.js +1 -3
  86. package/dist/_esm5.processed/errors/media_error.js +2 -2
  87. package/dist/_esm5.processed/errors/network_error.d.ts +0 -1
  88. package/dist/_esm5.processed/errors/network_error.js +0 -1
  89. package/dist/_esm5.processed/errors/request_error.d.ts +2 -3
  90. package/dist/_esm5.processed/errors/request_error.js +2 -5
  91. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -3
  92. package/dist/_esm5.processed/features/features_object.js +0 -2
  93. package/dist/_esm5.processed/features/list/directfile.js +2 -5
  94. package/dist/_esm5.processed/features/list/index.d.ts +0 -2
  95. package/dist/_esm5.processed/features/list/index.js +0 -2
  96. package/dist/_esm5.processed/features/types.d.ts +3 -27
  97. package/dist/_esm5.processed/manifest/adaptation.d.ts +9 -11
  98. package/dist/_esm5.processed/manifest/adaptation.js +41 -30
  99. package/dist/_esm5.processed/manifest/index.d.ts +3 -4
  100. package/dist/_esm5.processed/manifest/manifest.d.ts +5 -54
  101. package/dist/_esm5.processed/manifest/manifest.js +5 -110
  102. package/dist/_esm5.processed/manifest/period.d.ts +4 -5
  103. package/dist/_esm5.processed/manifest/representation.d.ts +10 -5
  104. package/dist/_esm5.processed/manifest/representation.js +33 -10
  105. package/dist/_esm5.processed/manifest/representation_index/index.d.ts +2 -2
  106. package/dist/_esm5.processed/manifest/representation_index/static.d.ts +2 -0
  107. package/dist/_esm5.processed/manifest/representation_index/static.js +6 -0
  108. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +42 -21
  109. package/dist/_esm5.processed/manifest/types.d.ts +0 -2
  110. package/dist/_esm5.processed/parsers/manifest/dash/common/convert_supplemental_codecs.d.ts +17 -0
  111. package/dist/_esm5.processed/parsers/manifest/dash/common/convert_supplemental_codecs.js +26 -0
  112. package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
  113. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +17 -31
  114. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +26 -19
  115. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +2 -0
  116. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +7 -1
  117. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +2 -6
  118. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +11 -8
  119. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +2 -0
  120. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +6 -0
  121. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  122. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.js +1 -6
  123. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +3 -5
  124. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +0 -2
  125. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -1
  126. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +2 -2
  127. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +0 -2
  128. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +2 -2
  129. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +29 -17
  130. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +13 -6
  131. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +7 -2
  132. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.d.ts +10 -1
  133. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +18 -2
  134. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +6 -4
  135. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +7 -6
  136. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +5 -2
  137. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
  138. package/dist/_esm5.processed/parsers/manifest/local/representation_index.d.ts +2 -0
  139. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +6 -0
  140. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +6 -6
  141. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.d.ts +12 -3
  142. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.js +11 -2
  143. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +0 -1
  144. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +11 -17
  145. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +21 -83
  146. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +53 -125
  147. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.d.ts +119 -0
  148. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.js +159 -0
  149. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.d.ts +3 -6
  150. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.js +4 -4
  151. package/dist/_esm5.processed/parsers/manifest/types.d.ts +4 -3
  152. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_extent.js +1 -8
  153. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_origin.js +1 -9
  154. package/dist/_esm5.processed/public_types.d.ts +396 -308
  155. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.d.ts +5 -4
  156. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +5 -4
  157. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +4 -4
  158. package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
  159. package/dist/_esm5.processed/transports/dash/pipelines.js +1 -4
  160. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
  161. package/dist/_esm5.processed/transports/dash/segment_loader.js +26 -20
  162. package/dist/_esm5.processed/transports/dash/segment_parser.js +19 -24
  163. package/dist/_esm5.processed/transports/dash/text_loader.js +5 -5
  164. package/dist/_esm5.processed/transports/dash/text_parser.js +28 -33
  165. package/dist/_esm5.processed/transports/local/pipelines.js +1 -10
  166. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
  167. package/dist/_esm5.processed/transports/local/segment_parser.d.ts +1 -1
  168. package/dist/_esm5.processed/transports/local/segment_parser.js +10 -10
  169. package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
  170. package/dist/_esm5.processed/transports/local/text_parser.js +23 -23
  171. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +34 -52
  172. package/dist/_esm5.processed/{utils/list_to_map.d.ts → transports/smooth/is_mp4_embedded_track.d.ts} +5 -5
  173. package/dist/_esm5.processed/{features/list/image_buffer.d.ts → transports/smooth/is_mp4_embedded_track.js} +7 -6
  174. package/dist/_esm5.processed/transports/smooth/pipelines.js +33 -190
  175. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +1 -1
  176. package/dist/_esm5.processed/transports/smooth/segment_loader.js +28 -22
  177. package/dist/_esm5.processed/transports/smooth/utils.d.ts +1 -26
  178. package/dist/_esm5.processed/transports/smooth/utils.js +1 -55
  179. package/dist/_esm5.processed/transports/types.d.ts +94 -89
  180. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
  181. package/dist/_esm5.processed/transports/utils/infer_segment_container.d.ts +3 -3
  182. package/dist/_esm5.processed/transports/utils/infer_segment_container.js +5 -7
  183. package/dist/_esm5.processed/transports/utils/parse_text_track.d.ts +8 -12
  184. package/dist/_esm5.processed/transports/utils/parse_text_track.js +19 -21
  185. package/dist/_esm5.processed/utils/array_includes.d.ts +2 -1
  186. package/dist/_esm5.processed/utils/array_includes.js +30 -28
  187. package/dist/_esm5.processed/utils/request/xhr.js +5 -5
  188. package/dist/commonjs/compat/is_codec_supported.js +22 -1
  189. package/dist/commonjs/compat/patch_webkit_source_buffer.js +2 -2
  190. package/dist/commonjs/config.d.ts +1 -0
  191. package/dist/commonjs/core/api/debug/buffer_graph.js +2 -6
  192. package/dist/commonjs/core/api/debug/modules/general_info.js +17 -10
  193. package/dist/commonjs/core/api/option_utils.d.ts +4 -0
  194. package/dist/commonjs/core/api/option_utils.js +8 -3
  195. package/dist/commonjs/core/api/public_api.d.ts +11 -1
  196. package/dist/commonjs/core/api/public_api.js +46 -11
  197. package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
  198. package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.js +11 -3
  199. package/dist/commonjs/core/fetchers/segment/segment_fetcher.d.ts +8 -1
  200. package/dist/commonjs/core/fetchers/segment/segment_fetcher.js +8 -4
  201. package/dist/commonjs/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
  202. package/dist/commonjs/core/fetchers/utils/schedule_request.js +1 -1
  203. package/dist/commonjs/core/init/directfile_content_initializer.js +24 -7
  204. package/dist/commonjs/core/init/media_source_content_initializer.d.ts +6 -0
  205. package/dist/commonjs/core/init/media_source_content_initializer.js +4 -6
  206. package/dist/commonjs/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
  207. package/dist/commonjs/core/init/utils/content_time_boundaries_observer.js +16 -17
  208. package/dist/commonjs/core/init/utils/get_initial_time.d.ts +17 -3
  209. package/dist/commonjs/core/init/utils/get_initial_time.js +9 -7
  210. package/dist/commonjs/core/segment_buffers/implementations/text/html/text_track_cues_store.js +54 -6
  211. package/dist/commonjs/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
  212. package/dist/commonjs/core/segment_buffers/implementations/text/html/utils.js +19 -2
  213. package/dist/commonjs/core/stream/adaptation/adaptation_stream.js +2 -2
  214. package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.js +3 -3
  215. package/dist/commonjs/core/stream/period/period_stream.js +2 -2
  216. package/dist/commonjs/core/stream/representation/utils/get_buffer_status.js +3 -3
  217. package/dist/commonjs/core/stream/representation/utils/get_needed_segments.js +1 -1
  218. package/dist/commonjs/default_config.d.ts +5 -0
  219. package/dist/commonjs/default_config.js +5 -0
  220. package/dist/commonjs/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
  221. package/dist/commonjs/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
  222. package/dist/commonjs/manifest/representation.js +18 -5
  223. package/dist/commonjs/manifest/representation_index/static.d.ts +1 -1
  224. package/dist/commonjs/manifest/representation_index/static.js +2 -2
  225. package/dist/commonjs/manifest/representation_index/types.d.ts +4 -4
  226. package/dist/commonjs/parsers/manifest/dash/common/convert_supplemental_codecs.d.ts +17 -0
  227. package/dist/commonjs/parsers/manifest/dash/common/convert_supplemental_codecs.js +30 -0
  228. package/dist/commonjs/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
  229. package/dist/commonjs/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
  230. package/dist/commonjs/parsers/manifest/dash/common/indexes/base.js +4 -3
  231. package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
  232. package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
  233. package/dist/commonjs/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
  234. package/dist/commonjs/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
  235. package/dist/commonjs/parsers/manifest/dash/common/indexes/list.js +2 -2
  236. package/dist/commonjs/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
  237. package/dist/commonjs/parsers/manifest/dash/common/indexes/template.js +42 -29
  238. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
  239. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
  240. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +250 -51
  241. package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
  242. package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
  243. package/dist/commonjs/parsers/manifest/dash/common/parse_adaptation_sets.js +13 -10
  244. package/dist/commonjs/parsers/manifest/dash/common/parse_mpd.js +27 -14
  245. package/dist/commonjs/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
  246. package/dist/commonjs/parsers/manifest/dash/common/parse_periods.js +17 -18
  247. package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
  248. package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.js +21 -8
  249. package/dist/commonjs/parsers/manifest/dash/common/parse_representations.js +36 -20
  250. package/dist/commonjs/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +3 -0
  251. package/dist/commonjs/parsers/manifest/dash/js-parser/node_parsers/Representation.js +3 -0
  252. package/dist/commonjs/parsers/manifest/dash/node_parser_types.d.ts +2 -0
  253. package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +4 -0
  254. package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +4 -0
  255. package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
  256. package/dist/commonjs/parsers/manifest/local/representation_index.d.ts +1 -1
  257. package/dist/commonjs/parsers/manifest/local/representation_index.js +3 -3
  258. package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
  259. package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.js +2 -2
  260. package/dist/commonjs/parsers/manifest/smooth/representation_index.d.ts +5 -5
  261. package/dist/commonjs/parsers/manifest/smooth/representation_index.js +25 -9
  262. package/dist/commonjs/parsers/manifest/types.d.ts +1 -0
  263. package/dist/commonjs/parsers/manifest/utils/index_helpers.js +1 -1
  264. package/dist/commonjs/public_types.d.ts +78 -34
  265. package/dist/commonjs/transports/dash/init_segment_loader.js +10 -5
  266. package/dist/commonjs/transports/dash/manifest_parser.js +5 -2
  267. package/dist/commonjs/transports/dash/segment_loader.js +2 -1
  268. package/dist/commonjs/transports/dash/text_loader.js +2 -0
  269. package/dist/commonjs/transports/metaplaylist/manifest_loader.js +2 -1
  270. package/dist/commonjs/transports/metaplaylist/pipelines.js +4 -1
  271. package/dist/commonjs/transports/smooth/pipelines.js +4 -2
  272. package/dist/commonjs/transports/smooth/segment_loader.js +2 -1
  273. package/dist/commonjs/transports/types.d.ts +12 -0
  274. package/dist/commonjs/transports/utils/generate_manifest_loader.js +6 -3
  275. package/dist/commonjs/utils/queue_microtask.d.ts +2 -0
  276. package/dist/commonjs/utils/queue_microtask.js +7 -0
  277. package/dist/commonjs/utils/request/fetch.d.ts +6 -0
  278. package/dist/commonjs/utils/request/fetch.js +29 -8
  279. package/dist/commonjs/utils/request/xhr.d.ts +11 -5
  280. package/dist/commonjs/utils/request/xhr.js +29 -8
  281. package/dist/es2017/compat/is_codec_supported.js +22 -1
  282. package/dist/es2017/compat/patch_webkit_source_buffer.js +2 -2
  283. package/dist/es2017/config.d.ts +1 -0
  284. package/dist/es2017/core/api/debug/buffer_graph.js +2 -6
  285. package/dist/es2017/core/api/debug/modules/general_info.js +17 -10
  286. package/dist/es2017/core/api/option_utils.d.ts +4 -0
  287. package/dist/es2017/core/api/option_utils.js +8 -3
  288. package/dist/es2017/core/api/public_api.d.ts +11 -1
  289. package/dist/es2017/core/api/public_api.js +44 -9
  290. package/dist/es2017/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
  291. package/dist/es2017/core/fetchers/manifest/manifest_fetcher.js +11 -3
  292. package/dist/es2017/core/fetchers/segment/segment_fetcher.d.ts +8 -1
  293. package/dist/es2017/core/fetchers/segment/segment_fetcher.js +8 -4
  294. package/dist/es2017/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
  295. package/dist/es2017/core/fetchers/utils/schedule_request.js +1 -1
  296. package/dist/es2017/core/init/directfile_content_initializer.js +24 -7
  297. package/dist/es2017/core/init/media_source_content_initializer.d.ts +6 -0
  298. package/dist/es2017/core/init/media_source_content_initializer.js +4 -6
  299. package/dist/es2017/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
  300. package/dist/es2017/core/init/utils/content_time_boundaries_observer.js +16 -15
  301. package/dist/es2017/core/init/utils/get_initial_time.d.ts +17 -3
  302. package/dist/es2017/core/init/utils/get_initial_time.js +9 -7
  303. package/dist/es2017/core/segment_buffers/implementations/text/html/text_track_cues_store.js +54 -6
  304. package/dist/es2017/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
  305. package/dist/es2017/core/segment_buffers/implementations/text/html/utils.js +18 -2
  306. package/dist/es2017/core/stream/adaptation/adaptation_stream.js +2 -2
  307. package/dist/es2017/core/stream/orchestrator/stream_orchestrator.js +3 -3
  308. package/dist/es2017/core/stream/period/period_stream.js +2 -2
  309. package/dist/es2017/core/stream/representation/utils/get_buffer_status.js +3 -3
  310. package/dist/es2017/core/stream/representation/utils/get_needed_segments.js +1 -1
  311. package/dist/es2017/default_config.d.ts +5 -0
  312. package/dist/es2017/default_config.js +5 -0
  313. package/dist/es2017/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
  314. package/dist/es2017/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
  315. package/dist/es2017/manifest/representation.js +18 -5
  316. package/dist/es2017/manifest/representation_index/static.d.ts +1 -1
  317. package/dist/es2017/manifest/representation_index/static.js +2 -2
  318. package/dist/es2017/manifest/representation_index/types.d.ts +4 -4
  319. package/dist/es2017/parsers/manifest/dash/common/convert_supplemental_codecs.d.ts +17 -0
  320. package/dist/es2017/parsers/manifest/dash/common/convert_supplemental_codecs.js +26 -0
  321. package/dist/es2017/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
  322. package/dist/es2017/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
  323. package/dist/es2017/parsers/manifest/dash/common/indexes/base.js +4 -3
  324. package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
  325. package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
  326. package/dist/es2017/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
  327. package/dist/es2017/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
  328. package/dist/es2017/parsers/manifest/dash/common/indexes/list.js +2 -2
  329. package/dist/es2017/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
  330. package/dist/es2017/parsers/manifest/dash/common/indexes/template.js +40 -27
  331. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
  332. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
  333. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +246 -51
  334. package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
  335. package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
  336. package/dist/es2017/parsers/manifest/dash/common/parse_adaptation_sets.js +11 -8
  337. package/dist/es2017/parsers/manifest/dash/common/parse_mpd.js +27 -13
  338. package/dist/es2017/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
  339. package/dist/es2017/parsers/manifest/dash/common/parse_periods.js +13 -16
  340. package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
  341. package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.js +10 -8
  342. package/dist/es2017/parsers/manifest/dash/common/parse_representations.js +36 -20
  343. package/dist/es2017/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +3 -0
  344. package/dist/es2017/parsers/manifest/dash/js-parser/node_parsers/Representation.js +3 -0
  345. package/dist/es2017/parsers/manifest/dash/node_parser_types.d.ts +2 -0
  346. package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +4 -0
  347. package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +4 -0
  348. package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
  349. package/dist/es2017/parsers/manifest/local/representation_index.d.ts +1 -1
  350. package/dist/es2017/parsers/manifest/local/representation_index.js +3 -3
  351. package/dist/es2017/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
  352. package/dist/es2017/parsers/manifest/metaplaylist/representation_index.js +2 -2
  353. package/dist/es2017/parsers/manifest/smooth/representation_index.d.ts +5 -5
  354. package/dist/es2017/parsers/manifest/smooth/representation_index.js +25 -9
  355. package/dist/es2017/parsers/manifest/types.d.ts +1 -0
  356. package/dist/es2017/parsers/manifest/utils/index_helpers.js +1 -1
  357. package/dist/es2017/public_types.d.ts +78 -34
  358. package/dist/es2017/transports/dash/init_segment_loader.js +5 -0
  359. package/dist/es2017/transports/dash/manifest_parser.js +3 -0
  360. package/dist/es2017/transports/dash/segment_loader.js +1 -0
  361. package/dist/es2017/transports/dash/text_loader.js +2 -0
  362. package/dist/es2017/transports/metaplaylist/manifest_loader.js +1 -0
  363. package/dist/es2017/transports/metaplaylist/pipelines.js +4 -1
  364. package/dist/es2017/transports/smooth/pipelines.js +2 -0
  365. package/dist/es2017/transports/smooth/segment_loader.js +1 -0
  366. package/dist/es2017/transports/types.d.ts +12 -0
  367. package/dist/es2017/transports/utils/generate_manifest_loader.js +3 -0
  368. package/dist/es2017/utils/queue_microtask.d.ts +2 -0
  369. package/dist/es2017/utils/queue_microtask.js +5 -0
  370. package/dist/es2017/utils/request/fetch.d.ts +6 -0
  371. package/dist/es2017/utils/request/fetch.js +29 -8
  372. package/dist/es2017/utils/request/xhr.d.ts +11 -5
  373. package/dist/es2017/utils/request/xhr.js +30 -9
  374. package/dist/mpd-parser.wasm +0 -0
  375. package/dist/rx-player.js +900 -492
  376. package/dist/rx-player.min.js +1 -1
  377. package/package.json +3 -7
  378. package/scripts/update-version +2 -0
  379. package/sonar-project.properties +1 -1
  380. package/src/compat/is_codec_supported.ts +23 -1
  381. package/src/compat/patch_webkit_source_buffer.ts +2 -2
  382. package/src/core/api/debug/buffer_graph.ts +2 -5
  383. package/src/core/api/debug/modules/general_info.ts +15 -10
  384. package/src/core/api/option_utils.ts +11 -3
  385. package/src/core/api/public_api.ts +48 -8
  386. package/src/core/fetchers/manifest/manifest_fetcher.ts +21 -3
  387. package/src/core/fetchers/segment/segment_fetcher.ts +19 -5
  388. package/src/core/fetchers/segment/segment_fetcher_creator.ts +1 -0
  389. package/src/core/fetchers/utils/schedule_request.ts +1 -1
  390. package/src/core/init/directfile_content_initializer.ts +23 -7
  391. package/src/core/init/media_source_content_initializer.ts +13 -7
  392. package/src/core/init/utils/content_time_boundaries_observer.ts +23 -22
  393. package/src/core/init/utils/get_initial_time.ts +25 -12
  394. package/src/core/segment_buffers/implementations/text/html/__tests__/utils.test.ts +15 -0
  395. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +57 -6
  396. package/src/core/segment_buffers/implementations/text/html/utils.ts +19 -2
  397. package/src/core/stream/adaptation/adaptation_stream.ts +2 -2
  398. package/src/core/stream/orchestrator/stream_orchestrator.ts +3 -3
  399. package/src/core/stream/period/period_stream.ts +2 -2
  400. package/src/core/stream/representation/utils/get_buffer_status.ts +3 -3
  401. package/src/core/stream/representation/utils/get_needed_segments.ts +2 -2
  402. package/src/default_config.ts +5 -0
  403. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +3 -1
  404. package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +2 -0
  405. package/src/manifest/representation.ts +19 -6
  406. package/src/manifest/representation_index/static.ts +2 -2
  407. package/src/manifest/representation_index/types.ts +4 -4
  408. package/src/parsers/manifest/dash/common/__tests__/convert_supplemental_codecs.test.ts +37 -0
  409. package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +20 -0
  410. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +182 -36
  411. package/src/parsers/manifest/dash/common/convert_supplemental_codecs.ts +32 -0
  412. package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +5 -0
  413. package/src/parsers/manifest/dash/common/indexes/base.ts +12 -4
  414. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +19 -5
  415. package/src/parsers/manifest/dash/common/indexes/index.ts +16 -4
  416. package/src/parsers/manifest/dash/common/indexes/list.ts +2 -2
  417. package/src/parsers/manifest/dash/common/indexes/template.ts +52 -31
  418. package/src/parsers/manifest/dash/common/indexes/timeline/index.ts +4 -1
  419. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +366 -60
  420. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +63 -25
  421. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +10 -4
  422. package/src/parsers/manifest/dash/common/parse_mpd.ts +28 -15
  423. package/src/parsers/manifest/dash/common/parse_periods.ts +12 -17
  424. package/src/parsers/manifest/dash/common/parse_representation_index.ts +50 -26
  425. package/src/parsers/manifest/dash/common/parse_representations.ts +39 -20
  426. package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +4 -0
  427. package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +4 -0
  428. package/src/parsers/manifest/dash/node_parser_types.ts +2 -0
  429. package/src/parsers/manifest/dash/wasm-parser/rs/events.rs +2 -0
  430. package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +2 -0
  431. package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +4 -0
  432. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +4 -0
  433. package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +2 -0
  434. package/src/parsers/manifest/local/representation_index.ts +3 -3
  435. package/src/parsers/manifest/metaplaylist/representation_index.ts +2 -2
  436. package/src/parsers/manifest/smooth/representation_index.ts +23 -9
  437. package/src/parsers/manifest/types.ts +2 -0
  438. package/src/parsers/manifest/utils/__tests__/get_first_time_from_adaptations.test.ts +1 -1
  439. package/src/parsers/manifest/utils/__tests__/get_last_time_from_adaptation.test.ts +1 -1
  440. package/src/parsers/manifest/utils/index_helpers.ts +1 -1
  441. package/src/public_types.ts +79 -34
  442. package/src/transports/dash/init_segment_loader.ts +5 -0
  443. package/src/transports/dash/manifest_parser.ts +6 -0
  444. package/src/transports/dash/segment_loader.ts +1 -0
  445. package/src/transports/dash/text_loader.ts +2 -0
  446. package/src/transports/metaplaylist/manifest_loader.ts +1 -0
  447. package/src/transports/metaplaylist/pipelines.ts +4 -1
  448. package/src/transports/smooth/pipelines.ts +2 -0
  449. package/src/transports/smooth/segment_loader.ts +1 -0
  450. package/src/transports/types.ts +12 -0
  451. package/src/transports/utils/generate_manifest_loader.ts +3 -0
  452. package/src/utils/queue_microtask.ts +7 -0
  453. package/src/utils/request/fetch.ts +35 -8
  454. package/src/utils/request/xhr.ts +45 -14
  455. package/dist/_esm5.processed/compat/fullscreen.d.ts +0 -32
  456. package/dist/_esm5.processed/compat/fullscreen.js +0 -78
  457. package/dist/_esm5.processed/compat/is_offline.d.ts +0 -39
  458. package/dist/_esm5.processed/compat/is_offline.js +0 -43
  459. package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.d.ts +0 -258
  460. package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.js +0 -989
  461. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.d.ts +0 -75
  462. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +0 -133
  463. package/dist/_esm5.processed/features/list/bif_parser.d.ts +0 -23
  464. package/dist/_esm5.processed/features/list/bif_parser.js +0 -27
  465. package/dist/_esm5.processed/features/list/image_buffer.js +0 -25
  466. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +0 -38
  467. package/dist/_esm5.processed/transports/dash/image_pipelines.js +0 -129
  468. package/dist/_esm5.processed/utils/list_to_map.js +0 -28
  469. package/dist/_esm5.processed/utils/simple_set.d.ts +0 -51
  470. package/dist/_esm5.processed/utils/simple_set.js +0 -57
  471. package/dist/_esm5.processed/utils/uniq.d.ts +0 -36
  472. package/dist/_esm5.processed/utils/uniq.js +0 -43
  473. package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
  474. package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.js +0 -54
  475. package/dist/es2017/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
  476. package/dist/es2017/parsers/manifest/utils/is_segment_still_available.js +0 -51
  477. package/src/parsers/manifest/utils/is_segment_still_available.ts +0 -58
  478. package/src/typings/next-tick.d.ts +0 -23
  479. package/src/typings/object-assign.d.ts +0 -48
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rx-player",
3
3
  "author": "Canal+",
4
- "version": "4.0.0-dev.2023110700",
4
+ "version": "4.0.0-dev.2023120600",
5
5
  "description": "Canal+ HTML5 Video Player",
6
6
  "main": "./dist/commonjs/index.js",
7
7
  "module": "./dist/es2017/index.js",
@@ -138,7 +138,7 @@
138
138
  "demo": "node ./scripts/build_demo.mjs --production-mode",
139
139
  "demo:min": "node ./scripts/build_demo.mjs --production-mode --minify",
140
140
  "demo:watch": "node ./scripts/build_demo.mjs --watch --production-mode",
141
- "doc": "docgen.ico doc/ doc/generated \"$(cat VERSION)\"",
141
+ "doc": "readme.doc doc/ doc/generated \"$(cat VERSION)\"",
142
142
  "lint": "eslint src -c .eslintrc.js",
143
143
  "lint:demo": "eslint -c demo/full/.eslintrc.js demo/full/scripts",
144
144
  "lint:tests": "eslint tests/**/*.js --ignore-pattern '/tests/performance/bundle*'",
@@ -167,14 +167,12 @@
167
167
  "type": "git",
168
168
  "url": "git://github.com/canalplus/rx-player.git"
169
169
  },
170
- "dependencies": {
171
- "next-tick": "1.1.0"
172
- },
173
170
  "devDependencies": {
174
171
  "@babel/core": "7.23.0",
175
172
  "@babel/plugin-transform-runtime": "7.22.15",
176
173
  "@babel/preset-env": "7.22.20",
177
174
  "@babel/preset-react": "7.22.15",
175
+ "@canalplus/readme.doc": "^0.3.0",
178
176
  "@types/chai": "4.3.6",
179
177
  "@types/jest": "29.5.5",
180
178
  "@types/mocha": "10.0.1",
@@ -188,7 +186,6 @@
188
186
  "babel-loader": "9.1.3",
189
187
  "chai": "4.3.8",
190
188
  "core-js": "3.32.2",
191
- "docgen.ico": "^0.2.3",
192
189
  "esbuild": "0.19.3",
193
190
  "eslint": "8.50.0",
194
191
  "eslint-plugin-ban": "1.6.0",
@@ -218,7 +215,6 @@
218
215
  "terser-webpack-plugin": "5.3.9",
219
216
  "ts-jest": "29.1.1",
220
217
  "ts-loader": "9.4.4",
221
- "tslint": "6.1.3",
222
218
  "typescript": "5.2.2",
223
219
  "webpack": "5.88.2",
224
220
  "webpack-cli": "5.1.4"
@@ -22,7 +22,9 @@
22
22
  set -e
23
23
 
24
24
  version=$1
25
+ date_iso=$(date "+%Y-%m-%d")
25
26
 
27
+ sed -i.bak -e "s/^\#\# Unreleased/\#\# v${version} \(${date_iso}\)/gi" CHANGELOG.md && rm CHANGELOG.md.bak
26
28
  sed -i.bak -e "s/\/\\* PLAYER_VERSION \\*\/\"\(.*\)\";/\/* PLAYER_VERSION *\/\"${version}\";/g" src/core/api/public_api.ts && rm src/core/api/public_api.ts.bak
27
29
  sed -i.bak -e "s/\"version\":\s*\"[0-9]\+\.[0-9]\+\.[0-9]\+[^\"]*\"/\"version\": \"${version}\"/g" package.json && rm package.json.bak
28
30
  sed -i.bak -e "s/sonar\.projectVersion= *.*/sonar.projectVersion=${version}/g" sonar-project.properties && rm sonar-project.properties.bak
@@ -1,7 +1,7 @@
1
1
  sonar.projectKey=rx-player
2
2
  sonar.organization=rx-player
3
3
  sonar.projectName=rx-player
4
- sonar.projectVersion=4.0.0-dev.2023110700
4
+ sonar.projectVersion=4.0.0-dev.2023120600
5
5
  sonar.sources=./src,./demo,./tests
6
6
  sonar.exclusions=demo/full/bundle.js,demo/standalone/lib.js,demo/bundle.js
7
7
  sonar.host.url=https://sonarcloud.io
@@ -16,6 +16,17 @@
16
16
 
17
17
  import { MediaSource_ } from "./browser_compatibility_types";
18
18
 
19
+ /**
20
+ * Setting this value limit the number of entries in the support map
21
+ * preventing important memory usage, value is arbitrary
22
+ */
23
+ const MAX_SUPPORT_MAP_ENTRIES = 200;
24
+
25
+ /**
26
+ * caching the codec support reduce the amount of call to `isTypeSupported`
27
+ * and help for performance especially on low-end devices.
28
+ */
29
+ const supportMap: Map<string, boolean> = new Map();
19
30
  /**
20
31
  * Returns true if the given codec is supported by the browser's MediaSource
21
32
  * implementation.
@@ -33,7 +44,18 @@ export default function isCodecSupported(mimeType : string) : boolean {
33
44
  /* eslint-disable @typescript-eslint/unbound-method */
34
45
  if (typeof MediaSource_.isTypeSupported === "function") {
35
46
  /* eslint-enable @typescript-eslint/unbound-method */
36
- return MediaSource_.isTypeSupported(mimeType);
47
+ const cachedSupport = supportMap.get(mimeType);
48
+ if (cachedSupport !== undefined) {
49
+ return cachedSupport;
50
+ } else {
51
+ const isSupported = MediaSource_.isTypeSupported(mimeType);
52
+ if (supportMap.size >= MAX_SUPPORT_MAP_ENTRIES) {
53
+ supportMap.clear();
54
+ }
55
+ supportMap.set(mimeType, isSupported);
56
+ return isSupported;
57
+ }
58
+
37
59
  }
38
60
 
39
61
  return true;
@@ -14,8 +14,8 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import nextTick from "next-tick";
18
17
  import EventEmitter from "../utils/event_emitter";
18
+ import queueMicrotask from "../utils/queue_microtask";
19
19
  import globalScope from "./global_scope";
20
20
  import isNode from "./is_node";
21
21
 
@@ -57,7 +57,7 @@ export default function patchWebkitSourceBuffer() : void {
57
57
 
58
58
  sourceBufferWebkitProto._emitUpdate =
59
59
  function(eventName : string, val : unknown) {
60
- nextTick(() => {
60
+ queueMicrotask(() => {
61
61
  /* eslint-disable no-invalid-this */
62
62
  this.trigger(eventName, val);
63
63
  this.updating = false;
@@ -1,7 +1,7 @@
1
1
  import { Representation } from "../../../manifest";
2
2
  import { IBufferedChunk } from "../../segment_buffers";
3
3
 
4
- const BUFFER_WIDTH_IN_SECONDS = 10000;
4
+ const BUFFER_WIDTH_IN_SECONDS = 30 * 60;
5
5
 
6
6
  const COLORS = [
7
7
  "#2ab7ca",
@@ -95,10 +95,7 @@ export default class SegmentBufferGraph {
95
95
  let minimumPosition;
96
96
  let maximumPosition;
97
97
  if (maximumPoint - minimumPoint > BUFFER_WIDTH_IN_SECONDS) {
98
- if (currentTime === undefined) {
99
- minimumPosition = minimumPoint;
100
- maximumPosition = maximumPoint;
101
- } else if (maximumPoint - currentTime < BUFFER_WIDTH_IN_SECONDS / 2) {
98
+ if (maximumPoint - currentTime < BUFFER_WIDTH_IN_SECONDS / 2) {
102
99
  maximumPosition = maximumPoint;
103
100
  minimumPosition = maximumPoint - BUFFER_WIDTH_IN_SECONDS;
104
101
  } else if (currentTime - minimumPoint < BUFFER_WIDTH_IN_SECONDS / 2) {
@@ -157,23 +157,28 @@ export default function constructDebugGeneralInfo(
157
157
  ]);
158
158
  adaptationsElt.appendChild(textAdaps);
159
159
  }
160
- const videoBitrates = instance.getVideoTrack()?.representations.map(r => {
161
- return r.bitrate;
162
- }).filter(bitrate => bitrate !== undefined) ?? [];
163
- const audioBitrates = instance.getAudioTrack()?.representations.map(r => {
164
- return r.bitrate;
165
- }).filter(bitrate => bitrate !== undefined) ?? [];
160
+ const adaptations = instance.__priv_getCurrentAdaptation();
161
+ const videoBitratesStr = adaptations?.video?.representations.map((r) => {
162
+ return String(r.bitrate ?? "N/A") +
163
+ (r.isSupported ? "" : " U!") +
164
+ (r.decipherable !== false ? "" : " E!");
165
+ }) ?? [];
166
+ const audioBitratesStr = adaptations?.video?.representations.map((r) => {
167
+ return String(r.bitrate ?? "N/A") +
168
+ (r.isSupported ? "" : " U!") +
169
+ (r.decipherable !== false ? "" : " E!");
170
+ }) ?? [];
166
171
  representationsElt.innerHTML = "";
167
- if (videoBitrates.length > 0) {
172
+ if (videoBitratesStr.length > 0) {
168
173
  representationsElt.appendChild(createMetricTitle("vb"));
169
174
  representationsElt.appendChild(createElement("span", {
170
- textContent: videoBitrates.join(" ") + " ",
175
+ textContent: videoBitratesStr.join(" ") + " ",
171
176
  }));
172
177
  }
173
- if (audioBitrates.length > 0) {
178
+ if (audioBitratesStr.length > 0) {
174
179
  representationsElt.appendChild(createMetricTitle("ab"));
175
180
  representationsElt.appendChild(createElement("span", {
176
- textContent: audioBitrates.join(" ") + " ",
181
+ textContent: audioBitratesStr.join(" ") + " ",
177
182
  }));
178
183
  }
179
184
  } else {
@@ -42,6 +42,7 @@ export type IParsedStartAtOption = { position : number } |
42
42
  { wallClockTime : number } |
43
43
  { percentage : number } |
44
44
  { fromLastPosition : number } |
45
+ { fromLivePosition : number } |
45
46
  { fromFirstPosition : number };
46
47
 
47
48
  /** Options of the RxPlayer's constructor once parsed. */
@@ -226,6 +227,8 @@ function parseConstructorOptions(
226
227
  */
227
228
  function checkReloadOptions(options?: {
228
229
  reloadAt?: { position?: number; relative?: number };
230
+ keySystems?: IKeySystemOption[];
231
+ autoPlay?: boolean;
229
232
  }): void {
230
233
  if (options === null ||
231
234
  (typeof options !== "object" && options !== undefined)) {
@@ -243,6 +246,12 @@ function checkReloadOptions(options?: {
243
246
  options?.reloadAt?.relative !== undefined) {
244
247
  throw new Error("API: reload - Invalid 'reloadAt.relative' option format.");
245
248
  }
249
+ if (!Array.isArray(options?.keySystems) && options?.keySystems !== undefined) {
250
+ throw new Error("API: reload - Invalid 'keySystems' option format.");
251
+ }
252
+ if (options?.autoPlay !== undefined && typeof options.autoPlay !== "boolean") {
253
+ throw new Error("API: reload - Invalid 'autoPlay' option format.");
254
+ }
246
255
  }
247
256
 
248
257
  /**
@@ -375,9 +384,8 @@ function parseLoadVideoOptions(
375
384
  }
376
385
 
377
386
  if (!isNullOrUndefined(options.startAt)) {
378
- // TODO Better way to express that in TypeScript?
379
- if ((options.startAt as { wallClockTime? : Date|number }).wallClockTime
380
- instanceof Date
387
+ if ("wallClockTime" in options.startAt
388
+ && options.startAt.wallClockTime instanceof Date
381
389
  ) {
382
390
  const wallClockTime = (options.startAt as { wallClockTime : Date })
383
391
  .wallClockTime.getTime() / 1000;
@@ -56,6 +56,7 @@ import {
56
56
  IBrokenRepresentationsLockContext,
57
57
  IConstructorOptions,
58
58
  IKeySystemConfigurationOutput,
59
+ IKeySystemOption,
59
60
  ILoadVideoOptions,
60
61
  ILockedAudioRepresentationsSettings,
61
62
  ILockedVideoRepresentationsSettings,
@@ -345,7 +346,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
345
346
  // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
346
347
  videoElement.preload = "auto";
347
348
 
348
- this.version = /* PLAYER_VERSION */"4.0.0-dev.2023110700";
349
+ this.version = /* PLAYER_VERSION */"4.0.0-dev.2023120600";
349
350
  this.log = log;
350
351
  this.state = "STOPPED";
351
352
  this.videoElement = videoElement;
@@ -471,6 +472,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
471
472
  */
472
473
  reload(reloadOpts?: {
473
474
  reloadAt?: { position?: number; relative?: number };
475
+ keySystems?: IKeySystemOption[];
474
476
  autoPlay?: boolean;
475
477
  }): void {
476
478
  const { options,
@@ -503,6 +505,13 @@ class Player extends EventEmitter<IPublicAPIEvent> {
503
505
  autoPlay = !reloadInPause;
504
506
  }
505
507
 
508
+ let keySystems : IKeySystemOption[] | undefined;
509
+ if (reloadOpts?.keySystems !== undefined) {
510
+ keySystems = reloadOpts.keySystems;
511
+ } else if (this._priv_reloadingMetadata.options?.keySystems !== undefined) {
512
+ keySystems = this._priv_reloadingMetadata.options.keySystems;
513
+ }
514
+
506
515
  const newOptions = { ...options,
507
516
  initialManifest: manifest };
508
517
  if (startAt !== undefined) {
@@ -511,6 +520,9 @@ class Player extends EventEmitter<IPublicAPIEvent> {
511
520
  if (autoPlay !== undefined) {
512
521
  newOptions.autoPlay = autoPlay;
513
522
  }
523
+ if (keySystems !== undefined) {
524
+ newOptions.keySystems = keySystems;
525
+ }
514
526
  this._priv_initializeContentPlayback(newOptions);
515
527
  }
516
528
 
@@ -520,7 +532,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
520
532
  if (features.createDebugElement === null) {
521
533
  throw new Error("Feature `DEBUG_ELEMENT` not added to the RxPlayer");
522
534
  }
523
- const canceller = new TaskCanceller() ;
535
+ const canceller = new TaskCanceller();
524
536
  features.createDebugElement(element, this, canceller.signal);
525
537
  return {
526
538
  dispose() {
@@ -598,6 +610,8 @@ class Player extends EventEmitter<IPublicAPIEvent> {
598
610
  const manifestRequestSettings = { lowLatencyMode,
599
611
  maxRetry : requestConfig.manifest?.maxRetry,
600
612
  requestTimeout: requestConfig.manifest?.timeout,
613
+ connectionTimeout:
614
+ requestConfig.manifest?.connectionTimeout,
601
615
  minimumManifestUpdateInterval,
602
616
  initialManifest };
603
617
 
@@ -655,8 +669,9 @@ class Player extends EventEmitter<IPublicAPIEvent> {
655
669
 
656
670
  const segmentRequestOptions = { lowLatencyMode,
657
671
  maxRetry: requestConfig.segment?.maxRetry,
658
- requestTimeout: requestConfig.segment?.timeout };
659
-
672
+ requestTimeout: requestConfig.segment?.timeout,
673
+ connectionTimeout:
674
+ requestConfig.segment?.connectionTimeout };
660
675
  initializer = new features.mediaSourceInit({
661
676
  adaptiveOptions,
662
677
  autoPlay,
@@ -1946,6 +1961,29 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1946
1961
  return null;
1947
1962
  }
1948
1963
 
1964
+ /**
1965
+ * Returns the current position for live contents.
1966
+ *
1967
+ * Returns `null` if no content is loaded or if the current loaded content is
1968
+ * not considered as a live content.
1969
+ * Returns `undefined` if that live position is currently unknown.
1970
+ * @returns {number}
1971
+ */
1972
+ getLivePosition() : number | undefined |null {
1973
+ if (this._priv_contentInfos === null) {
1974
+ return null;
1975
+ }
1976
+
1977
+ const { isDirectFile, manifest } = this._priv_contentInfos;
1978
+ if (isDirectFile) {
1979
+ return undefined;
1980
+ }
1981
+ if (manifest?.isLive !== true) {
1982
+ return null;
1983
+ }
1984
+ return manifest.getLivePosition();
1985
+ }
1986
+
1949
1987
  /**
1950
1988
  * Get maximum seek-able position.
1951
1989
  * @returns {number}
@@ -1996,9 +2034,11 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1996
2034
  }
1997
2035
  const segmentBufferStatus = this._priv_contentInfos
1998
2036
  .segmentBuffersStore.getStatus(bufferType);
1999
- return segmentBufferStatus.type === "initialized" ?
2000
- segmentBufferStatus.value.getInventory() :
2001
- null;
2037
+ if (segmentBufferStatus.type === "initialized") {
2038
+ segmentBufferStatus.value.synchronizeInventory();
2039
+ return segmentBufferStatus.value.getInventory();
2040
+ }
2041
+ return null;
2002
2042
  }
2003
2043
 
2004
2044
  /**
@@ -2772,7 +2812,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
2772
2812
  }
2773
2813
  }
2774
2814
  }
2775
- Player.version = /* PLAYER_VERSION */"4.0.0-dev.2023110700";
2815
+ Player.version = /* PLAYER_VERSION */"4.0.0-dev.2023120600";
2776
2816
 
2777
2817
  /** Every events sent by the RxPlayer's public API. */
2778
2818
  interface IPublicAPIEvent {
@@ -29,7 +29,6 @@ import {
29
29
  ITransportPipelines,
30
30
  } from "../../../transports";
31
31
  import EventEmitter from "../../../utils/event_emitter";
32
- import isNullOrUndefined from "../../../utils/is_null_or_undefined";
33
32
  import getMonotonicTimeStamp from "../../../utils/monotonic_timestamp";
34
33
  import noop from "../../../utils/noop";
35
34
  import TaskCanceller from "../../../utils/task_canceller";
@@ -231,14 +230,27 @@ export default class ManifestFetcher extends EventEmitter<IManifestFetcherEvent>
231
230
  ) : Promise<IRequestedData<ILoadedManifestFormat>> {
232
231
  const { loadManifest } = pipelines;
233
232
  let requestTimeout : number | undefined =
234
- isNullOrUndefined(settings.requestTimeout) ?
233
+ (settings.requestTimeout === undefined) ?
235
234
  config.getCurrent().DEFAULT_REQUEST_TIMEOUT :
236
235
  settings.requestTimeout;
236
+
237
+ let connectionTimeout: number | undefined =
238
+ (settings.connectionTimeout === undefined) ?
239
+ config.getCurrent().DEFAULT_CONNECTION_TIMEOUT :
240
+ settings.connectionTimeout;
241
+
237
242
  if (requestTimeout < 0) {
238
243
  requestTimeout = undefined;
239
244
  }
245
+
246
+ if (connectionTimeout < 0) {
247
+ connectionTimeout = undefined;
248
+ }
240
249
  const callLoader = () => loadManifest(manifestUrl,
241
- { timeout: requestTimeout },
250
+ {
251
+ timeout: requestTimeout,
252
+ connectionTimeout,
253
+ },
242
254
  cancelSignal);
243
255
  return scheduleRequestPromise(callLoader, backoffSettings, cancelSignal);
244
256
  }
@@ -722,6 +734,12 @@ export interface IManifestFetcherSettings {
722
734
  * `undefined` will lead to a default, large, timeout being used.
723
735
  */
724
736
  requestTimeout : number | undefined;
737
+ /**
738
+ * Connection timeout, in milliseconds, after which the request is canceled
739
+ * if the responses headers has not being received.
740
+ * Do not set or set to "undefined" to disable it.
741
+ */
742
+ connectionTimeout: number | undefined;
725
743
  /** Limit the frequency of Manifest updates. */
726
744
  minimumManifestUpdateInterval : number;
727
745
  /**
@@ -93,6 +93,8 @@ export default function createSegmentFetcher<TLoadedFormat, TSegmentDataType>(
93
93
  const requestOptions = {
94
94
  timeout: options.requestTimeout < 0 ? undefined :
95
95
  options.requestTimeout,
96
+ connectionTimeout: options.connectionTimeout === undefined ? undefined :
97
+ options.connectionTimeout < 0 ? undefined : options.connectionTimeout,
96
98
  };
97
99
 
98
100
  /**
@@ -457,6 +459,12 @@ export interface ISegmentFetcherOptions {
457
459
  * To set to `-1` for no timeout.
458
460
  */
459
461
  requestTimeout : number;
462
+ /**
463
+ * Connection timeout, in milliseconds, after which the request is canceled
464
+ * if the responses headers has not being received.
465
+ * Do not set or set to "undefined" to disable it.
466
+ */
467
+ connectionTimeout: number | undefined;
460
468
  }
461
469
 
462
470
  /**
@@ -467,12 +475,15 @@ export interface ISegmentFetcherOptions {
467
475
  export function getSegmentFetcherOptions(
468
476
  { maxRetry,
469
477
  lowLatencyMode,
470
- requestTimeout } : { maxRetry? : number | undefined;
471
- requestTimeout? : number | undefined;
472
- lowLatencyMode : boolean; }
478
+ requestTimeout,
479
+ connectionTimeout } : { maxRetry? : number | undefined;
480
+ requestTimeout? : number | undefined;
481
+ connectionTimeout? : number | undefined;
482
+ lowLatencyMode : boolean; }
473
483
  ) : ISegmentFetcherOptions {
474
484
  const { DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR,
475
485
  DEFAULT_REQUEST_TIMEOUT,
486
+ DEFAULT_CONNECTION_TIMEOUT,
476
487
  INITIAL_BACKOFF_DELAY_BASE,
477
488
  MAX_BACKOFF_DELAY_BASE } = config.getCurrent();
478
489
  return { maxRetry: maxRetry ?? DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR,
@@ -480,6 +491,9 @@ export function getSegmentFetcherOptions(
480
491
  INITIAL_BACKOFF_DELAY_BASE.REGULAR,
481
492
  maxDelay: lowLatencyMode ? MAX_BACKOFF_DELAY_BASE.LOW_LATENCY :
482
493
  MAX_BACKOFF_DELAY_BASE.REGULAR,
483
- requestTimeout: isNullOrUndefined(requestTimeout) ? DEFAULT_REQUEST_TIMEOUT :
484
- requestTimeout };
494
+ requestTimeout: (requestTimeout === undefined) ? DEFAULT_REQUEST_TIMEOUT :
495
+ requestTimeout,
496
+ connectionTimeout: (connectionTimeout === undefined) ?
497
+ DEFAULT_CONNECTION_TIMEOUT : connectionTimeout,
498
+ };
485
499
  }
@@ -124,4 +124,5 @@ export interface ISegmentFetcherCreatorBackoffOptions {
124
124
  * `undefined` will lead to a default, large, timeout being used.
125
125
  */
126
126
  requestTimeout : number | undefined;
127
+ connectionTimeout : number | undefined;
127
128
  }
@@ -352,7 +352,7 @@ export async function scheduleRequestWithCdns<T>(
352
352
  * attempts already done for that resource.
353
353
  *
354
354
  * Returns `undefined` if there's no Cdn left to request the resource.
355
- * @param {Array.<Object>}
355
+ * @param {Array.<Object>} sortedCdns
356
356
  * @returns {Object|undefined}
357
357
  */
358
358
  function getPrioritaryRequestableCdnFromSortedList(
@@ -27,6 +27,7 @@ import {
27
27
  IPlayerError,
28
28
  } from "../../public_types";
29
29
  import assert from "../../utils/assert";
30
+ import isNullOrUndefined from "../../utils/is_null_or_undefined";
30
31
  import SharedReference, {
31
32
  IReadOnlySharedReference,
32
33
  } from "../../utils/reference";
@@ -241,11 +242,11 @@ function getDirectFileInitialTime(
241
242
  mediaElement : HTMLMediaElement,
242
243
  startAt? : IInitialTimeOptions
243
244
  ) : number {
244
- if (startAt == null) {
245
+ if (isNullOrUndefined(startAt)) {
245
246
  return 0;
246
247
  }
247
248
 
248
- if (startAt.position != null) {
249
+ if (!isNullOrUndefined(startAt.position)) {
249
250
  return startAt.position;
250
251
  } else if (startAt.wallClockTime != null) {
251
252
  return startAt.wallClockTime;
@@ -254,15 +255,30 @@ function getDirectFileInitialTime(
254
255
  }
255
256
 
256
257
  const duration = mediaElement.duration;
257
- if (duration == null || !isFinite(duration)) {
258
- log.warn("startAt.fromLastPosition set but no known duration, " +
259
- "beginning at 0.");
260
- return 0;
261
- }
262
258
 
263
259
  if (typeof startAt.fromLastPosition === "number") {
260
+ if (isNullOrUndefined(duration) || !isFinite(duration)) {
261
+ log.warn("startAt.fromLastPosition set but no known duration, " +
262
+ "beginning at 0.");
263
+ return 0;
264
+ }
264
265
  return Math.max(0, duration + startAt.fromLastPosition);
266
+ } else if (typeof startAt.fromLivePosition === "number") {
267
+ const livePosition = mediaElement.seekable.length > 0 ?
268
+ mediaElement.seekable.end(0) :
269
+ duration;
270
+ if (isNullOrUndefined(livePosition)) {
271
+ log.warn("startAt.fromLivePosition set but no known live position, " +
272
+ "beginning at 0.");
273
+ return 0;
274
+ }
275
+ return Math.max(0, livePosition + startAt.fromLivePosition);
265
276
  } else if (startAt.percentage != null) {
277
+ if (isNullOrUndefined(duration) || !isFinite(duration)) {
278
+ log.warn("startAt.percentage set but no known duration, " +
279
+ "beginning at 0.");
280
+ return 0;
281
+ }
266
282
  const { percentage } = startAt;
267
283
  if (percentage >= 100) {
268
284
  return duration;
@@ -541,7 +541,7 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
541
541
  if (
542
542
  // Data is buffered around the current position
543
543
  obs.currentRange !== null ||
544
- // Or, for whatever reason, playback is already advancing
544
+ // Or, for whatever reason, we have no buffer but we're already advancing
545
545
  obs.position > seekedTime + 0.1
546
546
  ) {
547
547
  stopListening();
@@ -728,9 +728,10 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
728
728
  contentTimeBoundariesObserver.addEventListener("periodChange", (period) => {
729
729
  this.trigger("activePeriodChanged", { period });
730
730
  });
731
- contentTimeBoundariesObserver.addEventListener("durationUpdate", (newDuration) => {
732
- mediaSourceDurationUpdater.updateDuration(newDuration.duration, newDuration.isEnd);
733
- });
731
+ contentTimeBoundariesObserver.addEventListener(
732
+ "endingPositionChange",
733
+ (x) => mediaSourceDurationUpdater.updateDuration(x.endingPosition, x.isEnd)
734
+ );
734
735
  contentTimeBoundariesObserver.addEventListener("endOfStream", () => {
735
736
  if (endOfStreamCanceller === null) {
736
737
  endOfStreamCanceller = new TaskCanceller();
@@ -746,9 +747,8 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
746
747
  endOfStreamCanceller = null;
747
748
  }
748
749
  });
749
- const currentDuration = contentTimeBoundariesObserver.getCurrentDuration();
750
- mediaSourceDurationUpdater.updateDuration(currentDuration.duration,
751
- currentDuration.isEnd);
750
+ const endInfo = contentTimeBoundariesObserver.getCurrentEndingTime();
751
+ mediaSourceDurationUpdater.updateDuration(endInfo.endingPosition, endInfo.isEnd);
752
752
  return contentTimeBoundariesObserver;
753
753
  }
754
754
 
@@ -835,6 +835,12 @@ export interface IInitializeArguments {
835
835
  * `-1` indicates no timeout.
836
836
  */
837
837
  requestTimeout : number | undefined;
838
+ /**
839
+ * Amount of time, in milliseconds, after which a request that hasn't receive
840
+ * the headers and status code should be aborted and optionnaly retried,
841
+ * depending on the maxRetry configuration.
842
+ */
843
+ connectionTimeout : number | undefined;
838
844
  /** Maximum number of time a request on error will be retried. */
839
845
  maxRetry : number | undefined;
840
846
  };