@videojs/spf 10.0.0-beta.3 → 10.0.0-beta.31

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 (580) hide show
  1. package/README.md +19 -38
  2. package/dist/default/core/actors/create-machine-actor.js +91 -0
  3. package/dist/default/core/actors/create-machine-actor.js.map +1 -0
  4. package/dist/default/core/actors/create-transition-actor.js +46 -0
  5. package/dist/default/core/actors/create-transition-actor.js.map +1 -0
  6. package/dist/default/core/composition/create-composition.js +85 -0
  7. package/dist/default/core/composition/create-composition.js.map +1 -0
  8. package/dist/default/core/composition/share-signals.js +39 -0
  9. package/dist/default/core/composition/share-signals.js.map +1 -0
  10. package/dist/default/core/machine.js +26 -0
  11. package/dist/default/core/machine.js.map +1 -0
  12. package/dist/default/core/reactors/create-machine-reactor.js +83 -0
  13. package/dist/default/core/reactors/create-machine-reactor.js.map +1 -0
  14. package/dist/default/core/signals/effect.js +41 -0
  15. package/dist/default/core/signals/effect.js.map +1 -0
  16. package/dist/default/core/signals/primitives.js +54 -0
  17. package/dist/default/core/signals/primitives.js.map +1 -0
  18. package/dist/default/core/signals/when.js +38 -0
  19. package/dist/default/core/signals/when.js.map +1 -0
  20. package/dist/default/core/tasks/delayed-reschedule.js +31 -0
  21. package/dist/default/core/tasks/delayed-reschedule.js.map +1 -0
  22. package/dist/default/core/tasks/task.js +321 -0
  23. package/dist/default/core/tasks/task.js.map +1 -0
  24. package/dist/default/dom.js +9 -0
  25. package/dist/default/hls-audio.js +3 -0
  26. package/dist/default/hls-background-video.js +3 -0
  27. package/dist/default/hls-video.js +4 -0
  28. package/dist/default/hls.js +8 -0
  29. package/dist/default/index.js +23 -0
  30. package/dist/default/index.js.map +1 -0
  31. package/dist/default/media/abr/quality-selection.js +21 -0
  32. package/dist/default/media/abr/quality-selection.js.map +1 -0
  33. package/dist/default/media/buffer/back-buffer.js +46 -0
  34. package/dist/default/media/buffer/back-buffer.js.map +1 -0
  35. package/dist/default/media/buffer/forward-buffer.js +119 -0
  36. package/dist/default/media/buffer/forward-buffer.js.map +1 -0
  37. package/dist/default/media/dom/capabilities.js +72 -0
  38. package/dist/default/media/dom/capabilities.js.map +1 -0
  39. package/dist/default/media/dom/mse/append-segment.js +60 -0
  40. package/dist/default/media/dom/mse/append-segment.js.map +1 -0
  41. package/dist/default/media/dom/mse/buffer-flusher.js +55 -0
  42. package/dist/default/media/dom/mse/buffer-flusher.js.map +1 -0
  43. package/dist/default/media/dom/mse/duration.js +95 -0
  44. package/dist/default/media/dom/mse/duration.js.map +1 -0
  45. package/dist/default/media/dom/mse/end-of-stream.js +20 -0
  46. package/dist/default/media/dom/mse/end-of-stream.js.map +1 -0
  47. package/dist/default/media/dom/mse/mediasource-setup.js +242 -0
  48. package/dist/default/media/dom/mse/mediasource-setup.js.map +1 -0
  49. package/dist/default/media/dom/screen.js +112 -0
  50. package/dist/default/media/dom/screen.js.map +1 -0
  51. package/dist/default/media/dom/text/resolve-vtt-segment.js +50 -0
  52. package/dist/default/media/dom/text/resolve-vtt-segment.js.map +1 -0
  53. package/dist/default/media/dom/text/text-track-slots.js +69 -0
  54. package/dist/default/media/dom/text/text-track-slots.js.map +1 -0
  55. package/dist/default/media/errors.js +69 -0
  56. package/dist/default/media/errors.js.map +1 -0
  57. package/dist/default/media/hls/parse-attributes.js +148 -0
  58. package/dist/default/media/hls/parse-attributes.js.map +1 -0
  59. package/dist/default/media/hls/parse-media-playlist.js +261 -0
  60. package/dist/default/media/hls/parse-media-playlist.js.map +1 -0
  61. package/dist/default/media/hls/parse-multivariant.js +234 -0
  62. package/dist/default/media/hls/parse-multivariant.js.map +1 -0
  63. package/dist/default/media/hls/reload-policy.js +71 -0
  64. package/dist/default/media/hls/reload-policy.js.map +1 -0
  65. package/dist/default/media/hls/resolve-url.js +11 -0
  66. package/dist/default/media/hls/resolve-url.js.map +1 -0
  67. package/dist/default/media/live-window.js +36 -0
  68. package/dist/default/media/live-window.js.map +1 -0
  69. package/dist/default/media/media-tracks/media-tracks.js +101 -0
  70. package/dist/default/media/media-tracks/media-tracks.js.map +1 -0
  71. package/dist/default/media/mp4/box.js +58 -0
  72. package/dist/default/media/mp4/box.js.map +1 -0
  73. package/dist/default/media/mp4/timestamp-origin.js +107 -0
  74. package/dist/default/media/mp4/timestamp-origin.js.map +1 -0
  75. package/dist/default/media/primitives/resolution.js +29 -0
  76. package/dist/default/media/primitives/resolution.js.map +1 -0
  77. package/dist/default/media/primitives/select-tracks.js +107 -0
  78. package/dist/default/media/primitives/select-tracks.js.map +1 -0
  79. package/dist/default/media/text/parse-vtt-timestamp-map.js +42 -0
  80. package/dist/default/media/text/parse-vtt-timestamp-map.js.map +1 -0
  81. package/dist/default/media/text/resolve-vtt-metadata.js +23 -0
  82. package/dist/default/media/text/resolve-vtt-metadata.js.map +1 -0
  83. package/dist/default/media/types/index.js +50 -0
  84. package/dist/default/media/types/index.js.map +1 -0
  85. package/dist/default/media/utils/cdn.js +56 -0
  86. package/dist/default/media/utils/cdn.js.map +1 -0
  87. package/dist/default/media/utils/preload.js +22 -0
  88. package/dist/default/media/utils/preload.js.map +1 -0
  89. package/dist/default/media/utils/track-selection.js +47 -0
  90. package/dist/default/media/utils/track-selection.js.map +1 -0
  91. package/dist/default/media/utils/tracks.js +144 -0
  92. package/dist/default/media/utils/tracks.js.map +1 -0
  93. package/dist/default/media-tracks.js +2 -0
  94. package/dist/default/mux-audio.js +3 -0
  95. package/dist/default/mux-background-video.js +3 -0
  96. package/dist/default/mux-video.js +3 -0
  97. package/dist/default/network/bandwidth-estimator.js +96 -0
  98. package/dist/default/network/bandwidth-estimator.js.map +1 -0
  99. package/dist/default/network/chunked-stream-iterable.js +49 -0
  100. package/dist/default/network/chunked-stream-iterable.js.map +1 -0
  101. package/dist/default/network/ewma.js +71 -0
  102. package/dist/default/network/ewma.js.map +1 -0
  103. package/dist/default/network/fetch.js +115 -0
  104. package/dist/default/network/fetch.js.map +1 -0
  105. package/dist/default/playback/actors/dom/segment-loader.js +249 -0
  106. package/dist/default/playback/actors/dom/segment-loader.js.map +1 -0
  107. package/dist/default/playback/actors/dom/source-buffer.js +139 -0
  108. package/dist/default/playback/actors/dom/source-buffer.js.map +1 -0
  109. package/dist/default/playback/actors/dom/text-tracks.js +46 -0
  110. package/dist/default/playback/actors/dom/text-tracks.js.map +1 -0
  111. package/dist/default/playback/actors/text-track-segment-loader.js +149 -0
  112. package/dist/default/playback/actors/text-track-segment-loader.js.map +1 -0
  113. package/dist/default/playback/adapters/hls-audio/adapter.js +186 -0
  114. package/dist/default/playback/adapters/hls-audio/adapter.js.map +1 -0
  115. package/dist/default/playback/adapters/hls-audio/media.js +9 -0
  116. package/dist/default/playback/adapters/hls-audio/media.js.map +1 -0
  117. package/dist/default/playback/adapters/hls-background-video/adapter.js +211 -0
  118. package/dist/default/playback/adapters/hls-background-video/adapter.js.map +1 -0
  119. package/dist/default/playback/adapters/hls-background-video/host.js +60 -0
  120. package/dist/default/playback/adapters/hls-background-video/host.js.map +1 -0
  121. package/dist/default/playback/adapters/hls-background-video/media.js +21 -0
  122. package/dist/default/playback/adapters/hls-background-video/media.js.map +1 -0
  123. package/dist/default/playback/adapters/hls-video/adapter.js +316 -0
  124. package/dist/default/playback/adapters/hls-video/adapter.js.map +1 -0
  125. package/dist/default/playback/adapters/hls-video/error-surface.js +51 -0
  126. package/dist/default/playback/adapters/hls-video/error-surface.js.map +1 -0
  127. package/dist/default/playback/adapters/hls-video/media-tracks.js +126 -0
  128. package/dist/default/playback/adapters/hls-video/media-tracks.js.map +1 -0
  129. package/dist/default/playback/adapters/hls-video/media.js +11 -0
  130. package/dist/default/playback/adapters/hls-video/media.js.map +1 -0
  131. package/dist/default/playback/adapters/mux-audio/media.js +26 -0
  132. package/dist/default/playback/adapters/mux-audio/media.js.map +1 -0
  133. package/dist/default/playback/adapters/mux-video/adapter.js +105 -0
  134. package/dist/default/playback/adapters/mux-video/adapter.js.map +1 -0
  135. package/dist/default/playback/adapters/mux-video/media.js +23 -0
  136. package/dist/default/playback/adapters/mux-video/media.js.map +1 -0
  137. package/dist/default/playback/behaviors/calculate-presentation-duration.js +36 -0
  138. package/dist/default/playback/behaviors/calculate-presentation-duration.js.map +1 -0
  139. package/dist/default/playback/behaviors/collect-errors.js +111 -0
  140. package/dist/default/playback/behaviors/collect-errors.js.map +1 -0
  141. package/dist/default/playback/behaviors/derive-cdn-priority.js +68 -0
  142. package/dist/default/playback/behaviors/derive-cdn-priority.js.map +1 -0
  143. package/dist/default/playback/behaviors/dom/airplay.js +211 -0
  144. package/dist/default/playback/behaviors/dom/airplay.js.map +1 -0
  145. package/dist/default/playback/behaviors/dom/apply-start-position.js +93 -0
  146. package/dist/default/playback/behaviors/dom/apply-start-position.js.map +1 -0
  147. package/dist/default/playback/behaviors/dom/end-of-stream.js +102 -0
  148. package/dist/default/playback/behaviors/dom/end-of-stream.js.map +1 -0
  149. package/dist/default/playback/behaviors/dom/load-segments.js +181 -0
  150. package/dist/default/playback/behaviors/dom/load-segments.js.map +1 -0
  151. package/dist/default/playback/behaviors/dom/recover-end-stall.js +77 -0
  152. package/dist/default/playback/behaviors/dom/recover-end-stall.js.map +1 -0
  153. package/dist/default/playback/behaviors/dom/seek-to-live-edge.js +132 -0
  154. package/dist/default/playback/behaviors/dom/seek-to-live-edge.js.map +1 -0
  155. package/dist/default/playback/behaviors/dom/setup-buffer-actors.js +205 -0
  156. package/dist/default/playback/behaviors/dom/setup-buffer-actors.js.map +1 -0
  157. package/dist/default/playback/behaviors/dom/setup-mediasource.js +114 -0
  158. package/dist/default/playback/behaviors/dom/setup-mediasource.js.map +1 -0
  159. package/dist/default/playback/behaviors/dom/setup-text-track-actors.js +40 -0
  160. package/dist/default/playback/behaviors/dom/setup-text-track-actors.js.map +1 -0
  161. package/dist/default/playback/behaviors/dom/sync-live-seekable-range.js +26 -0
  162. package/dist/default/playback/behaviors/dom/sync-live-seekable-range.js.map +1 -0
  163. package/dist/default/playback/behaviors/dom/sync-text-tracks.js +124 -0
  164. package/dist/default/playback/behaviors/dom/sync-text-tracks.js.map +1 -0
  165. package/dist/default/playback/behaviors/dom/track-current-time.js +52 -0
  166. package/dist/default/playback/behaviors/dom/track-current-time.js.map +1 -0
  167. package/dist/default/playback/behaviors/dom/track-load-triggers.js +94 -0
  168. package/dist/default/playback/behaviors/dom/track-load-triggers.js.map +1 -0
  169. package/dist/default/playback/behaviors/dom/track-playback-rate.js +37 -0
  170. package/dist/default/playback/behaviors/dom/track-playback-rate.js.map +1 -0
  171. package/dist/default/playback/behaviors/dom/track-player-resolution.js +57 -0
  172. package/dist/default/playback/behaviors/dom/track-player-resolution.js.map +1 -0
  173. package/dist/default/playback/behaviors/dom/track-screen-resolution.js +29 -0
  174. package/dist/default/playback/behaviors/dom/track-screen-resolution.js.map +1 -0
  175. package/dist/default/playback/behaviors/dom/update-mediasource-duration.js +113 -0
  176. package/dist/default/playback/behaviors/dom/update-mediasource-duration.js.map +1 -0
  177. package/dist/default/playback/behaviors/establish-start-media-time.js +197 -0
  178. package/dist/default/playback/behaviors/establish-start-media-time.js.map +1 -0
  179. package/dist/default/playback/behaviors/resolve-presentation.js +85 -0
  180. package/dist/default/playback/behaviors/resolve-presentation.js.map +1 -0
  181. package/dist/default/playback/behaviors/resolve-track.js +141 -0
  182. package/dist/default/playback/behaviors/resolve-track.js.map +1 -0
  183. package/dist/default/playback/behaviors/select-tracks.js +216 -0
  184. package/dist/default/playback/behaviors/select-tracks.js.map +1 -0
  185. package/dist/default/playback/behaviors/setup-failover-monitor.js +66 -0
  186. package/dist/default/playback/behaviors/setup-failover-monitor.js.map +1 -0
  187. package/dist/default/playback/behaviors/sync-preload.js +59 -0
  188. package/dist/default/playback/behaviors/sync-preload.js.map +1 -0
  189. package/dist/default/playback/behaviors/track-switching.js +391 -0
  190. package/dist/default/playback/behaviors/track-switching.js.map +1 -0
  191. package/dist/default/playback/engines/hls/engine-audio-only.js +98 -0
  192. package/dist/default/playback/engines/hls/engine-audio-only.js.map +1 -0
  193. package/dist/default/playback/engines/hls/engine-background-video.js +92 -0
  194. package/dist/default/playback/engines/hls/engine-background-video.js.map +1 -0
  195. package/dist/default/playback/engines/hls/engine.js +147 -0
  196. package/dist/default/playback/engines/hls/engine.js.map +1 -0
  197. package/dist/default/playback/primitives/error-messages.js +51 -0
  198. package/dist/default/playback/primitives/error-messages.js.map +1 -0
  199. package/dist/default/playback/primitives/failover-fetch.js +42 -0
  200. package/dist/default/playback/primitives/failover-fetch.js.map +1 -0
  201. package/dist/default/playback/primitives/head-peek.js +44 -0
  202. package/dist/default/playback/primitives/head-peek.js.map +1 -0
  203. package/dist/default/playback/primitives/live-window.js +66 -0
  204. package/dist/default/playback/primitives/live-window.js.map +1 -0
  205. package/dist/default/playback/primitives/relocation-pipelines.js +203 -0
  206. package/dist/default/playback/primitives/relocation-pipelines.js.map +1 -0
  207. package/dist/default/playback/primitives/report-track-conditions.js +86 -0
  208. package/dist/default/playback/primitives/report-track-conditions.js.map +1 -0
  209. package/dist/default/playback/primitives/segment-load-pipeline.js +96 -0
  210. package/dist/default/playback/primitives/segment-load-pipeline.js.map +1 -0
  211. package/dist/default/playback/primitives/selection-rules.js +86 -0
  212. package/dist/default/playback/primitives/selection-rules.js.map +1 -0
  213. package/dist/default/playback/primitives/text-segment-load-pipeline.js +37 -0
  214. package/dist/default/playback/primitives/text-segment-load-pipeline.js.map +1 -0
  215. package/dist/default/playback/primitives/track-types.js +61 -0
  216. package/dist/default/playback/primitives/track-types.js.map +1 -0
  217. package/dist/dev/core/actors/actor.d.ts +26 -0
  218. package/dist/dev/core/actors/actor.d.ts.map +1 -0
  219. package/dist/dev/core/actors/create-machine-actor.d.ts +128 -0
  220. package/dist/dev/core/actors/create-machine-actor.d.ts.map +1 -0
  221. package/dist/dev/core/actors/create-machine-actor.js +91 -0
  222. package/dist/dev/core/actors/create-machine-actor.js.map +1 -0
  223. package/dist/dev/core/actors/create-transition-actor.d.ts +41 -0
  224. package/dist/dev/core/actors/create-transition-actor.d.ts.map +1 -0
  225. package/dist/dev/core/actors/create-transition-actor.js +46 -0
  226. package/dist/dev/core/actors/create-transition-actor.js.map +1 -0
  227. package/dist/dev/core/composition/create-composition.d.ts +273 -0
  228. package/dist/dev/core/composition/create-composition.d.ts.map +1 -0
  229. package/dist/dev/core/composition/create-composition.js +85 -0
  230. package/dist/dev/core/composition/create-composition.js.map +1 -0
  231. package/dist/dev/core/composition/share-signals.d.ts +46 -0
  232. package/dist/dev/core/composition/share-signals.d.ts.map +1 -0
  233. package/dist/dev/core/composition/share-signals.js +39 -0
  234. package/dist/dev/core/composition/share-signals.js.map +1 -0
  235. package/dist/dev/core/machine.d.ts +21 -0
  236. package/dist/dev/core/machine.d.ts.map +1 -0
  237. package/dist/dev/core/machine.js +26 -0
  238. package/dist/dev/core/machine.js.map +1 -0
  239. package/dist/dev/core/reactors/create-machine-reactor.d.ts +93 -0
  240. package/dist/dev/core/reactors/create-machine-reactor.d.ts.map +1 -0
  241. package/dist/dev/core/reactors/create-machine-reactor.js +83 -0
  242. package/dist/dev/core/reactors/create-machine-reactor.js.map +1 -0
  243. package/dist/dev/core/signals/effect.d.ts +15 -0
  244. package/dist/dev/core/signals/effect.d.ts.map +1 -0
  245. package/dist/dev/core/signals/effect.js +41 -0
  246. package/dist/dev/core/signals/effect.js.map +1 -0
  247. package/dist/dev/core/signals/primitives.d.ts +46 -0
  248. package/dist/dev/core/signals/primitives.d.ts.map +1 -0
  249. package/dist/dev/core/signals/primitives.js +54 -0
  250. package/dist/dev/core/signals/primitives.js.map +1 -0
  251. package/dist/dev/core/signals/when.js +38 -0
  252. package/dist/dev/core/signals/when.js.map +1 -0
  253. package/dist/dev/core/tasks/delayed-reschedule.js +31 -0
  254. package/dist/dev/core/tasks/delayed-reschedule.js.map +1 -0
  255. package/dist/dev/core/tasks/task.d.ts +166 -0
  256. package/dist/dev/core/tasks/task.d.ts.map +1 -0
  257. package/dist/dev/core/tasks/task.js +321 -0
  258. package/dist/dev/core/tasks/task.js.map +1 -0
  259. package/dist/dev/dom.d.ts +9 -0
  260. package/dist/dev/dom.js +9 -0
  261. package/dist/dev/hls-audio.d.ts +3 -0
  262. package/dist/dev/hls-audio.js +3 -0
  263. package/dist/dev/hls-background-video.d.ts +4 -0
  264. package/dist/dev/hls-background-video.js +3 -0
  265. package/dist/dev/hls-video.d.ts +5 -0
  266. package/dist/dev/hls-video.js +4 -0
  267. package/dist/dev/hls.d.ts +9 -0
  268. package/dist/dev/hls.js +8 -0
  269. package/dist/dev/index.d.ts +24 -0
  270. package/dist/dev/index.d.ts.map +1 -0
  271. package/dist/dev/index.js +23 -0
  272. package/dist/dev/index.js.map +1 -0
  273. package/dist/dev/media/abr/quality-selection.d.ts +22 -0
  274. package/dist/dev/media/abr/quality-selection.d.ts.map +1 -0
  275. package/dist/dev/media/abr/quality-selection.js +21 -0
  276. package/dist/dev/media/abr/quality-selection.js.map +1 -0
  277. package/dist/dev/media/buffer/back-buffer.d.ts +14 -0
  278. package/dist/dev/media/buffer/back-buffer.d.ts.map +1 -0
  279. package/dist/dev/media/buffer/back-buffer.js +46 -0
  280. package/dist/dev/media/buffer/back-buffer.js.map +1 -0
  281. package/dist/dev/media/buffer/forward-buffer.d.ts +14 -0
  282. package/dist/dev/media/buffer/forward-buffer.d.ts.map +1 -0
  283. package/dist/dev/media/buffer/forward-buffer.js +119 -0
  284. package/dist/dev/media/buffer/forward-buffer.js.map +1 -0
  285. package/dist/dev/media/dom/capabilities.js +72 -0
  286. package/dist/dev/media/dom/capabilities.js.map +1 -0
  287. package/dist/dev/media/dom/mse/append-segment.d.ts +18 -0
  288. package/dist/dev/media/dom/mse/append-segment.d.ts.map +1 -0
  289. package/dist/dev/media/dom/mse/append-segment.js +60 -0
  290. package/dist/dev/media/dom/mse/append-segment.js.map +1 -0
  291. package/dist/dev/media/dom/mse/buffer-flusher.d.ts +24 -0
  292. package/dist/dev/media/dom/mse/buffer-flusher.d.ts.map +1 -0
  293. package/dist/dev/media/dom/mse/buffer-flusher.js +55 -0
  294. package/dist/dev/media/dom/mse/buffer-flusher.js.map +1 -0
  295. package/dist/dev/media/dom/mse/duration.js +95 -0
  296. package/dist/dev/media/dom/mse/duration.js.map +1 -0
  297. package/dist/dev/media/dom/mse/end-of-stream.js +20 -0
  298. package/dist/dev/media/dom/mse/end-of-stream.js.map +1 -0
  299. package/dist/dev/media/dom/mse/mediasource-setup.js +242 -0
  300. package/dist/dev/media/dom/mse/mediasource-setup.js.map +1 -0
  301. package/dist/dev/media/dom/screen.d.ts +7 -0
  302. package/dist/dev/media/dom/screen.d.ts.map +1 -0
  303. package/dist/dev/media/dom/screen.js +112 -0
  304. package/dist/dev/media/dom/screen.js.map +1 -0
  305. package/dist/dev/media/dom/text/resolve-vtt-segment.d.ts +6 -0
  306. package/dist/dev/media/dom/text/resolve-vtt-segment.d.ts.map +1 -0
  307. package/dist/dev/media/dom/text/resolve-vtt-segment.js +50 -0
  308. package/dist/dev/media/dom/text/resolve-vtt-segment.js.map +1 -0
  309. package/dist/dev/media/dom/text/text-track-slots.d.ts +30 -0
  310. package/dist/dev/media/dom/text/text-track-slots.d.ts.map +1 -0
  311. package/dist/dev/media/dom/text/text-track-slots.js +69 -0
  312. package/dist/dev/media/dom/text/text-track-slots.js.map +1 -0
  313. package/dist/dev/media/errors.d.ts +82 -0
  314. package/dist/dev/media/errors.d.ts.map +1 -0
  315. package/dist/dev/media/errors.js +69 -0
  316. package/dist/dev/media/errors.js.map +1 -0
  317. package/dist/dev/media/hls/parse-attributes.js +148 -0
  318. package/dist/dev/media/hls/parse-attributes.js.map +1 -0
  319. package/dist/dev/media/hls/parse-media-playlist.js +261 -0
  320. package/dist/dev/media/hls/parse-media-playlist.js.map +1 -0
  321. package/dist/dev/media/hls/parse-multivariant.js +234 -0
  322. package/dist/dev/media/hls/parse-multivariant.js.map +1 -0
  323. package/dist/dev/media/hls/reload-policy.js +71 -0
  324. package/dist/dev/media/hls/reload-policy.js.map +1 -0
  325. package/dist/dev/media/hls/resolve-url.js +11 -0
  326. package/dist/dev/media/hls/resolve-url.js.map +1 -0
  327. package/dist/dev/media/live-window.js +36 -0
  328. package/dist/dev/media/live-window.js.map +1 -0
  329. package/dist/dev/media/media-tracks/media-tracks.d.ts +51 -0
  330. package/dist/dev/media/media-tracks/media-tracks.d.ts.map +1 -0
  331. package/dist/dev/media/media-tracks/media-tracks.js +101 -0
  332. package/dist/dev/media/media-tracks/media-tracks.js.map +1 -0
  333. package/dist/dev/media/mp4/box.js +58 -0
  334. package/dist/dev/media/mp4/box.js.map +1 -0
  335. package/dist/dev/media/mp4/timestamp-origin.js +107 -0
  336. package/dist/dev/media/mp4/timestamp-origin.js.map +1 -0
  337. package/dist/dev/media/primitives/resolution.d.ts +24 -0
  338. package/dist/dev/media/primitives/resolution.d.ts.map +1 -0
  339. package/dist/dev/media/primitives/resolution.js +29 -0
  340. package/dist/dev/media/primitives/resolution.js.map +1 -0
  341. package/dist/dev/media/primitives/select-tracks.js +107 -0
  342. package/dist/dev/media/primitives/select-tracks.js.map +1 -0
  343. package/dist/dev/media/text/parse-vtt-timestamp-map.js +42 -0
  344. package/dist/dev/media/text/parse-vtt-timestamp-map.js.map +1 -0
  345. package/dist/dev/media/text/resolve-vtt-metadata.js +23 -0
  346. package/dist/dev/media/text/resolve-vtt-metadata.js.map +1 -0
  347. package/dist/dev/media/types/index.d.ts +377 -0
  348. package/dist/dev/media/types/index.d.ts.map +1 -0
  349. package/dist/dev/media/types/index.js +50 -0
  350. package/dist/dev/media/types/index.js.map +1 -0
  351. package/dist/dev/media/utils/cdn.d.ts +13 -0
  352. package/dist/dev/media/utils/cdn.d.ts.map +1 -0
  353. package/dist/dev/media/utils/cdn.js +56 -0
  354. package/dist/dev/media/utils/cdn.js.map +1 -0
  355. package/dist/dev/media/utils/preload.js +22 -0
  356. package/dist/dev/media/utils/preload.js.map +1 -0
  357. package/dist/dev/media/utils/track-selection.js +47 -0
  358. package/dist/dev/media/utils/track-selection.js.map +1 -0
  359. package/dist/dev/media/utils/tracks.js +144 -0
  360. package/dist/dev/media/utils/tracks.js.map +1 -0
  361. package/dist/dev/media-tracks.d.ts +3 -0
  362. package/dist/dev/media-tracks.js +2 -0
  363. package/dist/dev/mux-audio.d.ts +4 -0
  364. package/dist/dev/mux-audio.js +3 -0
  365. package/dist/dev/mux-background-video.d.ts +4 -0
  366. package/dist/dev/mux-background-video.js +3 -0
  367. package/dist/dev/mux-video.d.ts +4 -0
  368. package/dist/dev/mux-video.js +3 -0
  369. package/dist/dev/network/bandwidth-estimator.d.ts +50 -0
  370. package/dist/dev/network/bandwidth-estimator.d.ts.map +1 -0
  371. package/dist/dev/network/bandwidth-estimator.js +96 -0
  372. package/dist/dev/network/bandwidth-estimator.js.map +1 -0
  373. package/dist/dev/network/chunked-stream-iterable.js +49 -0
  374. package/dist/dev/network/chunked-stream-iterable.js.map +1 -0
  375. package/dist/dev/network/ewma.js +71 -0
  376. package/dist/dev/network/ewma.js.map +1 -0
  377. package/dist/dev/network/fetch.js +115 -0
  378. package/dist/dev/network/fetch.js.map +1 -0
  379. package/dist/dev/playback/actors/dom/segment-loader.d.ts +48 -0
  380. package/dist/dev/playback/actors/dom/segment-loader.d.ts.map +1 -0
  381. package/dist/dev/playback/actors/dom/segment-loader.js +249 -0
  382. package/dist/dev/playback/actors/dom/segment-loader.js.map +1 -0
  383. package/dist/dev/playback/actors/dom/source-buffer.d.ts +47 -0
  384. package/dist/dev/playback/actors/dom/source-buffer.d.ts.map +1 -0
  385. package/dist/dev/playback/actors/dom/source-buffer.js +139 -0
  386. package/dist/dev/playback/actors/dom/source-buffer.js.map +1 -0
  387. package/dist/dev/playback/actors/dom/text-tracks.d.ts +3 -0
  388. package/dist/dev/playback/actors/dom/text-tracks.js +46 -0
  389. package/dist/dev/playback/actors/dom/text-tracks.js.map +1 -0
  390. package/dist/dev/playback/actors/text-track-segment-loader.d.ts +54 -0
  391. package/dist/dev/playback/actors/text-track-segment-loader.d.ts.map +1 -0
  392. package/dist/dev/playback/actors/text-track-segment-loader.js +149 -0
  393. package/dist/dev/playback/actors/text-track-segment-loader.js.map +1 -0
  394. package/dist/dev/playback/actors/text-tracks.d.ts +33 -0
  395. package/dist/dev/playback/actors/text-tracks.d.ts.map +1 -0
  396. package/dist/dev/playback/adapters/hls-audio/adapter.d.ts +54 -0
  397. package/dist/dev/playback/adapters/hls-audio/adapter.d.ts.map +1 -0
  398. package/dist/dev/playback/adapters/hls-audio/adapter.js +186 -0
  399. package/dist/dev/playback/adapters/hls-audio/adapter.js.map +1 -0
  400. package/dist/dev/playback/adapters/hls-audio/media.d.ts +10 -0
  401. package/dist/dev/playback/adapters/hls-audio/media.d.ts.map +1 -0
  402. package/dist/dev/playback/adapters/hls-audio/media.js +9 -0
  403. package/dist/dev/playback/adapters/hls-audio/media.js.map +1 -0
  404. package/dist/dev/playback/adapters/hls-background-video/adapter.d.ts +77 -0
  405. package/dist/dev/playback/adapters/hls-background-video/adapter.d.ts.map +1 -0
  406. package/dist/dev/playback/adapters/hls-background-video/adapter.js +211 -0
  407. package/dist/dev/playback/adapters/hls-background-video/adapter.js.map +1 -0
  408. package/dist/dev/playback/adapters/hls-background-video/host.d.ts +38 -0
  409. package/dist/dev/playback/adapters/hls-background-video/host.d.ts.map +1 -0
  410. package/dist/dev/playback/adapters/hls-background-video/host.js +60 -0
  411. package/dist/dev/playback/adapters/hls-background-video/host.js.map +1 -0
  412. package/dist/dev/playback/adapters/hls-background-video/media.d.ts +20 -0
  413. package/dist/dev/playback/adapters/hls-background-video/media.d.ts.map +1 -0
  414. package/dist/dev/playback/adapters/hls-background-video/media.js +21 -0
  415. package/dist/dev/playback/adapters/hls-background-video/media.js.map +1 -0
  416. package/dist/dev/playback/adapters/hls-video/adapter.d.ts +63 -0
  417. package/dist/dev/playback/adapters/hls-video/adapter.d.ts.map +1 -0
  418. package/dist/dev/playback/adapters/hls-video/adapter.js +316 -0
  419. package/dist/dev/playback/adapters/hls-video/adapter.js.map +1 -0
  420. package/dist/dev/playback/adapters/hls-video/error-surface.d.ts +18 -0
  421. package/dist/dev/playback/adapters/hls-video/error-surface.d.ts.map +1 -0
  422. package/dist/dev/playback/adapters/hls-video/error-surface.js +51 -0
  423. package/dist/dev/playback/adapters/hls-video/error-surface.js.map +1 -0
  424. package/dist/dev/playback/adapters/hls-video/media-tracks.d.ts +22 -0
  425. package/dist/dev/playback/adapters/hls-video/media-tracks.d.ts.map +1 -0
  426. package/dist/dev/playback/adapters/hls-video/media-tracks.js +126 -0
  427. package/dist/dev/playback/adapters/hls-video/media-tracks.js.map +1 -0
  428. package/dist/dev/playback/adapters/hls-video/media.d.ts +10 -0
  429. package/dist/dev/playback/adapters/hls-video/media.d.ts.map +1 -0
  430. package/dist/dev/playback/adapters/hls-video/media.js +11 -0
  431. package/dist/dev/playback/adapters/hls-video/media.js.map +1 -0
  432. package/dist/dev/playback/adapters/mux-audio/media.d.ts +28 -0
  433. package/dist/dev/playback/adapters/mux-audio/media.d.ts.map +1 -0
  434. package/dist/dev/playback/adapters/mux-audio/media.js +26 -0
  435. package/dist/dev/playback/adapters/mux-audio/media.js.map +1 -0
  436. package/dist/dev/playback/adapters/mux-video/adapter.d.ts +34 -0
  437. package/dist/dev/playback/adapters/mux-video/adapter.d.ts.map +1 -0
  438. package/dist/dev/playback/adapters/mux-video/adapter.js +105 -0
  439. package/dist/dev/playback/adapters/mux-video/adapter.js.map +1 -0
  440. package/dist/dev/playback/adapters/mux-video/media.d.ts +24 -0
  441. package/dist/dev/playback/adapters/mux-video/media.d.ts.map +1 -0
  442. package/dist/dev/playback/adapters/mux-video/media.js +23 -0
  443. package/dist/dev/playback/adapters/mux-video/media.js.map +1 -0
  444. package/dist/dev/playback/behaviors/calculate-presentation-duration.d.ts +26 -0
  445. package/dist/dev/playback/behaviors/calculate-presentation-duration.d.ts.map +1 -0
  446. package/dist/dev/playback/behaviors/calculate-presentation-duration.js +36 -0
  447. package/dist/dev/playback/behaviors/calculate-presentation-duration.js.map +1 -0
  448. package/dist/dev/playback/behaviors/collect-errors.js +111 -0
  449. package/dist/dev/playback/behaviors/collect-errors.js.map +1 -0
  450. package/dist/dev/playback/behaviors/derive-cdn-priority.js +68 -0
  451. package/dist/dev/playback/behaviors/derive-cdn-priority.js.map +1 -0
  452. package/dist/dev/playback/behaviors/dom/airplay.js +211 -0
  453. package/dist/dev/playback/behaviors/dom/airplay.js.map +1 -0
  454. package/dist/dev/playback/behaviors/dom/apply-start-position.js +93 -0
  455. package/dist/dev/playback/behaviors/dom/apply-start-position.js.map +1 -0
  456. package/dist/dev/playback/behaviors/dom/end-of-stream.js +102 -0
  457. package/dist/dev/playback/behaviors/dom/end-of-stream.js.map +1 -0
  458. package/dist/dev/playback/behaviors/dom/load-segments.d.ts +72 -0
  459. package/dist/dev/playback/behaviors/dom/load-segments.d.ts.map +1 -0
  460. package/dist/dev/playback/behaviors/dom/load-segments.js +181 -0
  461. package/dist/dev/playback/behaviors/dom/load-segments.js.map +1 -0
  462. package/dist/dev/playback/behaviors/dom/recover-end-stall.js +77 -0
  463. package/dist/dev/playback/behaviors/dom/recover-end-stall.js.map +1 -0
  464. package/dist/dev/playback/behaviors/dom/seek-to-live-edge.js +132 -0
  465. package/dist/dev/playback/behaviors/dom/seek-to-live-edge.js.map +1 -0
  466. package/dist/dev/playback/behaviors/dom/setup-buffer-actors.js +205 -0
  467. package/dist/dev/playback/behaviors/dom/setup-buffer-actors.js.map +1 -0
  468. package/dist/dev/playback/behaviors/dom/setup-mediasource.js +114 -0
  469. package/dist/dev/playback/behaviors/dom/setup-mediasource.js.map +1 -0
  470. package/dist/dev/playback/behaviors/dom/setup-text-track-actors.d.ts +28 -0
  471. package/dist/dev/playback/behaviors/dom/setup-text-track-actors.d.ts.map +1 -0
  472. package/dist/dev/playback/behaviors/dom/setup-text-track-actors.js +40 -0
  473. package/dist/dev/playback/behaviors/dom/setup-text-track-actors.js.map +1 -0
  474. package/dist/dev/playback/behaviors/dom/sync-live-seekable-range.js +26 -0
  475. package/dist/dev/playback/behaviors/dom/sync-live-seekable-range.js.map +1 -0
  476. package/dist/dev/playback/behaviors/dom/sync-text-tracks.js +124 -0
  477. package/dist/dev/playback/behaviors/dom/sync-text-tracks.js.map +1 -0
  478. package/dist/dev/playback/behaviors/dom/track-current-time.d.ts +33 -0
  479. package/dist/dev/playback/behaviors/dom/track-current-time.d.ts.map +1 -0
  480. package/dist/dev/playback/behaviors/dom/track-current-time.js +52 -0
  481. package/dist/dev/playback/behaviors/dom/track-current-time.js.map +1 -0
  482. package/dist/dev/playback/behaviors/dom/track-load-triggers.d.ts +47 -0
  483. package/dist/dev/playback/behaviors/dom/track-load-triggers.d.ts.map +1 -0
  484. package/dist/dev/playback/behaviors/dom/track-load-triggers.js +94 -0
  485. package/dist/dev/playback/behaviors/dom/track-load-triggers.js.map +1 -0
  486. package/dist/dev/playback/behaviors/dom/track-playback-rate.d.ts +33 -0
  487. package/dist/dev/playback/behaviors/dom/track-playback-rate.d.ts.map +1 -0
  488. package/dist/dev/playback/behaviors/dom/track-playback-rate.js +37 -0
  489. package/dist/dev/playback/behaviors/dom/track-playback-rate.js.map +1 -0
  490. package/dist/dev/playback/behaviors/dom/track-player-resolution.d.ts +8 -0
  491. package/dist/dev/playback/behaviors/dom/track-player-resolution.d.ts.map +1 -0
  492. package/dist/dev/playback/behaviors/dom/track-player-resolution.js +57 -0
  493. package/dist/dev/playback/behaviors/dom/track-player-resolution.js.map +1 -0
  494. package/dist/dev/playback/behaviors/dom/track-screen-resolution.js +29 -0
  495. package/dist/dev/playback/behaviors/dom/track-screen-resolution.js.map +1 -0
  496. package/dist/dev/playback/behaviors/dom/update-mediasource-duration.js +113 -0
  497. package/dist/dev/playback/behaviors/dom/update-mediasource-duration.js.map +1 -0
  498. package/dist/dev/playback/behaviors/establish-start-media-time.d.ts +36 -0
  499. package/dist/dev/playback/behaviors/establish-start-media-time.d.ts.map +1 -0
  500. package/dist/dev/playback/behaviors/establish-start-media-time.js +197 -0
  501. package/dist/dev/playback/behaviors/establish-start-media-time.js.map +1 -0
  502. package/dist/dev/playback/behaviors/resolve-presentation.d.ts +8 -0
  503. package/dist/dev/playback/behaviors/resolve-presentation.d.ts.map +1 -0
  504. package/dist/dev/playback/behaviors/resolve-presentation.js +85 -0
  505. package/dist/dev/playback/behaviors/resolve-presentation.js.map +1 -0
  506. package/dist/dev/playback/behaviors/resolve-track.js +141 -0
  507. package/dist/dev/playback/behaviors/resolve-track.js.map +1 -0
  508. package/dist/dev/playback/behaviors/select-tracks.d.ts +72 -0
  509. package/dist/dev/playback/behaviors/select-tracks.d.ts.map +1 -0
  510. package/dist/dev/playback/behaviors/select-tracks.js +216 -0
  511. package/dist/dev/playback/behaviors/select-tracks.js.map +1 -0
  512. package/dist/dev/playback/behaviors/setup-failover-monitor.d.ts +14 -0
  513. package/dist/dev/playback/behaviors/setup-failover-monitor.d.ts.map +1 -0
  514. package/dist/dev/playback/behaviors/setup-failover-monitor.js +66 -0
  515. package/dist/dev/playback/behaviors/setup-failover-monitor.js.map +1 -0
  516. package/dist/dev/playback/behaviors/sync-preload.js +59 -0
  517. package/dist/dev/playback/behaviors/sync-preload.js.map +1 -0
  518. package/dist/dev/playback/behaviors/track-switching.js +391 -0
  519. package/dist/dev/playback/behaviors/track-switching.js.map +1 -0
  520. package/dist/dev/playback/engines/hls/engine-audio-only.d.ts +173 -0
  521. package/dist/dev/playback/engines/hls/engine-audio-only.d.ts.map +1 -0
  522. package/dist/dev/playback/engines/hls/engine-audio-only.js +98 -0
  523. package/dist/dev/playback/engines/hls/engine-audio-only.js.map +1 -0
  524. package/dist/dev/playback/engines/hls/engine-background-video.d.ts +158 -0
  525. package/dist/dev/playback/engines/hls/engine-background-video.d.ts.map +1 -0
  526. package/dist/dev/playback/engines/hls/engine-background-video.js +92 -0
  527. package/dist/dev/playback/engines/hls/engine-background-video.js.map +1 -0
  528. package/dist/dev/playback/engines/hls/engine.d.ts +329 -0
  529. package/dist/dev/playback/engines/hls/engine.d.ts.map +1 -0
  530. package/dist/dev/playback/engines/hls/engine.js +147 -0
  531. package/dist/dev/playback/engines/hls/engine.js.map +1 -0
  532. package/dist/dev/playback/primitives/derive-start-media-time.d.ts +16 -0
  533. package/dist/dev/playback/primitives/derive-start-media-time.d.ts.map +1 -0
  534. package/dist/dev/playback/primitives/error-messages.js +51 -0
  535. package/dist/dev/playback/primitives/error-messages.js.map +1 -0
  536. package/dist/dev/playback/primitives/failover-fetch.js +42 -0
  537. package/dist/dev/playback/primitives/failover-fetch.js.map +1 -0
  538. package/dist/dev/playback/primitives/head-peek.js +44 -0
  539. package/dist/dev/playback/primitives/head-peek.js.map +1 -0
  540. package/dist/dev/playback/primitives/live-window.js +66 -0
  541. package/dist/dev/playback/primitives/live-window.js.map +1 -0
  542. package/dist/dev/playback/primitives/relocation-pipelines.js +203 -0
  543. package/dist/dev/playback/primitives/relocation-pipelines.js.map +1 -0
  544. package/dist/dev/playback/primitives/report-track-conditions.d.ts +11 -0
  545. package/dist/dev/playback/primitives/report-track-conditions.d.ts.map +1 -0
  546. package/dist/dev/playback/primitives/report-track-conditions.js +86 -0
  547. package/dist/dev/playback/primitives/report-track-conditions.js.map +1 -0
  548. package/dist/dev/playback/primitives/segment-load-pipeline.d.ts +2 -0
  549. package/dist/dev/playback/primitives/segment-load-pipeline.js +96 -0
  550. package/dist/dev/playback/primitives/segment-load-pipeline.js.map +1 -0
  551. package/dist/dev/playback/primitives/selection-rules.d.ts +38 -0
  552. package/dist/dev/playback/primitives/selection-rules.d.ts.map +1 -0
  553. package/dist/dev/playback/primitives/selection-rules.js +86 -0
  554. package/dist/dev/playback/primitives/selection-rules.js.map +1 -0
  555. package/dist/dev/playback/primitives/source-buffer-messages.d.ts +43 -0
  556. package/dist/dev/playback/primitives/source-buffer-messages.d.ts.map +1 -0
  557. package/dist/dev/playback/primitives/text-segment-load-pipeline.d.ts +65 -0
  558. package/dist/dev/playback/primitives/text-segment-load-pipeline.d.ts.map +1 -0
  559. package/dist/dev/playback/primitives/text-segment-load-pipeline.js +37 -0
  560. package/dist/dev/playback/primitives/text-segment-load-pipeline.js.map +1 -0
  561. package/dist/dev/playback/primitives/text-track-messages.d.ts +14 -0
  562. package/dist/dev/playback/primitives/text-track-messages.d.ts.map +1 -0
  563. package/dist/dev/playback/primitives/track-types.js +61 -0
  564. package/dist/dev/playback/primitives/track-types.js.map +1 -0
  565. package/package.json +63 -26
  566. package/dist/adapter-CMw-rvbk.js +0 -3512
  567. package/dist/adapter-CMw-rvbk.js.map +0 -1
  568. package/dist/adapter-l8iJN_GI.d.ts +0 -689
  569. package/dist/adapter-l8iJN_GI.d.ts.map +0 -1
  570. package/dist/dom/index.d.ts +0 -243
  571. package/dist/dom/index.d.ts.map +0 -1
  572. package/dist/dom/index.js +0 -38
  573. package/dist/dom/index.js.map +0 -1
  574. package/dist/dom/playback-engine/index.d.ts +0 -2
  575. package/dist/dom/playback-engine/index.js +0 -4
  576. package/dist/index.d.ts +0 -13
  577. package/dist/index.d.ts.map +0 -1
  578. package/dist/index.js +0 -3
  579. package/dist/src-DRsS_H80.js +0 -14
  580. package/dist/src-DRsS_H80.js.map +0 -1
@@ -0,0 +1,77 @@
1
+ import { Composition } from "../../../core/composition/create-composition.js";
2
+ import { HlsVideoMediaError } from "../hls-video/error-surface.js";
3
+ import { BackgroundVideoEngineContext, BackgroundVideoEngineState } from "../../engines/hls/engine-background-video.js";
4
+ import { Constructor, MixinReturn } from "@videojs/utils/types";
5
+ //#region src/playback/adapters/hls-background-video/adapter.d.ts
6
+ interface HlsBackgroundVideoMediaProps {
7
+ src: string;
8
+ }
9
+ declare const hlsBackgroundVideoMediaDefaultProps: HlsBackgroundVideoMediaProps;
10
+ interface HlsBackgroundVideoMediaAPI extends HlsBackgroundVideoMediaProps {
11
+ readonly engine: Composition<BackgroundVideoEngineState, BackgroundVideoEngineContext>;
12
+ readonly error: HlsVideoMediaError | null;
13
+ attach(mediaElement: HTMLMediaElement): void;
14
+ detach(): void;
15
+ destroy(): void;
16
+ play(): Promise<void>;
17
+ }
18
+ /**
19
+ * Mixin that adds the background-video SPF playback engine to any base class,
20
+ * for an HLS URL.
21
+ *
22
+ * `src` is the whole input surface, and `error` is the one output: nothing about
23
+ * an unplayable source reaches the media element on its own here — an unsupported
24
+ * container, encryption with no EME, and an undecodable codec all leave
25
+ * `HTMLMediaElement.error` null with the element stalled at `readyState 0`
26
+ * (measured on Chromium and WebKit) — so a consumer that watched only the
27
+ * `<video>` would see a source that never appears and never says why. The engine
28
+ * reports each condition onto `engine.state.errors` and logs it; this adapter
29
+ * promotes the first fatal one, mapping it the same way the video and audio Medias
30
+ * map theirs. See `internal/design/spf/features/errors.md`.
31
+ *
32
+ * Selection pins the largest rendition that *fits the screen*, and holds it for
33
+ * the session. The manifest is still the better place to narrow further: a
34
+ * delivery param — `?max_resolution=720p` on a Mux stream URL, for one — keeps
35
+ * the renditions it excludes out of the manifest entirely, rather than
36
+ * fetched-then-unpicked.
37
+ *
38
+ * The pin is given up, never moved, if the pick turns out to be unplayable: the
39
+ * container is only known once a media playlist resolves, which is after the pick
40
+ * is made, so the selection clears rather than quietly appending bytes nothing can
41
+ * decode.
42
+ *
43
+ * `@videojs/spf/mux-background-video` is this same Media under a Mux-flavored
44
+ * name — an alias, not a variant. Nothing about the surface changes with the
45
+ * import path.
46
+ *
47
+ * Everything else the use case fixes rather than exposes: video-only, looping,
48
+ * muted, autoplaying, loading as soon as there is a source. `attach` writes that
49
+ * onto the element and nothing here declares `loop` / `muted` / `autoplay` /
50
+ * `preload` of its own — a host-bound Media inherits all four from the host
51
+ * already, and shadowing them with fixed values would only make reads describe
52
+ * an intention rather than what the element is doing.
53
+ *
54
+ * A new src re-resolves the presentation, tearing down the state, SourceBuffers,
55
+ * and in-flight requests the previous one built before the next begins. The
56
+ * engine instance and the attached media element are both kept, so neither has to
57
+ * be rewired.
58
+ *
59
+ * @fires error - Fired when a fatal condition is reported. Read `error` for it.
60
+ *
61
+ * @example
62
+ * class HlsBackgroundVideoMedia extends HlsBackgroundVideoMediaMixin(BackgroundVideoHost) {}
63
+ *
64
+ * const media = new HlsBackgroundVideoMedia();
65
+ * media.attach(document.querySelector('video'));
66
+ * media.src = 'https://stream.mux.com/PLAYBACK_ID.m3u8?max_resolution=720p';
67
+ * media.play();
68
+ */
69
+ declare function HlsBackgroundVideoMediaMixin<Base extends Constructor<any>>(BaseClass: Base): MixinReturn<Base, HlsBackgroundVideoMediaAPI>;
70
+ declare const HlsBackgroundVideoMediaElement_base: MixinReturn<{
71
+ new (): {};
72
+ }, HlsBackgroundVideoMediaAPI>;
73
+ /** Standalone SPF background-video adapter with no base class. */
74
+ declare class HlsBackgroundVideoMediaElement extends HlsBackgroundVideoMediaElement_base {}
75
+ //#endregion
76
+ export { HlsBackgroundVideoMediaAPI, HlsBackgroundVideoMediaElement, HlsBackgroundVideoMediaMixin, HlsBackgroundVideoMediaProps, type HlsVideoMediaError, hlsBackgroundVideoMediaDefaultProps };
77
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","names":[],"sources":["../../../../../src/playback/adapters/hls-background-video/adapter.ts"],"mappings":";;;;;UAyBiB;EACf;;cAGW,qCAAqC;UAIjC,mCAAmC;WACzC,QAAQ,YAAY,4BAA4B;WAChD,OAAO;EAChB,OAAO,cAAc;EACrB;EACA;EACA,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmFM,6BAA6B,aAAa,kBAAkB,WAAW,OAgMpC,YAAY,MAAM;;;;;cAIxD,uCAAuC"}
@@ -0,0 +1,211 @@
1
+ import { effect } from "../../../core/signals/effect.js";
2
+ import { SVTA_NO_SUPPORTED_VIDEO_TRACK, SVTA_UNSUPPORTED_DRM_SYSTEM, SVTA_UNSUPPORTED_PLAYBACK_FEATURE, SVTA_UNSUPPORTED_VIDEO_FORMAT } from "../../../media/errors.js";
3
+ import { createBackgroundVideoEngine } from "../../engines/hls/engine-background-video.js";
4
+ import { UNPLAYABLE_SOURCE_MESSAGE } from "../../primitives/error-messages.js";
5
+ import { firstFatal, hasUnsupportedFeatureCause } from "../hls-video/error-surface.js";
6
+ //#region src/playback/adapters/hls-background-video/adapter.ts
7
+ const hlsBackgroundVideoMediaDefaultProps = { src: "" };
8
+ /**
9
+ * Which reported conditions this composition treats as **fatal** — the ones that
10
+ * reach `error` and fire `'error'`. Severity isn't part of an SVTA code
11
+ * (§Approach: "impact varies with player implementation"), so it's decided at
12
+ * this boundary rather than by the reporter.
13
+ *
14
+ * **Causes are fatal here, unlike on the other two adapters.** There, a cause is
15
+ * context — one unplayable rendition doesn't fail a source whose others still
16
+ * play, and a verdict follows if the type empties. In the pinned variant a cause
17
+ * *is* the verdict: only the pinned rendition's playlist is ever resolved, so a
18
+ * cause can only be about the pick itself, and dropping that pick is final —
19
+ * nothing here re-picks (that is what `switchVideoTrack` exists for, and this
20
+ * engine doesn't compose it). Measured on Chromium: an MPEG-TS source reports
21
+ * 1004 and an encrypted one 4008, each with no verdict behind it, and the element
22
+ * then sits at `readyState 0` with `error` null forever.
23
+ *
24
+ * The verdict is still listed, for the shapes that report nothing else: no video
25
+ * renditions at all, or a ladder pruned before anything resolves — both of which
26
+ * `reportAbsentTrackType` covers from the tail of the constraint chain.
27
+ *
28
+ * First-fatal-wins then surfaces the cause rather than the verdict when both are
29
+ * present, which is the more specific of the two.
30
+ */
31
+ const FATAL_SVTA_CODES = /* @__PURE__ */ new Set([
32
+ SVTA_NO_SUPPORTED_VIDEO_TRACK,
33
+ SVTA_UNSUPPORTED_VIDEO_FORMAT,
34
+ SVTA_UNSUPPORTED_DRM_SYSTEM
35
+ ]);
36
+ /**
37
+ * Mixin that adds the background-video SPF playback engine to any base class,
38
+ * for an HLS URL.
39
+ *
40
+ * `src` is the whole input surface, and `error` is the one output: nothing about
41
+ * an unplayable source reaches the media element on its own here — an unsupported
42
+ * container, encryption with no EME, and an undecodable codec all leave
43
+ * `HTMLMediaElement.error` null with the element stalled at `readyState 0`
44
+ * (measured on Chromium and WebKit) — so a consumer that watched only the
45
+ * `<video>` would see a source that never appears and never says why. The engine
46
+ * reports each condition onto `engine.state.errors` and logs it; this adapter
47
+ * promotes the first fatal one, mapping it the same way the video and audio Medias
48
+ * map theirs. See `internal/design/spf/features/errors.md`.
49
+ *
50
+ * Selection pins the largest rendition that *fits the screen*, and holds it for
51
+ * the session. The manifest is still the better place to narrow further: a
52
+ * delivery param — `?max_resolution=720p` on a Mux stream URL, for one — keeps
53
+ * the renditions it excludes out of the manifest entirely, rather than
54
+ * fetched-then-unpicked.
55
+ *
56
+ * The pin is given up, never moved, if the pick turns out to be unplayable: the
57
+ * container is only known once a media playlist resolves, which is after the pick
58
+ * is made, so the selection clears rather than quietly appending bytes nothing can
59
+ * decode.
60
+ *
61
+ * `@videojs/spf/mux-background-video` is this same Media under a Mux-flavored
62
+ * name — an alias, not a variant. Nothing about the surface changes with the
63
+ * import path.
64
+ *
65
+ * Everything else the use case fixes rather than exposes: video-only, looping,
66
+ * muted, autoplaying, loading as soon as there is a source. `attach` writes that
67
+ * onto the element and nothing here declares `loop` / `muted` / `autoplay` /
68
+ * `preload` of its own — a host-bound Media inherits all four from the host
69
+ * already, and shadowing them with fixed values would only make reads describe
70
+ * an intention rather than what the element is doing.
71
+ *
72
+ * A new src re-resolves the presentation, tearing down the state, SourceBuffers,
73
+ * and in-flight requests the previous one built before the next begins. The
74
+ * engine instance and the attached media element are both kept, so neither has to
75
+ * be rewired.
76
+ *
77
+ * @fires error - Fired when a fatal condition is reported. Read `error` for it.
78
+ *
79
+ * @example
80
+ * class HlsBackgroundVideoMedia extends HlsBackgroundVideoMediaMixin(BackgroundVideoHost) {}
81
+ *
82
+ * const media = new HlsBackgroundVideoMedia();
83
+ * media.attach(document.querySelector('video'));
84
+ * media.src = 'https://stream.mux.com/PLAYBACK_ID.m3u8?max_resolution=720p';
85
+ * media.play();
86
+ */
87
+ function HlsBackgroundVideoMediaMixin(BaseClass) {
88
+ class HlsBackgroundVideoMediaImpl extends BaseClass {
89
+ #engine;
90
+ #config;
91
+ #signals;
92
+ #error = null;
93
+ /**
94
+ * The *reported* condition currently surfaced, which is what the re-fire latch
95
+ * keys on. Not `#error.code`: that's the code this adapter chose to surface,
96
+ * and the substitution below can make the two differ.
97
+ */
98
+ #reportedCode = null;
99
+ #stopErrorSync;
100
+ /** Pending loadstart listener from a deferred play() retry, if any. */
101
+ #loadstartListener = null;
102
+ constructor(...args) {
103
+ super(...args);
104
+ const { config } = args?.[0] ?? {};
105
+ this.#config = config;
106
+ this.#engine = this.#createEngine();
107
+ this.#stopErrorSync = effect(() => {
108
+ const errors = this.#signals.state.errors.get();
109
+ this.#setError(firstFatal(errors, FATAL_SVTA_CODES), errors);
110
+ });
111
+ }
112
+ get engine() {
113
+ return this.#engine;
114
+ }
115
+ /**
116
+ * The current fatal condition, or `null`. Only *fatal* ones appear here — the
117
+ * engine reports non-fatal ones too (they stay in `engine.state.errors`), and
118
+ * promoting them would say playback had failed when it hadn't. Which ones are
119
+ * fatal is wider here than on the video and audio Medias; see
120
+ * {@link FATAL_SVTA_CODES}. Resets per source. Fires `'error'` when set.
121
+ *
122
+ * Mapped the same way theirs are: a sequence holding an
123
+ * unimplemented-capability cause surfaces as
124
+ * {@link SVTA_UNSUPPORTED_PLAYBACK_FEATURE} (99001) with the specifics logged,
125
+ * because "this player can't play this source" is what a consumer can act on,
126
+ * where a raw container or DRM code only says what to go and look up.
127
+ */
128
+ get error() {
129
+ return this.#error;
130
+ }
131
+ #setError(reported, errors) {
132
+ if (!reported) {
133
+ this.#error = null;
134
+ this.#reportedCode = null;
135
+ return;
136
+ }
137
+ if (this.#reportedCode === reported.code) return;
138
+ this.#reportedCode = reported.code;
139
+ console.error(UNPLAYABLE_SOURCE_MESSAGE, { conditions: errors });
140
+ this.#error = {
141
+ code: hasUnsupportedFeatureCause(errors) ? SVTA_UNSUPPORTED_PLAYBACK_FEATURE : reported.code,
142
+ message: reported.message ?? "",
143
+ ...reported.data === void 0 ? {} : { data: reported.data }
144
+ };
145
+ this.dispatchEvent?.(new Event("error"));
146
+ }
147
+ attach(mediaElement) {
148
+ super.attach?.(mediaElement);
149
+ mediaElement.loop = true;
150
+ mediaElement.muted = true;
151
+ mediaElement.autoplay = true;
152
+ mediaElement.preload = "auto";
153
+ this.#signals.context.mediaElement.set(mediaElement);
154
+ }
155
+ detach() {
156
+ this.#cancelPendingPlay();
157
+ this.#signals.context.mediaElement.set(void 0);
158
+ super.detach?.();
159
+ }
160
+ destroy() {
161
+ this.#cancelPendingPlay();
162
+ this.#stopErrorSync();
163
+ this.#engine.destroy();
164
+ }
165
+ get src() {
166
+ return this.#signals.state.presentation.get()?.url ?? "";
167
+ }
168
+ set src(value) {
169
+ if (value === this.src) return;
170
+ this.#cancelPendingPlay();
171
+ this.#signals.state.presentation.set(value ? { url: value } : void 0);
172
+ }
173
+ async play() {
174
+ const mediaElement = this.#signals.context.mediaElement.get();
175
+ if (!mediaElement) return Promise.reject(/* @__PURE__ */ new Error("HlsBackgroundVideoMediaElement: no media element attached"));
176
+ try {
177
+ return await mediaElement.play();
178
+ } catch (err) {
179
+ if (this.src) return new Promise((resolve, reject) => {
180
+ const listener = () => {
181
+ this.#loadstartListener = null;
182
+ mediaElement.play().then(resolve, reject);
183
+ };
184
+ this.#loadstartListener = listener;
185
+ mediaElement.addEventListener("loadstart", listener, { once: true });
186
+ });
187
+ throw err;
188
+ }
189
+ }
190
+ #createEngine() {
191
+ return createBackgroundVideoEngine({
192
+ ...this.#config,
193
+ onSignalsReady: (signals) => {
194
+ this.#signals = signals;
195
+ }
196
+ });
197
+ }
198
+ #cancelPendingPlay() {
199
+ if (!this.#loadstartListener) return;
200
+ this.#signals.context.mediaElement.get()?.removeEventListener("loadstart", this.#loadstartListener);
201
+ this.#loadstartListener = null;
202
+ }
203
+ }
204
+ return HlsBackgroundVideoMediaImpl;
205
+ }
206
+ /** Standalone SPF background-video adapter with no base class. */
207
+ var HlsBackgroundVideoMediaElement = class extends HlsBackgroundVideoMediaMixin(class {}) {};
208
+ //#endregion
209
+ export { HlsBackgroundVideoMediaElement, HlsBackgroundVideoMediaMixin, hlsBackgroundVideoMediaDefaultProps };
210
+
211
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","names":["#config","#engine","#createEngine","#stopErrorSync","#signals","#setError","#error","#reportedCode","#cancelPendingPlay","#loadstartListener"],"sources":["../../../../../src/playback/adapters/hls-background-video/adapter.ts"],"sourcesContent":["import type { Constructor, MixinReturn } from '@videojs/utils/types';\nimport type { Composition } from '../../../core/composition/create-composition';\nimport { effect } from '../../../core/signals/effect';\nimport {\n SVTA_NO_SUPPORTED_VIDEO_TRACK,\n SVTA_UNSUPPORTED_DRM_SYSTEM,\n SVTA_UNSUPPORTED_PLAYBACK_FEATURE,\n SVTA_UNSUPPORTED_VIDEO_FORMAT,\n type SvtaError,\n} from '../../../media/errors';\nimport {\n type BackgroundVideoEngineConfig,\n type BackgroundVideoEngineContext,\n type BackgroundVideoEngineSignals,\n type BackgroundVideoEngineState,\n createBackgroundVideoEngine,\n} from '../../engines/hls/engine-background-video';\nimport { UNPLAYABLE_SOURCE_MESSAGE } from '../../primitives/error-messages';\nimport { firstFatal, type HlsVideoMediaError, hasUnsupportedFeatureCause } from '../hls-video/error-surface';\n\n// The same error shape the video and audio Medias expose, under the name they\n// publish it as — one type for all three surfaces rather than a background-flavored\n// copy of it.\nexport type { HlsVideoMediaError } from '../hls-video/error-surface';\n\nexport interface HlsBackgroundVideoMediaProps {\n src: string;\n}\n\nexport const hlsBackgroundVideoMediaDefaultProps: HlsBackgroundVideoMediaProps = {\n src: '',\n};\n\nexport interface HlsBackgroundVideoMediaAPI extends HlsBackgroundVideoMediaProps {\n readonly engine: Composition<BackgroundVideoEngineState, BackgroundVideoEngineContext>;\n readonly error: HlsVideoMediaError | null;\n attach(mediaElement: HTMLMediaElement): void;\n detach(): void;\n destroy(): void;\n play(): Promise<void>;\n}\n\n/**\n * Which reported conditions this composition treats as **fatal** — the ones that\n * reach `error` and fire `'error'`. Severity isn't part of an SVTA code\n * (§Approach: \"impact varies with player implementation\"), so it's decided at\n * this boundary rather than by the reporter.\n *\n * **Causes are fatal here, unlike on the other two adapters.** There, a cause is\n * context — one unplayable rendition doesn't fail a source whose others still\n * play, and a verdict follows if the type empties. In the pinned variant a cause\n * *is* the verdict: only the pinned rendition's playlist is ever resolved, so a\n * cause can only be about the pick itself, and dropping that pick is final —\n * nothing here re-picks (that is what `switchVideoTrack` exists for, and this\n * engine doesn't compose it). Measured on Chromium: an MPEG-TS source reports\n * 1004 and an encrypted one 4008, each with no verdict behind it, and the element\n * then sits at `readyState 0` with `error` null forever.\n *\n * The verdict is still listed, for the shapes that report nothing else: no video\n * renditions at all, or a ladder pruned before anything resolves — both of which\n * `reportAbsentTrackType` covers from the tail of the constraint chain.\n *\n * First-fatal-wins then surfaces the cause rather than the verdict when both are\n * present, which is the more specific of the two.\n */\nconst FATAL_SVTA_CODES: ReadonlySet<number> = new Set<number>([\n SVTA_NO_SUPPORTED_VIDEO_TRACK,\n SVTA_UNSUPPORTED_VIDEO_FORMAT,\n SVTA_UNSUPPORTED_DRM_SYSTEM,\n]);\n\n/**\n * Mixin that adds the background-video SPF playback engine to any base class,\n * for an HLS URL.\n *\n * `src` is the whole input surface, and `error` is the one output: nothing about\n * an unplayable source reaches the media element on its own here — an unsupported\n * container, encryption with no EME, and an undecodable codec all leave\n * `HTMLMediaElement.error` null with the element stalled at `readyState 0`\n * (measured on Chromium and WebKit) — so a consumer that watched only the\n * `<video>` would see a source that never appears and never says why. The engine\n * reports each condition onto `engine.state.errors` and logs it; this adapter\n * promotes the first fatal one, mapping it the same way the video and audio Medias\n * map theirs. See `internal/design/spf/features/errors.md`.\n *\n * Selection pins the largest rendition that *fits the screen*, and holds it for\n * the session. The manifest is still the better place to narrow further: a\n * delivery param — `?max_resolution=720p` on a Mux stream URL, for one — keeps\n * the renditions it excludes out of the manifest entirely, rather than\n * fetched-then-unpicked.\n *\n * The pin is given up, never moved, if the pick turns out to be unplayable: the\n * container is only known once a media playlist resolves, which is after the pick\n * is made, so the selection clears rather than quietly appending bytes nothing can\n * decode.\n *\n * `@videojs/spf/mux-background-video` is this same Media under a Mux-flavored\n * name — an alias, not a variant. Nothing about the surface changes with the\n * import path.\n *\n * Everything else the use case fixes rather than exposes: video-only, looping,\n * muted, autoplaying, loading as soon as there is a source. `attach` writes that\n * onto the element and nothing here declares `loop` / `muted` / `autoplay` /\n * `preload` of its own — a host-bound Media inherits all four from the host\n * already, and shadowing them with fixed values would only make reads describe\n * an intention rather than what the element is doing.\n *\n * A new src re-resolves the presentation, tearing down the state, SourceBuffers,\n * and in-flight requests the previous one built before the next begins. The\n * engine instance and the attached media element are both kept, so neither has to\n * be rewired.\n *\n * @fires error - Fired when a fatal condition is reported. Read `error` for it.\n *\n * @example\n * class HlsBackgroundVideoMedia extends HlsBackgroundVideoMediaMixin(BackgroundVideoHost) {}\n *\n * const media = new HlsBackgroundVideoMedia();\n * media.attach(document.querySelector('video'));\n * media.src = 'https://stream.mux.com/PLAYBACK_ID.m3u8?max_resolution=720p';\n * media.play();\n */\nexport function HlsBackgroundVideoMediaMixin<Base extends Constructor<any>>(BaseClass: Base) {\n class HlsBackgroundVideoMediaImpl extends BaseClass {\n #engine: Composition<BackgroundVideoEngineState, BackgroundVideoEngineContext>;\n #config: BackgroundVideoEngineConfig;\n #signals!: BackgroundVideoEngineSignals;\n #error: HlsVideoMediaError | null = null;\n /**\n * The *reported* condition currently surfaced, which is what the re-fire latch\n * keys on. Not `#error.code`: that's the code this adapter chose to surface,\n * and the substitution below can make the two differ.\n */\n #reportedCode: number | null = null;\n #stopErrorSync: () => void;\n\n /** Pending loadstart listener from a deferred play() retry, if any. */\n #loadstartListener: (() => void) | null = null;\n\n constructor(...args: any[]) {\n super(...args);\n\n const { config } = args?.[0] ?? {};\n this.#config = config;\n this.#engine = this.#createEngine();\n\n // Promote the first fatal condition out of the engine's reported sequence\n // onto this surface. Clearing rides the same signal: `collectErrors` resets\n // the slot per source, so a new source starts with no error without this\n // needing its own source-change hook.\n this.#stopErrorSync = effect(() => {\n const errors = this.#signals.state.errors.get();\n this.#setError(firstFatal(errors, FATAL_SVTA_CODES), errors);\n });\n }\n\n get engine(): Composition<BackgroundVideoEngineState, BackgroundVideoEngineContext> {\n return this.#engine;\n }\n\n /**\n * The current fatal condition, or `null`. Only *fatal* ones appear here — the\n * engine reports non-fatal ones too (they stay in `engine.state.errors`), and\n * promoting them would say playback had failed when it hadn't. Which ones are\n * fatal is wider here than on the video and audio Medias; see\n * {@link FATAL_SVTA_CODES}. Resets per source. Fires `'error'` when set.\n *\n * Mapped the same way theirs are: a sequence holding an\n * unimplemented-capability cause surfaces as\n * {@link SVTA_UNSUPPORTED_PLAYBACK_FEATURE} (99001) with the specifics logged,\n * because \"this player can't play this source\" is what a consumer can act on,\n * where a raw container or DRM code only says what to go and look up.\n */\n get error(): HlsVideoMediaError | null {\n return this.#error;\n }\n\n #setError(reported: SvtaError | undefined, errors: readonly SvtaError[] | undefined): void {\n if (!reported) {\n // Cleared (new source). No event: `'error'` announces a failure, and\n // consumers reset their own copy on source change.\n this.#error = null;\n this.#reportedCode = null;\n return;\n }\n // Keyed on the code, not the object: a later append re-runs this effect\n // with an equal-but-new array, and re-firing `'error'` for a condition\n // already surfaced would look like a second failure.\n if (this.#reportedCode === reported.code) return;\n this.#reportedCode = reported.code;\n\n // Logged for every fatal condition, not just the substituted ones: a source\n // with no video renditions is as dead as an unplayable container, and it\n // would otherwise reach a developer as a bare code. One generic sentence\n // rather than one per case — the conditions beside it carry the specifics.\n //\n // Prose stays here rather than on `error.message`, matching the other two:\n // viewer-facing copy is the consumer's to localize, and a background video\n // has no chrome to put it in anyway.\n console.error(UNPLAYABLE_SOURCE_MESSAGE, { conditions: errors });\n\n this.#error = {\n code: hasUnsupportedFeatureCause(errors) ? SVTA_UNSUPPORTED_PLAYBACK_FEATURE : reported.code,\n message: reported.message ?? '',\n ...(reported.data === undefined ? {} : { data: reported.data }),\n };\n // Optional-chained: with an EventTarget-less base (`HlsBackgroundVideoMediaElement`\n // standalone) there's nowhere to dispatch.\n this.dispatchEvent?.(new Event('error'));\n }\n\n // -------------------------------------------------------------------------\n // Media element lifecycle\n // -------------------------------------------------------------------------\n\n attach(mediaElement: HTMLMediaElement): void {\n super.attach?.(mediaElement);\n // The one place the fixed behavior is stated. Muted and autoplay are what\n // let it start without a gesture, loop is the defining behavior, and\n // `preload` says out loud what the engine does regardless — it subtracts\n // preload monitoring and loads from the moment it has a source.\n mediaElement.loop = true;\n mediaElement.muted = true;\n mediaElement.autoplay = true;\n mediaElement.preload = 'auto';\n\n this.#signals.context.mediaElement.set(mediaElement);\n }\n\n detach(): void {\n this.#cancelPendingPlay();\n this.#signals.context.mediaElement.set(undefined);\n super.detach?.();\n }\n\n destroy(): void {\n this.#cancelPendingPlay();\n this.#stopErrorSync();\n this.#engine.destroy();\n }\n\n // -------------------------------------------------------------------------\n // src — synchronous IDL attribute (WHATWG §4.8.11.2)\n // -------------------------------------------------------------------------\n\n get src(): string {\n return this.#signals.state.presentation.get()?.url ?? '';\n }\n\n set src(value: string) {\n // Same line the HLS Medias draw: the presentation is set from a fresh\n // object every time, so re-resolving a URL already playing would restart\n // it for no reason.\n if (value === this.src) return;\n\n this.#cancelPendingPlay();\n this.#signals.state.presentation.set(value ? { url: value } : undefined);\n }\n\n // -------------------------------------------------------------------------\n // play() — WHATWG §4.8.11.8\n // Delegates to the attached media element's native play().\n // -------------------------------------------------------------------------\n\n async play(): Promise<void> {\n const mediaElement = this.#signals.context.mediaElement.get();\n if (!mediaElement) {\n return Promise.reject(new Error('HlsBackgroundVideoMediaElement: no media element attached'));\n }\n\n try {\n return await mediaElement.play();\n } catch (err) {\n // If we have a pending HLS source, the rejection may be because MSE\n // hasn't attached a blob URL yet. Wait for loadstart (src assigned by\n // MSE setup) and retry once.\n if (this.src) {\n return new Promise<void>((resolve, reject) => {\n const listener = () => {\n this.#loadstartListener = null;\n mediaElement.play().then(resolve, reject);\n };\n this.#loadstartListener = listener;\n mediaElement.addEventListener('loadstart', listener, { once: true });\n });\n }\n throw err;\n }\n }\n\n // -------------------------------------------------------------------------\n // Private\n // -------------------------------------------------------------------------\n\n #createEngine(): Composition<BackgroundVideoEngineState, BackgroundVideoEngineContext> {\n // No selection config of its own: the engine's default rule chain already\n // narrows to the largest rendition that fits the screen, which is exactly\n // what this adapter used to hand over as a bespoke picker.\n return createBackgroundVideoEngine({\n ...this.#config,\n onSignalsReady: (signals) => {\n this.#signals = signals;\n },\n });\n }\n\n #cancelPendingPlay(): void {\n if (!this.#loadstartListener) return;\n const mediaElement = this.#signals.context.mediaElement.get();\n mediaElement?.removeEventListener('loadstart', this.#loadstartListener);\n this.#loadstartListener = null;\n }\n }\n\n return HlsBackgroundVideoMediaImpl as unknown as MixinReturn<Base, HlsBackgroundVideoMediaAPI>;\n}\n\n/** Standalone SPF background-video adapter with no base class. */\nexport class HlsBackgroundVideoMediaElement extends HlsBackgroundVideoMediaMixin(class {}) {}\n"],"mappings":";;;;;;AA6BA,MAAa,sCAAoE,EAC/E,KAAK,GACP;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,MAAM,mCAAwC,IAAI,IAAY;CAC5D;CACA;CACA;AACF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDD,SAAgB,6BAA4D,WAAiB;CAC3F,MAAM,oCAAoC,UAAU;EAClD;EACA;EACA;EACA,SAAoC;;;;;;EAMpC,gBAA+B;EAC/B;;EAGA,qBAA0C;EAE1C,YAAY,GAAG,MAAa;GAC1B,MAAM,GAAG,IAAI;GAEb,MAAM,EAAE,WAAW,OAAO,MAAM,CAAC;GACjC,KAAKA,UAAU;GACf,KAAKC,UAAU,KAAKC,cAAc;GAMlC,KAAKC,iBAAiB,aAAa;IACjC,MAAM,SAAS,KAAKC,SAAS,MAAM,OAAO,IAAI;IAC9C,KAAKC,UAAU,WAAW,QAAQ,gBAAgB,GAAG,MAAM;GAC7D,CAAC;EACH;EAEA,IAAI,SAAgF;GAClF,OAAO,KAAKJ;EACd;;;;;;;;;;;;;;EAeA,IAAI,QAAmC;GACrC,OAAO,KAAKK;EACd;EAEA,UAAU,UAAiC,QAAgD;GACzF,IAAI,CAAC,UAAU;IAGb,KAAKA,SAAS;IACd,KAAKC,gBAAgB;IACrB;GACF;GAIA,IAAI,KAAKA,kBAAkB,SAAS,MAAM;GAC1C,KAAKA,gBAAgB,SAAS;GAU9B,QAAQ,MAAM,2BAA2B,EAAE,YAAY,OAAO,CAAC;GAE/D,KAAKD,SAAS;IACZ,MAAM,2BAA2B,MAAM,IAAI,oCAAoC,SAAS;IACxF,SAAS,SAAS,WAAW;IAC7B,GAAI,SAAS,SAAS,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM,SAAS,KAAK;GAC/D;GAGA,KAAK,gBAAgB,IAAI,MAAM,OAAO,CAAC;EACzC;EAMA,OAAO,cAAsC;GAC3C,MAAM,SAAS,YAAY;GAK3B,aAAa,OAAO;GACpB,aAAa,QAAQ;GACrB,aAAa,WAAW;GACxB,aAAa,UAAU;GAEvB,KAAKF,SAAS,QAAQ,aAAa,IAAI,YAAY;EACrD;EAEA,SAAe;GACb,KAAKI,mBAAmB;GACxB,KAAKJ,SAAS,QAAQ,aAAa,IAAI,KAAA,CAAS;GAChD,MAAM,SAAS;EACjB;EAEA,UAAgB;GACd,KAAKI,mBAAmB;GACxB,KAAKL,eAAe;GACpB,KAAKF,QAAQ,QAAQ;EACvB;EAMA,IAAI,MAAc;GAChB,OAAO,KAAKG,SAAS,MAAM,aAAa,IAAI,CAAC,EAAE,OAAO;EACxD;EAEA,IAAI,IAAI,OAAe;GAIrB,IAAI,UAAU,KAAK,KAAK;GAExB,KAAKI,mBAAmB;GACxB,KAAKJ,SAAS,MAAM,aAAa,IAAI,QAAQ,EAAE,KAAK,MAAM,IAAI,KAAA,CAAS;EACzE;EAOA,MAAM,OAAsB;GAC1B,MAAM,eAAe,KAAKA,SAAS,QAAQ,aAAa,IAAI;GAC5D,IAAI,CAAC,cACH,OAAO,QAAQ,uBAAO,IAAI,MAAM,2DAA2D,CAAC;GAG9F,IAAI;IACF,OAAO,MAAM,aAAa,KAAK;GACjC,SAAS,KAAK;IAIZ,IAAI,KAAK,KACP,OAAO,IAAI,SAAe,SAAS,WAAW;KAC5C,MAAM,iBAAiB;MACrB,KAAKK,qBAAqB;MAC1B,aAAa,KAAK,CAAC,CAAC,KAAK,SAAS,MAAM;KAC1C;KACA,KAAKA,qBAAqB;KAC1B,aAAa,iBAAiB,aAAa,UAAU,EAAE,MAAM,KAAK,CAAC;IACrE,CAAC;IAEH,MAAM;GACR;EACF;EAMA,gBAAuF;GAIrF,OAAO,4BAA4B;IACjC,GAAG,KAAKT;IACR,iBAAiB,YAAY;KAC3B,KAAKI,WAAW;IAClB;GACF,CAAC;EACH;EAEA,qBAA2B;GACzB,IAAI,CAAC,KAAKK,oBAAoB;GAE9B,KAD0BL,SAAS,QAAQ,aAAa,IAC7C,CAAC,EAAE,oBAAoB,aAAa,KAAKK,kBAAkB;GACtE,KAAKA,qBAAqB;EAC5B;CACF;CAEA,OAAO;AACT;;AAGA,IAAa,iCAAb,cAAoD,6BAA6B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ //#region src/playback/adapters/hls-background-video/host.d.ts
2
+ /**
3
+ * The `<video>` binding a background video uses: somewhere to keep the attached
4
+ * element, and the four properties the Media fixes on it.
5
+ *
6
+ * That is the whole surface anything here reaches. The engine drives playback,
7
+ * the element exposes `src` and nothing else, and the background player
8
+ * subscribes to no store features, so nothing asks a background video for
9
+ * `currentTime`, `play()`, picture-in-picture, fullscreen, forwarded events, or
10
+ * media components. Holding the host to what is reachable is what keeps this
11
+ * entry free of `@videojs/media`, and small enough to suit a component whose
12
+ * whole pitch is its size.
13
+ *
14
+ * An `EventTarget`, because a Media is one: the store and the element layers
15
+ * take anything they attach as an event source, and inheriting the three methods
16
+ * satisfies that for free rather than by stubbing them.
17
+ *
18
+ * ⚠️ It still implements too little to carry the rest of the media surface, which
19
+ * bounds what may consume it: a store feature reading a property outside this set
20
+ * gets `undefined` rather than an error. A Media needing more of that surface
21
+ * belongs on a host that provides it.
22
+ */
23
+ declare class BackgroundVideoHost extends EventTarget {
24
+ #private;
25
+ attach(target: HTMLVideoElement): void;
26
+ detach(): void;
27
+ get loop(): boolean;
28
+ set loop(value: boolean);
29
+ get muted(): boolean;
30
+ set muted(value: boolean);
31
+ get autoplay(): boolean;
32
+ set autoplay(value: boolean);
33
+ get preload(): HTMLVideoElement['preload'];
34
+ set preload(value: HTMLVideoElement['preload']);
35
+ }
36
+ //#endregion
37
+ export { BackgroundVideoHost };
38
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","names":[],"sources":["../../../../../src/playback/adapters/hls-background-video/host.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;cAqBa,4BAA4B;;EAGvC,OAAO,QAAQ;EAKf;MAOI;MAIA,KAAK;MAIL;MAIA,MAAM;MAIN;MAIA,SAAS;MAIT,WAAW;MAIX,QAAQ,OAAO"}
@@ -0,0 +1,60 @@
1
+ //#region src/playback/adapters/hls-background-video/host.ts
2
+ /**
3
+ * The `<video>` binding a background video uses: somewhere to keep the attached
4
+ * element, and the four properties the Media fixes on it.
5
+ *
6
+ * That is the whole surface anything here reaches. The engine drives playback,
7
+ * the element exposes `src` and nothing else, and the background player
8
+ * subscribes to no store features, so nothing asks a background video for
9
+ * `currentTime`, `play()`, picture-in-picture, fullscreen, forwarded events, or
10
+ * media components. Holding the host to what is reachable is what keeps this
11
+ * entry free of `@videojs/media`, and small enough to suit a component whose
12
+ * whole pitch is its size.
13
+ *
14
+ * An `EventTarget`, because a Media is one: the store and the element layers
15
+ * take anything they attach as an event source, and inheriting the three methods
16
+ * satisfies that for free rather than by stubbing them.
17
+ *
18
+ * ⚠️ It still implements too little to carry the rest of the media surface, which
19
+ * bounds what may consume it: a store feature reading a property outside this set
20
+ * gets `undefined` rather than an error. A Media needing more of that surface
21
+ * belongs on a host that provides it.
22
+ */
23
+ var BackgroundVideoHost = class extends EventTarget {
24
+ #target = null;
25
+ attach(target) {
26
+ if (!target || this.#target === target) return;
27
+ this.#target = target;
28
+ }
29
+ detach() {
30
+ this.#target = null;
31
+ }
32
+ get loop() {
33
+ return this.#target?.loop ?? false;
34
+ }
35
+ set loop(value) {
36
+ if (this.#target) this.#target.loop = value;
37
+ }
38
+ get muted() {
39
+ return this.#target?.muted ?? false;
40
+ }
41
+ set muted(value) {
42
+ if (this.#target) this.#target.muted = value;
43
+ }
44
+ get autoplay() {
45
+ return this.#target?.autoplay ?? false;
46
+ }
47
+ set autoplay(value) {
48
+ if (this.#target) this.#target.autoplay = value;
49
+ }
50
+ get preload() {
51
+ return this.#target?.preload ?? "metadata";
52
+ }
53
+ set preload(value) {
54
+ if (this.#target) this.#target.preload = value;
55
+ }
56
+ };
57
+ //#endregion
58
+ export { BackgroundVideoHost };
59
+
60
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","names":["#target"],"sources":["../../../../../src/playback/adapters/hls-background-video/host.ts"],"sourcesContent":["/**\n * The `<video>` binding a background video uses: somewhere to keep the attached\n * element, and the four properties the Media fixes on it.\n *\n * That is the whole surface anything here reaches. The engine drives playback,\n * the element exposes `src` and nothing else, and the background player\n * subscribes to no store features, so nothing asks a background video for\n * `currentTime`, `play()`, picture-in-picture, fullscreen, forwarded events, or\n * media components. Holding the host to what is reachable is what keeps this\n * entry free of `@videojs/media`, and small enough to suit a component whose\n * whole pitch is its size.\n *\n * An `EventTarget`, because a Media is one: the store and the element layers\n * take anything they attach as an event source, and inheriting the three methods\n * satisfies that for free rather than by stubbing them.\n *\n * ⚠️ It still implements too little to carry the rest of the media surface, which\n * bounds what may consume it: a store feature reading a property outside this set\n * gets `undefined` rather than an error. A Media needing more of that surface\n * belongs on a host that provides it.\n */\nexport class BackgroundVideoHost extends EventTarget {\n #target: HTMLVideoElement | null = null;\n\n attach(target: HTMLVideoElement): void {\n if (!target || this.#target === target) return;\n this.#target = target;\n }\n\n detach(): void {\n this.#target = null;\n }\n\n // Read back off the element rather than stored, so they describe what is\n // playing instead of what was asked for — see the adapter's note on why the\n // Media declares none of these itself.\n get loop(): boolean {\n return this.#target?.loop ?? false;\n }\n\n set loop(value: boolean) {\n if (this.#target) this.#target.loop = value;\n }\n\n get muted(): boolean {\n return this.#target?.muted ?? false;\n }\n\n set muted(value: boolean) {\n if (this.#target) this.#target.muted = value;\n }\n\n get autoplay(): boolean {\n return this.#target?.autoplay ?? false;\n }\n\n set autoplay(value: boolean) {\n if (this.#target) this.#target.autoplay = value;\n }\n\n get preload(): HTMLVideoElement['preload'] {\n return this.#target?.preload ?? 'metadata';\n }\n\n set preload(value: HTMLVideoElement['preload']) {\n if (this.#target) this.#target.preload = value;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAqBA,IAAa,sBAAb,cAAyC,YAAY;CACnD,UAAmC;CAEnC,OAAO,QAAgC;EACrC,IAAI,CAAC,UAAU,KAAKA,YAAY,QAAQ;EACxC,KAAKA,UAAU;CACjB;CAEA,SAAe;EACb,KAAKA,UAAU;CACjB;CAKA,IAAI,OAAgB;EAClB,OAAO,KAAKA,SAAS,QAAQ;CAC/B;CAEA,IAAI,KAAK,OAAgB;EACvB,IAAI,KAAKA,SAAS,KAAKA,QAAQ,OAAO;CACxC;CAEA,IAAI,QAAiB;EACnB,OAAO,KAAKA,SAAS,SAAS;CAChC;CAEA,IAAI,MAAM,OAAgB;EACxB,IAAI,KAAKA,SAAS,KAAKA,QAAQ,QAAQ;CACzC;CAEA,IAAI,WAAoB;EACtB,OAAO,KAAKA,SAAS,YAAY;CACnC;CAEA,IAAI,SAAS,OAAgB;EAC3B,IAAI,KAAKA,SAAS,KAAKA,QAAQ,WAAW;CAC5C;CAEA,IAAI,UAAuC;EACzC,OAAO,KAAKA,SAAS,WAAW;CAClC;CAEA,IAAI,QAAQ,OAAoC;EAC9C,IAAI,KAAKA,SAAS,KAAKA,QAAQ,UAAU;CAC3C;AACF"}
@@ -0,0 +1,20 @@
1
+ import { HlsBackgroundVideoMediaAPI } from "./adapter.js";
2
+ import { BackgroundVideoHost } from "./host.js";
3
+ //#region src/playback/adapters/hls-background-video/media.d.ts
4
+ declare const HlsBackgroundVideoMediaBase: import("@videojs/utils/types").MixinReturn<typeof BackgroundVideoHost, HlsBackgroundVideoMediaAPI>;
5
+ /**
6
+ * The background-video Media, bound to a `<video>` through
7
+ * {@link BackgroundVideoHost}.
8
+ *
9
+ * That host carries the attached element and the four properties `attach` fixes,
10
+ * which is all this Media's surface needs, and it is local — so this entry has
11
+ * no `@videojs/media` dependency.
12
+ *
13
+ * No `MediaTracksMixin`, unlike `HlsVideoMedia`: the engine subtracts audio and
14
+ * text entirely and pins one video rendition for the session, so there are no
15
+ * track lists for a consumer to project or switch between.
16
+ */
17
+ declare class HlsBackgroundVideoMedia extends HlsBackgroundVideoMediaBase {}
18
+ //#endregion
19
+ export { HlsBackgroundVideoMedia };
20
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","names":[],"sources":["../../../../../src/playback/adapters/hls-background-video/media.ts"],"mappings":";;;cAGM,4DAA2B,mBAAA,qBAAA;;;;;;;;;;;;;cAcpB,gCAAgC"}
@@ -0,0 +1,21 @@
1
+ import { HlsBackgroundVideoMediaMixin } from "./adapter.js";
2
+ import { BackgroundVideoHost } from "./host.js";
3
+ //#region src/playback/adapters/hls-background-video/media.ts
4
+ const HlsBackgroundVideoMediaBase = HlsBackgroundVideoMediaMixin(BackgroundVideoHost);
5
+ /**
6
+ * The background-video Media, bound to a `<video>` through
7
+ * {@link BackgroundVideoHost}.
8
+ *
9
+ * That host carries the attached element and the four properties `attach` fixes,
10
+ * which is all this Media's surface needs, and it is local — so this entry has
11
+ * no `@videojs/media` dependency.
12
+ *
13
+ * No `MediaTracksMixin`, unlike `HlsVideoMedia`: the engine subtracts audio and
14
+ * text entirely and pins one video rendition for the session, so there are no
15
+ * track lists for a consumer to project or switch between.
16
+ */
17
+ var HlsBackgroundVideoMedia = class extends HlsBackgroundVideoMediaBase {};
18
+ //#endregion
19
+ export { HlsBackgroundVideoMedia };
20
+
21
+ //# sourceMappingURL=media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.js","names":[],"sources":["../../../../../src/playback/adapters/hls-background-video/media.ts"],"sourcesContent":["import { HlsBackgroundVideoMediaMixin } from './adapter';\nimport { BackgroundVideoHost } from './host';\n\nconst HlsBackgroundVideoMediaBase = HlsBackgroundVideoMediaMixin(BackgroundVideoHost);\n\n/**\n * The background-video Media, bound to a `<video>` through\n * {@link BackgroundVideoHost}.\n *\n * That host carries the attached element and the four properties `attach` fixes,\n * which is all this Media's surface needs, and it is local — so this entry has\n * no `@videojs/media` dependency.\n *\n * No `MediaTracksMixin`, unlike `HlsVideoMedia`: the engine subtracts audio and\n * text entirely and pins one video rendition for the session, so there are no\n * track lists for a consumer to project or switch between.\n */\nexport class HlsBackgroundVideoMedia extends HlsBackgroundVideoMediaBase {}\n"],"mappings":";;;AAGA,MAAM,8BAA8B,6BAA6B,mBAAmB;;;;;;;;;;;;;AAcpF,IAAa,0BAAb,cAA6C,4BAA4B,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { Composition } from "../../../core/composition/create-composition.js";
2
+ import { HlsVideoMediaError } from "./error-surface.js";
3
+ import { HlsVideoEngineContext, HlsVideoEngineState } from "../../engines/hls/engine.js";
4
+ import { MediaStreamType } from "@videojs/media";
5
+ import { Constructor, MixinReturn } from "@videojs/utils/types";
6
+ //#region src/playback/adapters/hls-video/adapter.d.ts
7
+ /**
8
+ * The media-level stream type: the engine's detected stream type (`'live'` /
9
+ * `'on-demand'`) plus `'unknown'` for "no playlist parsed yet." `@videojs/media`'s
10
+ * {@link MediaStreamType} itself, kept under its own name because that is what
11
+ * this adapter's `streamType` property is documented against.
12
+ */
13
+ type HlsVideoMediaStreamType = MediaStreamType;
14
+ interface HlsVideoMediaProps {
15
+ src: string;
16
+ preload: '' | 'none' | 'metadata' | 'auto';
17
+ disableRemotePlayback: boolean;
18
+ streamType: HlsVideoMediaStreamType;
19
+ }
20
+ declare const hlsVideoMediaDefaultProps: HlsVideoMediaProps;
21
+ interface HlsVideoMediaAPI extends HlsVideoMediaProps {
22
+ readonly engine: Composition<HlsVideoEngineState, HlsVideoEngineContext>;
23
+ readonly error: HlsVideoMediaError | null;
24
+ readonly liveEdgeStart: number;
25
+ readonly targetLiveWindow: number;
26
+ attach(mediaElement: HTMLMediaElement): void;
27
+ detach(): void;
28
+ destroy(): void;
29
+ play(): Promise<void>;
30
+ }
31
+ /**
32
+ * Mixin that adds SPF playback engine behavior to any base class.
33
+ *
34
+ * Implements the src/play() contract per the WHATWG HTML spec so that SPF can
35
+ * be used anywhere a media element API is expected.
36
+ *
37
+ * A single engine instance is created at construction and recycled across src
38
+ * changes.
39
+ *
40
+ * @fires streamtypechange - Fired when the detected stream type changes. Read `streamType` for the new value.
41
+ * @fires targetlivewindowchange - Fired when the target live window changes. Read `targetLiveWindow` for the new value.
42
+ * @fires error - Fired when a fatal condition is reported. Read `error` for it.
43
+ *
44
+ * @example
45
+ * class HlsVideoMedia extends HlsVideoMediaMixin(HTMLVideoElementHost) {}
46
+ *
47
+ * const media = new HlsVideoMedia();
48
+ * media.attach(document.querySelector('video'));
49
+ * media.src = 'https://stream.mux.com/abc123.m3u8';
50
+ */
51
+ declare function HlsVideoMediaMixin<Base extends Constructor<any>>(BaseClass: Base): MixinReturn<Base, HlsVideoMediaAPI> & {
52
+ readonly alternativeMediaSuggestion: string | undefined;
53
+ };
54
+ declare const HlsVideoMediaElement_base: Constructor<{} & HlsVideoMediaAPI, any[]> & Omit<{
55
+ new (): {};
56
+ }, "prototype"> & {
57
+ readonly alternativeMediaSuggestion: string | undefined;
58
+ };
59
+ /** Standalone SPF media adapter with no base class. */
60
+ declare class HlsVideoMediaElement extends HlsVideoMediaElement_base {}
61
+ //#endregion
62
+ export { HlsVideoMediaAPI, HlsVideoMediaElement, type HlsVideoMediaError, HlsVideoMediaMixin, HlsVideoMediaProps, HlsVideoMediaStreamType, hlsVideoMediaDefaultProps };
63
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","names":[],"sources":["../../../../../src/playback/adapters/hls-video/adapter.ts"],"mappings":";;;;;;;;;;;;KA6CY,0BAA0B;UAIrB;EACf;EACA;EACA;EACA,YAAY;;cAGD,2BAA2B;UAOvB,yBAAyB;WAC/B,QAAQ,YAAY,qBAAqB;WACzC,OAAO;WACP;WACA;EACT,OAAO,cAAc;EACrB;EACA;EACA,QAAQ;;;;;;;;;;;;;;;;;;;;;;iBA+DM,mBAAmB,aAAa,kBAAkB,WAAW,OAuXpC,YAAY,MAAM;WAC9C;;;;;WAA4B;;;cAK5B,6BAA6B"}