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,1713 +0,0 @@
1
- "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
- };
16
- })();
17
- var __assign = (this && this.__assign) || function () {
18
- __assign = Object.assign || function(t) {
19
- for (var s, i = 1, n = arguments.length; i < n; i++) {
20
- s = arguments[i];
21
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
- t[p] = s[p];
23
- }
24
- return t;
25
- };
26
- return __assign.apply(this, arguments);
27
- };
28
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
- return new (P || (P = Promise))(function (resolve, reject) {
31
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
- step((generator = generator.apply(thisArg, _arguments || [])).next());
35
- });
36
- };
37
- var __generator = (this && this.__generator) || function (thisArg, body) {
38
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
39
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
- function verb(n) { return function (v) { return step([n, v]); }; }
41
- function step(op) {
42
- if (f) throw new TypeError("Generator is already executing.");
43
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
44
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
45
- if (y = 0, t) op = [op[0] & 2, t.value];
46
- switch (op[0]) {
47
- case 0: case 1: t = op; break;
48
- case 4: _.label++; return { value: op[1], done: false };
49
- case 5: _.label++; y = op[1]; op = [0]; continue;
50
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
- default:
52
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
- if (t[2]) _.ops.pop();
57
- _.trys.pop(); continue;
58
- }
59
- op = body.call(thisArg, _);
60
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
- }
63
- };
64
- var __read = (this && this.__read) || function (o, n) {
65
- var m = typeof Symbol === "function" && o[Symbol.iterator];
66
- if (!m) return o;
67
- var i = m.call(o), r, ar = [], e;
68
- try {
69
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
70
- }
71
- catch (error) { e = { error: error }; }
72
- finally {
73
- try {
74
- if (r && !r.done && (m = i["return"])) m.call(i);
75
- }
76
- finally { if (e) throw e.error; }
77
- }
78
- return ar;
79
- };
80
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
81
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
82
- if (ar || !(i in from)) {
83
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
84
- ar[i] = from[i];
85
- }
86
- }
87
- return to.concat(ar || Array.prototype.slice.call(from));
88
- };
89
- var __values = (this && this.__values) || function(o) {
90
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
91
- if (m) return m.call(o);
92
- if (o && typeof o.length === "number") return {
93
- next: function () {
94
- if (o && i >= o.length) o = void 0;
95
- return { value: o && o[i++], done: !o };
96
- }
97
- };
98
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
99
- };
100
- Object.defineProperty(exports, "__esModule", { value: true });
101
- var eme_1 = require("../../compat/eme");
102
- var may_media_element_fail_on_undecipherable_data_1 = require("../../compat/may_media_element_fail_on_undecipherable_data");
103
- var should_reload_media_source_on_decipherability_update_1 = require("../../compat/should_reload_media_source_on_decipherability_update");
104
- var errors_1 = require("../../errors");
105
- var features_1 = require("../../features");
106
- var log_1 = require("../../log");
107
- var manifest_1 = require("../../manifest");
108
- var main_media_source_interface_1 = require("../../mse/main_media_source_interface");
109
- var array_find_1 = require("../../utils/array_find");
110
- var assert_1 = require("../../utils/assert");
111
- var id_generator_1 = require("../../utils/id_generator");
112
- var is_null_or_undefined_1 = require("../../utils/is_null_or_undefined");
113
- var object_assign_1 = require("../../utils/object_assign");
114
- var reference_1 = require("../../utils/reference");
115
- var request_1 = require("../../utils/request");
116
- var task_canceller_1 = require("../../utils/task_canceller");
117
- var decrypt_1 = require("../decrypt");
118
- var send_message_1 = require("./send_message");
119
- var types_1 = require("./types");
120
- var create_core_playback_observer_1 = require("./utils/create_core_playback_observer");
121
- var create_media_source_1 = require("./utils/create_media_source");
122
- var get_initial_time_1 = require("./utils/get_initial_time");
123
- var get_loaded_reference_1 = require("./utils/get_loaded_reference");
124
- var initial_seek_and_play_1 = require("./utils/initial_seek_and_play");
125
- var rebuffering_controller_1 = require("./utils/rebuffering_controller");
126
- var stream_events_emitter_1 = require("./utils/stream_events_emitter/stream_events_emitter");
127
- var throw_on_media_error_1 = require("./utils/throw_on_media_error");
128
- var update_manifest_codec_support_1 = require("./utils/update_manifest_codec_support");
129
- var generateContentId = (0, id_generator_1.default)();
130
- /**
131
- * @class MultiThreadContentInitializer
132
- */
133
- var MultiThreadContentInitializer = /** @class */ (function (_super) {
134
- __extends(MultiThreadContentInitializer, _super);
135
- /**
136
- * Create a new `MultiThreadContentInitializer`, associated to the given
137
- * settings.
138
- * @param {Object} settings
139
- */
140
- function MultiThreadContentInitializer(settings) {
141
- var _this = _super.call(this) || this;
142
- _this._settings = settings;
143
- _this._initCanceller = new task_canceller_1.default();
144
- _this._currentMediaSourceCanceller = new task_canceller_1.default();
145
- _this._currentMediaSourceCanceller.linkToSignal(_this._initCanceller.signal);
146
- _this._currentContentInfo = null;
147
- _this._awaitingRequests = {
148
- nextRequestId: 0,
149
- pendingSinkMetrics: new Map(),
150
- pendingThumbnailFetching: new Map(),
151
- };
152
- _this._queuedWorkerMessages = null;
153
- return _this;
154
- }
155
- /**
156
- * Perform non-destructive preparation steps, to prepare a future content.
157
- */
158
- MultiThreadContentInitializer.prototype.prepare = function () {
159
- var _this = this;
160
- var _a, _b;
161
- if (this._currentContentInfo !== null || this._initCanceller.isUsed()) {
162
- return;
163
- }
164
- var contentId = generateContentId();
165
- var _c = this._settings, adaptiveOptions = _c.adaptiveOptions, transportOptions = _c.transportOptions, useMseInWorker = _c.useMseInWorker, worker = _c.worker;
166
- var _d = this._settings.bufferOptions, wantedBufferAhead = _d.wantedBufferAhead, maxVideoBufferSize = _d.maxVideoBufferSize, maxBufferAhead = _d.maxBufferAhead, maxBufferBehind = _d.maxBufferBehind;
167
- var initialVideoBitrate = adaptiveOptions.initialBitrates.video;
168
- var initialAudioBitrate = adaptiveOptions.initialBitrates.audio;
169
- this._currentContentInfo = {
170
- contentId: contentId,
171
- contentDecryptor: null,
172
- manifest: null,
173
- mediaSourceInfo: null,
174
- rebufferingController: null,
175
- streamEventsEmitter: null,
176
- initialTime: undefined,
177
- autoPlay: undefined,
178
- initialPlayPerformed: null,
179
- useMseInWorker: useMseInWorker,
180
- };
181
- (0, send_message_1.default)(worker, {
182
- type: "prepare" /* MainThreadMessageType.PrepareContent */,
183
- value: {
184
- contentId: contentId,
185
- cmcd: this._settings.cmcd,
186
- enableRepresentationAvoidance: this._settings.enableRepresentationAvoidance,
187
- url: this._settings.url,
188
- hasText: this._hasTextBufferFeature(),
189
- transportOptions: transportOptions,
190
- initialVideoBitrate: initialVideoBitrate,
191
- initialAudioBitrate: initialAudioBitrate,
192
- manifestRetryOptions: __assign(__assign({}, this._settings.manifestRequestSettings), { lowLatencyMode: this._settings.lowLatencyMode }),
193
- segmentRetryOptions: this._settings.segmentRequestOptions,
194
- useMseInWorker: useMseInWorker,
195
- },
196
- });
197
- this._initCanceller.signal.register(function () {
198
- (0, send_message_1.default)(worker, {
199
- type: "stop" /* MainThreadMessageType.StopContent */,
200
- contentId: contentId,
201
- value: null,
202
- });
203
- });
204
- if (this._initCanceller.isUsed()) {
205
- return;
206
- }
207
- this._queuedWorkerMessages = [];
208
- log_1.default.debug("Init", "addEventListener prepare buffering worker messages");
209
- var onmessage = function (evt) {
210
- var msgData = evt.data;
211
- var type = msgData.type;
212
- switch (type) {
213
- case "log" /* WorkerMessageType.LogMessage */: {
214
- var formatted = msgData.value.logs.map(function (l) {
215
- switch (typeof l) {
216
- case "string":
217
- case "number":
218
- case "boolean":
219
- case "undefined":
220
- return l;
221
- case "object":
222
- if (l === null) {
223
- return null;
224
- }
225
- return formatSentLogObject(l);
226
- default:
227
- (0, assert_1.assertUnreachable)(l);
228
- }
229
- });
230
- switch (msgData.value.logLevel) {
231
- case "NONE":
232
- break;
233
- case "ERROR":
234
- log_1.default.error.apply(log_1.default, __spreadArray([msgData.value.namespace], __read(formatted), false));
235
- break;
236
- case "WARNING":
237
- log_1.default.warn.apply(log_1.default, __spreadArray([msgData.value.namespace], __read(formatted), false));
238
- break;
239
- case "INFO":
240
- log_1.default.info.apply(log_1.default, __spreadArray([msgData.value.namespace], __read(formatted), false));
241
- break;
242
- case "DEBUG":
243
- log_1.default.debug.apply(log_1.default, __spreadArray([msgData.value.namespace], __read(formatted), false));
244
- break;
245
- default:
246
- (0, assert_1.assertUnreachable)(msgData.value.logLevel);
247
- }
248
- break;
249
- }
250
- default:
251
- if (_this._queuedWorkerMessages !== null) {
252
- _this._queuedWorkerMessages.push(evt);
253
- }
254
- break;
255
- }
256
- };
257
- this._settings.worker.addEventListener("message", onmessage);
258
- var onmessageerror = function (_msg) {
259
- log_1.default.error("Init", "Error when receiving message from worker.");
260
- };
261
- this._settings.worker.addEventListener("messageerror", onmessageerror);
262
- this._initCanceller.signal.register(function () {
263
- log_1.default.debug("Init", "removeEventListener prepare for worker message");
264
- _this._settings.worker.removeEventListener("message", onmessage);
265
- _this._settings.worker.removeEventListener("messageerror", onmessageerror);
266
- });
267
- // Also bind all `SharedReference` objects:
268
- var throttleVideoBitrate = (_a = adaptiveOptions.throttlers.throttleBitrate.video) !== null && _a !== void 0 ? _a : new reference_1.default(Infinity);
269
- bindNumberReferencesToWorker(worker, this._initCanceller.signal, [wantedBufferAhead, "wantedBufferAhead"], [maxVideoBufferSize, "maxVideoBufferSize"], [maxBufferAhead, "maxBufferAhead"], [maxBufferBehind, "maxBufferBehind"], [throttleVideoBitrate, "throttleVideoBitrate"]);
270
- var limitVideoResolution = (_b = adaptiveOptions.throttlers.limitResolution.video) !== null && _b !== void 0 ? _b : new reference_1.default({
271
- height: undefined,
272
- width: undefined,
273
- pixelRatio: 1,
274
- });
275
- limitVideoResolution.onUpdate(function (newVal) {
276
- (0, send_message_1.default)(worker, {
277
- type: "ref-update" /* MainThreadMessageType.ReferenceUpdate */,
278
- value: { name: "limitVideoResolution", newVal: newVal },
279
- });
280
- }, { clearSignal: this._initCanceller.signal, emitCurrentValue: true });
281
- };
282
- /**
283
- * Update URL of the Manifest.
284
- * @param {Array.<string>|undefined} urls - URLs to reach that Manifest from
285
- * the most prioritized URL to the least prioritized URL.
286
- * @param {boolean} refreshNow - If `true` the resource in question (e.g.
287
- * DASH's MPD) will be refreshed immediately.
288
- */
289
- MultiThreadContentInitializer.prototype.updateContentUrls = function (urls, refreshNow) {
290
- if (this._currentContentInfo === null) {
291
- return;
292
- }
293
- (0, send_message_1.default)(this._settings.worker, {
294
- type: "urls-update" /* MainThreadMessageType.ContentUrlsUpdate */,
295
- contentId: this._currentContentInfo.contentId,
296
- value: { urls: urls, refreshNow: refreshNow },
297
- });
298
- };
299
- /**
300
- * @param {HTMLMediaElement} mediaElement
301
- * @param {Object} playbackObserver
302
- */
303
- MultiThreadContentInitializer.prototype.start = function (mediaElement, playbackObserver) {
304
- var e_1, _a;
305
- var _this = this;
306
- this.prepare(); // Load Manifest if not already done
307
- if (this._initCanceller.isUsed()) {
308
- return;
309
- }
310
- var textDisplayer = null;
311
- if (this._settings.textTrackOptions.textTrackMode === "html" &&
312
- features_1.default.htmlTextDisplayer !== null) {
313
- (0, assert_1.default)(this._hasTextBufferFeature());
314
- textDisplayer = new features_1.default.htmlTextDisplayer(mediaElement, this._settings.textTrackOptions.textTrackElement);
315
- }
316
- else if (features_1.default.nativeTextDisplayer !== null) {
317
- (0, assert_1.default)(this._hasTextBufferFeature());
318
- textDisplayer = new features_1.default.nativeTextDisplayer(mediaElement);
319
- }
320
- else {
321
- (0, assert_1.default)(!this._hasTextBufferFeature());
322
- }
323
- this._initCanceller.signal.register(function () {
324
- textDisplayer === null || textDisplayer === void 0 ? void 0 : textDisplayer.stop();
325
- });
326
- /** Translate errors coming from the media element into RxPlayer errors. */
327
- (0, throw_on_media_error_1.default)(mediaElement, function (error) { return _this._onFatalError(error); }, this._initCanceller.signal);
328
- /**
329
- * Send content protection initialization data.
330
- * TODO remove and use ContentDecryptor directly when possible.
331
- */
332
- var lastContentProtection = new reference_1.default(null);
333
- var mediaSourceStatus = new reference_1.default(0 /* MediaSourceInitializationStatus.Nothing */);
334
- var _b = this._initializeContentDecryption(mediaElement, lastContentProtection, mediaSourceStatus, function () { return notifyAndStartMediaSourceReload(0, undefined, undefined); }, this._initCanceller.signal), drmInitializationStatus = _b.statusRef, contentDecryptor = _b.contentDecryptor;
335
- var contentInfo = this._currentContentInfo;
336
- if (contentInfo !== null) {
337
- contentInfo.contentDecryptor = contentDecryptor;
338
- }
339
- var playbackStartParams = {
340
- mediaElement: mediaElement,
341
- textDisplayer: textDisplayer,
342
- playbackObserver: playbackObserver,
343
- drmInitializationStatus: drmInitializationStatus,
344
- mediaSourceStatus: mediaSourceStatus,
345
- };
346
- mediaSourceStatus.onUpdate(function (msInitStatus, stopListeningMSStatus) {
347
- if (msInitStatus === 2 /* MediaSourceInitializationStatus.Attached */) {
348
- stopListeningMSStatus();
349
- _this._startPlaybackIfReady(playbackStartParams);
350
- }
351
- }, { clearSignal: this._initCanceller.signal, emitCurrentValue: true });
352
- drmInitializationStatus.onUpdate(function (initializationStatus, stopListeningDrm) {
353
- if (initializationStatus.initializationState.type === "initialized") {
354
- stopListeningDrm();
355
- _this._startPlaybackIfReady(playbackStartParams);
356
- }
357
- }, { emitCurrentValue: true, clearSignal: this._initCanceller.signal });
358
- /**
359
- * Reset directly (synchronously) the current `MediaSource` and signal to
360
- * the core that we did so.
361
- * @param {number} deltaPosition - Position you want to seek to after
362
- * reloading, as a delta in seconds from the last polled playing position.
363
- * @param {number|undefined} minimumPosition - If set, minimum time bound
364
- * in seconds after `deltaPosition` has been applied.
365
- * @param {number|undefined} maximumPosition - If set, minimum time bound
366
- * in seconds after `deltaPosition` has been applied.
367
- */
368
- var notifyAndStartMediaSourceReload = function (deltaPosition, minimumPosition, maximumPosition) {
369
- var reloadingContentInfo = _this._currentContentInfo;
370
- if (reloadingContentInfo === null) {
371
- log_1.default.warn("Init", "Asked to reload when no content is loaded.");
372
- return;
373
- }
374
- if (reloadingContentInfo === null ||
375
- reloadingContentInfo.mediaSourceInfo === null) {
376
- log_1.default.warn("Init", "Asked to reload when no MediaSource is active.");
377
- return;
378
- }
379
- var mediaSourceId = reloadingContentInfo.mediaSourceInfo.type === "main"
380
- ? reloadingContentInfo.mediaSourceInfo.mediaSource.id
381
- : reloadingContentInfo.mediaSourceInfo.mediaSourceId;
382
- (0, send_message_1.default)(_this._settings.worker, {
383
- type: "ms-reload" /* MainThreadMessageType.MediaSourceReload */,
384
- mediaSourceId: mediaSourceId,
385
- value: null,
386
- });
387
- reloadMediaSource(deltaPosition, minimumPosition, maximumPosition);
388
- };
389
- /**
390
- * Reset directly (synchronously) the current `MediaSource`.
391
- *
392
- * It is assumed that `core` already knows about this action. If not, call
393
- * `notifyAndStartMediaSourceReload` instead.
394
- * @param {number} deltaPosition - Position you want to seek to after
395
- * reloading, as a delta in seconds from the last polled playing position.
396
- * @param {number|undefined} minimumPosition - If set, minimum time bound
397
- * in seconds after `deltaPosition` has been applied.
398
- * @param {number|undefined} maximumPosition - If set, minimum time bound
399
- * in seconds after `deltaPosition` has been applied.
400
- */
401
- var reloadMediaSource = function (deltaPosition, minimumPosition, maximumPosition) {
402
- var _a;
403
- var reloadingContentInfo = _this._currentContentInfo;
404
- if (reloadingContentInfo === null) {
405
- log_1.default.warn("Init", "Asked to reload when no content is loaded.");
406
- return;
407
- }
408
- var lastObservation = playbackObserver.getReference().getValue();
409
- var currentPosition = lastObservation.position.getWanted();
410
- var isPaused = ((_a = reloadingContentInfo.initialPlayPerformed) === null || _a === void 0 ? void 0 : _a.getValue()) === true ||
411
- reloadingContentInfo.autoPlay === undefined
412
- ? lastObservation.paused
413
- : !reloadingContentInfo.autoPlay;
414
- var position = currentPosition + deltaPosition;
415
- if (minimumPosition !== undefined) {
416
- position = Math.max(minimumPosition, position);
417
- }
418
- if (maximumPosition !== undefined) {
419
- position = Math.min(maximumPosition, position);
420
- }
421
- _this._reload(mediaElement, textDisplayer, playbackObserver, mediaSourceStatus, position, !isPaused);
422
- };
423
- var onmessage = function (msg) {
424
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28;
425
- var msgData = msg.data;
426
- switch (msgData.type) {
427
- case "attach-media-source" /* WorkerMessageType.AttachMediaSource */: {
428
- if (((_a = _this._currentContentInfo) === null || _a === void 0 ? void 0 : _a.contentId) !== msgData.contentId) {
429
- return;
430
- }
431
- if (_this._currentContentInfo !== null) {
432
- if (((_b = _this._currentContentInfo.mediaSourceInfo) === null || _b === void 0 ? void 0 : _b.type) === "main") {
433
- _this._currentContentInfo.mediaSourceInfo.mediaSource.dispose();
434
- }
435
- _this._currentContentInfo.mediaSourceInfo = {
436
- type: "core",
437
- mediaSourceId: msgData.mediaSourceId,
438
- };
439
- }
440
- var mediaSourceLink_1 = msgData.value;
441
- mediaSourceStatus.onUpdate(function (currStatus, stopListening) {
442
- if (currStatus === 1 /* MediaSourceInitializationStatus.AttachNow */) {
443
- stopListening();
444
- log_1.default.info("media", "Attaching MediaSource URL to the media element");
445
- if (mediaSourceLink_1.type === "handle") {
446
- mediaElement.srcObject = mediaSourceLink_1.value;
447
- _this._currentMediaSourceCanceller.signal.register(function () {
448
- mediaElement.srcObject = null;
449
- });
450
- }
451
- else {
452
- mediaElement.src = mediaSourceLink_1.value;
453
- _this._currentMediaSourceCanceller.signal.register(function () {
454
- (0, create_media_source_1.resetMediaElement)(mediaElement, mediaSourceLink_1.value);
455
- });
456
- }
457
- (0, create_media_source_1.disableRemotePlaybackOnManagedMediaSource)(mediaElement, _this._currentMediaSourceCanceller.signal);
458
- mediaSourceStatus.setValue(2 /* MediaSourceInitializationStatus.Attached */);
459
- }
460
- }, { emitCurrentValue: true, clearSignal: _this._initCanceller.signal });
461
- break;
462
- }
463
- case "warning" /* WorkerMessageType.Warning */:
464
- if (((_c = _this._currentContentInfo) === null || _c === void 0 ? void 0 : _c.contentId) !== msgData.contentId) {
465
- return;
466
- }
467
- _this.trigger("warning", formatWorkerError(msgData.value));
468
- break;
469
- case "error" /* WorkerMessageType.Error */:
470
- if (((_d = _this._currentContentInfo) === null || _d === void 0 ? void 0 : _d.contentId) !== msgData.contentId) {
471
- return;
472
- }
473
- _this._onFatalError(formatWorkerError(msgData.value));
474
- break;
475
- case "create-media-source" /* WorkerMessageType.CreateMediaSource */:
476
- _this._onCreateMediaSourceMessage(msgData, mediaElement, mediaSourceStatus, _this._settings.worker);
477
- break;
478
- case "add-source-buffer" /* WorkerMessageType.AddSourceBuffer */:
479
- {
480
- if (((_f = (_e = _this._currentContentInfo) === null || _e === void 0 ? void 0 : _e.mediaSourceInfo) === null || _f === void 0 ? void 0 : _f.type) !== "main" ||
481
- _this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
482
- msgData.mediaSourceId) {
483
- return;
484
- }
485
- var mediaSource = _this._currentContentInfo.mediaSourceInfo.mediaSource;
486
- mediaSource.addSourceBuffer(msgData.value.sourceBufferType, msgData.value.codec);
487
- }
488
- break;
489
- case "source-buffer-append" /* WorkerMessageType.SourceBufferAppend */:
490
- {
491
- if (((_h = (_g = _this._currentContentInfo) === null || _g === void 0 ? void 0 : _g.mediaSourceInfo) === null || _h === void 0 ? void 0 : _h.type) !== "main" ||
492
- _this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
493
- msgData.mediaSourceId) {
494
- return;
495
- }
496
- var mediaSource_1 = _this._currentContentInfo.mediaSourceInfo.mediaSource;
497
- var sourceBuffer_1 = (0, array_find_1.default)(mediaSource_1.sourceBuffers, function (s) { return s.type === msgData.sourceBufferType; });
498
- if (sourceBuffer_1 === undefined) {
499
- return;
500
- }
501
- sourceBuffer_1
502
- .appendBuffer(msgData.value.data, msgData.value.params)
503
- .then(function (buffered) {
504
- (0, send_message_1.default)(_this._settings.worker, {
505
- type: "sb-success" /* MainThreadMessageType.SourceBufferSuccess */,
506
- mediaSourceId: mediaSource_1.id,
507
- sourceBufferType: sourceBuffer_1.type,
508
- operationId: msgData.operationId,
509
- value: { buffered: buffered },
510
- });
511
- })
512
- .catch(function (error) {
513
- (0, send_message_1.default)(_this._settings.worker, {
514
- type: "sb-error" /* MainThreadMessageType.SourceBufferError */,
515
- mediaSourceId: mediaSource_1.id,
516
- sourceBufferType: sourceBuffer_1.type,
517
- operationId: msgData.operationId,
518
- value: error instanceof task_canceller_1.CancellationError
519
- ? { errorName: "CancellationError" }
520
- : formatSourceBufferError(error).serialize(),
521
- });
522
- });
523
- }
524
- break;
525
- case "source-buffer-remove" /* WorkerMessageType.SourceBufferRemove */:
526
- {
527
- if (((_k = (_j = _this._currentContentInfo) === null || _j === void 0 ? void 0 : _j.mediaSourceInfo) === null || _k === void 0 ? void 0 : _k.type) !== "main" ||
528
- _this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
529
- msgData.mediaSourceId) {
530
- return;
531
- }
532
- var mediaSource_2 = _this._currentContentInfo.mediaSourceInfo.mediaSource;
533
- var sourceBuffer_2 = (0, array_find_1.default)(mediaSource_2.sourceBuffers, function (s) { return s.type === msgData.sourceBufferType; });
534
- if (sourceBuffer_2 === undefined) {
535
- return;
536
- }
537
- sourceBuffer_2
538
- .remove(msgData.value.start, msgData.value.end)
539
- .then(function (buffered) {
540
- (0, send_message_1.default)(_this._settings.worker, {
541
- type: "sb-success" /* MainThreadMessageType.SourceBufferSuccess */,
542
- mediaSourceId: mediaSource_2.id,
543
- sourceBufferType: sourceBuffer_2.type,
544
- operationId: msgData.operationId,
545
- value: { buffered: buffered },
546
- });
547
- })
548
- .catch(function (error) {
549
- (0, send_message_1.default)(_this._settings.worker, {
550
- type: "sb-error" /* MainThreadMessageType.SourceBufferError */,
551
- mediaSourceId: mediaSource_2.id,
552
- sourceBufferType: sourceBuffer_2.type,
553
- operationId: msgData.operationId,
554
- value: error instanceof task_canceller_1.CancellationError
555
- ? { errorName: "CancellationError" }
556
- : formatSourceBufferError(error).serialize(),
557
- });
558
- });
559
- }
560
- break;
561
- case "abort-source-buffer" /* WorkerMessageType.AbortSourceBuffer */:
562
- {
563
- if (((_m = (_l = _this._currentContentInfo) === null || _l === void 0 ? void 0 : _l.mediaSourceInfo) === null || _m === void 0 ? void 0 : _m.type) !== "main" ||
564
- _this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
565
- msgData.mediaSourceId) {
566
- return;
567
- }
568
- var mediaSource = _this._currentContentInfo.mediaSourceInfo.mediaSource;
569
- var sourceBuffer = (0, array_find_1.default)(mediaSource.sourceBuffers, function (s) { return s.type === msgData.sourceBufferType; });
570
- if (sourceBuffer === undefined) {
571
- return;
572
- }
573
- sourceBuffer.abort();
574
- }
575
- break;
576
- case "update-media-source-duration" /* WorkerMessageType.UpdateMediaSourceDuration */:
577
- {
578
- if (((_p = (_o = _this._currentContentInfo) === null || _o === void 0 ? void 0 : _o.mediaSourceInfo) === null || _p === void 0 ? void 0 : _p.type) !== "main" ||
579
- _this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
580
- msgData.mediaSourceId) {
581
- return;
582
- }
583
- var mediaSource = _this._currentContentInfo.mediaSourceInfo.mediaSource;
584
- if ((mediaSource === null || mediaSource === void 0 ? void 0 : mediaSource.id) !== msgData.mediaSourceId) {
585
- return;
586
- }
587
- mediaSource.setDuration(msgData.value.duration, msgData.value.isRealEndKnown);
588
- }
589
- break;
590
- case "stop-media-source-duration" /* WorkerMessageType.InterruptMediaSourceDurationUpdate */:
591
- {
592
- if (((_r = (_q = _this._currentContentInfo) === null || _q === void 0 ? void 0 : _q.mediaSourceInfo) === null || _r === void 0 ? void 0 : _r.type) !== "main" ||
593
- _this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
594
- msgData.mediaSourceId) {
595
- return;
596
- }
597
- var mediaSource = _this._currentContentInfo.mediaSourceInfo.mediaSource;
598
- if ((mediaSource === null || mediaSource === void 0 ? void 0 : mediaSource.id) !== msgData.mediaSourceId) {
599
- return;
600
- }
601
- mediaSource.interruptDurationSetting();
602
- }
603
- break;
604
- case "end-of-stream" /* WorkerMessageType.EndOfStream */:
605
- {
606
- if (((_t = (_s = _this._currentContentInfo) === null || _s === void 0 ? void 0 : _s.mediaSourceInfo) === null || _t === void 0 ? void 0 : _t.type) !== "main" ||
607
- _this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
608
- msgData.mediaSourceId) {
609
- return;
610
- }
611
- var mediaSource = _this._currentContentInfo.mediaSourceInfo.mediaSource;
612
- mediaSource.maintainEndOfStream();
613
- }
614
- break;
615
- case "stop-end-of-stream" /* WorkerMessageType.InterruptEndOfStream */:
616
- {
617
- if (((_v = (_u = _this._currentContentInfo) === null || _u === void 0 ? void 0 : _u.mediaSourceInfo) === null || _v === void 0 ? void 0 : _v.type) !== "main" ||
618
- _this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
619
- msgData.mediaSourceId) {
620
- return;
621
- }
622
- var mediaSource = _this._currentContentInfo.mediaSourceInfo.mediaSource;
623
- mediaSource.stopEndOfStream();
624
- }
625
- break;
626
- case "dispose-media-source" /* WorkerMessageType.DisposeMediaSource */:
627
- {
628
- if (((_x = (_w = _this._currentContentInfo) === null || _w === void 0 ? void 0 : _w.mediaSourceInfo) === null || _x === void 0 ? void 0 : _x.type) !== "main" ||
629
- _this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
630
- msgData.mediaSourceId) {
631
- return;
632
- }
633
- var mediaSource = _this._currentContentInfo.mediaSourceInfo.mediaSource;
634
- mediaSource.dispose();
635
- }
636
- break;
637
- case "needs-buffer-flush" /* WorkerMessageType.NeedsBufferFlush */: {
638
- if (((_y = _this._currentContentInfo) === null || _y === void 0 ? void 0 : _y.contentId) !== msgData.contentId) {
639
- return;
640
- }
641
- var lastObservation = playbackObserver.getReference().getValue();
642
- var currentTime = lastObservation.position.isAwaitingFuturePosition()
643
- ? lastObservation.position.getWanted()
644
- : mediaElement.currentTime;
645
- var relativeResumingPosition = (_0 = (_z = msgData.value) === null || _z === void 0 ? void 0 : _z.relativeResumingPosition) !== null && _0 !== void 0 ? _0 : 0;
646
- var canBeApproximateSeek = Boolean((_1 = msgData.value) === null || _1 === void 0 ? void 0 : _1.relativePosHasBeenDefaulted);
647
- var wantedSeekingTime = void 0;
648
- if (relativeResumingPosition === 0 && canBeApproximateSeek) {
649
- // in case relativeResumingPosition is 0, we still perform
650
- // a tiny seek to be sure that the browser will correclty reload the video.
651
- wantedSeekingTime = currentTime + 0.001;
652
- }
653
- else {
654
- wantedSeekingTime = currentTime + relativeResumingPosition;
655
- }
656
- playbackObserver.setCurrentTime(wantedSeekingTime);
657
- break;
658
- }
659
- case "active-period-changed" /* WorkerMessageType.ActivePeriodChanged */: {
660
- if (((_2 = _this._currentContentInfo) === null || _2 === void 0 ? void 0 : _2.contentId) !== msgData.contentId ||
661
- _this._currentContentInfo.manifest === null) {
662
- return;
663
- }
664
- var period = (0, array_find_1.default)(_this._currentContentInfo.manifest.periods, function (p) { return p.id === msgData.value.periodId; });
665
- if (period !== undefined) {
666
- _this.trigger("activePeriodChanged", { period: period });
667
- }
668
- break;
669
- }
670
- case "adaptation-changed" /* WorkerMessageType.AdaptationChanged */: {
671
- if (((_3 = _this._currentContentInfo) === null || _3 === void 0 ? void 0 : _3.contentId) !== msgData.contentId ||
672
- _this._currentContentInfo.manifest === null) {
673
- return;
674
- }
675
- var period = (0, array_find_1.default)(_this._currentContentInfo.manifest.periods, function (p) { return p.id === msgData.value.periodId; });
676
- if (period === undefined) {
677
- return;
678
- }
679
- if (msgData.value.adaptationId === null) {
680
- _this.trigger("adaptationChange", {
681
- period: period,
682
- adaptation: null,
683
- type: msgData.value.type,
684
- });
685
- return;
686
- }
687
- var adaptations = (_4 = period.adaptations[msgData.value.type]) !== null && _4 !== void 0 ? _4 : [];
688
- var adaptation = (0, array_find_1.default)(adaptations, function (a) { return a.id === msgData.value.adaptationId; });
689
- if (adaptation !== undefined) {
690
- _this.trigger("adaptationChange", {
691
- period: period,
692
- adaptation: adaptation,
693
- type: msgData.value.type,
694
- });
695
- }
696
- break;
697
- }
698
- case "representation-changed" /* WorkerMessageType.RepresentationChanged */: {
699
- if (((_5 = _this._currentContentInfo) === null || _5 === void 0 ? void 0 : _5.contentId) !== msgData.contentId ||
700
- _this._currentContentInfo.manifest === null) {
701
- return;
702
- }
703
- var period = (0, array_find_1.default)(_this._currentContentInfo.manifest.periods, function (p) { return p.id === msgData.value.periodId; });
704
- if (period === undefined) {
705
- return;
706
- }
707
- if (msgData.value.representationId === null) {
708
- _this.trigger("representationChange", {
709
- period: period,
710
- type: msgData.value.type,
711
- representation: null,
712
- });
713
- return;
714
- }
715
- var adaptations = (_6 = period.adaptations[msgData.value.type]) !== null && _6 !== void 0 ? _6 : [];
716
- var adaptation = (0, array_find_1.default)(adaptations, function (a) { return a.id === msgData.value.adaptationId; });
717
- if (adaptation === undefined) {
718
- return;
719
- }
720
- var representation = (0, array_find_1.default)(adaptation.representations, function (r) { return r.id === msgData.value.representationId; });
721
- if (representation !== undefined) {
722
- _this.trigger("representationChange", {
723
- period: period,
724
- type: msgData.value.type,
725
- representation: representation,
726
- });
727
- }
728
- break;
729
- }
730
- case "encryption-data-encountered" /* WorkerMessageType.EncryptionDataEncountered */:
731
- if (((_7 = _this._currentContentInfo) === null || _7 === void 0 ? void 0 : _7.contentId) !== msgData.contentId) {
732
- return;
733
- }
734
- lastContentProtection.setValue(msgData.value);
735
- break;
736
- case "manifest-ready" /* WorkerMessageType.ManifestReady */: {
737
- if (((_8 = _this._currentContentInfo) === null || _8 === void 0 ? void 0 : _8.contentId) !== msgData.contentId) {
738
- return;
739
- }
740
- var manifest = msgData.value.manifest;
741
- _this._currentContentInfo.manifest = manifest;
742
- _this._updateCodecSupport(manifest, mediaElement);
743
- _this._startPlaybackIfReady(playbackStartParams);
744
- break;
745
- }
746
- case "manifest-update" /* WorkerMessageType.ManifestUpdate */: {
747
- if (((_9 = _this._currentContentInfo) === null || _9 === void 0 ? void 0 : _9.contentId) !== msgData.contentId) {
748
- return;
749
- }
750
- var manifest = (_10 = _this._currentContentInfo) === null || _10 === void 0 ? void 0 : _10.manifest;
751
- if ((0, is_null_or_undefined_1.default)(manifest)) {
752
- log_1.default.error("Init", "Manifest update but no Manifest loaded");
753
- return;
754
- }
755
- (0, manifest_1.replicateUpdatesOnManifestMetadata)(manifest, msgData.value.manifest, msgData.value.updates);
756
- (_12 = (_11 = _this._currentContentInfo) === null || _11 === void 0 ? void 0 : _11.streamEventsEmitter) === null || _12 === void 0 ? void 0 : _12.onManifestUpdate(manifest);
757
- _this._updateCodecSupport(manifest, mediaElement);
758
- _this.trigger("manifestUpdate", msgData.value.updates);
759
- break;
760
- }
761
- case "update-playback-rate" /* WorkerMessageType.UpdatePlaybackRate */:
762
- if (((_13 = _this._currentContentInfo) === null || _13 === void 0 ? void 0 : _13.contentId) !== msgData.contentId) {
763
- return;
764
- }
765
- playbackObserver.setPlaybackRate(msgData.value);
766
- break;
767
- case "bitrate-estimate-change" /* WorkerMessageType.BitrateEstimateChange */:
768
- if (((_14 = _this._currentContentInfo) === null || _14 === void 0 ? void 0 : _14.contentId) !== msgData.contentId) {
769
- return;
770
- }
771
- _this.trigger("bitrateEstimateChange", {
772
- type: msgData.value.bufferType,
773
- bitrate: msgData.value.bitrate,
774
- });
775
- break;
776
- case "inband-event" /* WorkerMessageType.InbandEvent */:
777
- if (((_15 = _this._currentContentInfo) === null || _15 === void 0 ? void 0 : _15.contentId) !== msgData.contentId) {
778
- return;
779
- }
780
- _this.trigger("inbandEvents", msgData.value);
781
- break;
782
- case "locked-stream" /* WorkerMessageType.LockedStream */: {
783
- if (((_16 = _this._currentContentInfo) === null || _16 === void 0 ? void 0 : _16.contentId) !== msgData.contentId ||
784
- _this._currentContentInfo.manifest === null) {
785
- return;
786
- }
787
- var period = (0, array_find_1.default)(_this._currentContentInfo.manifest.periods, function (p) { return p.id === msgData.value.periodId; });
788
- if (period === undefined) {
789
- return;
790
- }
791
- (_17 = _this._currentContentInfo.rebufferingController) === null || _17 === void 0 ? void 0 : _17.onLockedStream(msgData.value.bufferType, period);
792
- break;
793
- }
794
- case "period-stream-ready" /* WorkerMessageType.PeriodStreamReady */: {
795
- if (((_18 = _this._currentContentInfo) === null || _18 === void 0 ? void 0 : _18.contentId) !== msgData.contentId ||
796
- _this._currentContentInfo.manifest === null) {
797
- return;
798
- }
799
- var period = (0, array_find_1.default)(_this._currentContentInfo.manifest.periods, function (p) { return p.id === msgData.value.periodId; });
800
- if (period === undefined) {
801
- return;
802
- }
803
- var ref_1 = new reference_1.default(undefined);
804
- ref_1.onUpdate(function (adapChoice) {
805
- if (_this._currentContentInfo === null) {
806
- ref_1.finish();
807
- return;
808
- }
809
- if (!(0, is_null_or_undefined_1.default)(adapChoice)) {
810
- adapChoice.representations.onUpdate(function (repChoice, stopListening) {
811
- if (_this._currentContentInfo === null) {
812
- stopListening();
813
- return;
814
- }
815
- (0, send_message_1.default)(_this._settings.worker, {
816
- type: "rep-update" /* MainThreadMessageType.RepresentationUpdate */,
817
- contentId: _this._currentContentInfo.contentId,
818
- value: {
819
- periodId: msgData.value.periodId,
820
- adaptationId: adapChoice.adaptationId,
821
- bufferType: msgData.value.bufferType,
822
- choice: repChoice,
823
- },
824
- });
825
- }, { clearSignal: _this._initCanceller.signal });
826
- }
827
- (0, send_message_1.default)(_this._settings.worker, {
828
- type: "track-update" /* MainThreadMessageType.TrackUpdate */,
829
- contentId: _this._currentContentInfo.contentId,
830
- value: {
831
- periodId: msgData.value.periodId,
832
- bufferType: msgData.value.bufferType,
833
- choice: (0, is_null_or_undefined_1.default)(adapChoice)
834
- ? adapChoice
835
- : {
836
- adaptationId: adapChoice.adaptationId,
837
- switchingMode: adapChoice.switchingMode,
838
- initialRepresentations: adapChoice.representations.getValue(),
839
- relativeResumingPosition: adapChoice.relativeResumingPosition,
840
- },
841
- },
842
- });
843
- }, { clearSignal: _this._initCanceller.signal });
844
- _this.trigger("periodStreamReady", {
845
- period: period,
846
- type: msgData.value.bufferType,
847
- adaptationRef: ref_1,
848
- });
849
- break;
850
- }
851
- case "period-stream-cleared" /* WorkerMessageType.PeriodStreamCleared */: {
852
- if (((_19 = _this._currentContentInfo) === null || _19 === void 0 ? void 0 : _19.contentId) !== msgData.contentId ||
853
- _this._currentContentInfo.manifest === null) {
854
- return;
855
- }
856
- _this.trigger("periodStreamCleared", {
857
- periodId: msgData.value.periodId,
858
- type: msgData.value.bufferType,
859
- });
860
- break;
861
- }
862
- case "discontinuity-update" /* WorkerMessageType.DiscontinuityUpdate */: {
863
- if (((_20 = _this._currentContentInfo) === null || _20 === void 0 ? void 0 : _20.contentId) !== msgData.contentId ||
864
- _this._currentContentInfo.manifest === null) {
865
- return;
866
- }
867
- var period = (0, array_find_1.default)(_this._currentContentInfo.manifest.periods, function (p) { return p.id === msgData.value.periodId; });
868
- if (period === undefined) {
869
- log_1.default.warn("Init", "Discontinuity's Period not found", {
870
- periodId: msgData.value.periodId,
871
- });
872
- return;
873
- }
874
- (_21 = _this._currentContentInfo.rebufferingController) === null || _21 === void 0 ? void 0 : _21.updateDiscontinuityInfo({
875
- period: period,
876
- bufferType: msgData.value.bufferType,
877
- discontinuity: msgData.value.discontinuity,
878
- position: msgData.value.position,
879
- });
880
- break;
881
- }
882
- case "push-text-data" /* WorkerMessageType.PushTextData */: {
883
- if (((_22 = _this._currentContentInfo) === null || _22 === void 0 ? void 0 : _22.contentId) !== msgData.contentId) {
884
- return;
885
- }
886
- if (textDisplayer === null) {
887
- log_1.default.warn("text", "Received AddTextData message but no text displayer exists");
888
- }
889
- else {
890
- try {
891
- var ranges = textDisplayer.pushTextData(msgData.value);
892
- (0, send_message_1.default)(_this._settings.worker, {
893
- type: "add-text-success" /* MainThreadMessageType.PushTextDataSuccess */,
894
- contentId: msgData.contentId,
895
- value: { ranges: ranges },
896
- });
897
- }
898
- catch (err) {
899
- var message = err instanceof Error ? err.message : "Unknown error";
900
- (0, send_message_1.default)(_this._settings.worker, {
901
- type: "push-text-error" /* MainThreadMessageType.PushTextDataError */,
902
- contentId: msgData.contentId,
903
- value: { message: message },
904
- });
905
- }
906
- }
907
- break;
908
- }
909
- case "remove-text-data" /* WorkerMessageType.RemoveTextData */: {
910
- if (((_23 = _this._currentContentInfo) === null || _23 === void 0 ? void 0 : _23.contentId) !== msgData.contentId) {
911
- return;
912
- }
913
- if (textDisplayer === null) {
914
- log_1.default.warn("text", "Received RemoveTextData message but no text displayer exists");
915
- }
916
- else {
917
- try {
918
- var ranges = textDisplayer.removeBuffer(msgData.value.start, msgData.value.end);
919
- (0, send_message_1.default)(_this._settings.worker, {
920
- type: "remove-text-success" /* MainThreadMessageType.RemoveTextDataSuccess */,
921
- contentId: msgData.contentId,
922
- value: { ranges: ranges },
923
- });
924
- }
925
- catch (err) {
926
- var message = err instanceof Error ? err.message : "Unknown error";
927
- (0, send_message_1.default)(_this._settings.worker, {
928
- type: "remove-text-error" /* MainThreadMessageType.RemoveTextDataError */,
929
- contentId: msgData.contentId,
930
- value: { message: message },
931
- });
932
- }
933
- }
934
- break;
935
- }
936
- case "reset-text-displayer" /* WorkerMessageType.ResetTextDisplayer */: {
937
- if (((_24 = _this._currentContentInfo) === null || _24 === void 0 ? void 0 : _24.contentId) !== msgData.contentId) {
938
- return;
939
- }
940
- if (textDisplayer === null) {
941
- log_1.default.warn("text", "Received ResetTextDisplayer message but no text displayer exists");
942
- }
943
- else {
944
- textDisplayer.reset();
945
- }
946
- break;
947
- }
948
- case "stop-text-displayer" /* WorkerMessageType.StopTextDisplayer */: {
949
- if (((_25 = _this._currentContentInfo) === null || _25 === void 0 ? void 0 : _25.contentId) !== msgData.contentId) {
950
- return;
951
- }
952
- if (textDisplayer === null) {
953
- log_1.default.warn("text", "Received StopTextDisplayer message but no text displayer exists");
954
- }
955
- else {
956
- textDisplayer.stop();
957
- }
958
- break;
959
- }
960
- case "reloading-media-source" /* WorkerMessageType.ReloadingMediaSource */:
961
- {
962
- if (_this._currentContentInfo === null ||
963
- _this._currentContentInfo.mediaSourceInfo === null) {
964
- return;
965
- }
966
- var mediaSourceId = _this._currentContentInfo.mediaSourceInfo.type === "main"
967
- ? _this._currentContentInfo.mediaSourceInfo.mediaSource.id
968
- : _this._currentContentInfo.mediaSourceInfo.mediaSourceId;
969
- if (mediaSourceId !== msgData.mediaSourceId) {
970
- return;
971
- }
972
- reloadMediaSource(msgData.value.timeOffset, msgData.value.minimumPosition, msgData.value.maximumPosition);
973
- }
974
- break;
975
- case "needs-decipherability-flush" /* WorkerMessageType.NeedsDecipherabilityFlush */:
976
- {
977
- if (((_26 = _this._currentContentInfo) === null || _26 === void 0 ? void 0 : _26.contentId) !== msgData.contentId) {
978
- return;
979
- }
980
- var keySystem = (0, decrypt_1.getKeySystemConfiguration)(mediaElement);
981
- if ((0, should_reload_media_source_on_decipherability_update_1.default)(keySystem === null || keySystem === void 0 ? void 0 : keySystem[0])) {
982
- notifyAndStartMediaSourceReload(0, undefined, undefined);
983
- }
984
- else {
985
- var lastObservation = playbackObserver.getReference().getValue();
986
- var currentPosition = lastObservation.position.getWanted();
987
- // simple seek close to the current position
988
- // to flush the buffers
989
- if (currentPosition + 0.001 < lastObservation.duration) {
990
- playbackObserver.setCurrentTime(mediaElement.currentTime + 0.001);
991
- }
992
- else {
993
- playbackObserver.setCurrentTime(currentPosition);
994
- }
995
- }
996
- }
997
- break;
998
- case "segment-sink-store-update" /* WorkerMessageType.SegmentSinkStoreUpdate */: {
999
- if (((_27 = _this._currentContentInfo) === null || _27 === void 0 ? void 0 : _27.contentId) !== msgData.contentId) {
1000
- return;
1001
- }
1002
- var sinkObj = _this._awaitingRequests.pendingSinkMetrics.get(msgData.value.requestId);
1003
- if (sinkObj !== undefined) {
1004
- sinkObj.resolve(msgData.value.segmentSinkMetrics);
1005
- }
1006
- else {
1007
- log_1.default.error("Init", "Failed to send segment sink store update");
1008
- }
1009
- break;
1010
- }
1011
- case "init-success" /* WorkerMessageType.InitSuccess */:
1012
- case "init-error" /* WorkerMessageType.InitError */:
1013
- // Should already be handled by the API
1014
- break;
1015
- case "log" /* WorkerMessageType.LogMessage */:
1016
- // Already handled by prepare's handler
1017
- break;
1018
- case "thumbnail-response" /* WorkerMessageType.ThumbnailDataResponse */: {
1019
- if (((_28 = _this._currentContentInfo) === null || _28 === void 0 ? void 0 : _28.contentId) !== msgData.contentId) {
1020
- return;
1021
- }
1022
- var tObj = _this._awaitingRequests.pendingThumbnailFetching.get(msgData.value.requestId);
1023
- if (tObj !== undefined) {
1024
- if (msgData.value.status === "error") {
1025
- tObj.reject(formatWorkerError(msgData.value.error));
1026
- }
1027
- else {
1028
- tObj.resolve(msgData.value.data);
1029
- }
1030
- }
1031
- else {
1032
- log_1.default.error("Init", "Failed to send segment sink store update");
1033
- }
1034
- break;
1035
- }
1036
- default:
1037
- (0, assert_1.assertUnreachable)(msgData);
1038
- }
1039
- };
1040
- log_1.default.debug("Init", "addEventListener for worker message");
1041
- if (this._queuedWorkerMessages !== null) {
1042
- var bufferedMessages = this._queuedWorkerMessages.slice();
1043
- log_1.default.debug("Init", "Processing buffered messages", {
1044
- ammount: bufferedMessages.length,
1045
- });
1046
- try {
1047
- for (var bufferedMessages_1 = __values(bufferedMessages), bufferedMessages_1_1 = bufferedMessages_1.next(); !bufferedMessages_1_1.done; bufferedMessages_1_1 = bufferedMessages_1.next()) {
1048
- var message = bufferedMessages_1_1.value;
1049
- onmessage(message);
1050
- }
1051
- }
1052
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
1053
- finally {
1054
- try {
1055
- if (bufferedMessages_1_1 && !bufferedMessages_1_1.done && (_a = bufferedMessages_1.return)) _a.call(bufferedMessages_1);
1056
- }
1057
- finally { if (e_1) throw e_1.error; }
1058
- }
1059
- this._queuedWorkerMessages = null;
1060
- }
1061
- this._settings.worker.addEventListener("message", onmessage);
1062
- this._initCanceller.signal.register(function () {
1063
- log_1.default.debug("Init", "removeEventListener for worker message");
1064
- _this._settings.worker.removeEventListener("message", onmessage);
1065
- });
1066
- };
1067
- MultiThreadContentInitializer.prototype.dispose = function () {
1068
- var _a;
1069
- this._initCanceller.cancel();
1070
- if (this._currentContentInfo !== null) {
1071
- if (((_a = this._currentContentInfo.mediaSourceInfo) === null || _a === void 0 ? void 0 : _a.type) === "main") {
1072
- this._currentContentInfo.mediaSourceInfo.mediaSource.dispose();
1073
- }
1074
- this._currentContentInfo = null;
1075
- }
1076
- };
1077
- MultiThreadContentInitializer.prototype._onFatalError = function (err) {
1078
- if (this._initCanceller.isUsed()) {
1079
- return;
1080
- }
1081
- this._initCanceller.cancel();
1082
- this.trigger("error", err);
1083
- };
1084
- MultiThreadContentInitializer.prototype._initializeContentDecryption = function (mediaElement, lastContentProtection, mediaSourceStatus, reloadMediaSource, cancelSignal) {
1085
- var _this = this;
1086
- var _a;
1087
- var keySystems = this._settings.keySystems;
1088
- // TODO private?
1089
- var createEmeDisabledReference = function (errMsg) {
1090
- mediaSourceStatus.setValue(1 /* MediaSourceInitializationStatus.AttachNow */);
1091
- lastContentProtection.onUpdate(function (data, stopListening) {
1092
- if (data === null) {
1093
- // initial value
1094
- return;
1095
- }
1096
- stopListening();
1097
- var err = new errors_1.EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR", errMsg, {
1098
- keyStatuses: undefined,
1099
- keySystemConfiguration: undefined,
1100
- keySystem: undefined,
1101
- });
1102
- _this._onFatalError(err);
1103
- }, { clearSignal: cancelSignal });
1104
- var ref = new reference_1.default({
1105
- initializationState: {
1106
- type: "initialized",
1107
- value: null,
1108
- },
1109
- contentDecryptor: null,
1110
- drmSystemId: undefined,
1111
- });
1112
- ref.finish(); // We know that no new value will be triggered
1113
- return { statusRef: ref, contentDecryptor: null };
1114
- };
1115
- if (keySystems.length === 0) {
1116
- return createEmeDisabledReference("No `keySystems` option given.");
1117
- }
1118
- else if (features_1.default.decrypt === null) {
1119
- return createEmeDisabledReference("EME feature not activated.");
1120
- }
1121
- var ContentDecryptor = features_1.default.decrypt;
1122
- var emeApi = (_a = mediaElement.FORCED_EME_API) !== null && _a !== void 0 ? _a : (0, eme_1.default)("auto");
1123
- if (emeApi === null) {
1124
- return createEmeDisabledReference("EME API not available on the current page.");
1125
- }
1126
- log_1.default.debug("Init", "Creating ContentDecryptor");
1127
- var contentDecryptor = new ContentDecryptor(emeApi, mediaElement, keySystems);
1128
- var drmStatusRef = new reference_1.default({
1129
- initializationState: { type: "uninitialized", value: null },
1130
- drmSystemId: undefined,
1131
- }, cancelSignal);
1132
- var updateCodecSupportOnStateChange = function (state) {
1133
- var _a;
1134
- if (state > decrypt_1.ContentDecryptorState.Initializing) {
1135
- var manifest = (_a = _this._currentContentInfo) === null || _a === void 0 ? void 0 : _a.manifest;
1136
- if ((0, is_null_or_undefined_1.default)(manifest)) {
1137
- return;
1138
- }
1139
- _this._updateCodecSupport(manifest, mediaElement);
1140
- contentDecryptor.removeEventListener("stateChange", updateCodecSupportOnStateChange);
1141
- }
1142
- };
1143
- contentDecryptor.addEventListener("stateChange", updateCodecSupportOnStateChange);
1144
- contentDecryptor.addEventListener("keyIdsCompatibilityUpdate", function (updates) {
1145
- if (_this._currentContentInfo === null ||
1146
- _this._currentContentInfo.manifest === null) {
1147
- return;
1148
- }
1149
- var manUpdates = (0, manifest_1.updateDecipherabilityFromKeyIds)(_this._currentContentInfo.manifest, updates);
1150
- if ((0, may_media_element_fail_on_undecipherable_data_1.default)() &&
1151
- manUpdates.some(function (e) { return e.representation.decipherable !== true; })) {
1152
- reloadMediaSource();
1153
- }
1154
- else {
1155
- (0, send_message_1.default)(_this._settings.worker, {
1156
- type: "decipherability-update" /* MainThreadMessageType.DecipherabilityStatusUpdate */,
1157
- contentId: _this._currentContentInfo.contentId,
1158
- value: manUpdates.map(function (s) { return ({
1159
- representationUniqueId: s.representation.uniqueId,
1160
- decipherable: s.representation.decipherable,
1161
- }); }),
1162
- });
1163
- }
1164
- _this.trigger("decipherabilityUpdate", manUpdates);
1165
- });
1166
- contentDecryptor.addEventListener("blackListProtectionData", function (protData) {
1167
- if (_this._currentContentInfo === null ||
1168
- _this._currentContentInfo.manifest === null) {
1169
- return;
1170
- }
1171
- var manUpdates = (0, manifest_1.updateDecipherabilityFromProtectionData)(_this._currentContentInfo.manifest, protData);
1172
- if ((0, may_media_element_fail_on_undecipherable_data_1.default)() &&
1173
- manUpdates.some(function (e) { return e.representation.decipherable !== true; })) {
1174
- reloadMediaSource();
1175
- }
1176
- else {
1177
- (0, send_message_1.default)(_this._settings.worker, {
1178
- type: "decipherability-update" /* MainThreadMessageType.DecipherabilityStatusUpdate */,
1179
- contentId: _this._currentContentInfo.contentId,
1180
- value: manUpdates.map(function (s) { return ({
1181
- representationUniqueId: s.representation.uniqueId,
1182
- decipherable: s.representation.decipherable,
1183
- }); }),
1184
- });
1185
- }
1186
- _this.trigger("decipherabilityUpdate", manUpdates);
1187
- });
1188
- contentDecryptor.addEventListener("stateChange", function (state) {
1189
- if (state === decrypt_1.ContentDecryptorState.WaitingForAttachment) {
1190
- mediaSourceStatus.onUpdate(function (currStatus, stopListening) {
1191
- if (currStatus === 0 /* MediaSourceInitializationStatus.Nothing */) {
1192
- mediaSourceStatus.setValue(1 /* MediaSourceInitializationStatus.AttachNow */);
1193
- }
1194
- else if (currStatus === 2 /* MediaSourceInitializationStatus.Attached */) {
1195
- stopListening();
1196
- if (state === decrypt_1.ContentDecryptorState.WaitingForAttachment) {
1197
- contentDecryptor.attach();
1198
- }
1199
- }
1200
- }, { clearSignal: cancelSignal, emitCurrentValue: true });
1201
- }
1202
- else if (state === decrypt_1.ContentDecryptorState.ReadyForContent) {
1203
- drmStatusRef.setValue({
1204
- initializationState: { type: "initialized", value: null },
1205
- drmSystemId: contentDecryptor.systemId,
1206
- });
1207
- contentDecryptor.removeEventListener("stateChange");
1208
- }
1209
- });
1210
- contentDecryptor.addEventListener("error", function (error) {
1211
- _this._onFatalError(error);
1212
- });
1213
- contentDecryptor.addEventListener("warning", function (error) {
1214
- _this.trigger("warning", error);
1215
- });
1216
- lastContentProtection.onUpdate(function (data) {
1217
- if (data === null) {
1218
- return;
1219
- }
1220
- contentDecryptor.onInitializationData(data);
1221
- }, { clearSignal: cancelSignal });
1222
- cancelSignal.register(function () {
1223
- contentDecryptor.dispose();
1224
- });
1225
- return { statusRef: drmStatusRef, contentDecryptor: contentDecryptor };
1226
- };
1227
- /**
1228
- * Retrieves all unknown codecs from the current manifest, checks these unknown codecs
1229
- * to determine if they are supported, updates the manifest with the support
1230
- * status of these codecs, and forwards the list of supported codecs to the web worker.
1231
- * @param manifest
1232
- */
1233
- MultiThreadContentInitializer.prototype._updateCodecSupport = function (manifest, mediaElement) {
1234
- var _a, _b, _c, _d;
1235
- try {
1236
- var updatedCodecs = (0, update_manifest_codec_support_1.updateManifestCodecSupport)(manifest, (_b = (_a = this._currentContentInfo) === null || _a === void 0 ? void 0 : _a.contentDecryptor) !== null && _b !== void 0 ? _b : null, mediaElement, (_d = (_c = this._currentContentInfo) === null || _c === void 0 ? void 0 : _c.useMseInWorker) !== null && _d !== void 0 ? _d : false);
1237
- if (updatedCodecs.length > 0) {
1238
- (0, send_message_1.default)(this._settings.worker, {
1239
- type: "codec-support-update" /* MainThreadMessageType.CodecSupportUpdate */,
1240
- value: updatedCodecs,
1241
- });
1242
- // TODO what if one day the worker updates codec support by itself?
1243
- // We wouldn't know...
1244
- this.trigger("codecSupportUpdate", null);
1245
- }
1246
- }
1247
- catch (err) {
1248
- this._onFatalError(err);
1249
- }
1250
- };
1251
- MultiThreadContentInitializer.prototype._hasTextBufferFeature = function () {
1252
- return ((this._settings.textTrackOptions.textTrackMode === "html" &&
1253
- features_1.default.htmlTextDisplayer !== null) ||
1254
- features_1.default.nativeTextDisplayer !== null);
1255
- };
1256
- MultiThreadContentInitializer.prototype._reload = function (mediaElement, textDisplayer, playbackObserver, mediaSourceStatus, position, autoPlay) {
1257
- var _this = this;
1258
- this._currentMediaSourceCanceller.cancel();
1259
- this._currentMediaSourceCanceller = new task_canceller_1.default();
1260
- this._currentMediaSourceCanceller.linkToSignal(this._initCanceller.signal);
1261
- mediaSourceStatus.setValue(1 /* MediaSourceInitializationStatus.AttachNow */);
1262
- this.trigger("reloadingMediaSource", { position: position, autoPlay: autoPlay });
1263
- mediaSourceStatus.onUpdate(function (status, stopListeningMSStatusUpdates) {
1264
- if (status !== 2 /* MediaSourceInitializationStatus.Attached */) {
1265
- return;
1266
- }
1267
- stopListeningMSStatusUpdates();
1268
- var corePlaybackObserver = _this._setUpModulesOnNewMediaSource({
1269
- initialTime: position,
1270
- autoPlay: autoPlay,
1271
- mediaElement: mediaElement,
1272
- textDisplayer: textDisplayer,
1273
- playbackObserver: playbackObserver,
1274
- }, _this._currentMediaSourceCanceller.signal);
1275
- if (!_this._currentMediaSourceCanceller.isUsed() &&
1276
- corePlaybackObserver !== null &&
1277
- _this._currentContentInfo !== null) {
1278
- var contentId_1 = _this._currentContentInfo.contentId;
1279
- corePlaybackObserver.listen(function (obs) {
1280
- (0, send_message_1.default)(_this._settings.worker, {
1281
- type: "observation" /* MainThreadMessageType.PlaybackObservation */,
1282
- contentId: contentId_1,
1283
- value: (0, object_assign_1.default)(obs, {
1284
- position: obs.position.serialize(),
1285
- }),
1286
- });
1287
- }, {
1288
- includeLastObservation: true,
1289
- clearSignal: _this._currentMediaSourceCanceller.signal,
1290
- });
1291
- }
1292
- }, {
1293
- clearSignal: this._currentMediaSourceCanceller.signal,
1294
- emitCurrentValue: true,
1295
- });
1296
- };
1297
- /**
1298
- * Start-up modules and mechanisms (initial seek, auto-play etc.) needed each
1299
- * time a content is loaded AND re-loaded on a `HTMLMediaElement`, when the
1300
- * manifest is known.
1301
- *
1302
- * Note that this does not include reacting to incoming worker messages nor
1303
- * sending them, those actions have to be handled separately.
1304
- *
1305
- * @param {Object} parameters
1306
- * @param {Object} cancelSignal
1307
- * @returns {Object|null} - Playback Observer created for this content. `null`
1308
- * only if playback initialization failed (most likely because it has been
1309
- * cancelled).
1310
- */
1311
- MultiThreadContentInitializer.prototype._setUpModulesOnNewMediaSource = function (parameters, cancelSignal) {
1312
- var _this = this;
1313
- if (cancelSignal.isCancelled()) {
1314
- return null;
1315
- }
1316
- if (this._currentContentInfo === null) {
1317
- log_1.default.error("Init", "Setting up modules without a contentId");
1318
- return null;
1319
- }
1320
- if (this._currentContentInfo.manifest === null) {
1321
- log_1.default.error("Init", "Setting up modules without a loaded Manifest");
1322
- return null;
1323
- }
1324
- var _a = this._currentContentInfo, manifest = _a.manifest, mediaSourceInfo = _a.mediaSourceInfo;
1325
- var speed = this._settings.speed;
1326
- var initialTime = parameters.initialTime, autoPlay = parameters.autoPlay, mediaElement = parameters.mediaElement, textDisplayer = parameters.textDisplayer, playbackObserver = parameters.playbackObserver;
1327
- this._currentContentInfo.initialTime = initialTime;
1328
- this._currentContentInfo.autoPlay = autoPlay;
1329
- var _b = (0, initial_seek_and_play_1.default)({
1330
- mediaElement: mediaElement,
1331
- playbackObserver: playbackObserver,
1332
- startTime: initialTime,
1333
- mustAutoPlay: autoPlay,
1334
- onWarning: function (err) { return _this.trigger("warning", err); },
1335
- isDirectfile: false,
1336
- }, cancelSignal), autoPlayResult = _b.autoPlayResult, initialPlayPerformed = _b.initialPlayPerformed;
1337
- this._currentContentInfo.initialPlayPerformed = initialPlayPerformed;
1338
- var corePlaybackObserver = (0, create_core_playback_observer_1.default)(playbackObserver, {
1339
- autoPlay: autoPlay,
1340
- initialPlayPerformed: initialPlayPerformed,
1341
- manifest: manifest,
1342
- mediaSource: (mediaSourceInfo === null || mediaSourceInfo === void 0 ? void 0 : mediaSourceInfo.type) === "main" ? mediaSourceInfo.mediaSource : null,
1343
- speed: speed,
1344
- textDisplayer: textDisplayer,
1345
- }, cancelSignal);
1346
- if (cancelSignal.isCancelled()) {
1347
- return null;
1348
- }
1349
- /**
1350
- * Class trying to avoid various stalling situations, emitting "stalled"
1351
- * events when it cannot, as well as "unstalled" events when it get out of one.
1352
- */
1353
- var rebufferingController = new rebuffering_controller_1.default(playbackObserver, manifest, speed);
1354
- rebufferingController.addEventListener("stalled", function (evt) {
1355
- return _this.trigger("stalled", evt);
1356
- });
1357
- rebufferingController.addEventListener("unstalled", function () {
1358
- return _this.trigger("unstalled", null);
1359
- });
1360
- rebufferingController.addEventListener("warning", function (err) {
1361
- return _this.trigger("warning", err);
1362
- });
1363
- cancelSignal.register(function () {
1364
- rebufferingController.destroy();
1365
- });
1366
- rebufferingController.start();
1367
- this._currentContentInfo.rebufferingController = rebufferingController;
1368
- var currentContentInfo = this._currentContentInfo;
1369
- initialPlayPerformed.onUpdate(function (isPerformed, stopListening) {
1370
- if (isPerformed) {
1371
- stopListening();
1372
- var streamEventsEmitter_1 = new stream_events_emitter_1.default(manifest, playbackObserver);
1373
- currentContentInfo.streamEventsEmitter = streamEventsEmitter_1;
1374
- streamEventsEmitter_1.addEventListener("event", function (payload) {
1375
- _this.trigger("streamEvent", payload);
1376
- }, cancelSignal);
1377
- streamEventsEmitter_1.addEventListener("eventSkip", function (payload) {
1378
- _this.trigger("streamEventSkip", payload);
1379
- }, cancelSignal);
1380
- streamEventsEmitter_1.start();
1381
- cancelSignal.register(function () {
1382
- streamEventsEmitter_1.stop();
1383
- });
1384
- }
1385
- }, { clearSignal: cancelSignal, emitCurrentValue: true });
1386
- var _getSegmentSinkMetrics = function () { return __awaiter(_this, void 0, void 0, function () {
1387
- var requestId;
1388
- var _this = this;
1389
- return __generator(this, function (_a) {
1390
- this._awaitingRequests.nextRequestId++;
1391
- requestId = this._awaitingRequests.nextRequestId;
1392
- (0, send_message_1.default)(this._settings.worker, {
1393
- type: "pull-segment-sink-store-infos" /* MainThreadMessageType.PullSegmentSinkStoreInfos */,
1394
- value: { requestId: requestId },
1395
- });
1396
- return [2 /*return*/, new Promise(function (resolve, reject) {
1397
- var rejectFn = function (err) {
1398
- cancelSignal.deregister(rejectFn);
1399
- _this._awaitingRequests.pendingSinkMetrics.delete(requestId);
1400
- return reject(err);
1401
- };
1402
- _this._awaitingRequests.pendingSinkMetrics.set(requestId, {
1403
- resolve: function (value) {
1404
- cancelSignal.deregister(rejectFn);
1405
- _this._awaitingRequests.pendingSinkMetrics.delete(requestId);
1406
- resolve(value);
1407
- },
1408
- });
1409
- cancelSignal.register(rejectFn);
1410
- })];
1411
- });
1412
- }); };
1413
- var _getThumbnailsData = function (periodId, thumbnailTrackId, time) { return __awaiter(_this, void 0, void 0, function () {
1414
- var requestId;
1415
- var _this = this;
1416
- return __generator(this, function (_a) {
1417
- if (this._currentContentInfo === null) {
1418
- return [2 /*return*/, Promise.reject(new Error("Cannot fetch thumbnails: No content loaded."))];
1419
- }
1420
- this._awaitingRequests.nextRequestId++;
1421
- requestId = this._awaitingRequests.nextRequestId;
1422
- (0, send_message_1.default)(this._settings.worker, {
1423
- type: "thumbnail-request" /* MainThreadMessageType.ThumbnailDataRequest */,
1424
- contentId: this._currentContentInfo.contentId,
1425
- value: { requestId: requestId, periodId: periodId, thumbnailTrackId: thumbnailTrackId, time: time },
1426
- });
1427
- return [2 /*return*/, new Promise(function (resolve, reject) {
1428
- var rejectFn = function (err) {
1429
- cleanUp();
1430
- reject(err);
1431
- };
1432
- var cleanUp = function () {
1433
- cancelSignal.deregister(rejectFn);
1434
- _this._awaitingRequests.pendingThumbnailFetching.delete(requestId);
1435
- };
1436
- _this._awaitingRequests.pendingThumbnailFetching.set(requestId, {
1437
- resolve: function (value) {
1438
- cleanUp();
1439
- resolve(value);
1440
- },
1441
- reject: function (value) {
1442
- cleanUp();
1443
- reject(value);
1444
- },
1445
- });
1446
- cancelSignal.register(rejectFn);
1447
- })];
1448
- });
1449
- }); };
1450
- /**
1451
- * Emit a "loaded" events once the initial play has been performed and the
1452
- * media can begin playback.
1453
- * Also emits warning events if issues arise when doing so.
1454
- */
1455
- autoPlayResult
1456
- .then(function () {
1457
- (0, get_loaded_reference_1.default)(playbackObserver, false, cancelSignal).onUpdate(function (isLoaded, stopListening) {
1458
- if (isLoaded) {
1459
- stopListening();
1460
- _this.trigger("loaded", {
1461
- getSegmentSinkMetrics: _getSegmentSinkMetrics,
1462
- getThumbnailData: _getThumbnailsData,
1463
- });
1464
- }
1465
- }, { emitCurrentValue: true, clearSignal: cancelSignal });
1466
- })
1467
- .catch(function (err) {
1468
- if (cancelSignal.isCancelled()) {
1469
- return;
1470
- }
1471
- _this._onFatalError(err);
1472
- });
1473
- return corePlaybackObserver;
1474
- };
1475
- /**
1476
- * Initialize content playback if and only if those conditions are filled:
1477
- * - The Manifest is fetched and stored in `this._currentContentInfo`.
1478
- * - `drmInitializationStatus` indicates that DRM matters are initialized.
1479
- * - `mediaSourceStatus` indicates that the MediaSource is attached to the
1480
- * `mediaElement`.
1481
- *
1482
- * In other cases, this method will do nothing.
1483
- *
1484
- * To call when any of those conditions might become `true`, to start-up
1485
- * playback.
1486
- *
1487
- * @param {Object} parameters
1488
- * @returns {boolean} - Returns `true` if all conditions where met for
1489
- * playback start.
1490
- */
1491
- MultiThreadContentInitializer.prototype._startPlaybackIfReady = function (parameters) {
1492
- var _this = this;
1493
- if (this._currentContentInfo === null || this._currentContentInfo.manifest === null) {
1494
- return false;
1495
- }
1496
- var drmInitStatus = parameters.drmInitializationStatus.getValue();
1497
- if (drmInitStatus.initializationState.type !== "initialized") {
1498
- return false;
1499
- }
1500
- var msInitStatus = parameters.mediaSourceStatus.getValue();
1501
- if (msInitStatus !== 2 /* MediaSourceInitializationStatus.Attached */) {
1502
- return false;
1503
- }
1504
- var _a = this._currentContentInfo, contentId = _a.contentId, manifest = _a.manifest;
1505
- log_1.default.debug("Init", "Calculating initial time");
1506
- var initialTime = (0, get_initial_time_1.default)(manifest, this._settings.lowLatencyMode, this._settings.startAt);
1507
- log_1.default.debug("Init", "Initial time calculated", { initialTime: initialTime });
1508
- var _b = this._settings.bufferOptions, enableFastSwitching = _b.enableFastSwitching, onCodecSwitch = _b.onCodecSwitch;
1509
- var corePlaybackObserver = this._setUpModulesOnNewMediaSource({
1510
- initialTime: initialTime,
1511
- autoPlay: this._settings.autoPlay,
1512
- mediaElement: parameters.mediaElement,
1513
- textDisplayer: parameters.textDisplayer,
1514
- playbackObserver: parameters.playbackObserver,
1515
- }, this._currentMediaSourceCanceller.signal);
1516
- if (this._currentMediaSourceCanceller.isUsed() || corePlaybackObserver === null) {
1517
- return true;
1518
- }
1519
- var initialObservation = corePlaybackObserver.getReference().getValue();
1520
- var sentInitialObservation = (0, object_assign_1.default)(initialObservation, {
1521
- position: initialObservation.position.serialize(),
1522
- });
1523
- (0, send_message_1.default)(this._settings.worker, {
1524
- type: "start" /* MainThreadMessageType.StartPreparedContent */,
1525
- contentId: contentId,
1526
- value: {
1527
- initialTime: initialTime,
1528
- initialObservation: sentInitialObservation,
1529
- drmSystemId: drmInitStatus.drmSystemId,
1530
- enableFastSwitching: enableFastSwitching,
1531
- onCodecSwitch: onCodecSwitch,
1532
- },
1533
- });
1534
- corePlaybackObserver.listen(function (obs) {
1535
- (0, send_message_1.default)(_this._settings.worker, {
1536
- type: "observation" /* MainThreadMessageType.PlaybackObservation */,
1537
- contentId: contentId,
1538
- value: (0, object_assign_1.default)(obs, { position: obs.position.serialize() }),
1539
- });
1540
- }, {
1541
- includeLastObservation: false,
1542
- clearSignal: this._currentMediaSourceCanceller.signal,
1543
- });
1544
- this.trigger("manifestReady", manifest);
1545
- return true;
1546
- };
1547
- /**
1548
- * Handles Worker messages asking to create a MediaSource.
1549
- * @param {Object} msg - The worker's message received.
1550
- * @param {HTMLMediaElement} mediaElement - HTMLMediaElement on which the
1551
- * content plays.
1552
- * @param {Worker} worker - The WebWorker concerned, messages may be sent back
1553
- * to it.
1554
- */
1555
- MultiThreadContentInitializer.prototype._onCreateMediaSourceMessage = function (msg, mediaElement, mediaSourceStatus, worker) {
1556
- var _this = this;
1557
- var _a;
1558
- if (((_a = this._currentContentInfo) === null || _a === void 0 ? void 0 : _a.contentId) !== msg.contentId) {
1559
- log_1.default.info("Init", "Ignoring MediaSource attachment due to wrong `contentId`");
1560
- }
1561
- else {
1562
- var mediaSourceId_1 = msg.mediaSourceId;
1563
- try {
1564
- mediaSourceStatus.onUpdate(function (currStatus, stopListening) {
1565
- var _a;
1566
- if (_this._currentContentInfo === null) {
1567
- stopListening();
1568
- return;
1569
- }
1570
- if (currStatus === 1 /* MediaSourceInitializationStatus.AttachNow */) {
1571
- stopListening();
1572
- var mediaSource_3 = new main_media_source_interface_1.default(mediaSourceId_1);
1573
- if (((_a = _this._currentContentInfo.mediaSourceInfo) === null || _a === void 0 ? void 0 : _a.type) === "main") {
1574
- _this._currentContentInfo.mediaSourceInfo.mediaSource.dispose();
1575
- }
1576
- _this._currentContentInfo.mediaSourceInfo = {
1577
- type: "main",
1578
- mediaSource: mediaSource_3,
1579
- };
1580
- mediaSource_3.addEventListener("mediaSourceOpen", function () {
1581
- (0, send_message_1.default)(worker, {
1582
- type: "media-source-ready-state-change" /* MainThreadMessageType.MediaSourceReadyStateChange */,
1583
- mediaSourceId: mediaSourceId_1,
1584
- value: "open",
1585
- });
1586
- });
1587
- mediaSource_3.addEventListener("mediaSourceEnded", function () {
1588
- (0, send_message_1.default)(worker, {
1589
- type: "media-source-ready-state-change" /* MainThreadMessageType.MediaSourceReadyStateChange */,
1590
- mediaSourceId: mediaSourceId_1,
1591
- value: "ended",
1592
- });
1593
- });
1594
- mediaSource_3.addEventListener("mediaSourceClose", function () {
1595
- (0, send_message_1.default)(worker, {
1596
- type: "media-source-ready-state-change" /* MainThreadMessageType.MediaSourceReadyStateChange */,
1597
- mediaSourceId: mediaSourceId_1,
1598
- value: "closed",
1599
- });
1600
- });
1601
- var url_1 = null;
1602
- if (mediaSource_3.handle.type === "handle") {
1603
- mediaElement.srcObject = mediaSource_3.handle.value;
1604
- }
1605
- else {
1606
- url_1 = URL.createObjectURL(mediaSource_3.handle.value);
1607
- mediaElement.src = url_1;
1608
- }
1609
- _this._currentMediaSourceCanceller.signal.register(function () {
1610
- mediaSource_3.dispose();
1611
- (0, create_media_source_1.resetMediaElement)(mediaElement, url_1);
1612
- });
1613
- mediaSourceStatus.setValue(2 /* MediaSourceInitializationStatus.Attached */);
1614
- (0, create_media_source_1.disableRemotePlaybackOnManagedMediaSource)(mediaElement, _this._currentMediaSourceCanceller.signal);
1615
- }
1616
- }, {
1617
- emitCurrentValue: true,
1618
- clearSignal: this._currentMediaSourceCanceller.signal,
1619
- });
1620
- }
1621
- catch (_err) {
1622
- var error = new errors_1.OtherError("NONE", "Unknown error when creating the MediaSource");
1623
- this._onFatalError(error);
1624
- }
1625
- }
1626
- };
1627
- return MultiThreadContentInitializer;
1628
- }(types_1.ContentInitializer));
1629
- exports.default = MultiThreadContentInitializer;
1630
- function bindNumberReferencesToWorker(worker, cancellationSignal) {
1631
- var e_2, _a;
1632
- var refs = [];
1633
- for (var _i = 2; _i < arguments.length; _i++) {
1634
- refs[_i - 2] = arguments[_i];
1635
- }
1636
- var _loop_1 = function (ref) {
1637
- ref[0].onUpdate(function (newVal) {
1638
- // NOTE: The TypeScript checks have already been made by this function's
1639
- // overload, but the body here is not aware of that.
1640
- (0, send_message_1.default)(worker, {
1641
- type: "ref-update" /* MainThreadMessageType.ReferenceUpdate */,
1642
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any
1643
- value: { name: ref[1], newVal: newVal },
1644
- });
1645
- }, { clearSignal: cancellationSignal, emitCurrentValue: true });
1646
- };
1647
- try {
1648
- for (var refs_1 = __values(refs), refs_1_1 = refs_1.next(); !refs_1_1.done; refs_1_1 = refs_1.next()) {
1649
- var ref = refs_1_1.value;
1650
- _loop_1(ref);
1651
- }
1652
- }
1653
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
1654
- finally {
1655
- try {
1656
- if (refs_1_1 && !refs_1_1.done && (_a = refs_1.return)) _a.call(refs_1);
1657
- }
1658
- finally { if (e_2) throw e_2.error; }
1659
- }
1660
- }
1661
- function formatWorkerError(sentError) {
1662
- switch (sentError.name) {
1663
- case "NetworkError":
1664
- return new errors_1.NetworkError(sentError.code, new request_1.RequestError(sentError.baseError.url, sentError.baseError.status, sentError.baseError.type));
1665
- case "MediaError":
1666
- // eslint-disable-next-line
1667
- return new errors_1.MediaError(sentError.code, sentError.reason, {
1668
- tracks: sentError.tracks,
1669
- });
1670
- case "EncryptedMediaError":
1671
- // We assume that everything have already been checked Worker-side here
1672
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
1673
- return new errors_1.EncryptedMediaError(sentError.code, sentError.reason, {
1674
- keyStatuses: sentError.keyStatuses,
1675
- keySystemConfiguration: sentError.keySystemConfiguration,
1676
- keySystem: sentError.keySystem,
1677
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1678
- });
1679
- case "OtherError":
1680
- return new errors_1.OtherError(sentError.code, sentError.reason);
1681
- }
1682
- }
1683
- function formatSourceBufferError(error) {
1684
- if (error instanceof errors_1.SourceBufferError) {
1685
- return error;
1686
- }
1687
- else if (error instanceof Error) {
1688
- return new errors_1.SourceBufferError(error.name, error.message, error.name === "QuotaExceededError");
1689
- }
1690
- else {
1691
- return new errors_1.SourceBufferError("Error", "Unknown SourceBufferError Error", false);
1692
- }
1693
- }
1694
- /**
1695
- * The Core might send back logs. In that situation, the message might be
1696
- * formatted slightly differently to be able to cross threads (so a
1697
- * serializable format has to be sent).
1698
- *
1699
- * This function translates that Core format to what's expected by the
1700
- * logger.
1701
- *
1702
- * @param {*} arg
1703
- * @returns {*}
1704
- */
1705
- function formatSentLogObject(arg) {
1706
- if (typeof arg !== "object") {
1707
- return arg;
1708
- }
1709
- if ((arg === null || arg === void 0 ? void 0 : arg.isSerializedError) === true) {
1710
- return formatWorkerError(arg);
1711
- }
1712
- return arg;
1713
- }