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,57 +1,86 @@
1
- import config from "../../../config";
2
- import { MediaError, OtherError } from "../../../errors";
3
- import features from "../../../features";
4
- import log from "../../../log";
5
- import Manifest, { Adaptation, Period, Representation } from "../../../manifest/classes";
1
+ import config from "../../config";
2
+ import { MediaError, OtherError } from "../../errors";
3
+ import features from "../../features";
4
+ import log from "../../log";
6
5
  import type {
7
6
  IContentInitializationData,
8
- IDiscontinuityUpdateWorkerMessagePayload,
9
7
  IMainThreadMessage,
10
8
  IReferenceUpdateMessage,
11
9
  IThumbnailDataRequestMainMessage,
12
- } from "../../../multithread_types";
13
- import { MainThreadMessageType, WorkerMessageType } from "../../../multithread_types";
14
- import DashJsParser from "../../../parsers/manifest/dash/js-parser";
15
- import DashWasmParser from "../../../parsers/manifest/dash/wasm-parser";
16
- import { ObservationPosition } from "../../../playback_observer";
17
- import type { IWorkerPlaybackObservation } from "../../../playback_observer/worker_playback_observer";
18
- import WorkerPlaybackObserver from "../../../playback_observer/worker_playback_observer";
19
- import type { IPlayerError, ITrackType } from "../../../public_types";
20
- import createDashPipelines from "../../../transports/dash";
21
- import arrayFind from "../../../utils/array_find";
22
- import assert, { assertUnreachable } from "../../../utils/assert";
23
- import globalScope from "../../../utils/global_scope";
24
- import type { ILogFormat, ILoggerLevel } from "../../../utils/logger";
25
- import { scaleTimestamp } from "../../../utils/monotonic_timestamp";
26
- import objectAssign from "../../../utils/object_assign";
27
- import type { IReadOnlySharedReference } from "../../../utils/reference";
28
- import SharedReference from "../../../utils/reference";
29
- import TaskCanceller from "../../../utils/task_canceller";
10
+ } from "../../main_thread/types";
11
+ import { MainThreadMessageType } from "../../main_thread/types";
12
+ import Manifest, { Adaptation, Period, Representation } from "../../manifest/classes";
13
+ import { ObservationPosition } from "../../playback_observer";
14
+ import type { ICorePlaybackObservation } from "../../playback_observer/core_playback_observer";
15
+ import CorePlaybackObserver from "../../playback_observer/core_playback_observer";
16
+ import type { IPlayerError, ITrackType } from "../../public_types";
17
+ import arrayFind from "../../utils/array_find";
18
+ import assert, { assertUnreachable } from "../../utils/assert";
19
+ import type { ILogFormat, ILoggerLevel } from "../../utils/logger";
20
+ import { scaleTimestamp } from "../../utils/monotonic_timestamp";
21
+ import objectAssign from "../../utils/object_assign";
22
+ import type { IReadOnlySharedReference } from "../../utils/reference";
23
+ import SharedReference from "../../utils/reference";
24
+ import TaskCanceller from "../../utils/task_canceller";
30
25
  import type {
31
26
  INeedsMediaSourceReloadPayload,
32
27
  IStreamOrchestratorCallbacks,
33
28
  IStreamStatusPayload,
34
- } from "../../stream";
35
- import StreamOrchestrator from "../../stream";
36
- import createContentTimeBoundariesObserver from "../common/create_content_time_boundaries_observer";
37
- import type { IFreezeResolution } from "../common/FreezeResolver";
38
- import getBufferedDataPerMediaBuffer from "../common/get_buffered_data_per_media_buffer";
39
- import getThumbnailData from "../common/get_thumbnail_data";
40
- import synchronizeSegmentSinksOnObservation from "../common/synchronize_sinks_on_observation";
29
+ } from "../stream";
30
+ import StreamOrchestrator from "../stream";
31
+ import type {
32
+ ICoreMessage,
33
+ IDiscontinuityUpdateCoreMessagePayload,
34
+ IResolutionInfo,
35
+ } from "../types";
36
+ import { CoreMessageType } from "../types";
41
37
  import ContentPreparer from "./content_preparer";
42
- import {
43
- limitVideoResolution,
44
- maxBufferAhead,
45
- maxBufferBehind,
46
- maxVideoBufferSize,
47
- throttleVideoBitrate,
48
- wantedBufferAhead,
49
- } from "./globals";
50
- import sendMessage, { formatErrorForSender } from "./send_message";
51
-
52
- export default function initializeWorkerMain() {
38
+ import createContentTimeBoundariesObserver from "./create_content_time_boundaries_observer";
39
+ import type { IFreezeResolution } from "./FreezeResolver";
40
+ import getBufferedDataPerMediaBuffer from "./get_buffered_data_per_media_buffer";
41
+ import getThumbnailData from "./get_thumbnail_data";
42
+ import synchronizeSegmentSinksOnObservation from "./synchronize_sinks_on_observation";
43
+ import { formatErrorForSender } from "./utils";
44
+
45
+ export type IMessageReceiverCallback = (evt: { data: IMainThreadMessage }) => void;
46
+
47
+ /**
48
+ * Initialize a `CoreEntry`, which is the part of the RxPlayer acting as an
49
+ * entry point to all its "core" code.
50
+ *
51
+ * Its role is to receive and react to messages coming from "main thead", which
52
+ * may include loading and playing a content, and to send back messages for the main
53
+ * thread.
54
+ * @param {Function} setMessageReceiver - Declares the function that will
55
+ * receive messages coming from the "main thread" part of the RxPlayer logic.
56
+ * @param {Function} sendMessage - Function allowing to send messages to the
57
+ * "main thread" part of the RxPlayer logic.
58
+ */
59
+ export default function initializeCoreEntry(
60
+ setMessageReceiver: (cb: IMessageReceiverCallback) => void,
61
+ sendMessage: (msg: ICoreMessage, transferables?: Transferable[]) => void,
62
+ ): void {
63
+ const {
64
+ DEFAULT_WANTED_BUFFER_AHEAD,
65
+ DEFAULT_MAX_VIDEO_BUFFER_SIZE,
66
+ DEFAULT_MAX_BUFFER_AHEAD,
67
+ DEFAULT_MAX_BUFFER_BEHIND,
68
+ } = config.getCurrent();
69
+ const refs: ICoreReferences = {
70
+ wantedBufferAhead: new SharedReference(DEFAULT_WANTED_BUFFER_AHEAD),
71
+ maxVideoBufferSize: new SharedReference(DEFAULT_MAX_VIDEO_BUFFER_SIZE),
72
+ maxBufferAhead: new SharedReference(DEFAULT_MAX_BUFFER_AHEAD),
73
+ maxBufferBehind: new SharedReference(DEFAULT_MAX_BUFFER_BEHIND),
74
+ limitVideoResolution: new SharedReference<IResolutionInfo>({
75
+ height: undefined,
76
+ width: undefined,
77
+ pixelRatio: 1,
78
+ }),
79
+ throttleVideoBitrate: new SharedReference(Infinity),
80
+ };
81
+
53
82
  /**
54
- * `true` once the worker has been initialized.
83
+ * `true` once the CoreEntry has been initialized.
55
84
  * Allow to enforce the fact that it is only initialized once.
56
85
  */
57
86
  let isInitialized = false;
@@ -68,48 +97,44 @@ export default function initializeWorkerMain() {
68
97
  */
69
98
  let currentContentHandle: IContentHandle | null = null;
70
99
 
71
- // Initialize Manually a `DashWasmParser` and add the feature.
72
- // TODO allow worker-side feature-switching? Not sure how
73
- const dashWasmParser = new DashWasmParser();
74
- features.dashParsers.wasm = dashWasmParser;
75
- features.dashParsers.js = DashJsParser;
76
- features.transports.dash = createDashPipelines;
77
-
78
100
  /**
79
101
  * When set, emit playback observation made on the main thread.
80
102
  */
81
- let playbackObservationRef: SharedReference<IWorkerPlaybackObservation> | null = null;
82
-
83
- globalScope.onmessageerror = (_msg: MessageEvent) => {
84
- log.error("Core", "Error when receiving message from main thread.");
85
- };
86
- onmessage = function (e: MessageEvent<IMainThreadMessage>) {
103
+ let playbackObservationRef: SharedReference<ICorePlaybackObservation> | null = null;
104
+ setMessageReceiver((e) => {
87
105
  log.debug("Core", "received message", { name: e.data.type });
88
106
 
89
107
  const msg = e.data;
90
108
  switch (msg.type) {
91
109
  case MainThreadMessageType.Init:
92
- assert(!isInitialized);
93
- isInitialized = true;
94
- scaleTimestamp(msg.value);
95
- updateLoggerLevel(
96
- msg.value.logLevel,
97
- msg.value.logFormat,
98
- msg.value.sendBackLogs,
99
- );
100
- if (msg.value.dashWasmUrl !== undefined && dashWasmParser.isCompatible()) {
101
- dashWasmParser.initialize({ wasmUrl: msg.value.dashWasmUrl }).catch((err) => {
102
- const error = err instanceof Error ? err.toString() : "Unknown Error";
103
- log.error("Core", "Could not initialize DASH_WASM parser", error);
104
- });
105
- }
110
+ {
111
+ assert(!isInitialized);
112
+ isInitialized = true;
113
+ scaleTimestamp(msg.value);
114
+ updateLoggerLevel(
115
+ msg.value.logLevel,
116
+ msg.value.logFormat,
117
+ msg.value.sendBackLogs,
118
+ );
119
+ const dashWasmParser = features.dashParsers.wasm;
120
+ if (
121
+ dashWasmParser !== null &&
122
+ msg.value.dashWasmUrl !== undefined &&
123
+ dashWasmParser.isCompatible()
124
+ ) {
125
+ dashWasmParser.initialize({ wasmUrl: msg.value.dashWasmUrl }).catch((err) => {
126
+ const error = err instanceof Error ? err.toString() : "Unknown Error";
127
+ log.error("Core", "Could not initialize DASH_WASM parser", error);
128
+ });
129
+ }
106
130
 
107
- if (!msg.value.hasVideo) {
108
- contentPreparer.disposeCurrentContent();
109
- contentPreparer = new ContentPreparer({ hasVideo: msg.value.hasVideo });
110
- }
131
+ if (!msg.value.hasVideo) {
132
+ contentPreparer.disposeCurrentContent();
133
+ contentPreparer = new ContentPreparer({ hasVideo: msg.value.hasVideo });
134
+ }
111
135
 
112
- sendMessage({ type: WorkerMessageType.InitSuccess, value: null });
136
+ sendMessage({ type: CoreMessageType.InitSuccess, value: null });
137
+ }
113
138
  break;
114
139
 
115
140
  case MainThreadMessageType.LogLevelUpdate:
@@ -121,7 +146,7 @@ export default function initializeWorkerMain() {
121
146
  break;
122
147
 
123
148
  case MainThreadMessageType.PrepareContent:
124
- prepareNewContent(contentPreparer, msg.value);
149
+ prepareNewContent(sendMessage, contentPreparer, msg.value, refs);
125
150
  break;
126
151
 
127
152
  case MainThreadMessageType.StartPreparedContent: {
@@ -134,16 +159,18 @@ export default function initializeWorkerMain() {
134
159
  playbackObservationRef?.finish();
135
160
 
136
161
  const currentContentObservationRef =
137
- new SharedReference<IWorkerPlaybackObservation>(
162
+ new SharedReference<ICorePlaybackObservation>(
138
163
  objectAssign(msg.value.initialObservation, {
139
164
  position: new ObservationPosition(...msg.value.initialObservation.position),
140
165
  }),
141
166
  );
142
167
  playbackObservationRef = currentContentObservationRef;
143
168
  currentContentHandle = loadPreparedContent(
169
+ sendMessage,
144
170
  msg.value,
145
171
  contentPreparer,
146
172
  currentContentObservationRef,
173
+ refs,
147
174
  );
148
175
  break;
149
176
  }
@@ -174,7 +201,7 @@ export default function initializeWorkerMain() {
174
201
  }
175
202
 
176
203
  case MainThreadMessageType.ReferenceUpdate:
177
- updateGlobalReference(msg);
204
+ updateCoreReference(msg, refs);
178
205
  break;
179
206
 
180
207
  case MainThreadMessageType.StopContent:
@@ -304,14 +331,14 @@ export default function initializeWorkerMain() {
304
331
  const warning = preparedContent.manifest.updateCodecSupport(newEvaluatedCodecs);
305
332
  if (warning !== null) {
306
333
  sendMessage({
307
- type: WorkerMessageType.Warning,
334
+ type: CoreMessageType.Warning,
308
335
  contentId: preparedContent.contentId,
309
336
  value: formatErrorForSender(warning),
310
337
  });
311
338
  }
312
339
  } catch (err) {
313
340
  sendMessage({
314
- type: WorkerMessageType.Error,
341
+ type: CoreMessageType.Error,
315
342
  contentId: preparedContent.contentId,
316
343
  value: formatErrorForSender(err),
317
344
  });
@@ -363,11 +390,11 @@ export default function initializeWorkerMain() {
363
390
  if (preparedContent === null || preparedContent.contentId !== msg.contentId) {
364
391
  return;
365
392
  }
366
- if (preparedContent.workerTextSender === null) {
393
+ if (preparedContent.coreTextSender === null) {
367
394
  log.error("Core", "Added text track but text track aren't enabled");
368
395
  return;
369
396
  }
370
- preparedContent.workerTextSender.onPushedTrackSuccess(msg.value.ranges);
397
+ preparedContent.coreTextSender.onPushedTrackSuccess(msg.value.ranges);
371
398
  break;
372
399
  }
373
400
 
@@ -376,11 +403,11 @@ export default function initializeWorkerMain() {
376
403
  if (preparedContent === null || preparedContent.contentId !== msg.contentId) {
377
404
  return;
378
405
  }
379
- if (preparedContent.workerTextSender === null) {
406
+ if (preparedContent.coreTextSender === null) {
380
407
  log.error("Core", "Added text track but text track aren't enabled");
381
408
  return;
382
409
  }
383
- preparedContent.workerTextSender.onPushedTrackError(new Error(msg.value.message));
410
+ preparedContent.coreTextSender.onPushedTrackError(new Error(msg.value.message));
384
411
  break;
385
412
  }
386
413
 
@@ -389,11 +416,11 @@ export default function initializeWorkerMain() {
389
416
  if (preparedContent === null || preparedContent.contentId !== msg.contentId) {
390
417
  return;
391
418
  }
392
- if (preparedContent.workerTextSender === null) {
419
+ if (preparedContent.coreTextSender === null) {
393
420
  log.error("Core", "Removed text track but text track aren't enabled");
394
421
  return;
395
422
  }
396
- preparedContent.workerTextSender.onRemoveSuccess(msg.value.ranges);
423
+ preparedContent.coreTextSender.onRemoveSuccess(msg.value.ranges);
397
424
  break;
398
425
  }
399
426
 
@@ -402,21 +429,21 @@ export default function initializeWorkerMain() {
402
429
  if (preparedContent === null || preparedContent.contentId !== msg.contentId) {
403
430
  return;
404
431
  }
405
- if (preparedContent.workerTextSender === null) {
432
+ if (preparedContent.coreTextSender === null) {
406
433
  log.error("Core", "Removed text track but text track aren't enabled");
407
434
  return;
408
435
  }
409
- preparedContent.workerTextSender.onRemoveError(new Error(msg.value.message));
436
+ preparedContent.coreTextSender.onRemoveError(new Error(msg.value.message));
410
437
  break;
411
438
  }
412
439
 
413
440
  case MainThreadMessageType.PullSegmentSinkStoreInfos: {
414
- sendSegmentSinksStoreInfos(contentPreparer, msg.value.requestId);
441
+ sendSegmentSinksStoreInfos(sendMessage, contentPreparer, msg.value.requestId);
415
442
  break;
416
443
  }
417
444
 
418
445
  case MainThreadMessageType.ThumbnailDataRequest: {
419
- sendThumbnailData(contentPreparer, msg);
446
+ sendThumbnailData(sendMessage, contentPreparer, msg);
420
447
  break;
421
448
  }
422
449
 
@@ -428,50 +455,72 @@ export default function initializeWorkerMain() {
428
455
  default:
429
456
  assertUnreachable(msg);
430
457
  }
431
- };
458
+ });
432
459
  }
433
460
 
461
+ /**
462
+ * Performs steps needed to prepare a future content to be played:
463
+ * - Load its Manifest file
464
+ * - Create MSE `MediaSource` for that content.
465
+ * - Initialize all modules that will follow that content
466
+ * - etc.
467
+ * @param {Function} sendMessage - Function allowing to send messages to the
468
+ * "main thread" part of the RxPlayer logic.
469
+ * @param {ContentPreparer} contentPreparer
470
+ * @param {Object} contentInitData - Configuration wanted for the content to
471
+ * load.
472
+ * @param {Object} refs - Collection of so-called "references": values
473
+ * configuring playback that may be updated at any time and that the
474
+ * CoreEntry should react on.
475
+ */
434
476
  function prepareNewContent(
477
+ sendMessage: (msg: ICoreMessage, transferables?: Transferable[]) => void,
435
478
  contentPreparer: ContentPreparer,
436
479
  contentInitData: IContentInitializationData,
480
+ refs: ICoreReferences,
437
481
  ): void {
438
- contentPreparer.initializeNewContent(contentInitData).then(
439
- (manifest) => {
440
- sendMessage({
441
- type: WorkerMessageType.ManifestReady,
442
- contentId: contentInitData.contentId,
443
- value: { manifest },
444
- });
445
- },
446
- (err: unknown) => {
447
- sendMessage({
448
- type: WorkerMessageType.Error,
449
- contentId: contentInitData.contentId,
450
- value: formatErrorForSender(err),
451
- });
452
- },
453
- );
482
+ contentPreparer
483
+ .initializeNewContent(sendMessage, contentInitData, {
484
+ limitResolution: { video: refs.limitVideoResolution },
485
+ throttleBitrate: { video: refs.throttleVideoBitrate },
486
+ })
487
+ .then(
488
+ (manifest) => {
489
+ sendMessage({
490
+ type: CoreMessageType.ManifestReady,
491
+ contentId: contentInitData.contentId,
492
+ value: { manifest },
493
+ });
494
+ },
495
+ (err: unknown) => {
496
+ sendMessage({
497
+ type: CoreMessageType.Error,
498
+ contentId: contentInitData.contentId,
499
+ value: formatErrorForSender(err),
500
+ });
501
+ },
502
+ );
454
503
  }
455
504
 
456
- function updateGlobalReference(msg: IReferenceUpdateMessage): void {
505
+ function updateCoreReference(msg: IReferenceUpdateMessage, refs: ICoreReferences): void {
457
506
  switch (msg.value.name) {
458
507
  case "wantedBufferAhead":
459
- wantedBufferAhead.setValueIfChanged(msg.value.newVal);
508
+ refs.wantedBufferAhead.setValueIfChanged(msg.value.newVal);
460
509
  break;
461
510
  case "maxVideoBufferSize":
462
- maxVideoBufferSize.setValueIfChanged(msg.value.newVal);
511
+ refs.maxVideoBufferSize.setValueIfChanged(msg.value.newVal);
463
512
  break;
464
513
  case "maxBufferBehind":
465
- maxBufferBehind.setValueIfChanged(msg.value.newVal);
514
+ refs.maxBufferBehind.setValueIfChanged(msg.value.newVal);
466
515
  break;
467
516
  case "maxBufferAhead":
468
- maxBufferAhead.setValueIfChanged(msg.value.newVal);
517
+ refs.maxBufferAhead.setValueIfChanged(msg.value.newVal);
469
518
  break;
470
519
  case "limitVideoResolution":
471
- limitVideoResolution.setValueIfChanged(msg.value.newVal);
520
+ refs.limitVideoResolution.setValueIfChanged(msg.value.newVal);
472
521
  break;
473
522
  case "throttleVideoBitrate":
474
- throttleVideoBitrate.setValueIfChanged(msg.value.newVal);
523
+ refs.throttleVideoBitrate.setValueIfChanged(msg.value.newVal);
475
524
  break;
476
525
  default:
477
526
  assertUnreachable(msg.value);
@@ -507,9 +556,11 @@ interface IContentHandle {
507
556
  }
508
557
 
509
558
  function loadPreparedContent(
559
+ sendMessage: (msg: ICoreMessage, transferables?: Transferable[]) => void,
510
560
  val: ILoadingContentParameters,
511
561
  contentPreparer: ContentPreparer,
512
- playbackObservationRef: IReadOnlySharedReference<IWorkerPlaybackObservation>,
562
+ playbackObservationRef: IReadOnlySharedReference<ICorePlaybackObservation>,
563
+ refs: ICoreReferences,
513
564
  ): IContentHandle {
514
565
  log.debug("Core", "Loading pepared content.");
515
566
  const contentCanceller = new TaskCanceller();
@@ -532,7 +583,7 @@ function loadPreparedContent(
532
583
  currentLoadCanceller.linkToSignal(contentCanceller.signal);
533
584
 
534
585
  /**
535
- * Stores last discontinuity update sent to the worker for each Period and type
586
+ * Stores last discontinuity update sent to the Core for each Period and type
536
587
  * combinations, at least until the corresponding `PeriodStreamCleared`
537
588
  * message.
538
589
  *
@@ -541,14 +592,14 @@ function loadPreparedContent(
541
592
  */
542
593
  const lastSentDiscontinuitiesStore: Map<
543
594
  Period,
544
- Map<ITrackType, IDiscontinuityUpdateWorkerMessagePayload>
595
+ Map<ITrackType, IDiscontinuityUpdateCoreMessagePayload>
545
596
  > = new Map();
546
597
 
547
598
  const preparedContent = contentPreparer.getCurrentContent();
548
599
  if (preparedContent === null || preparedContent.manifest === null) {
549
600
  const error = new OtherError("NONE", "Loading content when none is prepared");
550
601
  sendMessage({
551
- type: WorkerMessageType.Error,
602
+ type: CoreMessageType.Error,
552
603
  contentId: undefined,
553
604
  value: formatErrorForSender(error),
554
605
  });
@@ -572,7 +623,7 @@ function loadPreparedContent(
572
623
  const freezeResolution =
573
624
  preparedContent.freezeResolver.onNewObservation(observation);
574
625
  if (freezeResolution !== null) {
575
- handleFreezeResolution(freezeResolution, {
626
+ handleFreezeResolution(sendMessage, freezeResolution, {
576
627
  contentId,
577
628
  manifest,
578
629
  handleMediaSourceReload: performMediaSourceReload,
@@ -591,14 +642,14 @@ function loadPreparedContent(
591
642
  "Wanted starting time not found in the Manifest.",
592
643
  );
593
644
  sendMessage({
594
- type: WorkerMessageType.Error,
645
+ type: CoreMessageType.Error,
595
646
  contentId,
596
647
  value: formatErrorForSender(error),
597
648
  });
598
649
  throw error;
599
650
  }
600
651
 
601
- const playbackObserver = new WorkerPlaybackObserver(
652
+ const playbackObserver = new CorePlaybackObserver(
602
653
  playbackObservationRef,
603
654
  contentId,
604
655
  sendMessage,
@@ -617,13 +668,13 @@ function loadPreparedContent(
617
668
  {
618
669
  onWarning: (err: IPlayerError) =>
619
670
  sendMessage({
620
- type: WorkerMessageType.Warning,
671
+ type: CoreMessageType.Warning,
621
672
  contentId,
622
673
  value: formatErrorForSender(err),
623
674
  }),
624
675
  onPeriodChanged: (period: Period) => {
625
676
  sendMessage({
626
- type: WorkerMessageType.ActivePeriodChanged,
677
+ type: CoreMessageType.ActivePeriodChanged,
627
678
  contentId,
628
679
  value: { periodId: period.id },
629
680
  });
@@ -639,10 +690,10 @@ function loadPreparedContent(
639
690
  segmentSinksStore,
640
691
  segmentQueueCreator,
641
692
  {
642
- wantedBufferAhead,
643
- maxVideoBufferSize,
644
- maxBufferAhead,
645
- maxBufferBehind,
693
+ wantedBufferAhead: refs.wantedBufferAhead,
694
+ maxVideoBufferSize: refs.maxVideoBufferSize,
695
+ maxBufferAhead: refs.maxBufferAhead,
696
+ maxBufferBehind: refs.maxBufferBehind,
646
697
  drmSystemId,
647
698
  enableFastSwitching,
648
699
  onCodecSwitch,
@@ -660,7 +711,7 @@ function loadPreparedContent(
660
711
  return {
661
712
  needsBufferFlush(payload) {
662
713
  sendMessage({
663
- type: WorkerMessageType.NeedsBufferFlush,
714
+ type: CoreMessageType.NeedsBufferFlush,
664
715
  contentId,
665
716
  value: payload,
666
717
  });
@@ -706,7 +757,7 @@ function loadPreparedContent(
706
757
 
707
758
  lockedStream(payload) {
708
759
  sendMessage({
709
- type: WorkerMessageType.LockedStream,
760
+ type: CoreMessageType.LockedStream,
710
761
  contentId,
711
762
  value: {
712
763
  periodId: payload.period.id,
@@ -728,7 +779,7 @@ function loadPreparedContent(
728
779
  return;
729
780
  }
730
781
  sendMessage({
731
- type: WorkerMessageType.AdaptationChanged,
782
+ type: CoreMessageType.AdaptationChanged,
732
783
  contentId,
733
784
  value: {
734
785
  adaptationId: value.adaptation?.id ?? null,
@@ -747,7 +798,7 @@ function loadPreparedContent(
747
798
  return;
748
799
  }
749
800
  sendMessage({
750
- type: WorkerMessageType.RepresentationChanged,
801
+ type: CoreMessageType.RepresentationChanged,
751
802
  contentId,
752
803
  value: {
753
804
  adaptationId: value.adaptation.id,
@@ -760,7 +811,7 @@ function loadPreparedContent(
760
811
 
761
812
  inbandEvent(value) {
762
813
  sendMessage({
763
- type: WorkerMessageType.InbandEvent,
814
+ type: CoreMessageType.InbandEvent,
764
815
  contentId,
765
816
  value,
766
817
  });
@@ -768,7 +819,7 @@ function loadPreparedContent(
768
819
 
769
820
  warning(value) {
770
821
  sendMessage({
771
- type: WorkerMessageType.Warning,
822
+ type: CoreMessageType.Warning,
772
823
  contentId,
773
824
  value: formatErrorForSender(value),
774
825
  });
@@ -784,7 +835,7 @@ function loadPreparedContent(
784
835
  value.adaptationRef,
785
836
  );
786
837
  sendMessage({
787
- type: WorkerMessageType.PeriodStreamReady,
838
+ type: CoreMessageType.PeriodStreamReady,
788
839
  contentId,
789
840
  value: { periodId: value.period.id, bufferType: value.type },
790
841
  });
@@ -811,7 +862,7 @@ function loadPreparedContent(
811
862
  value.type,
812
863
  );
813
864
  sendMessage({
814
- type: WorkerMessageType.PeriodStreamCleared,
865
+ type: CoreMessageType.PeriodStreamCleared,
815
866
  contentId,
816
867
  value: { periodId: value.period.id, bufferType: value.type },
817
868
  });
@@ -829,7 +880,7 @@ function loadPreparedContent(
829
880
  // Considering this is only for an unimportant undocumented API, we may
830
881
  // throttle such messages. (e.g. max one per 2 seconds for each type?).
831
882
  sendMessage({
832
- type: WorkerMessageType.BitrateEstimateChange,
883
+ type: CoreMessageType.BitrateEstimateChange,
833
884
  contentId,
834
885
  value: {
835
886
  bitrate: payload.bitrate,
@@ -844,7 +895,7 @@ function loadPreparedContent(
844
895
 
845
896
  needsDecipherabilityFlush() {
846
897
  sendMessage({
847
- type: WorkerMessageType.NeedsDecipherabilityFlush,
898
+ type: CoreMessageType.NeedsDecipherabilityFlush,
848
899
  contentId,
849
900
  value: null,
850
901
  });
@@ -867,7 +918,7 @@ function loadPreparedContent(
867
918
  content.representation = content.representation.getMetadataSnapshot();
868
919
  }
869
920
  sendMessage({
870
- type: WorkerMessageType.EncryptionDataEncountered,
921
+ type: CoreMessageType.EncryptionDataEncountered,
871
922
  contentId,
872
923
  value: {
873
924
  keyIds: value.keyIds,
@@ -881,7 +932,7 @@ function loadPreparedContent(
881
932
 
882
933
  error(error: unknown) {
883
934
  sendMessage({
884
- type: WorkerMessageType.Error,
935
+ type: CoreMessageType.Error,
885
936
  contentId,
886
937
  value: formatErrorForSender(error),
887
938
  });
@@ -920,7 +971,7 @@ function loadPreparedContent(
920
971
  };
921
972
  periodMap.set(value.bufferType, msgObj);
922
973
  sendMessage({
923
- type: WorkerMessageType.DiscontinuityUpdate,
974
+ type: CoreMessageType.DiscontinuityUpdate,
924
975
  contentId,
925
976
  value: msgObj,
926
977
  });
@@ -945,7 +996,7 @@ function loadPreparedContent(
945
996
 
946
997
  sendMessage(
947
998
  {
948
- type: WorkerMessageType.ReloadingMediaSource,
999
+ type: CoreMessageType.ReloadingMediaSource,
949
1000
  mediaSourceId,
950
1001
  value: payload,
951
1002
  },
@@ -963,7 +1014,7 @@ function loadPreparedContent(
963
1014
  currentLoadCanceller = null;
964
1015
  }
965
1016
  const contentId = contentPreparer.getCurrentContent()?.contentId;
966
- contentPreparer.reloadMediaSource().then(
1017
+ contentPreparer.reloadMediaSource(sendMessage).then(
967
1018
  () => {
968
1019
  log.info("Core", "MediaSource Reloaded, loading content again", {
969
1020
  newInitialTime,
@@ -976,7 +1027,7 @@ function loadPreparedContent(
976
1027
  return;
977
1028
  }
978
1029
  sendMessage({
979
- type: WorkerMessageType.Error,
1030
+ type: CoreMessageType.Error,
980
1031
  contentId,
981
1032
  value: formatErrorForSender(err),
982
1033
  });
@@ -1004,7 +1055,7 @@ function updateLoggerLevel(
1004
1055
  });
1005
1056
  // Not relying on `sendMessage` as it also logs
1006
1057
  postMessage({
1007
- type: WorkerMessageType.LogMessage,
1058
+ type: CoreMessageType.LogMessage,
1008
1059
  value: {
1009
1060
  namespace,
1010
1061
  logLevel: levelStr,
@@ -1018,10 +1069,12 @@ function updateLoggerLevel(
1018
1069
  /**
1019
1070
  * Send a message `SegmentSinkStoreUpdate` to the main thread with
1020
1071
  * a serialized object that represents the segmentSinksStore state.
1072
+ * @param {Function} sendMessage - Function allowing to send messages to the
1073
+ * "main thread" part of the RxPlayer logic.
1021
1074
  * @param {ContentPreparer} contentPreparer
1022
- * @returns {void}
1023
1075
  */
1024
1076
  function sendSegmentSinksStoreInfos(
1077
+ sendMessage: (msg: ICoreMessage, transferables?: Transferable[]) => void,
1025
1078
  contentPreparer: ContentPreparer,
1026
1079
  requestId: number,
1027
1080
  ): void {
@@ -1031,7 +1084,7 @@ function sendSegmentSinksStoreInfos(
1031
1084
  }
1032
1085
  const segmentSinksMetrics = currentContent.segmentSinksStore.getSegmentSinksMetrics();
1033
1086
  sendMessage({
1034
- type: WorkerMessageType.SegmentSinkStoreUpdate,
1087
+ type: CoreMessageType.SegmentSinkStoreUpdate,
1035
1088
  contentId: currentContent.contentId,
1036
1089
  value: { segmentSinkMetrics: segmentSinksMetrics, requestId },
1037
1090
  });
@@ -1039,6 +1092,8 @@ function sendSegmentSinksStoreInfos(
1039
1092
 
1040
1093
  /**
1041
1094
  * Handle accordingly an `IFreezeResolution` object.
1095
+ * @param {Function} sendMessage - Function allowing to send messages to the
1096
+ * "main thread" part of the RxPlayer logic.
1042
1097
  * @param {Object|null} freezeResolution - The `IFreezeResolution` suggested.
1043
1098
  * @param {Object} param - Parameters that might be needed to implement the
1044
1099
  * resolution.
@@ -1052,6 +1107,7 @@ function sendSegmentSinksStoreInfos(
1052
1107
  * `IFreezeResolution` object suggest it.
1053
1108
  */
1054
1109
  function handleFreezeResolution(
1110
+ sendMessage: (msg: ICoreMessage, transferables?: Transferable[]) => void,
1055
1111
  freezeResolution: IFreezeResolution,
1056
1112
  {
1057
1113
  contentId,
@@ -1078,7 +1134,7 @@ function handleFreezeResolution(
1078
1134
  case "flush": {
1079
1135
  log.info("Core", "Flushing buffer due to freeze");
1080
1136
  sendMessage({
1081
- type: WorkerMessageType.NeedsBufferFlush,
1137
+ type: CoreMessageType.NeedsBufferFlush,
1082
1138
  contentId,
1083
1139
  value: {
1084
1140
  relativeResumingPosition: freezeResolution.value.relativeSeek,
@@ -1111,13 +1167,14 @@ function handleFreezeResolution(
1111
1167
  * @returns {void}
1112
1168
  */
1113
1169
  function sendThumbnailData(
1170
+ sendMessage: (msg: ICoreMessage, transferables?: Transferable[]) => void,
1114
1171
  contentPreparer: ContentPreparer,
1115
1172
  msg: IThumbnailDataRequestMainMessage,
1116
1173
  ): void {
1117
1174
  const preparedContent = contentPreparer.getCurrentContent();
1118
1175
  const respondWithError = (err: unknown) => {
1119
1176
  sendMessage({
1120
- type: WorkerMessageType.ThumbnailDataResponse,
1177
+ type: CoreMessageType.ThumbnailDataResponse,
1121
1178
  contentId: msg.contentId,
1122
1179
  value: {
1123
1180
  status: "error",
@@ -1145,7 +1202,7 @@ function sendThumbnailData(
1145
1202
  (result) => {
1146
1203
  sendMessage(
1147
1204
  {
1148
- type: WorkerMessageType.ThumbnailDataResponse,
1205
+ type: CoreMessageType.ThumbnailDataResponse,
1149
1206
  contentId: msg.contentId,
1150
1207
  value: {
1151
1208
  status: "success",
@@ -1161,3 +1218,20 @@ function sendThumbnailData(
1161
1218
  },
1162
1219
  );
1163
1220
  }
1221
+
1222
+ /**
1223
+ * Collection of so-called "references": values configuring playback that may
1224
+ * be updated at any time and that the CoreEntry should react on.
1225
+ */
1226
+ export interface ICoreReferences {
1227
+ limitVideoResolution: SharedReference<IResolutionInfo>;
1228
+ /** Max buffer size after the current position, in seconds (we GC further up). */
1229
+ maxBufferAhead: SharedReference<number>;
1230
+ /** Max buffer size before the current position, in seconds (we GC further down). */
1231
+ maxBufferBehind: SharedReference<number>;
1232
+ /** Buffer maximum size in kiloBytes at which we stop downloading */
1233
+ maxVideoBufferSize: SharedReference<number>;
1234
+ throttleVideoBitrate: SharedReference<number>;
1235
+ /** Buffer "goal" at which we stop downloading new segments. */
1236
+ wantedBufferAhead: SharedReference<number>;
1237
+ }