@amazon/vinyl 1.2.0 → 2.0.4

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 (653) hide show
  1. package/dist/index.cjs +9225 -6633
  2. package/dist/index.cjs.map +4 -4
  3. package/dist/index.js +9080 -6435
  4. package/dist/index.js.map +4 -4
  5. package/dist/test/benchmark.es5.js +266 -253
  6. package/dist/test/benchmark.js +3256 -3190
  7. package/dist/test/benchmark.js.map +4 -4
  8. package/dist/test/integ.es5.js +1404 -1093
  9. package/dist/test/integ.js +45924 -33873
  10. package/dist/test/integ.js.map +4 -4
  11. package/dist/types/current/ad/AdBreakInfo.d.ts +160 -0
  12. package/dist/types/current/ad/AdBreakInfo.d.ts.map +1 -0
  13. package/dist/types/current/ad/AdController.d.ts +229 -0
  14. package/dist/types/current/ad/AdController.d.ts.map +1 -0
  15. package/dist/types/current/ad/AdController.js +19 -0
  16. package/dist/types/current/ad/AdControllerImpl.d.ts +146 -0
  17. package/dist/types/current/ad/AdControllerImpl.d.ts.map +1 -0
  18. package/dist/types/current/ad/AdControllerImpl.js +705 -0
  19. package/dist/types/current/ad/AdError.d.ts +6 -0
  20. package/dist/types/current/ad/AdError.d.ts.map +1 -0
  21. package/dist/types/current/ad/AdError.js +14 -0
  22. package/dist/types/current/ad/AdsProvider.d.ts +28 -0
  23. package/dist/types/current/ad/AdsProvider.d.ts.map +1 -0
  24. package/dist/types/current/ad/AdsProvider.js +5 -0
  25. package/dist/types/current/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
  26. package/dist/types/current/ad/defaultAdLoadOptionsResolver.d.ts.map +1 -0
  27. package/dist/types/current/ad/defaultAdLoadOptionsResolver.js +26 -0
  28. package/dist/types/current/ad/discoverHlsInterstitials.d.ts +22 -0
  29. package/dist/types/current/ad/discoverHlsInterstitials.d.ts.map +1 -0
  30. package/dist/types/current/ad/discoverHlsInterstitials.js +246 -0
  31. package/dist/types/current/drm/DrmController.d.ts +29 -4
  32. package/dist/types/current/drm/DrmController.d.ts.map +1 -1
  33. package/dist/types/current/drm/DrmControllerImpl.d.ts +13 -4
  34. package/dist/types/current/drm/DrmControllerImpl.d.ts.map +1 -1
  35. package/dist/types/current/drm/DrmControllerImpl.js +85 -14
  36. package/dist/types/current/drm/util/unpackPlayReadyChallenge.d.ts +5 -0
  37. package/dist/types/current/drm/util/unpackPlayReadyChallenge.d.ts.map +1 -1
  38. package/dist/types/current/drm/util/unpackPlayReadyChallenge.js +5 -0
  39. package/dist/types/current/index.d.ts +151 -126
  40. package/dist/types/current/index.d.ts.map +1 -1
  41. package/dist/types/current/index.js +151 -126
  42. package/dist/types/current/playback/PlaybackControllerImpl.d.ts +1 -0
  43. package/dist/types/current/playback/PlaybackControllerImpl.d.ts.map +1 -1
  44. package/dist/types/current/playback/PlaybackControllerImpl.js +44 -5
  45. package/dist/types/current/playback/PlaybackSource.d.ts +1 -1
  46. package/dist/types/current/playback/ReadonlyPlaybackController.d.ts +6 -1
  47. package/dist/types/current/playback/ReadonlyPlaybackController.d.ts.map +1 -1
  48. package/dist/types/current/playback/ReadonlyPlaybackController.js +1 -0
  49. package/dist/types/current/streaming/ContentStream.d.ts +8 -1
  50. package/dist/types/current/streaming/ContentStream.d.ts.map +1 -1
  51. package/dist/types/current/streaming/ContentStream.js +19 -2
  52. package/dist/types/current/streaming/LoadMetric.d.ts +58 -0
  53. package/dist/types/current/streaming/LoadMetric.d.ts.map +1 -0
  54. package/dist/types/current/streaming/LoadMetric.js +5 -0
  55. package/dist/types/current/streaming/ManifestController.d.ts +16 -1
  56. package/dist/types/current/streaming/ManifestController.d.ts.map +1 -1
  57. package/dist/types/current/streaming/ManifestControllerImpl.d.ts +43 -0
  58. package/dist/types/current/streaming/ManifestControllerImpl.d.ts.map +1 -0
  59. package/dist/types/current/streaming/ManifestControllerImpl.js +104 -0
  60. package/dist/types/current/streaming/MediaQualityMetadata.d.ts +16 -0
  61. package/dist/types/current/streaming/MediaQualityMetadata.d.ts.map +1 -1
  62. package/dist/types/current/streaming/MediaQualityMetadata.js +6 -0
  63. package/dist/types/current/streaming/MediaTimeline.d.ts +6 -0
  64. package/dist/types/current/streaming/MediaTimeline.d.ts.map +1 -1
  65. package/dist/types/current/streaming/SegmentController.d.ts +5 -0
  66. package/dist/types/current/streaming/SegmentController.d.ts.map +1 -1
  67. package/dist/types/current/streaming/SegmentControllerImpl.d.ts +12 -0
  68. package/dist/types/current/streaming/SegmentControllerImpl.d.ts.map +1 -1
  69. package/dist/types/current/streaming/SegmentControllerImpl.js +67 -10
  70. package/dist/types/current/streaming/StreamingEventMap.d.ts +38 -1
  71. package/dist/types/current/streaming/StreamingEventMap.d.ts.map +1 -1
  72. package/dist/types/current/streaming/StreamingEventMap.js +4 -0
  73. package/dist/types/current/streaming/abr/QualitySelectorImpl.d.ts +28 -0
  74. package/dist/types/current/streaming/abr/QualitySelectorImpl.d.ts.map +1 -1
  75. package/dist/types/current/streaming/abr/QualitySelectorImpl.js +39 -4
  76. package/dist/types/current/streaming/buffering/BufferingController.d.ts +37 -0
  77. package/dist/types/current/streaming/buffering/BufferingController.d.ts.map +1 -1
  78. package/dist/types/current/streaming/buffering/BufferingController.js +79 -3
  79. package/dist/types/current/streaming/buffering/MediaSourceController.d.ts +16 -11
  80. package/dist/types/current/streaming/buffering/MediaSourceController.d.ts.map +1 -1
  81. package/dist/types/current/streaming/buffering/MediaSourceController.js +76 -51
  82. package/dist/types/current/streaming/buffering/SourceBufferController.d.ts.map +1 -1
  83. package/dist/types/current/streaming/buffering/SourceBufferController.js +5 -2
  84. package/dist/types/current/streaming/buffering/codecDenylist.d.ts +23 -0
  85. package/dist/types/current/streaming/buffering/codecDenylist.d.ts.map +1 -0
  86. package/dist/types/current/streaming/buffering/codecDenylist.js +62 -0
  87. package/dist/types/current/streaming/createAllowedContentTypesValue.d.ts +30 -0
  88. package/dist/types/current/streaming/createAllowedContentTypesValue.d.ts.map +1 -0
  89. package/dist/types/current/streaming/createAllowedContentTypesValue.js +43 -0
  90. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts +4 -1
  91. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts.map +1 -1
  92. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.js +32 -1
  93. package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
  94. package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.d.ts.map +1 -0
  95. package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.js +75 -0
  96. package/dist/types/current/streaming/mediaTimelineLanguageFilter.d.ts +24 -6
  97. package/dist/types/current/streaming/mediaTimelineLanguageFilter.d.ts.map +1 -1
  98. package/dist/types/current/streaming/mediaTimelineLanguageFilter.js +61 -16
  99. package/dist/types/current/text/SidecarTextTrackController.d.ts +91 -0
  100. package/dist/types/current/text/SidecarTextTrackController.d.ts.map +1 -0
  101. package/dist/types/current/text/SidecarTextTrackController.js +237 -0
  102. package/dist/types/current/text/SidecarTextTrackLoader.d.ts +60 -0
  103. package/dist/types/current/text/SidecarTextTrackLoader.d.ts.map +1 -0
  104. package/dist/types/current/text/SidecarTextTrackLoader.js +144 -0
  105. package/dist/types/current/text/TextTrack.d.ts +125 -0
  106. package/dist/types/current/text/TextTrack.d.ts.map +1 -0
  107. package/dist/types/current/text/TextTrack.js +9 -0
  108. package/dist/types/current/text/VttCueStyle.d.ts +41 -0
  109. package/dist/types/current/text/VttCueStyle.d.ts.map +1 -0
  110. package/dist/types/current/text/VttCueStyle.js +45 -0
  111. package/dist/types/current/text/discoverDashTextTracks.d.ts +24 -0
  112. package/dist/types/current/text/discoverDashTextTracks.d.ts.map +1 -0
  113. package/dist/types/current/text/discoverDashTextTracks.js +109 -0
  114. package/dist/types/current/text/discoverHlsTextTracks.d.ts +19 -0
  115. package/dist/types/current/text/discoverHlsTextTracks.d.ts.map +1 -0
  116. package/dist/types/current/text/discoverHlsTextTracks.js +49 -0
  117. package/dist/types/current/text/parseWebVtt.d.ts +46 -0
  118. package/dist/types/current/text/parseWebVtt.d.ts.map +1 -0
  119. package/dist/types/current/text/parseWebVtt.js +120 -0
  120. package/dist/types/current/text/pickPreferredTextTrack.d.ts +14 -0
  121. package/dist/types/current/text/pickPreferredTextTrack.d.ts.map +1 -0
  122. package/dist/types/current/text/pickPreferredTextTrack.js +68 -0
  123. package/dist/types/current/track/SeekRange.d.ts +9 -0
  124. package/dist/types/current/track/SeekRange.d.ts.map +1 -0
  125. package/dist/types/current/track/SeekRange.js +5 -0
  126. package/dist/types/current/track/Track.d.ts +50 -7
  127. package/dist/types/current/track/Track.d.ts.map +1 -1
  128. package/dist/types/current/track/TrackBase.d.ts +30 -29
  129. package/dist/types/current/track/TrackBase.d.ts.map +1 -1
  130. package/dist/types/current/track/TrackBase.js +68 -16
  131. package/dist/types/current/track/TrackController.d.ts +100 -36
  132. package/dist/types/current/track/TrackController.d.ts.map +1 -1
  133. package/dist/types/current/track/TrackController.js +368 -115
  134. package/dist/types/current/track/TrackFactory.d.ts +23 -3
  135. package/dist/types/current/track/TrackFactory.d.ts.map +1 -1
  136. package/dist/types/current/track/TrackFactory.js +9 -3
  137. package/dist/types/current/track/dash/DashManifestController.d.ts +1 -40
  138. package/dist/types/current/track/dash/DashManifestController.d.ts.map +1 -1
  139. package/dist/types/current/track/dash/DashManifestController.js +1 -79
  140. package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.d.ts.map +1 -1
  141. package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.js +13 -0
  142. package/dist/types/current/track/dash/DashTrack.d.ts +4 -5
  143. package/dist/types/current/track/dash/DashTrack.d.ts.map +1 -1
  144. package/dist/types/current/track/dash/DashTrack.js +3 -5
  145. package/dist/types/current/track/dash/buildDashMediaTimeline.d.ts.map +1 -1
  146. package/dist/types/current/track/dash/buildDashMediaTimeline.js +3 -2
  147. package/dist/types/current/track/dash/createDashContentTypesValue.js +2 -2
  148. package/dist/types/current/track/dash/createDashFactories.d.ts +39 -12
  149. package/dist/types/current/track/dash/createDashFactories.d.ts.map +1 -1
  150. package/dist/types/current/track/dash/createDashFactories.js +33 -5
  151. package/dist/types/current/track/dash/createSegmentControllerFactory.d.ts +0 -5
  152. package/dist/types/current/track/dash/createSegmentControllerFactory.d.ts.map +1 -1
  153. package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.d.ts.map +1 -1
  154. package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.js +2 -1
  155. package/dist/types/current/track/dash/util/mpd.d.ts +10 -0
  156. package/dist/types/current/track/dash/util/mpd.d.ts.map +1 -1
  157. package/dist/types/current/track/dash/util/mpd.js +16 -0
  158. package/dist/types/current/track/hls/HlsManifestController.d.ts +1 -25
  159. package/dist/types/current/track/hls/HlsManifestController.d.ts.map +1 -1
  160. package/dist/types/current/track/hls/HlsManifestController.js +1 -68
  161. package/dist/types/{ts3.7/track/hls/HlsManifestProvider.d.ts → current/track/hls/HlsManifestData.d.ts} +4 -6
  162. package/dist/types/current/track/hls/HlsManifestData.d.ts.map +1 -0
  163. package/dist/types/current/track/hls/HlsManifestData.js +5 -0
  164. package/dist/types/current/track/hls/HlsMediaQualityMetadataResolver.js +9 -6
  165. package/dist/types/current/track/hls/HlsTrack.d.ts +5 -6
  166. package/dist/types/current/track/hls/HlsTrack.d.ts.map +1 -1
  167. package/dist/types/current/track/hls/HlsTrack.js +3 -5
  168. package/dist/types/current/track/hls/buildHlsMediaTimeline.d.ts +8 -1
  169. package/dist/types/current/track/hls/buildHlsMediaTimeline.d.ts.map +1 -1
  170. package/dist/types/current/track/hls/buildHlsMediaTimeline.js +134 -67
  171. package/dist/types/current/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
  172. package/dist/types/current/track/hls/createDefaultHlsManifestTransformer.d.ts.map +1 -1
  173. package/dist/types/current/track/hls/createHlsContentTypesValue.d.ts +1 -1
  174. package/dist/types/current/track/hls/createHlsContentTypesValue.d.ts.map +1 -1
  175. package/dist/types/current/track/hls/createHlsFactories.d.ts +40 -13
  176. package/dist/types/current/track/hls/createHlsFactories.d.ts.map +1 -1
  177. package/dist/types/current/track/hls/createHlsFactories.js +35 -6
  178. package/dist/types/current/track/hls/createHlsManifestProvider.d.ts +6 -0
  179. package/dist/types/current/track/hls/createHlsManifestProvider.d.ts.map +1 -0
  180. package/dist/types/current/track/hls/createHlsManifestProvider.js +9 -0
  181. package/dist/types/current/track/hls/createUrlHlsManifestProvider.d.ts +4 -4
  182. package/dist/types/current/track/hls/createUrlHlsManifestProvider.d.ts.map +1 -1
  183. package/dist/types/current/track/hls/createUrlHlsManifestProvider.js +22 -3
  184. package/dist/types/current/track/hls/index.d.ts +1 -1
  185. package/dist/types/current/track/hls/index.d.ts.map +1 -1
  186. package/dist/types/current/track/hls/index.js +1 -1
  187. package/dist/types/current/track/inferLoadOptionsFromUri.d.ts +15 -0
  188. package/dist/types/current/track/inferLoadOptionsFromUri.d.ts.map +1 -0
  189. package/dist/types/current/track/inferLoadOptionsFromUri.js +55 -0
  190. package/dist/types/current/track/mse/MseTrack.d.ts +66 -8
  191. package/dist/types/current/track/mse/MseTrack.d.ts.map +1 -1
  192. package/dist/types/current/track/mse/MseTrack.js +216 -52
  193. package/dist/types/current/track/source/SourceObjectTrack.d.ts +2 -2
  194. package/dist/types/current/track/source/SourceObjectTrack.d.ts.map +1 -1
  195. package/dist/types/current/track/source/SourceTrack.d.ts +2 -2
  196. package/dist/types/current/track/source/SourceTrack.d.ts.map +1 -1
  197. package/dist/types/current/track/source/SourceTrack.js +1 -2
  198. package/dist/types/current/track/source/SourceTrackBase.d.ts +7 -5
  199. package/dist/types/current/track/source/SourceTrackBase.d.ts.map +1 -1
  200. package/dist/types/current/track/source/SourceTrackBase.js +26 -9
  201. package/dist/types/current/tsconfig.tsbuildinfo +1 -1
  202. package/dist/types/current/util/media/codecOverrides.d.ts +33 -0
  203. package/dist/types/current/util/media/codecOverrides.d.ts.map +1 -0
  204. package/dist/types/current/util/media/codecOverrides.js +37 -0
  205. package/dist/types/current/util/media/codecSupport.d.ts +6 -0
  206. package/dist/types/current/util/media/codecSupport.d.ts.map +1 -0
  207. package/dist/types/current/util/media/codecSupport.js +17 -0
  208. package/dist/types/current/util/media/mediaSource.d.ts +5 -0
  209. package/dist/types/current/util/media/mediaSource.d.ts.map +1 -1
  210. package/dist/types/current/util/media/mediaSource.js +6 -1
  211. package/dist/types/current/vinyl/ReadonlyPlaybackStreamingState.d.ts +9 -2
  212. package/dist/types/current/vinyl/ReadonlyPlaybackStreamingState.d.ts.map +1 -1
  213. package/dist/types/current/vinyl/VinylDeps.d.ts +5 -0
  214. package/dist/types/current/vinyl/VinylDeps.d.ts.map +1 -1
  215. package/dist/types/current/vinyl/VinylOptions.d.ts +68 -4
  216. package/dist/types/current/vinyl/VinylOptions.d.ts.map +1 -1
  217. package/dist/types/current/vinyl/VinylOptions.js +17 -2
  218. package/dist/types/current/vinyl/VinylPlayer.d.ts +63 -4
  219. package/dist/types/current/vinyl/VinylPlayer.d.ts.map +1 -1
  220. package/dist/types/current/vinyl/VinylPlayer.js +216 -36
  221. package/dist/types/current/vinyl/createVinylFactories.d.ts +55 -12
  222. package/dist/types/current/vinyl/createVinylFactories.d.ts.map +1 -1
  223. package/dist/types/current/vinyl/createVinylFactories.js +4 -0
  224. package/dist/types/ts3.7/ad/AdBreakInfo.d.ts +160 -0
  225. package/dist/types/ts3.7/ad/AdController.d.ts +243 -0
  226. package/dist/types/ts3.7/ad/AdControllerImpl.d.ts +146 -0
  227. package/dist/types/ts3.7/ad/AdError.d.ts +6 -0
  228. package/dist/types/ts3.7/ad/AdsProvider.d.ts +28 -0
  229. package/dist/types/ts3.7/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
  230. package/dist/types/ts3.7/ad/discoverHlsInterstitials.d.ts +22 -0
  231. package/dist/types/ts3.7/drm/DrmController.d.ts +29 -4
  232. package/dist/types/ts3.7/drm/DrmControllerImpl.d.ts +13 -4
  233. package/dist/types/ts3.7/drm/util/unpackPlayReadyChallenge.d.ts +5 -0
  234. package/dist/types/ts3.7/index.d.ts +151 -126
  235. package/dist/types/ts3.7/playback/PlaybackControllerImpl.d.ts +1 -0
  236. package/dist/types/ts3.7/playback/PlaybackSource.d.ts +1 -1
  237. package/dist/types/ts3.7/playback/ReadonlyPlaybackController.d.ts +6 -0
  238. package/dist/types/ts3.7/streaming/ContentStream.d.ts +8 -1
  239. package/dist/types/ts3.7/streaming/LoadMetric.d.ts +58 -0
  240. package/dist/types/ts3.7/streaming/ManifestController.d.ts +16 -1
  241. package/dist/types/ts3.7/streaming/ManifestControllerImpl.d.ts +40 -0
  242. package/dist/types/ts3.7/streaming/MediaQualityMetadata.d.ts +19 -0
  243. package/dist/types/ts3.7/streaming/MediaTimeline.d.ts +6 -0
  244. package/dist/types/ts3.7/streaming/SegmentController.d.ts +5 -0
  245. package/dist/types/ts3.7/streaming/SegmentControllerImpl.d.ts +12 -0
  246. package/dist/types/ts3.7/streaming/StreamingEventMap.d.ts +42 -1
  247. package/dist/types/ts3.7/streaming/abr/QualitySelectorImpl.d.ts +28 -0
  248. package/dist/types/ts3.7/streaming/buffering/BufferingController.d.ts +37 -0
  249. package/dist/types/ts3.7/streaming/buffering/MediaSourceController.d.ts +16 -11
  250. package/dist/types/ts3.7/streaming/buffering/codecDenylist.d.ts +23 -0
  251. package/dist/types/ts3.7/streaming/createAllowedContentTypesValue.d.ts +30 -0
  252. package/dist/types/ts3.7/streaming/createDefaultMediaTimelineTransformer.d.ts +4 -1
  253. package/dist/types/ts3.7/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
  254. package/dist/types/ts3.7/streaming/mediaTimelineLanguageFilter.d.ts +24 -6
  255. package/dist/types/ts3.7/text/SidecarTextTrackController.d.ts +91 -0
  256. package/dist/types/ts3.7/text/SidecarTextTrackLoader.d.ts +60 -0
  257. package/dist/types/ts3.7/text/TextTrack.d.ts +129 -0
  258. package/dist/types/ts3.7/text/VttCueStyle.d.ts +41 -0
  259. package/dist/types/ts3.7/text/discoverDashTextTracks.d.ts +24 -0
  260. package/dist/types/ts3.7/text/discoverHlsTextTracks.d.ts +19 -0
  261. package/dist/types/ts3.7/text/parseWebVtt.d.ts +46 -0
  262. package/dist/types/ts3.7/text/pickPreferredTextTrack.d.ts +14 -0
  263. package/dist/types/ts3.7/track/SeekRange.d.ts +9 -0
  264. package/dist/types/ts3.7/track/Track.d.ts +50 -7
  265. package/dist/types/ts3.7/track/TrackBase.d.ts +21 -29
  266. package/dist/types/ts3.7/track/TrackController.d.ts +102 -37
  267. package/dist/types/ts3.7/track/TrackFactory.d.ts +22 -2
  268. package/dist/types/ts3.7/track/dash/DashManifestController.d.ts +1 -36
  269. package/dist/types/ts3.7/track/dash/DashTrack.d.ts +4 -5
  270. package/dist/types/ts3.7/track/dash/createDashFactories.d.ts +39 -12
  271. package/dist/types/ts3.7/track/dash/createSegmentControllerFactory.d.ts +0 -5
  272. package/dist/types/ts3.7/track/dash/util/mpd.d.ts +10 -0
  273. package/dist/types/ts3.7/track/hls/HlsManifestController.d.ts +1 -22
  274. package/dist/types/{current/track/hls/HlsManifestProvider.d.ts → ts3.7/track/hls/HlsManifestData.d.ts} +4 -6
  275. package/dist/types/ts3.7/track/hls/HlsTrack.d.ts +5 -6
  276. package/dist/types/ts3.7/track/hls/buildHlsMediaTimeline.d.ts +8 -1
  277. package/dist/types/ts3.7/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
  278. package/dist/types/ts3.7/track/hls/createHlsContentTypesValue.d.ts +1 -1
  279. package/dist/types/ts3.7/track/hls/createHlsFactories.d.ts +40 -13
  280. package/dist/types/ts3.7/track/hls/createHlsManifestProvider.d.ts +6 -0
  281. package/dist/types/ts3.7/track/hls/createUrlHlsManifestProvider.d.ts +4 -4
  282. package/dist/types/ts3.7/track/hls/index.d.ts +1 -1
  283. package/dist/types/ts3.7/track/inferLoadOptionsFromUri.d.ts +15 -0
  284. package/dist/types/ts3.7/track/mse/MseTrack.d.ts +65 -7
  285. package/dist/types/ts3.7/track/source/SourceObjectTrack.d.ts +2 -2
  286. package/dist/types/ts3.7/track/source/SourceTrack.d.ts +2 -2
  287. package/dist/types/ts3.7/track/source/SourceTrackBase.d.ts +7 -5
  288. package/dist/types/ts3.7/util/media/codecOverrides.d.ts +33 -0
  289. package/dist/types/ts3.7/util/media/codecSupport.d.ts +6 -0
  290. package/dist/types/ts3.7/util/media/mediaSource.d.ts +5 -0
  291. package/dist/types/ts3.7/vinyl/ReadonlyPlaybackStreamingState.d.ts +9 -2
  292. package/dist/types/ts3.7/vinyl/VinylDeps.d.ts +5 -0
  293. package/dist/types/ts3.7/vinyl/VinylOptions.d.ts +68 -4
  294. package/dist/types/ts3.7/vinyl/VinylPlayer.d.ts +33 -4
  295. package/dist/types/ts3.7/vinyl/createVinylFactories.d.ts +55 -12
  296. package/dist/types/ts4.1/ad/AdBreakInfo.d.ts +160 -0
  297. package/dist/types/ts4.1/ad/AdController.d.ts +243 -0
  298. package/dist/types/ts4.1/ad/AdControllerImpl.d.ts +146 -0
  299. package/dist/types/ts4.1/ad/AdError.d.ts +6 -0
  300. package/dist/types/ts4.1/ad/AdsProvider.d.ts +28 -0
  301. package/dist/types/ts4.1/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
  302. package/dist/types/ts4.1/ad/discoverHlsInterstitials.d.ts +22 -0
  303. package/dist/types/ts4.1/drm/DrmController.d.ts +29 -4
  304. package/dist/types/ts4.1/drm/DrmControllerImpl.d.ts +13 -4
  305. package/dist/types/ts4.1/drm/util/unpackPlayReadyChallenge.d.ts +5 -0
  306. package/dist/types/ts4.1/index.d.ts +151 -126
  307. package/dist/types/ts4.1/playback/PlaybackControllerImpl.d.ts +1 -0
  308. package/dist/types/ts4.1/playback/PlaybackSource.d.ts +1 -1
  309. package/dist/types/ts4.1/playback/ReadonlyPlaybackController.d.ts +6 -0
  310. package/dist/types/ts4.1/streaming/ContentStream.d.ts +8 -1
  311. package/dist/types/ts4.1/streaming/LoadMetric.d.ts +58 -0
  312. package/dist/types/ts4.1/streaming/ManifestController.d.ts +16 -1
  313. package/dist/types/ts4.1/streaming/ManifestControllerImpl.d.ts +40 -0
  314. package/dist/types/ts4.1/streaming/MediaQualityMetadata.d.ts +19 -0
  315. package/dist/types/ts4.1/streaming/MediaTimeline.d.ts +6 -0
  316. package/dist/types/ts4.1/streaming/SegmentController.d.ts +5 -0
  317. package/dist/types/ts4.1/streaming/SegmentControllerImpl.d.ts +12 -0
  318. package/dist/types/ts4.1/streaming/StreamingEventMap.d.ts +42 -1
  319. package/dist/types/ts4.1/streaming/abr/QualitySelectorImpl.d.ts +28 -0
  320. package/dist/types/ts4.1/streaming/buffering/BufferingController.d.ts +37 -0
  321. package/dist/types/ts4.1/streaming/buffering/MediaSourceController.d.ts +16 -11
  322. package/dist/types/ts4.1/streaming/buffering/codecDenylist.d.ts +23 -0
  323. package/dist/types/ts4.1/streaming/createAllowedContentTypesValue.d.ts +30 -0
  324. package/dist/types/ts4.1/streaming/createDefaultMediaTimelineTransformer.d.ts +4 -1
  325. package/dist/types/ts4.1/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
  326. package/dist/types/ts4.1/streaming/mediaTimelineLanguageFilter.d.ts +24 -6
  327. package/dist/types/ts4.1/text/SidecarTextTrackController.d.ts +92 -0
  328. package/dist/types/ts4.1/text/SidecarTextTrackLoader.d.ts +60 -0
  329. package/dist/types/ts4.1/text/TextTrack.d.ts +129 -0
  330. package/dist/types/ts4.1/text/VttCueStyle.d.ts +41 -0
  331. package/dist/types/ts4.1/text/discoverDashTextTracks.d.ts +24 -0
  332. package/dist/types/ts4.1/text/discoverHlsTextTracks.d.ts +19 -0
  333. package/dist/types/ts4.1/text/parseWebVtt.d.ts +46 -0
  334. package/dist/types/ts4.1/text/pickPreferredTextTrack.d.ts +14 -0
  335. package/dist/types/ts4.1/track/SeekRange.d.ts +9 -0
  336. package/dist/types/ts4.1/track/Track.d.ts +50 -7
  337. package/dist/types/ts4.1/track/TrackBase.d.ts +21 -29
  338. package/dist/types/ts4.1/track/TrackController.d.ts +102 -37
  339. package/dist/types/ts4.1/track/TrackFactory.d.ts +22 -2
  340. package/dist/types/ts4.1/track/dash/DashManifestController.d.ts +1 -36
  341. package/dist/types/ts4.1/track/dash/DashTrack.d.ts +4 -5
  342. package/dist/types/ts4.1/track/dash/createDashFactories.d.ts +39 -12
  343. package/dist/types/ts4.1/track/dash/createSegmentControllerFactory.d.ts +0 -5
  344. package/dist/types/ts4.1/track/dash/util/mpd.d.ts +10 -0
  345. package/dist/types/ts4.1/track/hls/HlsManifestController.d.ts +1 -22
  346. package/dist/types/ts4.1/track/hls/{HlsManifestProvider.d.ts → HlsManifestData.d.ts} +4 -6
  347. package/dist/types/ts4.1/track/hls/HlsTrack.d.ts +5 -6
  348. package/dist/types/ts4.1/track/hls/buildHlsMediaTimeline.d.ts +8 -1
  349. package/dist/types/ts4.1/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
  350. package/dist/types/ts4.1/track/hls/createHlsContentTypesValue.d.ts +1 -1
  351. package/dist/types/ts4.1/track/hls/createHlsFactories.d.ts +41 -13
  352. package/dist/types/ts4.1/track/hls/createHlsManifestProvider.d.ts +6 -0
  353. package/dist/types/ts4.1/track/hls/createUrlHlsManifestProvider.d.ts +4 -4
  354. package/dist/types/ts4.1/track/hls/index.d.ts +1 -1
  355. package/dist/types/ts4.1/track/inferLoadOptionsFromUri.d.ts +15 -0
  356. package/dist/types/ts4.1/track/mse/MseTrack.d.ts +65 -7
  357. package/dist/types/ts4.1/track/source/SourceObjectTrack.d.ts +2 -2
  358. package/dist/types/ts4.1/track/source/SourceTrack.d.ts +2 -2
  359. package/dist/types/ts4.1/track/source/SourceTrackBase.d.ts +7 -5
  360. package/dist/types/ts4.1/util/media/codecOverrides.d.ts +33 -0
  361. package/dist/types/ts4.1/util/media/codecSupport.d.ts +6 -0
  362. package/dist/types/ts4.1/util/media/mediaSource.d.ts +5 -0
  363. package/dist/types/ts4.1/vinyl/ReadonlyPlaybackStreamingState.d.ts +9 -2
  364. package/dist/types/ts4.1/vinyl/VinylDeps.d.ts +5 -0
  365. package/dist/types/ts4.1/vinyl/VinylOptions.d.ts +68 -4
  366. package/dist/types/ts4.1/vinyl/VinylPlayer.d.ts +33 -4
  367. package/dist/types/ts4.1/vinyl/createVinylFactories.d.ts +56 -12
  368. package/dist/types/ts4.7/ad/AdBreakInfo.d.ts +160 -0
  369. package/dist/types/ts4.7/ad/AdController.d.ts +243 -0
  370. package/dist/types/ts4.7/ad/AdControllerImpl.d.ts +146 -0
  371. package/dist/types/ts4.7/ad/AdError.d.ts +6 -0
  372. package/dist/types/ts4.7/ad/AdsProvider.d.ts +28 -0
  373. package/dist/types/ts4.7/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
  374. package/dist/types/ts4.7/ad/discoverHlsInterstitials.d.ts +22 -0
  375. package/dist/types/ts4.7/drm/DrmController.d.ts +29 -4
  376. package/dist/types/ts4.7/drm/DrmControllerImpl.d.ts +13 -4
  377. package/dist/types/ts4.7/drm/util/unpackPlayReadyChallenge.d.ts +5 -0
  378. package/dist/types/ts4.7/index.d.ts +151 -126
  379. package/dist/types/ts4.7/playback/PlaybackControllerImpl.d.ts +1 -0
  380. package/dist/types/ts4.7/playback/PlaybackSource.d.ts +1 -1
  381. package/dist/types/ts4.7/playback/ReadonlyPlaybackController.d.ts +6 -0
  382. package/dist/types/ts4.7/streaming/ContentStream.d.ts +8 -1
  383. package/dist/types/ts4.7/streaming/LoadMetric.d.ts +58 -0
  384. package/dist/types/ts4.7/streaming/ManifestController.d.ts +16 -1
  385. package/dist/types/ts4.7/streaming/ManifestControllerImpl.d.ts +43 -0
  386. package/dist/types/ts4.7/streaming/MediaQualityMetadata.d.ts +19 -0
  387. package/dist/types/ts4.7/streaming/MediaTimeline.d.ts +6 -0
  388. package/dist/types/ts4.7/streaming/SegmentController.d.ts +5 -0
  389. package/dist/types/ts4.7/streaming/SegmentControllerImpl.d.ts +12 -0
  390. package/dist/types/ts4.7/streaming/StreamingEventMap.d.ts +42 -1
  391. package/dist/types/ts4.7/streaming/abr/QualitySelectorImpl.d.ts +28 -0
  392. package/dist/types/ts4.7/streaming/buffering/BufferingController.d.ts +37 -0
  393. package/dist/types/ts4.7/streaming/buffering/MediaSourceController.d.ts +16 -11
  394. package/dist/types/ts4.7/streaming/buffering/codecDenylist.d.ts +23 -0
  395. package/dist/types/ts4.7/streaming/createAllowedContentTypesValue.d.ts +30 -0
  396. package/dist/types/ts4.7/streaming/createDefaultMediaTimelineTransformer.d.ts +4 -1
  397. package/dist/types/ts4.7/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
  398. package/dist/types/ts4.7/streaming/mediaTimelineLanguageFilter.d.ts +24 -6
  399. package/dist/types/ts4.7/text/SidecarTextTrackController.d.ts +91 -0
  400. package/dist/types/ts4.7/text/SidecarTextTrackLoader.d.ts +60 -0
  401. package/dist/types/ts4.7/text/TextTrack.d.ts +129 -0
  402. package/dist/types/ts4.7/text/VttCueStyle.d.ts +41 -0
  403. package/dist/types/ts4.7/text/discoverDashTextTracks.d.ts +24 -0
  404. package/dist/types/ts4.7/text/discoverHlsTextTracks.d.ts +19 -0
  405. package/dist/types/ts4.7/text/parseWebVtt.d.ts +46 -0
  406. package/dist/types/ts4.7/text/pickPreferredTextTrack.d.ts +14 -0
  407. package/dist/types/ts4.7/track/SeekRange.d.ts +9 -0
  408. package/dist/types/ts4.7/track/Track.d.ts +50 -7
  409. package/dist/types/ts4.7/track/TrackBase.d.ts +30 -29
  410. package/dist/types/ts4.7/track/TrackController.d.ts +102 -37
  411. package/dist/types/ts4.7/track/TrackFactory.d.ts +23 -3
  412. package/dist/types/ts4.7/track/dash/DashManifestController.d.ts +1 -40
  413. package/dist/types/ts4.7/track/dash/DashTrack.d.ts +4 -5
  414. package/dist/types/ts4.7/track/dash/createDashFactories.d.ts +39 -12
  415. package/dist/types/ts4.7/track/dash/createSegmentControllerFactory.d.ts +0 -5
  416. package/dist/types/ts4.7/track/dash/util/mpd.d.ts +10 -0
  417. package/dist/types/ts4.7/track/hls/HlsManifestController.d.ts +1 -25
  418. package/dist/types/ts4.7/track/hls/{HlsManifestProvider.d.ts → HlsManifestData.d.ts} +4 -6
  419. package/dist/types/ts4.7/track/hls/HlsTrack.d.ts +5 -6
  420. package/dist/types/ts4.7/track/hls/buildHlsMediaTimeline.d.ts +8 -1
  421. package/dist/types/ts4.7/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
  422. package/dist/types/ts4.7/track/hls/createHlsContentTypesValue.d.ts +1 -1
  423. package/dist/types/ts4.7/track/hls/createHlsFactories.d.ts +40 -13
  424. package/dist/types/ts4.7/track/hls/createHlsManifestProvider.d.ts +6 -0
  425. package/dist/types/ts4.7/track/hls/createUrlHlsManifestProvider.d.ts +4 -4
  426. package/dist/types/ts4.7/track/hls/index.d.ts +1 -1
  427. package/dist/types/ts4.7/track/inferLoadOptionsFromUri.d.ts +15 -0
  428. package/dist/types/ts4.7/track/mse/MseTrack.d.ts +66 -8
  429. package/dist/types/ts4.7/track/source/SourceObjectTrack.d.ts +2 -2
  430. package/dist/types/ts4.7/track/source/SourceTrack.d.ts +2 -2
  431. package/dist/types/ts4.7/track/source/SourceTrackBase.d.ts +7 -5
  432. package/dist/types/ts4.7/util/media/codecOverrides.d.ts +33 -0
  433. package/dist/types/ts4.7/util/media/codecSupport.d.ts +6 -0
  434. package/dist/types/ts4.7/util/media/mediaSource.d.ts +5 -0
  435. package/dist/types/ts4.7/vinyl/ReadonlyPlaybackStreamingState.d.ts +9 -2
  436. package/dist/types/ts4.7/vinyl/VinylDeps.d.ts +5 -0
  437. package/dist/types/ts4.7/vinyl/VinylOptions.d.ts +68 -4
  438. package/dist/types/ts4.7/vinyl/VinylPlayer.d.ts +63 -4
  439. package/dist/types/ts4.7/vinyl/createVinylFactories.d.ts +55 -12
  440. package/dist/unit/types/current/ad/AdController.test.d.ts +2 -0
  441. package/dist/unit/types/current/ad/AdController.test.d.ts.map +1 -0
  442. package/dist/unit/types/current/ad/AdController.test.js +10 -0
  443. package/dist/unit/types/current/ad/AdControllerImpl.test.d.ts +2 -0
  444. package/dist/unit/types/current/ad/AdControllerImpl.test.d.ts.map +1 -0
  445. package/dist/unit/types/current/ad/AdControllerImpl.test.js +1456 -0
  446. package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.d.ts +2 -0
  447. package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.d.ts.map +1 -0
  448. package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.js +56 -0
  449. package/dist/unit/types/current/ad/discoverHlsInterstitials.test.d.ts +2 -0
  450. package/dist/unit/types/current/ad/discoverHlsInterstitials.test.d.ts.map +1 -0
  451. package/dist/unit/types/current/ad/discoverHlsInterstitials.test.js +756 -0
  452. package/dist/unit/types/current/drm/DrmControllerImpl.test.js +205 -4
  453. package/dist/unit/types/current/index.d.ts +117 -98
  454. package/dist/unit/types/current/index.d.ts.map +1 -1
  455. package/dist/unit/types/current/index.js +117 -98
  456. package/dist/unit/types/current/playback/PlaybackControllerImpl.test.js +92 -3
  457. package/dist/unit/types/current/streaming/ContentStream.test.js +11 -0
  458. package/dist/unit/types/current/streaming/ManifestControllerImpl.test.d.ts +2 -0
  459. package/dist/unit/types/current/streaming/ManifestControllerImpl.test.d.ts.map +1 -0
  460. package/dist/unit/types/current/streaming/ManifestControllerImpl.test.js +197 -0
  461. package/dist/unit/types/current/streaming/MediaTimeline.test.js +2 -0
  462. package/dist/unit/types/current/streaming/MseTrack.test.js +478 -14
  463. package/dist/unit/types/current/streaming/SegmentControllerImpl.test.js +66 -0
  464. package/dist/unit/types/current/streaming/StreamingEventMap.test.js +2 -2
  465. package/dist/unit/types/current/streaming/abr/QualitySelectorImpl.test.js +110 -0
  466. package/dist/unit/types/current/streaming/buffering/BufferingController.test.js +123 -21
  467. package/dist/unit/types/current/streaming/buffering/MediaSourceController.test.js +37 -10
  468. package/dist/unit/types/current/streaming/buffering/SourceBufferController.test.js +4 -0
  469. package/dist/unit/types/current/streaming/buffering/codecDenylist.test.d.ts +2 -0
  470. package/dist/unit/types/current/streaming/buffering/codecDenylist.test.d.ts.map +1 -0
  471. package/dist/unit/types/current/streaming/buffering/codecDenylist.test.js +56 -0
  472. package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.d.ts +2 -0
  473. package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.d.ts.map +1 -0
  474. package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.js +77 -0
  475. package/dist/unit/types/current/streaming/createDefaultMediaTimelineTransformer.test.js +144 -2
  476. package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.d.ts +2 -0
  477. package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.d.ts.map +1 -0
  478. package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.js +99 -0
  479. package/dist/unit/types/current/streaming/mediaTimelineFilter.test.js +9 -0
  480. package/dist/unit/types/current/streaming/mediaTimelineLanguageFilter.test.js +92 -3
  481. package/dist/unit/types/current/text/SidecarTextTrackController.test.d.ts +2 -0
  482. package/dist/unit/types/current/text/SidecarTextTrackController.test.d.ts.map +1 -0
  483. package/dist/unit/types/current/text/SidecarTextTrackController.test.js +587 -0
  484. package/dist/unit/types/current/text/SidecarTextTrackLoader.test.d.ts +2 -0
  485. package/dist/unit/types/current/text/SidecarTextTrackLoader.test.d.ts.map +1 -0
  486. package/dist/unit/types/current/text/SidecarTextTrackLoader.test.js +336 -0
  487. package/dist/unit/types/current/text/VttCueStyle.test.d.ts +2 -0
  488. package/dist/unit/types/current/text/VttCueStyle.test.d.ts.map +1 -0
  489. package/dist/unit/types/current/text/VttCueStyle.test.js +76 -0
  490. package/dist/unit/types/current/text/discoverDashTextTracks.test.d.ts +2 -0
  491. package/dist/unit/types/current/text/discoverDashTextTracks.test.d.ts.map +1 -0
  492. package/dist/unit/types/current/text/discoverDashTextTracks.test.js +199 -0
  493. package/dist/unit/types/current/text/discoverHlsTextTracks.test.d.ts +2 -0
  494. package/dist/unit/types/current/text/discoverHlsTextTracks.test.d.ts.map +1 -0
  495. package/dist/unit/types/current/text/discoverHlsTextTracks.test.js +177 -0
  496. package/dist/unit/types/current/text/parseWebVtt.test.d.ts +2 -0
  497. package/dist/unit/types/current/text/parseWebVtt.test.d.ts.map +1 -0
  498. package/dist/unit/types/current/text/parseWebVtt.test.js +212 -0
  499. package/dist/unit/types/current/text/pickPreferredTextTrack.test.d.ts +2 -0
  500. package/dist/unit/types/current/text/pickPreferredTextTrack.test.d.ts.map +1 -0
  501. package/dist/unit/types/current/text/pickPreferredTextTrack.test.js +67 -0
  502. package/dist/unit/types/current/track/TrackBase.test.js +50 -5
  503. package/dist/unit/types/current/track/TrackController.test.js +712 -109
  504. package/dist/unit/types/current/track/TrackFactory.test.js +13 -25
  505. package/dist/unit/types/current/track/dash/createDashContentStreamFactories.test.js +1 -0
  506. package/dist/unit/types/current/track/dash/createDashFactories.test.js +63 -2
  507. package/dist/unit/types/current/track/dash/createSegmentControllerFactory.test.js +1 -0
  508. package/dist/unit/types/current/track/dash/util/mpd.test.js +24 -1
  509. package/dist/unit/types/current/track/hls/HlsManifestController.test.js +4 -4
  510. package/dist/unit/types/current/track/hls/HlsMediaQualityMetadataResolver.test.js +4 -2
  511. package/dist/unit/types/current/track/hls/buildHlsMediaTimeline.test.js +260 -14
  512. package/dist/unit/types/current/track/hls/createHlsContentStreamFactories.test.js +1 -0
  513. package/dist/unit/types/current/track/hls/createHlsFactories.test.js +182 -4
  514. package/dist/unit/types/current/track/hls/createUrlHlsManifestProvider.test.js +19 -0
  515. package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.d.ts +2 -0
  516. package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.d.ts.map +1 -0
  517. package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.js +165 -0
  518. package/dist/unit/types/current/track/source/SourceTrack.test.js +5 -0
  519. package/dist/unit/types/current/track/source/SourceTrackBase.test.js +24 -3
  520. package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
  521. package/dist/unit/types/current/util/media/codecOverrides.test.d.ts +2 -0
  522. package/dist/unit/types/current/util/media/codecOverrides.test.d.ts.map +1 -0
  523. package/dist/unit/types/current/util/media/codecOverrides.test.js +42 -0
  524. package/dist/unit/types/current/util/media/codecSupport.test.d.ts +2 -0
  525. package/dist/unit/types/current/util/media/codecSupport.test.d.ts.map +1 -0
  526. package/dist/unit/types/current/util/media/codecSupport.test.js +26 -0
  527. package/dist/unit/types/current/util/media/mediaSource.test.js +6 -0
  528. package/dist/unit/types/current/vinyl/VinylPlayer.test.js +177 -75
  529. package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.d.ts +2 -0
  530. package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.d.ts.map +1 -0
  531. package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.js +142 -0
  532. package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.d.ts +2 -0
  533. package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.d.ts.map +1 -0
  534. package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.js +263 -0
  535. package/dist/vinylTestUtil/index.js +2393 -2232
  536. package/dist/vinylTestUtil/index.js.map +4 -4
  537. package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.d.ts +14 -0
  538. package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.d.ts.map +1 -1
  539. package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.js +49 -30
  540. package/dist/vinylTestUtil/types/current/index.d.ts +53 -51
  541. package/dist/vinylTestUtil/types/current/index.d.ts.map +1 -1
  542. package/dist/vinylTestUtil/types/current/index.js +53 -51
  543. package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.d.ts +15 -0
  544. package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.d.ts.map +1 -0
  545. package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.js +26 -0
  546. package/dist/vinylTestUtil/types/current/mock/dash/MockDashManifestController.d.ts +8 -1
  547. package/dist/vinylTestUtil/types/current/mock/dash/MockDashManifestController.d.ts.map +1 -1
  548. package/dist/vinylTestUtil/types/current/mock/dash/MockDashManifestController.js +15 -0
  549. package/dist/vinylTestUtil/types/current/mock/dash/mockDashManifest.d.ts +12 -12
  550. package/dist/vinylTestUtil/types/current/mock/drm/MockDrmController.d.ts +2 -2
  551. package/dist/vinylTestUtil/types/current/mock/drm/MockDrmController.d.ts.map +1 -1
  552. package/dist/vinylTestUtil/types/current/mock/hls/MockHlsManifestController.d.ts +7 -1
  553. package/dist/vinylTestUtil/types/current/mock/hls/MockHlsManifestController.d.ts.map +1 -1
  554. package/dist/vinylTestUtil/types/current/mock/hls/MockHlsManifestController.js +12 -0
  555. package/dist/vinylTestUtil/types/current/mock/hls/mockHlsManifest.d.ts +3 -3
  556. package/dist/vinylTestUtil/types/current/mock/hls/mockHlsManifest.d.ts.map +1 -1
  557. package/dist/vinylTestUtil/types/current/mock/hls/mockHlsManifest.js +1 -0
  558. package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.d.ts +8 -0
  559. package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.d.ts.map +1 -1
  560. package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.js +17 -1
  561. package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.d.ts +2 -1
  562. package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.d.ts.map +1 -1
  563. package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.js +1 -0
  564. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.d.ts +1 -0
  565. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.d.ts.map +1 -1
  566. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.js +1 -0
  567. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockMediaSourceController.d.ts +2 -1
  568. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockMediaSourceController.d.ts.map +1 -1
  569. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockMediaSourceController.js +2 -1
  570. package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.d.ts +10 -0
  571. package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.d.ts.map +1 -0
  572. package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.js +14 -0
  573. package/dist/vinylTestUtil/types/current/mock/track/MockTrack.d.ts +13 -4
  574. package/dist/vinylTestUtil/types/current/mock/track/MockTrack.d.ts.map +1 -1
  575. package/dist/vinylTestUtil/types/current/mock/track/MockTrack.js +11 -0
  576. package/dist/vinylTestUtil/types/current/mock/track/MockTrackController.d.ts +3 -2
  577. package/dist/vinylTestUtil/types/current/mock/track/MockTrackController.d.ts.map +1 -1
  578. package/dist/vinylTestUtil/types/current/mock/track/MockTrackController.js +2 -1
  579. package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.d.ts +6 -0
  580. package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.d.ts.map +1 -1
  581. package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.js +8 -1
  582. package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.d.ts +4 -0
  583. package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.d.ts.map +1 -1
  584. package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.js +6 -1
  585. package/dist/vinylTestUtil/types/current/player/createVinylSuite.d.ts.map +1 -1
  586. package/dist/vinylTestUtil/types/current/player/createVinylSuite.js +18 -7
  587. package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
  588. package/dist/vinylTestUtil/types/current/util/playback/eventPromises.d.ts.map +1 -1
  589. package/dist/vinylTestUtil/types/current/util/playback/eventPromises.js +1 -1
  590. package/dist/vinylTestUtil/types/current/util/playback/expectTrackCanSeek.d.ts.map +1 -1
  591. package/dist/vinylTestUtil/types/current/util/playback/expectTrackCanSeek.js +5 -2
  592. package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlays.js +3 -3
  593. package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlaysUntil.d.ts.map +1 -1
  594. package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlaysUntil.js +11 -7
  595. package/dist/vinylTestUtil/types/ts3.7/assets/vinylTestAssets.d.ts +14 -0
  596. package/dist/vinylTestUtil/types/ts3.7/index.d.ts +53 -51
  597. package/dist/vinylTestUtil/types/ts3.7/mock/ad/MockAdController.d.ts +15 -0
  598. package/dist/vinylTestUtil/types/ts3.7/mock/dash/MockDashManifestController.d.ts +8 -1
  599. package/dist/vinylTestUtil/types/ts3.7/mock/dash/mockDashManifest.d.ts +12 -12
  600. package/dist/vinylTestUtil/types/ts3.7/mock/drm/MockDrmController.d.ts +2 -2
  601. package/dist/vinylTestUtil/types/ts3.7/mock/hls/MockHlsManifestController.d.ts +7 -1
  602. package/dist/vinylTestUtil/types/ts3.7/mock/hls/mockHlsManifest.d.ts +3 -3
  603. package/dist/vinylTestUtil/types/ts3.7/mock/player/MockVinylPlayerDependencies.d.ts +8 -0
  604. package/dist/vinylTestUtil/types/ts3.7/mock/streaming/MockContentStream.d.ts +2 -1
  605. package/dist/vinylTestUtil/types/ts3.7/mock/streaming/buffering/MockBufferingController.d.ts +1 -0
  606. package/dist/vinylTestUtil/types/ts3.7/mock/streaming/buffering/MockMediaSourceController.d.ts +2 -1
  607. package/dist/vinylTestUtil/types/ts3.7/mock/text/MockTextTrackController.d.ts +10 -0
  608. package/dist/vinylTestUtil/types/ts3.7/mock/track/MockTrack.d.ts +13 -4
  609. package/dist/vinylTestUtil/types/ts3.7/mock/track/MockTrackController.d.ts +3 -2
  610. package/dist/vinylTestUtil/types/ts3.7/mock/track/dash/createMockDashDependencies.d.ts +6 -0
  611. package/dist/vinylTestUtil/types/ts3.7/mock/track/hls/createMockHlsDependencies.d.ts +4 -0
  612. package/dist/vinylTestUtil/types/ts4.1/assets/vinylTestAssets.d.ts +14 -0
  613. package/dist/vinylTestUtil/types/ts4.1/index.d.ts +53 -51
  614. package/dist/vinylTestUtil/types/ts4.1/mock/ad/MockAdController.d.ts +15 -0
  615. package/dist/vinylTestUtil/types/ts4.1/mock/dash/MockDashManifestController.d.ts +8 -1
  616. package/dist/vinylTestUtil/types/ts4.1/mock/dash/mockDashManifest.d.ts +12 -12
  617. package/dist/vinylTestUtil/types/ts4.1/mock/drm/MockDrmController.d.ts +2 -2
  618. package/dist/vinylTestUtil/types/ts4.1/mock/hls/MockHlsManifestController.d.ts +7 -1
  619. package/dist/vinylTestUtil/types/ts4.1/mock/hls/mockHlsManifest.d.ts +3 -3
  620. package/dist/vinylTestUtil/types/ts4.1/mock/player/MockVinylPlayerDependencies.d.ts +8 -0
  621. package/dist/vinylTestUtil/types/ts4.1/mock/streaming/MockContentStream.d.ts +2 -1
  622. package/dist/vinylTestUtil/types/ts4.1/mock/streaming/buffering/MockBufferingController.d.ts +1 -0
  623. package/dist/vinylTestUtil/types/ts4.1/mock/streaming/buffering/MockMediaSourceController.d.ts +2 -1
  624. package/dist/vinylTestUtil/types/ts4.1/mock/text/MockTextTrackController.d.ts +10 -0
  625. package/dist/vinylTestUtil/types/ts4.1/mock/track/MockTrack.d.ts +13 -4
  626. package/dist/vinylTestUtil/types/ts4.1/mock/track/MockTrackController.d.ts +3 -2
  627. package/dist/vinylTestUtil/types/ts4.1/mock/track/dash/createMockDashDependencies.d.ts +6 -0
  628. package/dist/vinylTestUtil/types/ts4.1/mock/track/hls/createMockHlsDependencies.d.ts +4 -0
  629. package/dist/vinylTestUtil/types/ts4.7/assets/vinylTestAssets.d.ts +14 -0
  630. package/dist/vinylTestUtil/types/ts4.7/index.d.ts +53 -51
  631. package/dist/vinylTestUtil/types/ts4.7/mock/ad/MockAdController.d.ts +15 -0
  632. package/dist/vinylTestUtil/types/ts4.7/mock/dash/MockDashManifestController.d.ts +8 -1
  633. package/dist/vinylTestUtil/types/ts4.7/mock/dash/mockDashManifest.d.ts +12 -12
  634. package/dist/vinylTestUtil/types/ts4.7/mock/drm/MockDrmController.d.ts +2 -2
  635. package/dist/vinylTestUtil/types/ts4.7/mock/hls/MockHlsManifestController.d.ts +7 -1
  636. package/dist/vinylTestUtil/types/ts4.7/mock/hls/mockHlsManifest.d.ts +3 -3
  637. package/dist/vinylTestUtil/types/ts4.7/mock/player/MockVinylPlayerDependencies.d.ts +8 -0
  638. package/dist/vinylTestUtil/types/ts4.7/mock/streaming/MockContentStream.d.ts +2 -1
  639. package/dist/vinylTestUtil/types/ts4.7/mock/streaming/buffering/MockBufferingController.d.ts +1 -0
  640. package/dist/vinylTestUtil/types/ts4.7/mock/streaming/buffering/MockMediaSourceController.d.ts +2 -1
  641. package/dist/vinylTestUtil/types/ts4.7/mock/text/MockTextTrackController.d.ts +10 -0
  642. package/dist/vinylTestUtil/types/ts4.7/mock/track/MockTrack.d.ts +13 -4
  643. package/dist/vinylTestUtil/types/ts4.7/mock/track/MockTrackController.d.ts +3 -2
  644. package/dist/vinylTestUtil/types/ts4.7/mock/track/dash/createMockDashDependencies.d.ts +6 -0
  645. package/dist/vinylTestUtil/types/ts4.7/mock/track/hls/createMockHlsDependencies.d.ts +4 -0
  646. package/docs/ADS.md +264 -0
  647. package/docs/USAGE.md +142 -9
  648. package/package.json +18 -18
  649. package/dist/types/current/track/hls/HlsManifestProvider.d.ts.map +0 -1
  650. package/dist/unit/types/current/track/dash/DashManifestController.test.d.ts +0 -2
  651. package/dist/unit/types/current/track/dash/DashManifestController.test.d.ts.map +0 -1
  652. package/dist/unit/types/current/track/dash/DashManifestController.test.js +0 -186
  653. /package/dist/types/current/{track/hls/HlsManifestProvider.js → ad/AdBreakInfo.js} +0 -0
@@ -0,0 +1,705 @@
1
+ /*
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { createDisposer, createLogPrefix, EventHostImpl, getElementOrDefault, lerp, logDebug, logError, logVerbose, memoize, noop, resolveValueProvider, roundToNearest, sleep, sortedInsertionIndex, } from '@amazon/vinyl-util';
6
+ import { AdError } from './AdError';
7
+ /**
8
+ * The % playhead start tolerance for playback progress when emitting ad progress events.
9
+ */
10
+ export const AD_START_TOLERANCE = 0.05;
11
+ export const defaultAdControllerImplOptions = {
12
+ adLoadTimeout: 15,
13
+ preloadAheadTime: 10,
14
+ };
15
+ /**
16
+ * Provider-agnostic {@link AdController}. Holds the discovered ad breaks and
17
+ * derives enter/exit region events from playhead time updates.
18
+ *
19
+ * This controller is the *model* for ad playback: it knows which breaks exist,
20
+ * which break contains the playhead, and which ad within that break is current.
21
+ * It does NOT create, preload, or activate any tracks — that is the
22
+ * responsibility of the {@link TrackController}.
23
+ *
24
+ * A break is considered active while `startTime <= currentTime < endTime`,
25
+ * where `endTime` is `startTime + duration`. Breaks whose duration is unknown
26
+ * (null) or breaks which restrict `jump` will become active at
27
+ * `currentTime > startTime`
28
+ *
29
+ * This class contains no HLS- or DASH-specific logic; discovery code maps its
30
+ * protocol's signals to {@link AdBreakInfo} exposed by an
31
+ * {@link AdsProvider.getAds}, which this controller reads once the provider is
32
+ * set via {@link AdController.setAdsProvider} (and re-reads on `adsChange`).
33
+ */
34
+ export class AdControllerImpl extends EventHostImpl {
35
+ deps;
36
+ get [Symbol.toStringTag]() {
37
+ return 'AdControllerImpl';
38
+ }
39
+ options;
40
+ _trackAds = null;
41
+ adsProviderSub = null;
42
+ adsProvider = null;
43
+ // The start times of the midroll ads, used for fast midroll break find
44
+ midrollAds = [];
45
+ // Midroll and postroll breaks, sorted by start time — the breaks eligible
46
+ // for the ahead-of-time `adPreload` signal (prerolls are preloaded up front).
47
+ preloadableBreaks = [];
48
+ // Breaks for which `adPreload` has already been emitted on the current
49
+ // approach; cleared on content change and when a break is re-armed by a
50
+ // seek back, so a re-approached break preloads again.
51
+ preloadedBreakIds = new Set();
52
+ lastPlaybackTime = 0;
53
+ pendingAdBreaks = [];
54
+ // Breaks permanently suppressed for this presentation (play-once breaks and
55
+ // prerolls). Cleared only on a content change (clearCompletedAds).
56
+ completeAdBreakIds = new Set();
57
+ // Replayable (non-play-once) midroll breaks that have played and are "spent"
58
+ // until the playhead moves back before their start, at which point they are
59
+ // re-armed and replay on the next forward crossing.
60
+ spentBreakIds = new Set();
61
+ disposer = createDisposer();
62
+ adBreakState = null;
63
+ loadingNext = false;
64
+ constructor(deps, options) {
65
+ super();
66
+ this.deps = deps;
67
+ this.options = { ...defaultAdControllerImplOptions, ...options };
68
+ const { add } = this.disposer;
69
+ const { playbackController } = this.deps;
70
+ add(playbackController.on('playing', () => {
71
+ if (this.adState) {
72
+ const adState = this.adState;
73
+ if (!adState.started) {
74
+ // The ad has started playing, initialize the state.
75
+ adState.started = true;
76
+ adState.timeStart = playbackController.currentTime;
77
+ adState.playbackRateAvg =
78
+ playbackController.playbackRate;
79
+ adState.dataPoints = 1;
80
+ }
81
+ this.dispatch('adPlaying', {
82
+ adBreak: adState.parentBreak.adBreak,
83
+ ad: adState.ad,
84
+ index: adState.index,
85
+ totalAds: adState.totalAds,
86
+ });
87
+ }
88
+ }));
89
+ add(playbackController.on('seeked', (event) => {
90
+ if (this.adState) {
91
+ this.adState.timeStart = playbackController.currentTime;
92
+ return;
93
+ }
94
+ // A genuine seek back before a break re-arms it: a spent
95
+ // (replayable) break fires again on the next forward crossing,
96
+ // and its preload signal re-arms so it warms again on approach.
97
+ if (event.reason !== 'seeked')
98
+ return;
99
+ const time = playbackController.currentTime;
100
+ for (const adBreak of this.preloadableBreaks) {
101
+ if (time < adBreak.startTime) {
102
+ const key = adBreakKey(adBreak);
103
+ this.spentBreakIds.delete(key);
104
+ this.preloadedBreakIds.delete(key);
105
+ }
106
+ }
107
+ }));
108
+ add(playbackController.on('timeUpdate', this.onTimeUpdate));
109
+ add(playbackController.on('ended', () => {
110
+ if (this.adState)
111
+ this.endAd(this.adState);
112
+ }));
113
+ }
114
+ clearCompletedAds() {
115
+ this.completeAdBreakIds.clear();
116
+ this.spentBreakIds.clear();
117
+ this.preloadedBreakIds.clear();
118
+ }
119
+ isBreakSuppressed(adBreak) {
120
+ const key = adBreakKey(adBreak);
121
+ return this.completeAdBreakIds.has(key) || this.spentBreakIds.has(key);
122
+ }
123
+ /** The media-time the current ad has actually played, or 0 if not playing. */
124
+ adElapsed() {
125
+ const adState = this.adState;
126
+ return adState?.started
127
+ ? Math.max(0, this.deps.playbackController.currentTime - adState.timeStart)
128
+ : 0;
129
+ }
130
+ /**
131
+ * Computes whether the current ad may be skipped and, when not yet, how many
132
+ * seconds remain until it can. A `skip` restriction blocks it outright;
133
+ * otherwise a resolved skip window gates it by the elapsed break playout, and
134
+ * with no window the ad is freely skippable.
135
+ */
136
+ async resolveSkipState(adBreakState, breakPlayed) {
137
+ const { adBreak } = adBreakState;
138
+ if (adBreak.restrict.skip === true) {
139
+ return { canSkip: false, skipIn: null };
140
+ }
141
+ const skipControl = await resolveValueProvider(adBreak.skipControl).catch((_v) => null);
142
+ if (!skipControl) {
143
+ return { canSkip: true, skipIn: null };
144
+ }
145
+ if (breakPlayed < skipControl.offset) {
146
+ return { canSkip: false, skipIn: skipControl.offset - breakPlayed };
147
+ }
148
+ const end = skipControl.duration != null
149
+ ? skipControl.offset + skipControl.duration
150
+ : Infinity;
151
+ return { canSkip: breakPlayed < end, skipIn: null };
152
+ }
153
+ get currentTrackAds() {
154
+ return this._trackAds;
155
+ }
156
+ setTrackAds(value) {
157
+ const previous = this._trackAds;
158
+ const current = value ?? null;
159
+ this._trackAds = current;
160
+ this.midrollAds = (value?.adBreaks ?? []).filter((adBreak) => adBreak.placement === 'midroll');
161
+ // Midroll + postroll breaks are eligible for the ahead-of-time preload
162
+ // signal. adBreaks are already sorted by start time, so this stays sorted.
163
+ this.preloadableBreaks = (value?.adBreaks ?? []).filter((adBreak) => adBreak.placement !== 'preroll');
164
+ logDebug(this, 'setTrackAds', value);
165
+ this.dispatch('currentTrackAdsChange', {
166
+ previous,
167
+ current,
168
+ });
169
+ }
170
+ /**
171
+ * Returns a function that returns true if the ads provider has changed
172
+ * since the callback was created.
173
+ */
174
+ providerInterrupted() {
175
+ const provider = this.adsProvider;
176
+ return () => provider !== this.adsProvider;
177
+ }
178
+ setAdsProvider(provider) {
179
+ if (this.adsProvider === provider)
180
+ return;
181
+ this.pendingAdBreaks = [];
182
+ this.completeAdBreak(this.adBreakState, 'contentChange');
183
+ this.adsProviderSub?.();
184
+ const { add, dispose } = createDisposer();
185
+ this.adsProviderSub = dispose;
186
+ this.adsProvider = provider;
187
+ const interrupted = this.providerInterrupted();
188
+ this.clearCompletedAds();
189
+ this.setTrackAds(null);
190
+ if (!provider)
191
+ return;
192
+ const refreshAds = () => {
193
+ provider
194
+ .getAds()
195
+ .then((ads) => {
196
+ if (interrupted())
197
+ return;
198
+ this.setTrackAds(ads);
199
+ })
200
+ .catch((error) => {
201
+ // Ad discovery failed for the provider. There is no active
202
+ // break to surface an adError against, so log it rather
203
+ // than routing through failAd (which would no-op with no
204
+ // active ad and swallow the failure silently).
205
+ if (interrupted())
206
+ return;
207
+ logError(this, 'ad discovery failed', error);
208
+ });
209
+ };
210
+ add(provider.on('adsChange', refreshAds));
211
+ refreshAds();
212
+ }
213
+ async enterPreroll() {
214
+ return this.enterRoll('preroll');
215
+ }
216
+ async enterPostroll() {
217
+ return this.enterRoll('postroll');
218
+ }
219
+ async enterRoll(placement) {
220
+ if (!this.adsProvider)
221
+ return null;
222
+ logVerbose(this, `checking for ${placement} ads`);
223
+ this.lastPlaybackTime = this.deps.playbackController.currentTime;
224
+ const interrupted = this.providerInterrupted();
225
+ return this.adsProvider
226
+ .getAds()
227
+ .then((ads) => {
228
+ if (interrupted()) {
229
+ logVerbose(this, `interrupted, no pending breaks set for ${placement}`);
230
+ return null;
231
+ }
232
+ this.setPendingBreaks(ads.adBreaks.filter((adBreak) => adBreak.placement === placement));
233
+ return this.currentAdBreak;
234
+ })
235
+ .catch(() => {
236
+ return null;
237
+ });
238
+ }
239
+ // True when we have an ads provider set. Callers gate off this AND their
240
+ // own "no ad break in progress" checks (currentAdBreak / pendingAdBreaks),
241
+ // so this is only about "a provider has committed", not track activation.
242
+ get hasProvider() {
243
+ return this.adsProvider != null;
244
+ }
245
+ skipAdBreak() {
246
+ const adBreakState = this.adBreakState;
247
+ if (!adBreakState) {
248
+ logDebug(this, 'skipAdBreak, no-op');
249
+ return;
250
+ }
251
+ logDebug(this, 'skipAdBreak, active break id:', adBreakState.adBreak.id);
252
+ this.completeAdBreak(adBreakState, 'skipped');
253
+ this.nextAdOrBreak();
254
+ }
255
+ /**
256
+ * Marks an ad break as completed (or 'spent' and replayable), emits an `adBreakCompleted` event.
257
+ */
258
+ completeAdBreak(adBreakState, reason) {
259
+ if (!adBreakState || adBreakState.completedReason) {
260
+ logDebug(this, 'completeAdBreak, no-op');
261
+ return;
262
+ }
263
+ const { adBreak } = adBreakState;
264
+ adBreakState.completedReason = reason;
265
+ const key = adBreakKey(adBreak);
266
+ // A non-once midroll ad may be replayed if the region is re-entered
267
+ // due to a back-seek.
268
+ if (adBreak.once ||
269
+ adBreak.placement === 'preroll' ||
270
+ adBreak.placement === 'postroll') {
271
+ this.completeAdBreakIds.add(key);
272
+ }
273
+ else {
274
+ // Non-once midroll
275
+ this.spentBreakIds.add(key);
276
+ }
277
+ // Interstitials play on a separate track, so the content timeline never
278
+ // advances during the break: content resumes at the cue point plus any
279
+ // explicit offset (default 0). max() keeps a forward seek from being
280
+ // rewound.
281
+ const resumePosition = Math.max(this.lastPlaybackTime, adBreak.startTime + (adBreak.resumeOffset ?? 0));
282
+ this.completeAd(adBreakState.adState, reason); // does nothing if no current ad
283
+ logDebug(this, `adBreakCompleted, active break id:${adBreak.id} reason:${reason} resumePosition:${resumePosition}`);
284
+ if (adBreakState === this.adBreakState) {
285
+ this.adBreakState = null;
286
+ }
287
+ this.dispatch('adBreakCompleted', { adBreak, resumePosition, reason });
288
+ }
289
+ get currentAdBreak() {
290
+ return this.adBreakState?.adBreak ?? null;
291
+ }
292
+ /**
293
+ * Marks an ad as completed and emits an `adCompleted` event.
294
+ */
295
+ completeAd(adState, reason) {
296
+ if (!adState || adState.completedReason)
297
+ return; // no-op
298
+ logDebug(this, `adCompleted id=${adState.ad.id} reason=${reason} index=${adState.index} totalAds=${adState.totalAds}`);
299
+ // Fold this ad's actual playout into the break total before clearing it.
300
+ adState.parentBreak.playoutElapsed += this.adElapsed();
301
+ adState.completedReason = reason;
302
+ this.dispatch('adCompleted', {
303
+ adBreak: adState.parentBreak.adBreak,
304
+ ad: adState.ad,
305
+ reason,
306
+ index: adState.index,
307
+ totalAds: adState.totalAds,
308
+ });
309
+ if (adState.index >= adState.totalAds - 1) {
310
+ this.completeAdBreak(adState.parentBreak, reason);
311
+ }
312
+ }
313
+ /**
314
+ * Polls the next pending ad and activates it.
315
+ * When there are no remaining ads, activates the next ad break (if any).
316
+ */
317
+ nextAdOrBreak() {
318
+ if (this.disposed || this.loadingNext)
319
+ return;
320
+ const adBreakState = this.adBreakState;
321
+ if (!adBreakState && !this.pendingAdBreaks.length) {
322
+ logDebug(this, 'nextAdOrBreak no-op');
323
+ return;
324
+ }
325
+ logDebug(this, 'nextAdOrBreak');
326
+ this.loadingNext = true;
327
+ const nextAd = async (adBreakState) => {
328
+ logVerbose(this, 'nextAd');
329
+ try {
330
+ const ad = await adBreakState.nextAd();
331
+ // The break may have been completed or swapped out (a content
332
+ // change, skip, or playout-limit) while its ads were resolving;
333
+ // don't start an ad for an abandoned break.
334
+ if (this.disposed || adBreakState.completedReason)
335
+ return;
336
+ if (ad) {
337
+ this.startAd(ad);
338
+ }
339
+ else {
340
+ // No remaining ads in this break
341
+ logVerbose(this, 'no remaining ads');
342
+ this.completeAdBreak(adBreakState, 'ended');
343
+ await nextBreak();
344
+ }
345
+ }
346
+ catch (error) {
347
+ if (this.disposed)
348
+ return;
349
+ // The ad list failed to resolve: surface the error, complete
350
+ // this break so content can resume, then advance to any pending
351
+ // break. Re-calling nextAdOrBreak() here would no-op (loadingNext
352
+ // is still held by this in-flight call) AND would leave the break
353
+ // stuck non-null, permanently blocking midroll ingress.
354
+ this.dispatch('adError', {
355
+ adBreak: adBreakState.adBreak,
356
+ currentAd: null,
357
+ error,
358
+ });
359
+ this.completeAdBreak(adBreakState, 'error');
360
+ await nextBreak();
361
+ }
362
+ };
363
+ const nextBreak = async () => {
364
+ logVerbose(this, 'nextBreak');
365
+ if (this.pendingAdBreaks.length) {
366
+ // There are pending breaks, take the next one and start its first ad.
367
+ const adBreak = this.pendingAdBreaks.shift();
368
+ this.adBreakState = createAdBreakState(adBreak);
369
+ logDebug(this, 'adBreakEntered', adBreak);
370
+ this.dispatch('adBreakEntered', { adBreak });
371
+ await nextAd(this.adBreakState);
372
+ }
373
+ else {
374
+ logDebug(this, 'no remaining breaks');
375
+ }
376
+ };
377
+ (async () => {
378
+ if (adBreakState) {
379
+ await nextAd(adBreakState);
380
+ }
381
+ else {
382
+ await nextBreak().catch(noop);
383
+ }
384
+ })()
385
+ .catch(noop)
386
+ .finally(() => {
387
+ this.loadingNext = false;
388
+ });
389
+ }
390
+ get currentAd() {
391
+ return this.adState?.ad ?? null;
392
+ }
393
+ get adState() {
394
+ return this.adBreakState?.adState ?? null;
395
+ }
396
+ startAd(adState) {
397
+ const { ad, index, totalAds } = adState;
398
+ logDebug(this, 'adEntered', adState.ad);
399
+ this.dispatch('adEntered', {
400
+ adBreak: adState.parentBreak.adBreak,
401
+ ad,
402
+ index,
403
+ totalAds,
404
+ });
405
+ this.emitTimeUpdate(adState).catch(noop);
406
+ sleep(this.options.adLoadTimeout)
407
+ .then(() => {
408
+ if (this.disposed)
409
+ return;
410
+ if (this.adState === adState && !adState.started) {
411
+ this.failAd(new AdError(`Ad failed to start after ${this.options.adLoadTimeout} seconds`));
412
+ }
413
+ })
414
+ .catch(noop);
415
+ }
416
+ /**
417
+ * Checks if the playhead has entered a time to activate a midroll ad.
418
+ */
419
+ onTimeUpdate = () => {
420
+ const adBreak = this.currentAdBreak;
421
+ const adState = this.adState;
422
+ if (adBreak) {
423
+ // Ad progress events
424
+ if (adState && adState.completedReason == null) {
425
+ this.emitAdProgressEvents(adState).catch(noop);
426
+ this.enforcePlayoutLimits(adState);
427
+ }
428
+ return;
429
+ }
430
+ const pC = this.deps.playbackController;
431
+ if (this.hasProvider && pC.playing && !this.pendingAdBreaks.length) {
432
+ // Not an ad playing, main content.
433
+ this.lastPlaybackTime = pC.currentTime;
434
+ this.checkAdPreload(pC.currentTime);
435
+ this.checkMidrollIngress();
436
+ }
437
+ };
438
+ /**
439
+ * Emits `adPreload` once for each midroll/postroll break the playhead is
440
+ * approaching — within (the break's {@link AdBreakInfo.resolutionTimeOffset}
441
+ * or, when absent, the `preloadAheadTime` option) seconds before its start —
442
+ * so a consumer can resolve and warm the break's assets before entry.
443
+ * Suppressed (played-once/spent) breaks are skipped.
444
+ */
445
+ checkAdPreload(time) {
446
+ for (const adBreak of this.preloadableBreaks) {
447
+ const key = adBreakKey(adBreak);
448
+ if (this.preloadedBreakIds.has(key))
449
+ continue;
450
+ if (this.isBreakSuppressed(adBreak))
451
+ continue;
452
+ const offset = adBreak.resolutionTimeOffset ?? this.options.preloadAheadTime;
453
+ // Only ahead of the break; at/after its start, ingress takes over.
454
+ if (time >= adBreak.startTime - offset &&
455
+ time < adBreak.startTime) {
456
+ this.preloadedBreakIds.add(key);
457
+ logDebug(this, 'adPreload', adBreak.id);
458
+ this.dispatch('adPreload', { adBreak });
459
+ }
460
+ }
461
+ }
462
+ /**
463
+ * Main content with ad breaks is playing, check if we have entered a midroll region.
464
+ */
465
+ checkMidrollIngress() {
466
+ const time = this.deps.playbackController.currentTime;
467
+ const midrolls = this.midrollAds;
468
+ // Upper bound: the first midroll whose startTime is strictly after the
469
+ // playhead. Every candidate break is at an index before it.
470
+ const upper = sortedInsertionIndex(midrolls, time, (time, ad) => time - ad.startTime);
471
+ const newPending = [];
472
+ // Scan every break at or before the playhead, ascending (timeline
473
+ // order), so tied start times and an earlier still-open break that
474
+ // contains the playhead (e.g. after a seek into or over it) are all
475
+ // considered — not just the single nearest preceding break.
476
+ for (let i = 0; i < upper; i++) {
477
+ const midroll = midrolls[i];
478
+ if (this.isBreakSuppressed(midroll))
479
+ continue;
480
+ const duration = midroll.duration == null || midroll.restrict.jump
481
+ ? Number.MAX_VALUE
482
+ : midroll.duration;
483
+ if (time < midroll.startTime + duration) {
484
+ newPending.push(midroll);
485
+ }
486
+ }
487
+ if (newPending.length) {
488
+ logVerbose(this, 'setting midrolls');
489
+ this.setPendingBreaks(newPending);
490
+ }
491
+ }
492
+ /**
493
+ * Emits events for `adTimeUpdate`, `adFirstQuartile`, `adMidpoint`, and
494
+ * `adThirdQuartile`.
495
+ * (Does not emit `adCompleted`)
496
+ */
497
+ async emitAdProgressEvents(adState) {
498
+ const pC = this.deps.playbackController;
499
+ await this.emitTimeUpdate(adState);
500
+ if (isFinite(pC.duration) && pC.duration > 0) {
501
+ // Take a running average of the playback rate. Applications can
502
+ // use this to detect tampering when emitting metrics.
503
+ adState.dataPoints++;
504
+ adState.playbackRateAvg = lerp(adState.playbackRateAvg, pC.playbackRate, 1 / adState.dataPoints);
505
+ // If the ad's duration is set, take the shorter of the ad duration
506
+ const currProgress = pC.currentTimePercent;
507
+ const progressStart = adState.timeStart / pC.duration;
508
+ if (!adState.quartile.first &&
509
+ currProgress > 0.25 &&
510
+ progressStart < AD_START_TOLERANCE) {
511
+ this.dispatch('adFirstQuartile', createAdProgressEvent(adState));
512
+ }
513
+ if (!adState.quartile.midpoint &&
514
+ currProgress > 0.5 &&
515
+ progressStart < 0.25 + AD_START_TOLERANCE) {
516
+ this.dispatch('adMidpoint', createAdProgressEvent(adState));
517
+ }
518
+ if (!adState.quartile.third &&
519
+ currProgress > 0.75 &&
520
+ progressStart < 0.5 + AD_START_TOLERANCE) {
521
+ this.dispatch('adThirdQuartile', createAdProgressEvent(adState));
522
+ }
523
+ // adEnded is not on progress but on a call to `endAd()`.
524
+ }
525
+ }
526
+ async emitTimeUpdate(adState) {
527
+ const pC = this.deps.playbackController;
528
+ const { ad, parentBreak } = adState;
529
+ // Surface elapsed/remaining time for the ad and the break as a
530
+ // whole so applications don't derive it from the media duration.
531
+ const adPlayed = this.adElapsed();
532
+ const adBreak = parentBreak.adBreak;
533
+ const naturalAdTotal = ad.duration ?? (isFinite(pC.duration) ? pC.duration : null);
534
+ // The break's playout limit is a budget shared across all its ads, so
535
+ // the current ad can run no longer than the budget left after the ads
536
+ // that already played. Cap its reported total by that remainder —
537
+ // matching enforcePlayoutLimits, which cuts the ad (and break) off at
538
+ // exactly this point. Without the cap adTimeRemaining over-reports (the
539
+ // full asset duration) while the ad is actually stopped at the limit.
540
+ const limit = adBreak.playoutLimit;
541
+ const adTotal = limit != null
542
+ ? Math.min(naturalAdTotal ?? Infinity, Math.max(0, limit - parentBreak.playoutElapsed))
543
+ : naturalAdTotal;
544
+ const breakPlayed = parentBreak.playoutElapsed + adPlayed;
545
+ const breakTotal = limit ?? adBreak.duration;
546
+ const { canSkip, skipIn } = await this.resolveSkipState(parentBreak, breakPlayed);
547
+ this.dispatch('adTimeUpdate', {
548
+ adBreak: adState.parentBreak.adBreak,
549
+ ad,
550
+ index: adState.index,
551
+ totalAds: adState.totalAds,
552
+ adCurrentTime: adPlayed,
553
+ adTimeRemaining: adTotal != null ? Math.max(0, adTotal - adPlayed) : null,
554
+ breakCurrentTime: breakPlayed,
555
+ breakTimeRemaining: breakTotal != null
556
+ ? Math.max(0, breakTotal - breakPlayed)
557
+ : null,
558
+ canSkip,
559
+ skipIn,
560
+ });
561
+ }
562
+ /**
563
+ * Ads breaks can have a playout limit that may cut off ad playback.
564
+ * End the ad if that limit is reached.
565
+ */
566
+ enforcePlayoutLimits(adState) {
567
+ const pC = this.deps.playbackController;
568
+ const { ad, parentBreak } = adState;
569
+ // Enforce playout limits independent of a finite content duration so
570
+ // live ads with a declared playout limit are still bounded.
571
+ if (adState.started) {
572
+ const elapsed = Math.max(0, pC.currentTime - adState.timeStart);
573
+ const adBreak = parentBreak.adBreak;
574
+ const limit = adBreak.playoutLimit;
575
+ if (limit != null &&
576
+ parentBreak.playoutElapsed + elapsed >= limit) {
577
+ // The break's total playout limit is reached: end the whole
578
+ // break, dropping any ads that have not started.
579
+ parentBreak.clear();
580
+ this.endAd(adState);
581
+ }
582
+ else if (ad.duration != null && elapsed >= ad.duration) {
583
+ // This ad reached its declared duration: advance to the next.
584
+ this.endAd(adState);
585
+ }
586
+ }
587
+ }
588
+ setPendingBreaks(newPending) {
589
+ this.pendingAdBreaks = newPending.filter((adBreak) => !this.isBreakSuppressed(adBreak));
590
+ const n = this.pendingAdBreaks.length;
591
+ logDebug(this, `setPendingBreaks len=${n}, suppressed=${newPending.length - n}`);
592
+ this.nextAdOrBreak();
593
+ }
594
+ skipAd() {
595
+ this.completeAd(this.adState, 'skipped');
596
+ this.nextAdOrBreak();
597
+ }
598
+ failAd(error) {
599
+ const adState = this.adState;
600
+ if (adState) {
601
+ // Capture the failing ad before completeAd() clears it, so the
602
+ // adError event can distinguish an individual-ad failure from an
603
+ // ad-list load failure (currentAd == null).
604
+ this.completeAd(adState, 'error');
605
+ this.dispatch('adError', {
606
+ error,
607
+ adBreak: adState.parentBreak.adBreak,
608
+ currentAd: adState.ad,
609
+ });
610
+ }
611
+ this.nextAdOrBreak();
612
+ }
613
+ endAd(adState) {
614
+ this.completeAd(adState, 'ended');
615
+ this.dispatch('adEnded', createAdProgressEvent(adState));
616
+ this.nextAdOrBreak();
617
+ }
618
+ get disposed() {
619
+ return this.disposer.disposed;
620
+ }
621
+ /**
622
+ * Disposes this controller, removes all listeners.
623
+ */
624
+ dispose() {
625
+ super.dispose();
626
+ this.disposer.dispose();
627
+ // Detach any active break so currentAd/currentAdBreak read null after
628
+ // dispose, even if a break's ad list resolves late (startAd is already
629
+ // guarded by the disposed check, so no adEntered/adPlaying fires).
630
+ this.adBreakState = null;
631
+ }
632
+ }
633
+ function createAdProgressEvent(adState) {
634
+ return {
635
+ adBreak: adState.parentBreak.adBreak,
636
+ ad: adState.ad,
637
+ // Snapped to nearest 0.1 to avoid ~1.0
638
+ playbackRateAvg: roundToNearest(adState.playbackRateAvg, 0.1),
639
+ index: adState.index,
640
+ totalAds: adState.totalAds,
641
+ };
642
+ }
643
+ function createAdBreakState(adBreak) {
644
+ let _currentIndex = -1;
645
+ let _adState = null;
646
+ const logTarget = {
647
+ logPrefix: createLogPrefix('AdBreakState'),
648
+ };
649
+ const adBreakState = {
650
+ adBreak,
651
+ playoutElapsed: 0,
652
+ completedReason: null,
653
+ get adState() {
654
+ return _adState;
655
+ },
656
+ async nextAd() {
657
+ const ads = await getAds();
658
+ if (_currentIndex >= ads.length)
659
+ return null;
660
+ _adState = getElementOrDefault(ads, ++_currentIndex, null);
661
+ return _adState;
662
+ },
663
+ clear() {
664
+ _adState = null;
665
+ _currentIndex = Number.MAX_VALUE;
666
+ },
667
+ };
668
+ const getAds = memoize(() => {
669
+ logVerbose(logTarget, `requesting ads for break ${adBreak.placement} ${adBreak.id}`);
670
+ return resolveValueProvider(adBreak.ads).then((ads) => {
671
+ logVerbose(logTarget, 'ads resolved', ads);
672
+ return ads.map((adInfo, index) => {
673
+ return createAdState({
674
+ adBreakState: adBreakState,
675
+ ad: adInfo,
676
+ totalAds: ads.length,
677
+ index: index,
678
+ });
679
+ });
680
+ });
681
+ });
682
+ return adBreakState;
683
+ }
684
+ function createAdState({ adBreakState, ad, totalAds, index, }) {
685
+ return {
686
+ parentBreak: adBreakState,
687
+ ad,
688
+ index,
689
+ totalAds,
690
+ started: false,
691
+ timeStart: 0,
692
+ playbackRateAvg: 0,
693
+ dataPoints: 0,
694
+ quartile: {
695
+ first: false,
696
+ midpoint: false,
697
+ third: false,
698
+ },
699
+ completedReason: null,
700
+ };
701
+ }
702
+ /** Combines the placement and id of the break for unique reference by placement */
703
+ function adBreakKey(adBreak) {
704
+ return `${adBreak.placement}_${adBreak.id}`;
705
+ }