rx-player 4.4.0 → 4.4.1-dev.2025101500

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 (341) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +52 -113
  3. package/VERSION +1 -1
  4. package/dist/commonjs/__GENERATED_CODE/embedded_worker.d.ts.map +1 -1
  5. package/dist/commonjs/__GENERATED_CODE/embedded_worker.js +1 -1
  6. package/dist/commonjs/core/{main/common → entry}/FreezeResolver.d.ts +3 -3
  7. package/dist/commonjs/core/entry/FreezeResolver.d.ts.map +1 -0
  8. package/dist/commonjs/core/{main/common → entry}/FreezeResolver.js +3 -3
  9. package/dist/{es2017/core/main/worker → commonjs/core/entry}/content_preparer.d.ts +22 -15
  10. package/dist/commonjs/core/entry/content_preparer.d.ts.map +1 -0
  11. package/dist/commonjs/core/{main/worker → entry}/content_preparer.js +62 -64
  12. package/dist/{es2017/core/main/common → commonjs/core/entry}/content_time_boundaries_observer.d.ts +5 -5
  13. package/dist/commonjs/core/entry/content_time_boundaries_observer.d.ts.map +1 -0
  14. package/dist/commonjs/core/{main/common → entry}/content_time_boundaries_observer.js +6 -6
  15. package/dist/commonjs/core/entry/core_entry.d.ts +36 -0
  16. package/dist/commonjs/core/entry/core_entry.d.ts.map +1 -0
  17. package/dist/commonjs/core/{main/worker/worker_main.js → entry/core_entry.js} +192 -153
  18. package/dist/commonjs/core/{main/worker/worker_text_displayer_interface.d.ts → entry/core_text_displayer_interface.d.ts} +11 -11
  19. package/dist/commonjs/core/entry/core_text_displayer_interface.d.ts.map +1 -0
  20. package/dist/commonjs/core/{main/worker/worker_text_displayer_interface.js → entry/core_text_displayer_interface.js} +22 -22
  21. package/dist/commonjs/core/{main/common → entry}/create_content_time_boundaries_observer.d.ts +6 -6
  22. package/dist/commonjs/core/entry/create_content_time_boundaries_observer.d.ts.map +1 -0
  23. package/dist/commonjs/core/{main/common → entry}/create_content_time_boundaries_observer.js +1 -1
  24. package/dist/commonjs/core/{main/common → entry}/get_buffered_data_per_media_buffer.d.ts +4 -4
  25. package/dist/commonjs/core/entry/get_buffered_data_per_media_buffer.d.ts.map +1 -0
  26. package/dist/commonjs/core/{main/common → entry}/get_buffered_data_per_media_buffer.js +1 -1
  27. package/dist/{es2017/core/main/common → commonjs/core/entry}/get_thumbnail_data.d.ts +3 -3
  28. package/dist/commonjs/core/entry/get_thumbnail_data.d.ts.map +1 -0
  29. package/dist/commonjs/core/{main/common → entry}/get_thumbnail_data.js +2 -2
  30. package/dist/commonjs/core/entry/index.d.ts +5 -0
  31. package/dist/commonjs/core/entry/index.d.ts.map +1 -0
  32. package/dist/commonjs/core/entry/index.js +4 -0
  33. package/dist/{es2017/core/main/common → commonjs/core/entry}/synchronize_sinks_on_observation.d.ts +2 -2
  34. package/dist/commonjs/core/entry/synchronize_sinks_on_observation.d.ts.map +1 -0
  35. package/dist/commonjs/core/{main/worker → entry}/track_choice_setter.d.ts +4 -4
  36. package/dist/commonjs/core/entry/track_choice_setter.d.ts.map +1 -0
  37. package/dist/commonjs/core/{main/worker → entry}/track_choice_setter.js +4 -4
  38. package/dist/commonjs/core/entry/utils.d.ts +3 -0
  39. package/dist/commonjs/core/entry/utils.d.ts.map +1 -0
  40. package/dist/commonjs/core/entry/utils.js +11 -0
  41. package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.d.ts.map +1 -1
  42. package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.js +17 -0
  43. package/dist/commonjs/core/types.d.ts +519 -1
  44. package/dist/commonjs/core/types.d.ts.map +1 -1
  45. package/dist/commonjs/core/types.js +1 -0
  46. package/dist/commonjs/experimental/features/local.d.ts.map +1 -1
  47. package/dist/commonjs/experimental/features/local.js +7 -1
  48. package/dist/commonjs/experimental/features/metaplaylist.d.ts.map +1 -1
  49. package/dist/commonjs/experimental/features/metaplaylist.js +7 -1
  50. package/dist/commonjs/experimental/features/multi_thread.d.ts.map +1 -1
  51. package/dist/commonjs/experimental/features/multi_thread.js +6 -2
  52. package/dist/commonjs/features/features_object.js +1 -1
  53. package/dist/commonjs/features/list/dash.d.ts.map +1 -1
  54. package/dist/commonjs/features/list/dash.js +7 -1
  55. package/dist/commonjs/features/list/dash_wasm.d.ts.map +1 -1
  56. package/dist/commonjs/features/list/dash_wasm.js +7 -1
  57. package/dist/commonjs/features/list/media_source_main.d.ts.map +1 -1
  58. package/dist/commonjs/features/list/media_source_main.js +7 -1
  59. package/dist/commonjs/features/list/smooth.d.ts.map +1 -1
  60. package/dist/commonjs/features/list/smooth.js +7 -1
  61. package/dist/commonjs/features/types.d.ts +20 -4
  62. package/dist/commonjs/features/types.d.ts.map +1 -1
  63. package/dist/commonjs/main_thread/api/public_api.d.ts.map +1 -1
  64. package/dist/commonjs/main_thread/api/public_api.js +39 -42
  65. package/dist/commonjs/main_thread/core_interface/base.d.ts +13 -0
  66. package/dist/commonjs/main_thread/core_interface/base.d.ts.map +1 -0
  67. package/dist/commonjs/main_thread/core_interface/base.js +32 -0
  68. package/dist/commonjs/main_thread/core_interface/monothread.d.ts +13 -0
  69. package/dist/commonjs/main_thread/core_interface/monothread.d.ts.map +1 -0
  70. package/dist/commonjs/main_thread/core_interface/monothread.js +56 -0
  71. package/dist/commonjs/main_thread/core_interface/multithread.d.ts +25 -0
  72. package/dist/commonjs/main_thread/core_interface/multithread.d.ts.map +1 -0
  73. package/dist/commonjs/main_thread/core_interface/multithread.js +67 -0
  74. package/dist/commonjs/main_thread/core_interface/types.d.ts +6 -0
  75. package/dist/commonjs/main_thread/core_interface/types.d.ts.map +1 -0
  76. package/dist/commonjs/main_thread/core_interface/types.js +2 -0
  77. package/dist/commonjs/main_thread/init/media_source_content_initializer.d.ts +166 -108
  78. package/dist/commonjs/main_thread/init/media_source_content_initializer.d.ts.map +1 -1
  79. package/dist/commonjs/main_thread/init/media_source_content_initializer.js +1492 -919
  80. package/dist/commonjs/main_thread/init/utils/create_core_playback_observer.d.ts.map +1 -1
  81. package/dist/commonjs/main_thread/init/utils/create_core_playback_observer.js +2 -1
  82. package/dist/commonjs/main_thread/init/utils/update_manifest_codec_support.d.ts +1 -1
  83. package/dist/commonjs/main_thread/init/utils/update_manifest_codec_support.d.ts.map +1 -1
  84. package/dist/commonjs/main_thread/types.d.ts +537 -0
  85. package/dist/commonjs/main_thread/types.d.ts.map +1 -1
  86. package/dist/commonjs/manifest/utils.d.ts.map +1 -1
  87. package/dist/commonjs/manifest/utils.js +18 -4
  88. package/dist/commonjs/mse/worker_media_source_interface.d.ts +2 -2
  89. package/dist/commonjs/mse/worker_media_source_interface.d.ts.map +1 -1
  90. package/dist/commonjs/mse/worker_media_source_interface.js +12 -12
  91. package/dist/commonjs/parsers/manifest/smooth/create_parser.d.ts +1 -1
  92. package/dist/commonjs/parsers/manifest/smooth/create_parser.d.ts.map +1 -1
  93. package/dist/commonjs/parsers/manifest/smooth/create_parser.js +31 -27
  94. package/dist/commonjs/parsers/manifest/smooth/parse_C_nodes.d.ts +3 -2
  95. package/dist/commonjs/parsers/manifest/smooth/parse_C_nodes.d.ts.map +1 -1
  96. package/dist/commonjs/parsers/manifest/smooth/parse_C_nodes.js +16 -7
  97. package/dist/commonjs/parsers/manifest/smooth/parse_protection_node.d.ts +3 -2
  98. package/dist/commonjs/parsers/manifest/smooth/parse_protection_node.d.ts.map +1 -1
  99. package/dist/commonjs/parsers/manifest/smooth/parse_protection_node.js +37 -6
  100. package/dist/commonjs/parsers/manifest/smooth/utils/parseBoolean.d.ts +1 -1
  101. package/dist/commonjs/parsers/manifest/smooth/utils/parseBoolean.d.ts.map +1 -1
  102. package/dist/commonjs/parsers/manifest/smooth/utils/reduceChildren.d.ts +3 -2
  103. package/dist/commonjs/parsers/manifest/smooth/utils/reduceChildren.d.ts.map +1 -1
  104. package/dist/commonjs/parsers/manifest/smooth/utils/reduceChildren.js +28 -5
  105. package/dist/{es2017/playback_observer/worker_playback_observer.d.ts → commonjs/playback_observer/core_playback_observer.d.ts} +8 -8
  106. package/dist/commonjs/playback_observer/core_playback_observer.d.ts.map +1 -0
  107. package/dist/commonjs/playback_observer/{worker_playback_observer.js → core_playback_observer.js} +13 -13
  108. package/dist/commonjs/transports/smooth/pipelines.d.ts.map +1 -1
  109. package/dist/commonjs/transports/smooth/pipelines.js +25 -3
  110. package/dist/commonjs/worker_entry_point.js +62 -2
  111. package/dist/es2017/__GENERATED_CODE/embedded_worker.d.ts.map +1 -1
  112. package/dist/es2017/__GENERATED_CODE/embedded_worker.js +1 -1
  113. package/dist/es2017/core/{main/common → entry}/FreezeResolver.d.ts +3 -3
  114. package/dist/es2017/core/entry/FreezeResolver.d.ts.map +1 -0
  115. package/dist/es2017/core/{main/common → entry}/FreezeResolver.js +3 -3
  116. package/dist/{commonjs/core/main/worker → es2017/core/entry}/content_preparer.d.ts +22 -15
  117. package/dist/es2017/core/entry/content_preparer.d.ts.map +1 -0
  118. package/dist/es2017/core/{main/worker → entry}/content_preparer.js +53 -55
  119. package/dist/{commonjs/core/main/common → es2017/core/entry}/content_time_boundaries_observer.d.ts +5 -5
  120. package/dist/es2017/core/entry/content_time_boundaries_observer.d.ts.map +1 -0
  121. package/dist/es2017/core/{main/common → entry}/content_time_boundaries_observer.js +6 -6
  122. package/dist/es2017/core/entry/core_entry.d.ts +36 -0
  123. package/dist/es2017/core/entry/core_entry.d.ts.map +1 -0
  124. package/dist/es2017/core/{main/worker/worker_main.js → entry/core_entry.js} +153 -114
  125. package/dist/es2017/core/{main/worker/worker_text_displayer_interface.d.ts → entry/core_text_displayer_interface.d.ts} +11 -11
  126. package/dist/es2017/core/entry/core_text_displayer_interface.d.ts.map +1 -0
  127. package/dist/es2017/core/{main/worker/worker_text_displayer_interface.js → entry/core_text_displayer_interface.js} +10 -10
  128. package/dist/es2017/core/{main/common → entry}/create_content_time_boundaries_observer.d.ts +6 -6
  129. package/dist/es2017/core/entry/create_content_time_boundaries_observer.d.ts.map +1 -0
  130. package/dist/es2017/core/{main/common → entry}/create_content_time_boundaries_observer.js +1 -1
  131. package/dist/es2017/core/{main/common → entry}/get_buffered_data_per_media_buffer.d.ts +4 -4
  132. package/dist/es2017/core/entry/get_buffered_data_per_media_buffer.d.ts.map +1 -0
  133. package/dist/es2017/core/{main/common → entry}/get_buffered_data_per_media_buffer.js +1 -1
  134. package/dist/{commonjs/core/main/common → es2017/core/entry}/get_thumbnail_data.d.ts +3 -3
  135. package/dist/es2017/core/entry/get_thumbnail_data.d.ts.map +1 -0
  136. package/dist/es2017/core/{main/common → entry}/get_thumbnail_data.js +2 -2
  137. package/dist/es2017/core/entry/index.d.ts +5 -0
  138. package/dist/es2017/core/entry/index.d.ts.map +1 -0
  139. package/dist/es2017/core/entry/index.js +2 -0
  140. package/dist/{commonjs/core/main/common → es2017/core/entry}/synchronize_sinks_on_observation.d.ts +2 -2
  141. package/dist/es2017/core/entry/synchronize_sinks_on_observation.d.ts.map +1 -0
  142. package/dist/es2017/core/{main/worker → entry}/track_choice_setter.d.ts +4 -4
  143. package/dist/es2017/core/entry/track_choice_setter.d.ts.map +1 -0
  144. package/dist/es2017/core/{main/worker → entry}/track_choice_setter.js +4 -4
  145. package/dist/es2017/core/entry/utils.d.ts +3 -0
  146. package/dist/es2017/core/entry/utils.d.ts.map +1 -0
  147. package/dist/es2017/core/entry/utils.js +8 -0
  148. package/dist/es2017/core/stream/orchestrator/stream_orchestrator.d.ts.map +1 -1
  149. package/dist/es2017/core/stream/orchestrator/stream_orchestrator.js +18 -1
  150. package/dist/es2017/core/types.d.ts +519 -1
  151. package/dist/es2017/core/types.d.ts.map +1 -1
  152. package/dist/es2017/core/types.js +1 -0
  153. package/dist/es2017/experimental/features/local.d.ts.map +1 -1
  154. package/dist/es2017/experimental/features/local.js +7 -1
  155. package/dist/es2017/experimental/features/metaplaylist.d.ts.map +1 -1
  156. package/dist/es2017/experimental/features/metaplaylist.js +7 -1
  157. package/dist/es2017/experimental/features/multi_thread.d.ts.map +1 -1
  158. package/dist/es2017/experimental/features/multi_thread.js +6 -2
  159. package/dist/es2017/features/features_object.js +1 -1
  160. package/dist/es2017/features/list/dash.d.ts.map +1 -1
  161. package/dist/es2017/features/list/dash.js +7 -1
  162. package/dist/es2017/features/list/dash_wasm.d.ts.map +1 -1
  163. package/dist/es2017/features/list/dash_wasm.js +7 -1
  164. package/dist/es2017/features/list/media_source_main.d.ts.map +1 -1
  165. package/dist/es2017/features/list/media_source_main.js +7 -1
  166. package/dist/es2017/features/list/smooth.d.ts.map +1 -1
  167. package/dist/es2017/features/list/smooth.js +7 -1
  168. package/dist/es2017/features/types.d.ts +20 -4
  169. package/dist/es2017/features/types.d.ts.map +1 -1
  170. package/dist/es2017/main_thread/api/public_api.d.ts.map +1 -1
  171. package/dist/es2017/main_thread/api/public_api.js +40 -43
  172. package/dist/es2017/main_thread/core_interface/base.d.ts +13 -0
  173. package/dist/es2017/main_thread/core_interface/base.d.ts.map +1 -0
  174. package/dist/es2017/main_thread/core_interface/base.js +28 -0
  175. package/dist/es2017/main_thread/core_interface/monothread.d.ts +13 -0
  176. package/dist/es2017/main_thread/core_interface/monothread.d.ts.map +1 -0
  177. package/dist/es2017/main_thread/core_interface/monothread.js +32 -0
  178. package/dist/es2017/main_thread/core_interface/multithread.d.ts +25 -0
  179. package/dist/es2017/main_thread/core_interface/multithread.d.ts.map +1 -0
  180. package/dist/es2017/main_thread/core_interface/multithread.js +45 -0
  181. package/dist/es2017/main_thread/core_interface/types.d.ts +6 -0
  182. package/dist/es2017/main_thread/core_interface/types.d.ts.map +1 -0
  183. package/dist/es2017/main_thread/core_interface/types.js +1 -0
  184. package/dist/es2017/main_thread/init/media_source_content_initializer.d.ts +166 -108
  185. package/dist/es2017/main_thread/init/media_source_content_initializer.d.ts.map +1 -1
  186. package/dist/es2017/main_thread/init/media_source_content_initializer.js +1405 -760
  187. package/dist/es2017/main_thread/init/utils/create_core_playback_observer.d.ts.map +1 -1
  188. package/dist/es2017/main_thread/init/utils/create_core_playback_observer.js +2 -1
  189. package/dist/es2017/main_thread/init/utils/update_manifest_codec_support.d.ts +1 -1
  190. package/dist/es2017/main_thread/init/utils/update_manifest_codec_support.d.ts.map +1 -1
  191. package/dist/es2017/main_thread/types.d.ts +537 -0
  192. package/dist/es2017/main_thread/types.d.ts.map +1 -1
  193. package/dist/es2017/manifest/utils.d.ts.map +1 -1
  194. package/dist/es2017/manifest/utils.js +16 -4
  195. package/dist/es2017/mse/worker_media_source_interface.d.ts +2 -2
  196. package/dist/es2017/mse/worker_media_source_interface.d.ts.map +1 -1
  197. package/dist/es2017/mse/worker_media_source_interface.js +12 -12
  198. package/dist/es2017/parsers/manifest/smooth/create_parser.d.ts +1 -1
  199. package/dist/es2017/parsers/manifest/smooth/create_parser.d.ts.map +1 -1
  200. package/dist/es2017/parsers/manifest/smooth/create_parser.js +31 -27
  201. package/dist/es2017/parsers/manifest/smooth/parse_C_nodes.d.ts +3 -2
  202. package/dist/es2017/parsers/manifest/smooth/parse_C_nodes.d.ts.map +1 -1
  203. package/dist/es2017/parsers/manifest/smooth/parse_C_nodes.js +16 -7
  204. package/dist/es2017/parsers/manifest/smooth/parse_protection_node.d.ts +3 -2
  205. package/dist/es2017/parsers/manifest/smooth/parse_protection_node.d.ts.map +1 -1
  206. package/dist/es2017/parsers/manifest/smooth/parse_protection_node.js +15 -6
  207. package/dist/es2017/parsers/manifest/smooth/utils/parseBoolean.d.ts +1 -1
  208. package/dist/es2017/parsers/manifest/smooth/utils/parseBoolean.d.ts.map +1 -1
  209. package/dist/es2017/parsers/manifest/smooth/utils/reduceChildren.d.ts +3 -2
  210. package/dist/es2017/parsers/manifest/smooth/utils/reduceChildren.d.ts.map +1 -1
  211. package/dist/es2017/parsers/manifest/smooth/utils/reduceChildren.js +6 -5
  212. package/dist/{commonjs/playback_observer/worker_playback_observer.d.ts → es2017/playback_observer/core_playback_observer.d.ts} +8 -8
  213. package/dist/es2017/playback_observer/core_playback_observer.d.ts.map +1 -0
  214. package/dist/es2017/playback_observer/{worker_playback_observer.js → core_playback_observer.js} +2 -2
  215. package/dist/es2017/transports/smooth/pipelines.d.ts.map +1 -1
  216. package/dist/es2017/transports/smooth/pipelines.js +25 -3
  217. package/dist/es2017/worker_entry_point.js +62 -2
  218. package/dist/rx-player.js +21882 -19021
  219. package/dist/rx-player.min.js +20 -20
  220. package/dist/worker.js +8 -8
  221. package/package.json +1 -1
  222. package/src/README.md +88 -198
  223. package/src/__GENERATED_CODE/embedded_worker.ts +1 -1
  224. package/src/core/{main/common → entry}/FreezeResolver.ts +7 -7
  225. package/src/core/{main → entry}/README.md +1 -1
  226. package/src/core/{main/worker → entry}/content_preparer.ts +77 -76
  227. package/src/core/{main/common → entry}/content_time_boundaries_observer.ts +10 -10
  228. package/src/core/{main/worker/worker_main.ts → entry/core_entry.ts} +223 -149
  229. package/src/core/{main/worker/worker_text_displayer_interface.ts → entry/core_text_displayer_interface.ts} +26 -26
  230. package/src/core/{main/common → entry}/create_content_time_boundaries_observer.ts +7 -7
  231. package/src/core/{main/common → entry}/get_buffered_data_per_media_buffer.ts +6 -6
  232. package/src/core/{main/common → entry}/get_thumbnail_data.ts +5 -5
  233. package/src/core/entry/index.ts +4 -0
  234. package/src/core/{main/common → entry}/synchronize_sinks_on_observation.ts +2 -2
  235. package/src/core/{main/worker → entry}/track_choice_setter.ts +7 -7
  236. package/src/core/entry/utils.ts +11 -0
  237. package/src/core/stream/orchestrator/stream_orchestrator.ts +26 -1
  238. package/src/core/types.ts +631 -3
  239. package/src/experimental/features/__tests__/local.test.ts +11 -2
  240. package/src/experimental/features/__tests__/metaplaylist.test.ts +11 -2
  241. package/src/experimental/features/__tests__/multi_thread.test.ts +8 -3
  242. package/src/experimental/features/local.ts +7 -1
  243. package/src/experimental/features/metaplaylist.ts +7 -1
  244. package/src/experimental/features/multi_thread.ts +6 -2
  245. package/src/features/features_object.ts +1 -1
  246. package/src/features/list/__tests__/dash.test.ts +12 -3
  247. package/src/features/list/__tests__/smooth.test.ts +11 -2
  248. package/src/features/list/dash.ts +7 -1
  249. package/src/features/list/dash_wasm.ts +7 -1
  250. package/src/features/list/media_source_main.ts +7 -1
  251. package/src/features/list/smooth.ts +7 -1
  252. package/src/features/types.ts +23 -4
  253. package/src/main_thread/README.md +8 -0
  254. package/src/main_thread/api/public_api.ts +46 -48
  255. package/src/main_thread/core_interface/README.md +22 -0
  256. package/src/main_thread/core_interface/base.ts +36 -0
  257. package/src/main_thread/core_interface/monothread.ts +46 -0
  258. package/src/main_thread/core_interface/multithread.ts +49 -0
  259. package/src/main_thread/core_interface/types.ts +5 -0
  260. package/src/main_thread/init/media_source_content_initializer.ts +2034 -1152
  261. package/src/main_thread/init/utils/create_core_playback_observer.ts +2 -1
  262. package/src/main_thread/init/utils/update_manifest_codec_support.ts +1 -1
  263. package/src/main_thread/types.ts +610 -0
  264. package/src/manifest/utils.ts +20 -4
  265. package/src/mse/worker_media_source_interface.ts +35 -35
  266. package/src/parsers/manifest/smooth/create_parser.ts +40 -34
  267. package/src/parsers/manifest/smooth/parse_C_nodes.ts +19 -8
  268. package/src/parsers/manifest/smooth/parse_protection_node.ts +17 -9
  269. package/src/parsers/manifest/smooth/utils/parseBoolean.ts +1 -1
  270. package/src/parsers/manifest/smooth/utils/reduceChildren.ts +10 -7
  271. package/src/playback_observer/{worker_playback_observer.ts → core_playback_observer.ts} +13 -13
  272. package/src/transports/smooth/pipelines.ts +25 -5
  273. package/src/worker_entry_point.ts +71 -2
  274. package/dist/commonjs/core/main/common/FreezeResolver.d.ts.map +0 -1
  275. package/dist/commonjs/core/main/common/content_time_boundaries_observer.d.ts.map +0 -1
  276. package/dist/commonjs/core/main/common/create_content_time_boundaries_observer.d.ts.map +0 -1
  277. package/dist/commonjs/core/main/common/get_buffered_data_per_media_buffer.d.ts.map +0 -1
  278. package/dist/commonjs/core/main/common/get_thumbnail_data.d.ts.map +0 -1
  279. package/dist/commonjs/core/main/common/synchronize_sinks_on_observation.d.ts.map +0 -1
  280. package/dist/commonjs/core/main/worker/content_preparer.d.ts.map +0 -1
  281. package/dist/commonjs/core/main/worker/globals.d.ts +0 -14
  282. package/dist/commonjs/core/main/worker/globals.d.ts.map +0 -1
  283. package/dist/commonjs/core/main/worker/globals.js +0 -26
  284. package/dist/commonjs/core/main/worker/index.d.ts +0 -3
  285. package/dist/commonjs/core/main/worker/index.d.ts.map +0 -1
  286. package/dist/commonjs/core/main/worker/index.js +0 -4
  287. package/dist/commonjs/core/main/worker/send_message.d.ts +0 -4
  288. package/dist/commonjs/core/main/worker/send_message.d.ts.map +0 -1
  289. package/dist/commonjs/core/main/worker/send_message.js +0 -23
  290. package/dist/commonjs/core/main/worker/track_choice_setter.d.ts.map +0 -1
  291. package/dist/commonjs/core/main/worker/worker_main.d.ts +0 -2
  292. package/dist/commonjs/core/main/worker/worker_main.d.ts.map +0 -1
  293. package/dist/commonjs/core/main/worker/worker_text_displayer_interface.d.ts.map +0 -1
  294. package/dist/commonjs/main_thread/init/multi_thread_content_initializer.d.ts +0 -308
  295. package/dist/commonjs/main_thread/init/multi_thread_content_initializer.d.ts.map +0 -1
  296. package/dist/commonjs/main_thread/init/multi_thread_content_initializer.js +0 -1713
  297. package/dist/commonjs/main_thread/init/send_message.d.ts +0 -3
  298. package/dist/commonjs/main_thread/init/send_message.d.ts.map +0 -1
  299. package/dist/commonjs/main_thread/init/send_message.js +0 -13
  300. package/dist/commonjs/multithread_types.d.ts +0 -915
  301. package/dist/commonjs/multithread_types.d.ts.map +0 -1
  302. package/dist/commonjs/multithread_types.js +0 -7
  303. package/dist/commonjs/playback_observer/worker_playback_observer.d.ts.map +0 -1
  304. package/dist/es2017/core/main/common/FreezeResolver.d.ts.map +0 -1
  305. package/dist/es2017/core/main/common/content_time_boundaries_observer.d.ts.map +0 -1
  306. package/dist/es2017/core/main/common/create_content_time_boundaries_observer.d.ts.map +0 -1
  307. package/dist/es2017/core/main/common/get_buffered_data_per_media_buffer.d.ts.map +0 -1
  308. package/dist/es2017/core/main/common/get_thumbnail_data.d.ts.map +0 -1
  309. package/dist/es2017/core/main/common/synchronize_sinks_on_observation.d.ts.map +0 -1
  310. package/dist/es2017/core/main/worker/content_preparer.d.ts.map +0 -1
  311. package/dist/es2017/core/main/worker/globals.d.ts +0 -14
  312. package/dist/es2017/core/main/worker/globals.d.ts.map +0 -1
  313. package/dist/es2017/core/main/worker/globals.js +0 -18
  314. package/dist/es2017/core/main/worker/index.d.ts +0 -3
  315. package/dist/es2017/core/main/worker/index.d.ts.map +0 -1
  316. package/dist/es2017/core/main/worker/index.js +0 -2
  317. package/dist/es2017/core/main/worker/send_message.d.ts +0 -4
  318. package/dist/es2017/core/main/worker/send_message.d.ts.map +0 -1
  319. package/dist/es2017/core/main/worker/send_message.js +0 -19
  320. package/dist/es2017/core/main/worker/track_choice_setter.d.ts.map +0 -1
  321. package/dist/es2017/core/main/worker/worker_main.d.ts +0 -2
  322. package/dist/es2017/core/main/worker/worker_main.d.ts.map +0 -1
  323. package/dist/es2017/core/main/worker/worker_text_displayer_interface.d.ts.map +0 -1
  324. package/dist/es2017/main_thread/init/multi_thread_content_initializer.d.ts +0 -308
  325. package/dist/es2017/main_thread/init/multi_thread_content_initializer.d.ts.map +0 -1
  326. package/dist/es2017/main_thread/init/multi_thread_content_initializer.js +0 -1559
  327. package/dist/es2017/main_thread/init/send_message.d.ts +0 -3
  328. package/dist/es2017/main_thread/init/send_message.d.ts.map +0 -1
  329. package/dist/es2017/main_thread/init/send_message.js +0 -10
  330. package/dist/es2017/multithread_types.d.ts +0 -915
  331. package/dist/es2017/multithread_types.d.ts.map +0 -1
  332. package/dist/es2017/multithread_types.js +0 -6
  333. package/dist/es2017/playback_observer/worker_playback_observer.d.ts.map +0 -1
  334. package/src/core/main/worker/globals.ts +0 -38
  335. package/src/core/main/worker/index.ts +0 -2
  336. package/src/core/main/worker/send_message.ts +0 -28
  337. package/src/main_thread/init/multi_thread_content_initializer.ts +0 -2330
  338. package/src/main_thread/init/send_message.ts +0 -15
  339. package/src/multithread_types.ts +0 -1095
  340. /package/dist/commonjs/core/{main/common → entry}/synchronize_sinks_on_observation.js +0 -0
  341. /package/dist/es2017/core/{main/common → entry}/synchronize_sinks_on_observation.js +0 -0
@@ -1,5 +1,7 @@
1
1
  import { describe, it, expect } from "vitest";
2
+ import initializeCoreEntry from "../../../core/entry";
2
3
  import type { IFeaturesObject } from "../../../features/types";
4
+ import { MonoThreadCoreInterface } from "../../../main_thread/core_interface/monothread";
3
5
  import MediaSourceContentInitializer from "../../../main_thread/init/media_source_content_initializer";
4
6
  import metaplaylist from "../../../transports/metaplaylist";
5
7
  import addLocalManifestFeature from "../metaplaylist";
@@ -10,9 +12,16 @@ describe("Features list - METAPLAYLIST", () => {
10
12
  addLocalManifestFeature(featureObject);
11
13
  expect(featureObject).toEqual({
12
14
  transports: { metaplaylist },
13
- mainThreadMediaSourceInit: MediaSourceContentInitializer,
15
+ monothread: {
16
+ init: MediaSourceContentInitializer,
17
+ coreInterface: MonoThreadCoreInterface,
18
+ initializeCoreEntry,
19
+ },
14
20
  });
15
21
  expect(featureObject.transports.metaplaylist).toBe(metaplaylist);
16
- expect(featureObject.mainThreadMediaSourceInit).toBe(MediaSourceContentInitializer);
22
+ expect(featureObject.monothread).not.toBe(null);
23
+ expect(featureObject.monothread?.init).toBe(MediaSourceContentInitializer);
24
+ expect(featureObject.monothread?.coreInterface).toBe(MonoThreadCoreInterface);
25
+ expect(featureObject.monothread?.initializeCoreEntry).toBe(initializeCoreEntry);
17
26
  });
18
27
  });
@@ -1,6 +1,7 @@
1
1
  import { describe, it, expect } from "vitest";
2
2
  import type { IFeaturesObject } from "../../../features/types";
3
- import MultiThreadContentInitializer from "../../../main_thread/init/multi_thread_content_initializer";
3
+ import { WorkerCoreInterface } from "../../../main_thread/core_interface/multithread";
4
+ import MediaSourceContentInitializer from "../../../main_thread/init/media_source_content_initializer";
4
5
  import addMultiThreadFeature from "../multi_thread";
5
6
 
6
7
  describe("Features list - EME", () => {
@@ -8,10 +9,14 @@ describe("Features list - EME", () => {
8
9
  const featureObject: IFeaturesObject = {} as IFeaturesObject;
9
10
  addMultiThreadFeature(featureObject);
10
11
  expect(featureObject).toEqual({
11
- multithread: { init: MultiThreadContentInitializer },
12
+ multithread: {
13
+ init: MediaSourceContentInitializer,
14
+ coreInterface: WorkerCoreInterface,
15
+ },
12
16
  });
13
17
  expect(featureObject.multithread).not.toBe(null);
14
18
  expect(featureObject.multithread).not.toBe(undefined);
15
- expect(featureObject.multithread?.init).toBe(MultiThreadContentInitializer);
19
+ expect(featureObject.multithread?.init).toBe(MediaSourceContentInitializer);
20
+ expect(featureObject.multithread?.coreInterface).toBe(WorkerCoreInterface);
16
21
  });
17
22
  });
@@ -14,13 +14,19 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
+ import initializeCoreEntry from "../../core/entry";
17
18
  import type { IFeaturesObject } from "../../features/types";
19
+ import { MonoThreadCoreInterface } from "../../main_thread/core_interface/monothread";
18
20
  import MediaSourceContentInitializer from "../../main_thread/init/media_source_content_initializer";
19
21
  import local from "../../transports/local";
20
22
 
21
23
  function addLocalManifestFeature(features: IFeaturesObject): void {
22
24
  features.transports.local = local;
23
- features.mainThreadMediaSourceInit = MediaSourceContentInitializer;
25
+ features.monothread = {
26
+ init: MediaSourceContentInitializer,
27
+ coreInterface: MonoThreadCoreInterface,
28
+ initializeCoreEntry,
29
+ };
24
30
  }
25
31
 
26
32
  export { addLocalManifestFeature as LOCAL_MANIFEST };
@@ -14,13 +14,19 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
+ import initializeCoreEntry from "../../core/entry";
17
18
  import type { IFeaturesObject } from "../../features/types";
19
+ import { MonoThreadCoreInterface } from "../../main_thread/core_interface/monothread";
18
20
  import MediaSourceContentInitializer from "../../main_thread/init/media_source_content_initializer";
19
21
  import metaplaylist from "../../transports/metaplaylist";
20
22
 
21
23
  function addMetaPlaylistFeature(features: IFeaturesObject): void {
22
24
  features.transports.metaplaylist = metaplaylist;
23
- features.mainThreadMediaSourceInit = MediaSourceContentInitializer;
25
+ features.monothread = {
26
+ init: MediaSourceContentInitializer,
27
+ coreInterface: MonoThreadCoreInterface,
28
+ initializeCoreEntry,
29
+ };
24
30
  }
25
31
 
26
32
  export { addMetaPlaylistFeature as METAPLAYLIST };
@@ -1,12 +1,16 @@
1
1
  import type { IFeaturesObject } from "../../features/types";
2
- import MultiThreadContentInitializer from "../../main_thread/init/multi_thread_content_initializer";
2
+ import { WorkerCoreInterface } from "../../main_thread/core_interface/multithread";
3
+ import MediaSourceContentInitializer from "../../main_thread/init/media_source_content_initializer";
3
4
 
4
5
  /**
5
6
  * Add ability to run the RxPlayer's main buffering logic in a WebMultiThread.
6
7
  * @param {Object} features
7
8
  */
8
9
  function addMultiThreadFeature(features: IFeaturesObject): void {
9
- features.multithread = { init: MultiThreadContentInitializer };
10
+ features.multithread = {
11
+ init: MediaSourceContentInitializer,
12
+ coreInterface: WorkerCoreInterface,
13
+ };
10
14
  }
11
15
 
12
16
  export { addMultiThreadFeature as MULTI_THREAD };
@@ -27,7 +27,7 @@ const features: IFeaturesObject = {
27
27
  decrypt: null,
28
28
  htmlTextDisplayer: null,
29
29
  htmlTextTracksParsers: {},
30
- mainThreadMediaSourceInit: null,
30
+ monothread: null,
31
31
  multithread: null,
32
32
  nativeTextDisplayer: null,
33
33
  nativeTextTracksParsers: {},
@@ -1,4 +1,6 @@
1
1
  import { describe, it, expect } from "vitest";
2
+ import initializeCoreEntry from "../../../core/entry";
3
+ import { MonoThreadCoreInterface } from "../../../main_thread/core_interface/monothread";
2
4
  import MediaSourceContentInitializer from "../../../main_thread/init/media_source_content_initializer";
3
5
  import dashJsParser from "../../../parsers/manifest/dash/js-parser";
4
6
  import DASHFeature from "../../../transports/dash";
@@ -10,15 +12,22 @@ describe("Features list - DASH", () => {
10
12
  const featureObject = {
11
13
  transports: {},
12
14
  dashParsers: { js: null, wasm: null },
13
- mainThreadMediaSourceInit: null,
15
+ monothread: null,
14
16
  } as unknown as IFeaturesObject;
15
17
  addDASHFeature(featureObject);
16
18
  expect(featureObject).toEqual({
17
19
  transports: { dash: DASHFeature },
18
20
  dashParsers: { js: dashJsParser, wasm: null },
19
- mainThreadMediaSourceInit: MediaSourceContentInitializer,
21
+ monothread: {
22
+ init: MediaSourceContentInitializer,
23
+ coreInterface: MonoThreadCoreInterface,
24
+ initializeCoreEntry,
25
+ },
20
26
  });
21
27
  expect(featureObject.transports.dash).toBe(DASHFeature);
22
- expect(featureObject.mainThreadMediaSourceInit).toBe(MediaSourceContentInitializer);
28
+ expect(featureObject.monothread).not.toBe(null);
29
+ expect(featureObject.monothread?.init).toBe(MediaSourceContentInitializer);
30
+ expect(featureObject.monothread?.coreInterface).toBe(MonoThreadCoreInterface);
31
+ expect(featureObject.monothread?.initializeCoreEntry).toBe(initializeCoreEntry);
23
32
  });
24
33
  });
@@ -1,4 +1,6 @@
1
1
  import { describe, it, expect } from "vitest";
2
+ import initializeCoreEntry from "../../../core/entry";
3
+ import { MonoThreadCoreInterface } from "../../../main_thread/core_interface/monothread";
2
4
  import MediaSourceContentInitializer from "../../../main_thread/init/media_source_content_initializer";
3
5
  import SmoothFeature from "../../../transports/smooth";
4
6
  import type { IFeaturesObject } from "../../types";
@@ -10,9 +12,16 @@ describe("Features list - Smooth", () => {
10
12
  addSmoothFeature(featureObject);
11
13
  expect(featureObject).toEqual({
12
14
  transports: { smooth: SmoothFeature },
13
- mainThreadMediaSourceInit: MediaSourceContentInitializer,
15
+ monothread: {
16
+ init: MediaSourceContentInitializer,
17
+ coreInterface: MonoThreadCoreInterface,
18
+ initializeCoreEntry,
19
+ },
14
20
  });
15
21
  expect(featureObject.transports.smooth).toBe(SmoothFeature);
16
- expect(featureObject.mainThreadMediaSourceInit).toBe(MediaSourceContentInitializer);
22
+ expect(featureObject.monothread).not.toBe(null);
23
+ expect(featureObject.monothread?.init).toBe(MediaSourceContentInitializer);
24
+ expect(featureObject.monothread?.coreInterface).toBe(MonoThreadCoreInterface);
25
+ expect(featureObject.monothread?.initializeCoreEntry).toBe(initializeCoreEntry);
17
26
  });
18
27
  });
@@ -14,6 +14,8 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
+ import initializeCoreEntry from "../../core/entry";
18
+ import { MonoThreadCoreInterface } from "../../main_thread/core_interface/monothread";
17
19
  import MediaSourceContentInitializer from "../../main_thread/init/media_source_content_initializer";
18
20
  import dashJsParser from "../../parsers/manifest/dash/js-parser";
19
21
  import dash from "../../transports/dash";
@@ -28,7 +30,11 @@ function addDASHFeature(features: IFeaturesObject): void {
28
30
  features.transports.dash = dash;
29
31
  }
30
32
  features.dashParsers.js = dashJsParser;
31
- features.mainThreadMediaSourceInit = MediaSourceContentInitializer;
33
+ features.monothread = {
34
+ init: MediaSourceContentInitializer,
35
+ coreInterface: MonoThreadCoreInterface,
36
+ initializeCoreEntry,
37
+ };
32
38
  }
33
39
 
34
40
  export { addDASHFeature as DASH };
@@ -14,7 +14,9 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
+ import initializeCoreEntry from "../../core/entry";
17
18
  import type { IFeaturesObject } from "../../features/types";
19
+ import { MonoThreadCoreInterface } from "../../main_thread/core_interface/monothread";
18
20
  import MediaSourceContentInitializer from "../../main_thread/init/media_source_content_initializer";
19
21
  import type { IDashWasmParserOptions } from "../../parsers/manifest/dash/wasm-parser";
20
22
  import DashWasmParser from "../../parsers/manifest/dash/wasm-parser";
@@ -27,7 +29,11 @@ const dashWasmFeature = {
27
29
  features.transports.dash = dash;
28
30
  }
29
31
  features.dashParsers.wasm = dashWasmParser;
30
- features.mainThreadMediaSourceInit = MediaSourceContentInitializer;
32
+ features.monothread = {
33
+ init: MediaSourceContentInitializer,
34
+ coreInterface: MonoThreadCoreInterface,
35
+ initializeCoreEntry,
36
+ };
31
37
  },
32
38
 
33
39
  initialize(opts: IDashWasmParserOptions): Promise<void> {
@@ -1,3 +1,5 @@
1
+ import initializeCoreEntry from "../../core/entry";
2
+ import { MonoThreadCoreInterface } from "../../main_thread/core_interface/monothread";
1
3
  import MediaSourceContentInitializer from "../../main_thread/init/media_source_content_initializer";
2
4
  import type { IFeaturesObject } from "../types";
3
5
 
@@ -6,7 +8,11 @@ import type { IFeaturesObject } from "../types";
6
8
  * @param {Object} features
7
9
  */
8
10
  function addMediaSourceMainFeature(features: IFeaturesObject): void {
9
- features.mainThreadMediaSourceInit = MediaSourceContentInitializer;
11
+ features.monothread = {
12
+ init: MediaSourceContentInitializer,
13
+ coreInterface: MonoThreadCoreInterface,
14
+ initializeCoreEntry,
15
+ };
10
16
  }
11
17
 
12
18
  export { addMediaSourceMainFeature as MEDIA_SOURCE_MAIN };
@@ -14,6 +14,8 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
+ import initializeCoreEntry from "../../core/entry";
18
+ import { MonoThreadCoreInterface } from "../../main_thread/core_interface/monothread";
17
19
  import MediaSourceContentInitializer from "../../main_thread/init/media_source_content_initializer";
18
20
  import smooth from "../../transports/smooth";
19
21
  import type { IFeaturesObject } from "../types";
@@ -26,7 +28,11 @@ function addSmoothFeature(features: IFeaturesObject): void {
26
28
  if (features.transports.smooth === undefined) {
27
29
  features.transports.smooth = smooth;
28
30
  }
29
- features.mainThreadMediaSourceInit = MediaSourceContentInitializer;
31
+ features.monothread = {
32
+ init: MediaSourceContentInitializer,
33
+ coreInterface: MonoThreadCoreInterface,
34
+ initializeCoreEntry,
35
+ };
30
36
  }
31
37
 
32
38
  export { addSmoothFeature as SMOOTH };
@@ -15,11 +15,15 @@
15
15
  */
16
16
 
17
17
  import type { IMediaElement } from "../compat/browser_compatibility_types";
18
+ import type IInitializeCoreEntry from "../core/entry";
18
19
  import type { SegmentSink } from "../core/segment_sinks";
20
+ import type {
21
+ WorkerCoreInterface,
22
+ MonoThreadCoreInterface,
23
+ } from "../main_thread/core_interface/types";
19
24
  import type ContentDecryptor from "../main_thread/decrypt";
20
25
  import type DirectFileContentInitializer from "../main_thread/init/directfile_content_initializer";
21
26
  import type MediaSourceContentInitializer from "../main_thread/init/media_source_content_initializer";
22
- import type MultiThreadContentInitializer from "../main_thread/init/multi_thread_content_initializer";
23
27
  import type HTMLTextDisplayer from "../main_thread/text_displayer/html";
24
28
  import type NativeTextDisplayer from "../main_thread/text_displayer/native/native_text_displayer";
25
29
  import type MediaElementTracksStore from "../main_thread/tracks_store/media_element_tracks_store";
@@ -114,14 +118,29 @@ export interface IFeaturesObject {
114
118
  * Feature allowing to load contents through MediaSource API through the
115
119
  * main thread.
116
120
  */
117
- mainThreadMediaSourceInit: typeof MediaSourceContentInitializer | null;
121
+ monothread: {
122
+ /** Class to load a content through the MediaSource API. */
123
+ init: typeof MediaSourceContentInitializer;
124
+ /** The RxPlayer's core logic. */
125
+ initializeCoreEntry: typeof IInitializeCoreEntry;
126
+ /**
127
+ * Class allowing to exchange messages with the RxPlayer's `core`, here
128
+ * running in `coreEntry`
129
+ */
130
+ coreInterface: typeof MonoThreadCoreInterface;
131
+ } | null;
118
132
  /**
119
133
  * Features allowing to load contents through MediaSource API through
120
134
  * a WebWorker.
121
135
  */
122
136
  multithread: {
123
- /** Class to load a content through MediaSource API via a WebWorker. */
124
- init: typeof MultiThreadContentInitializer;
137
+ /** Class to load a content through the MediaSource API. */
138
+ init: typeof MediaSourceContentInitializer;
139
+ /**
140
+ * Class allowing to exchange messages with the RxPlayer's `core`, here
141
+ * running in another thread.
142
+ */
143
+ coreInterface: typeof WorkerCoreInterface;
125
144
  } | null;
126
145
  /**
127
146
  * Function for loading and parsing contents through various protocols, by
@@ -27,6 +27,14 @@ Those modules are:
27
27
  Negotiate content decryption. Only used for contents with DRM (Digital Right
28
28
  Management).
29
29
 
30
+ - **the `CoreInterface` (./core_interface)**
31
+
32
+ Provide an interface allowing to communicate to the central RxPlayer logic in the `core`
33
+ directory (`../core/`), which may run in another thread.
34
+
35
+ That interface depends on the context (e.g. depending on if we are playing in a
36
+ mono-threaded mode or a multithreaded mode).
37
+
30
38
  - **the `TracksStore` (or `MediaElementTracksStore`) (./tracks_store)**
31
39
 
32
40
  Ease up text/audio/video track switching to provide a simple-to-use API.
@@ -38,7 +38,9 @@ import type {
38
38
  IInbandEvent,
39
39
  IABRThrottlers,
40
40
  IBufferType,
41
+ ICoreMessage,
41
42
  } from "../../core/types";
43
+ import { CoreMessageType } from "../../core/types";
42
44
  import type { IDefaultConfig } from "../../default_config";
43
45
  import type { IErrorCode, IErrorType } from "../../errors";
44
46
  import { ErrorCodes, ErrorTypes, formatError, MediaError } from "../../errors";
@@ -60,13 +62,10 @@ import {
60
62
  getMaximumSafePosition,
61
63
  getMinimumSafePosition,
62
64
  ManifestMetadataFormat,
63
- createRepresentationFilterFromFnString,
64
65
  getPeriodForTime,
65
66
  toVideoRepresentation,
66
67
  toAudioRepresentation,
67
68
  } from "../../manifest";
68
- import type { IWorkerMessage } from "../../multithread_types";
69
- import { MainThreadMessageType, WorkerMessageType } from "../../multithread_types";
70
69
  import type { IPlaybackObservation } from "../../playback_observer";
71
70
  import MediaElementPlaybackObserver from "../../playback_observer/media_element_playback_observer";
72
71
  import type {
@@ -133,6 +132,7 @@ import type { ContentInitializer } from "../init";
133
132
  import renderThumbnail from "../render_thumbnail";
134
133
  import type { IMediaElementTracksStore, ITSPeriodObject } from "../tracks_store";
135
134
  import TracksStore from "../tracks_store";
135
+ import { MainThreadMessageType } from "../types";
136
136
  import type { IParsedLoadVideoOptions, IParsedStartAtOption } from "./option_utils";
137
137
  import {
138
138
  checkReloadOptions,
@@ -445,7 +445,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
445
445
  // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
446
446
  videoElement.preload = "auto";
447
447
 
448
- this.version = /* PLAYER_VERSION */ "4.4.0";
448
+ this.version = /* PLAYER_VERSION */ "4.4.1-dev.2025101500";
449
449
  this.log = log;
450
450
  this.state = "STOPPED";
451
451
  this.videoElement = videoElement;
@@ -572,8 +572,8 @@ class Player extends EventEmitter<IPublicAPIEvent> {
572
572
  );
573
573
  };
574
574
  const handleInitMessages = (msg: MessageEvent) => {
575
- const msgData = msg.data as unknown as IWorkerMessage;
576
- if (msgData.type === WorkerMessageType.InitError) {
575
+ const msgData = msg.data as unknown as ICoreMessage;
576
+ if (msgData.type === CoreMessageType.InitError) {
577
577
  log.warn("API", "Processing InitError worker message: detaching worker");
578
578
  if (this._priv_worker !== null) {
579
579
  this._priv_worker.removeEventListener("message", handleInitMessages);
@@ -586,7 +586,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
586
586
  "Worker parser initialization failed: " + msgData.value.errorMessage,
587
587
  ),
588
588
  );
589
- } else if (msgData.type === WorkerMessageType.InitSuccess) {
589
+ } else if (msgData.type === CoreMessageType.InitSuccess) {
590
590
  log.info("API", "InitSuccess received from worker.");
591
591
  if (this._priv_worker !== null) {
592
592
  this._priv_worker.removeEventListener("message", handleInitMessages);
@@ -1034,6 +1034,19 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1034
1034
  connectionTimeout: requestConfig.segment?.connectionTimeout,
1035
1035
  };
1036
1036
 
1037
+ const transportOptions = {
1038
+ lowLatencyMode,
1039
+ checkMediaSegmentIntegrity,
1040
+ checkManifestIntegrity,
1041
+ referenceDateTime,
1042
+ serverSyncInfos,
1043
+ manifestLoader,
1044
+ segmentLoader,
1045
+ representationFilter: options.representationFilter,
1046
+ __priv_manifestUpdateUrl,
1047
+ __priv_patchLastSegmentInSidx,
1048
+ };
1049
+
1037
1050
  const canRunInMultiThread =
1038
1051
  features.multithread !== null &&
1039
1052
  this._priv_worker !== null &&
@@ -1044,39 +1057,33 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1044
1057
  ) &&
1045
1058
  typeof options.representationFilter !== "function";
1046
1059
  if (mode === "main" || (mode === "auto" && !canRunInMultiThread)) {
1047
- if (features.mainThreadMediaSourceInit === null) {
1060
+ if (features.monothread === null) {
1048
1061
  throw new Error(
1049
1062
  "Cannot load video, neither in a WebWorker nor with the " +
1050
1063
  "`MEDIA_SOURCE_MAIN` feature",
1051
1064
  );
1052
1065
  }
1053
- const transportFn = features.transports[transport];
1054
- if (typeof transportFn !== "function") {
1055
- // Stop previous content and reset its state
1056
- this.stop();
1057
- this._priv_currentError = null;
1058
- throw new Error(`transport "${transport}" not supported`);
1059
- }
1060
-
1061
- const representationFilter =
1062
- typeof options.representationFilter === "string"
1063
- ? createRepresentationFilterFromFnString(options.representationFilter)
1064
- : options.representationFilter;
1065
-
1066
1066
  log.info("API", "Initializing MediaSource mode in the main thread");
1067
- const transportPipelines = transportFn({
1068
- lowLatencyMode,
1069
- checkMediaSegmentIntegrity,
1070
- checkManifestIntegrity,
1071
- manifestLoader,
1072
- referenceDateTime,
1073
- representationFilter,
1074
- segmentLoader,
1075
- serverSyncInfos,
1076
- __priv_manifestUpdateUrl,
1077
- __priv_patchLastSegmentInSidx,
1067
+ const coreInterface = new features.monothread.coreInterface();
1068
+ const coreInterfaceCallbacks = coreInterface.getCallbacks();
1069
+ features.monothread.initializeCoreEntry(
1070
+ coreInterfaceCallbacks.setCoreMessageReceiver,
1071
+ coreInterfaceCallbacks.sendCoreMessage,
1072
+ );
1073
+ coreInterface.sendMessage({
1074
+ type: MainThreadMessageType.Init,
1075
+ value: {
1076
+ dashWasmUrl: undefined,
1077
+ hasVideo: this.videoElement?.nodeName.toLowerCase() === "video",
1078
+ logLevel: log.getLevel(),
1079
+ logFormat: log.getFormat(),
1080
+ sendBackLogs: false,
1081
+ date: Date.now(),
1082
+ timestamp: getMonotonicTimeStamp(),
1083
+ },
1078
1084
  });
1079
- initializer = new features.mainThreadMediaSourceInit({
1085
+ initializer = new features.monothread.init({
1086
+ coreInterface,
1080
1087
  adaptiveOptions,
1081
1088
  autoPlay,
1082
1089
  bufferOptions,
@@ -1085,13 +1092,15 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1085
1092
  experimentalOptions.enableRepresentationAvoidance,
1086
1093
  keySystems,
1087
1094
  lowLatencyMode,
1088
- transport: transportPipelines,
1095
+ transport,
1096
+ transportOptions,
1089
1097
  manifestRequestSettings,
1090
1098
  segmentRequestOptions,
1091
1099
  speed: this._priv_speed,
1092
1100
  startAt,
1093
1101
  textTrackOptions,
1094
1102
  url,
1103
+ useMseInWorker: false,
1095
1104
  });
1096
1105
  } else {
1097
1106
  if (features.multithread === null) {
@@ -1108,19 +1117,8 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1108
1117
  assert(typeof options.representationFilter !== "function");
1109
1118
  useWorker = true;
1110
1119
  log.info("API", "Initializing MediaSource mode in a WebWorker");
1111
- const transportOptions = {
1112
- lowLatencyMode,
1113
- checkMediaSegmentIntegrity,
1114
- checkManifestIntegrity,
1115
- referenceDateTime,
1116
- serverSyncInfos,
1117
- manifestLoader: undefined,
1118
- segmentLoader: undefined,
1119
- representationFilter: options.representationFilter,
1120
- __priv_manifestUpdateUrl,
1121
- __priv_patchLastSegmentInSidx,
1122
- };
1123
1120
  initializer = new features.multithread.init({
1121
+ coreInterface: new features.multithread.coreInterface(this._priv_worker),
1124
1122
  adaptiveOptions,
1125
1123
  autoPlay,
1126
1124
  bufferOptions,
@@ -1129,13 +1127,13 @@ class Player extends EventEmitter<IPublicAPIEvent> {
1129
1127
  experimentalOptions.enableRepresentationAvoidance,
1130
1128
  keySystems,
1131
1129
  lowLatencyMode,
1130
+ transport,
1132
1131
  transportOptions,
1133
1132
  manifestRequestSettings,
1134
1133
  segmentRequestOptions,
1135
1134
  speed: this._priv_speed,
1136
1135
  startAt,
1137
1136
  textTrackOptions,
1138
- worker: this._priv_worker,
1139
1137
  url,
1140
1138
  useMseInWorker: hasMseInWorker,
1141
1139
  });
@@ -3576,7 +3574,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
3576
3574
  }
3577
3575
  }
3578
3576
  }
3579
- Player.version = /* PLAYER_VERSION */ "4.4.0";
3577
+ Player.version = /* PLAYER_VERSION */ "4.4.1-dev.2025101500";
3580
3578
 
3581
3579
  /** Every events sent by the RxPlayer's public API. */
3582
3580
  interface IPublicAPIEvent {
@@ -0,0 +1,22 @@
1
+ # CoreInterface
2
+
3
+ | Consideration | Status |
4
+ | ----------------------- | ---------------------------------------------------- |
5
+ | Preferred import style | Only through the `features` object |
6
+ | Multithread environment | May run in WebWorker depending on the implementation |
7
+
8
+ ## Overview
9
+
10
+ This directory defines `CoreInterface` implementations, which is the link between the
11
+ RxPlayer's "main_thread" logic (which implements logic running always in main thread: the
12
+ API, decryption, subtitles rendering, track management...) to the RxPlayer's "core" logic
13
+ (which implements logic which may run in a WebWorker: manifest loading, segment loading
14
+ and parsing, adaptive...).
15
+
16
+ Depending on if playback for the current content currently relies on a single thread or
17
+ multiple ones, a different `CoreInterface` implementation will be selected.
18
+
19
+ This directory should not be imported directly by the main logic (beside types). Rather,
20
+ the RxPlayer's global `features` object should refer to the implementations currently
21
+ available instead. This is to ensure that the `CoreInterface` logic is only imported if
22
+ the application has explicitly asked for the corresponding feature.
@@ -0,0 +1,36 @@
1
+ import type { ICoreMessage } from "../../core/types";
2
+ import type { IMainThreadMessage } from "../types";
3
+
4
+ export default abstract class CoreInterface {
5
+ protected listeners: Array<(evt: ICoreMessage) => void> = [];
6
+ protected listenersError: Array<() => void> = [];
7
+
8
+ public abstract sendMessage(msg: IMainThreadMessage): void;
9
+
10
+ public addMessageListener(cb: (evt: ICoreMessage) => void): void {
11
+ this.listeners.push(cb);
12
+ }
13
+
14
+ public removeMessageListener(cb: (evt: ICoreMessage) => void): void {
15
+ const index = this.listeners.indexOf(cb);
16
+ if (index >= 0) {
17
+ this.listeners.splice(index, 1);
18
+ }
19
+ }
20
+
21
+ public addErrorListener(cb: () => void): void {
22
+ this.listenersError.push(cb);
23
+ }
24
+
25
+ public removeErrorListener(cb: () => void): void {
26
+ const index = this.listenersError.indexOf(cb);
27
+ if (index >= 0) {
28
+ this.listenersError.splice(index, 1);
29
+ }
30
+ }
31
+
32
+ public dispose(): void {
33
+ this.listeners.length = 0;
34
+ this.listenersError.length = 0;
35
+ }
36
+ }
@@ -0,0 +1,46 @@
1
+ import {
2
+ CoreMessageType,
3
+ type ICoreMessage,
4
+ type IMessageReceiverCallback,
5
+ } from "../../core/types";
6
+ import log from "../../log";
7
+ import noop from "../../utils/noop";
8
+ import type { IMainThreadMessage } from "../types";
9
+ import CoreInterface from "./base";
10
+
11
+ export class MonoThreadCoreInterface extends CoreInterface {
12
+ private _currentCoreListener: IMessageReceiverCallback;
13
+
14
+ constructor() {
15
+ super();
16
+ this._currentCoreListener = noop;
17
+ }
18
+
19
+ public sendMessage(msg: IMainThreadMessage) {
20
+ log.debug("M-->C", "Sending message", { name: msg.type });
21
+ queueMicrotask(() => {
22
+ // NOTE: We don't clone for performance reasons
23
+ this._currentCoreListener({ data: msg });
24
+ });
25
+ }
26
+
27
+ public getCallbacks(): {
28
+ setCoreMessageReceiver: (handler: IMessageReceiverCallback) => void;
29
+ sendCoreMessage: (msg: ICoreMessage, transferables?: Transferable[]) => void;
30
+ } {
31
+ const setCoreMessageReceiver = (handler: IMessageReceiverCallback): void => {
32
+ this._currentCoreListener = handler;
33
+ };
34
+ const sendCoreMessage = (msg: ICoreMessage, _transferables?: Transferable[]) => {
35
+ queueMicrotask(() => {
36
+ if (msg.type !== CoreMessageType.LogMessage) {
37
+ log.debug("M<--C", "Sending message", { name: msg.type });
38
+ }
39
+ this.listeners.forEach((listener) => {
40
+ listener(msg);
41
+ });
42
+ });
43
+ };
44
+ return { setCoreMessageReceiver, sendCoreMessage };
45
+ }
46
+ }