@amazon/vinyl 1.1.1 → 1.2.0

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 (446) hide show
  1. package/dist/index.cjs +276 -200
  2. package/dist/index.cjs.map +4 -4
  3. package/dist/index.js +280 -203
  4. package/dist/index.js.map +4 -4
  5. package/dist/test/benchmark.es5.js +169 -232
  6. package/dist/test/benchmark.js +1475 -1933
  7. package/dist/test/benchmark.js.map +4 -4
  8. package/dist/test/integ.es5.js +771 -394
  9. package/dist/test/integ.js +6063 -5273
  10. package/dist/test/integ.js.map +4 -4
  11. package/dist/test/jasmineHtml.es5.js +8 -8
  12. package/dist/test/jasmineHtml.js +8 -4
  13. package/dist/test/jasmineHtml.js.map +3 -3
  14. package/dist/types/current/client/Capabilities.d.ts.map +1 -1
  15. package/dist/types/current/client/CapabilitiesImpl.d.ts.map +1 -1
  16. package/dist/types/current/drm/DrmController.d.ts +2 -2
  17. package/dist/types/current/drm/DrmController.d.ts.map +1 -1
  18. package/dist/types/current/drm/DrmControllerImpl.d.ts +3 -3
  19. package/dist/types/current/drm/DrmControllerImpl.d.ts.map +1 -1
  20. package/dist/types/current/drm/DrmControllerImpl.js +7 -7
  21. package/dist/types/current/drm/DrmKeySystemResolver.d.ts +1 -1
  22. package/dist/types/current/drm/DrmKeySystemResolver.d.ts.map +1 -1
  23. package/dist/types/current/drm/DrmKeySystemResolver.js +1 -1
  24. package/dist/types/current/drm/DrmOptions.d.ts +1 -1
  25. package/dist/types/current/drm/DrmOptions.d.ts.map +1 -1
  26. package/dist/types/current/drm/DrmOptions.js +1 -1
  27. package/dist/types/current/drm/commonEme/CommonEme.d.ts +2 -2
  28. package/dist/types/current/drm/commonEme/CommonEme.d.ts.map +1 -1
  29. package/dist/types/current/drm/commonEme/CommonEmeFactory.d.ts +1 -1
  30. package/dist/types/current/drm/commonEme/CommonEmeFactory.d.ts.map +1 -1
  31. package/dist/types/current/drm/commonEme/MsCommonEme.d.ts +1 -1
  32. package/dist/types/current/drm/commonEme/MsCommonEme.d.ts.map +1 -1
  33. package/dist/types/current/drm/commonEme/MsCommonEme.js +1 -1
  34. package/dist/types/current/drm/commonEme/StandardCommonEme.d.ts +1 -1
  35. package/dist/types/current/drm/commonEme/StandardCommonEme.d.ts.map +1 -1
  36. package/dist/types/current/drm/commonEme/WebKitCommonEme.d.ts +2 -2
  37. package/dist/types/current/drm/commonEme/WebKitCommonEme.d.ts.map +1 -1
  38. package/dist/types/current/drm/commonEme/WebKitCommonEme.js +1 -1
  39. package/dist/types/current/drm/commonEme/createDrmErrorHandler.js +1 -1
  40. package/dist/types/current/drm/licenseProvider/LicenseProvider.d.ts +1 -1
  41. package/dist/types/current/drm/licenseProvider/LicenseProvider.d.ts.map +1 -1
  42. package/dist/types/current/global/environment.d.ts +6 -2
  43. package/dist/types/current/global/environment.d.ts.map +1 -1
  44. package/dist/types/current/global/environment.js +4 -3
  45. package/dist/types/current/global/initializeVinylGlobal.js +1 -1
  46. package/dist/types/current/patch/media/MediaElementPatchOptions.js +1 -1
  47. package/dist/types/current/patch/media/patchMediaElement.js +1 -1
  48. package/dist/types/current/patch/media/patches/createPreventStallsPatch.d.ts +1 -1
  49. package/dist/types/current/patch/media/patches/createPreventStallsPatch.d.ts.map +1 -1
  50. package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +1 -1
  51. package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts.map +1 -1
  52. package/dist/types/current/playback/PlaybackControllerImpl.d.ts +1 -1
  53. package/dist/types/current/playback/PlaybackControllerImpl.d.ts.map +1 -1
  54. package/dist/types/current/playback/PlaybackControllerImpl.js +4 -4
  55. package/dist/types/current/playback/ReadonlyPlaybackController.d.ts.map +1 -1
  56. package/dist/types/current/playback/error/ReportableMediaError.js +1 -1
  57. package/dist/types/current/playback/logging/playbackStateLoggingHandler.d.ts +1 -1
  58. package/dist/types/current/playback/logging/playbackStateLoggingHandler.d.ts.map +1 -1
  59. package/dist/types/current/playback/logging/playbackStateLoggingHandler.js +1 -1
  60. package/dist/types/current/playback/nextHasMetadata.d.ts +1 -1
  61. package/dist/types/current/playback/nextHasMetadata.d.ts.map +1 -1
  62. package/dist/types/current/streaming/ContentStream.d.ts +4 -4
  63. package/dist/types/current/streaming/ContentStream.d.ts.map +1 -1
  64. package/dist/types/current/streaming/ContentStreamingOptions.d.ts +2 -2
  65. package/dist/types/current/streaming/ContentStreamingOptions.d.ts.map +1 -1
  66. package/dist/types/current/streaming/MediaQualityMetadata.d.ts +2 -2
  67. package/dist/types/current/streaming/MediaQualityMetadata.d.ts.map +1 -1
  68. package/dist/types/current/streaming/MediaQualityMetadata.js +1 -1
  69. package/dist/types/current/streaming/MediaTimeline.d.ts +6 -5
  70. package/dist/types/current/streaming/MediaTimeline.d.ts.map +1 -1
  71. package/dist/types/current/streaming/SegmentController.d.ts +2 -7
  72. package/dist/types/current/streaming/SegmentController.d.ts.map +1 -1
  73. package/dist/types/current/streaming/SegmentControllerImpl.d.ts +5 -6
  74. package/dist/types/current/streaming/SegmentControllerImpl.d.ts.map +1 -1
  75. package/dist/types/current/streaming/SegmentControllerImpl.js +5 -15
  76. package/dist/types/current/streaming/SegmentReference.d.ts +1 -1
  77. package/dist/types/current/streaming/SegmentReference.d.ts.map +1 -1
  78. package/dist/types/current/streaming/StreamingEventMap.d.ts +1 -1
  79. package/dist/types/current/streaming/StreamingEventMap.d.ts.map +1 -1
  80. package/dist/types/current/streaming/abr/QualitySelector.d.ts +1 -1
  81. package/dist/types/current/streaming/abr/QualitySelector.d.ts.map +1 -1
  82. package/dist/types/current/streaming/abr/QualitySelectorImpl.d.ts +18 -3
  83. package/dist/types/current/streaming/abr/QualitySelectorImpl.d.ts.map +1 -1
  84. package/dist/types/current/streaming/abr/QualitySelectorImpl.js +8 -2
  85. package/dist/types/current/streaming/buffering/BufferingController.d.ts +3 -13
  86. package/dist/types/current/streaming/buffering/BufferingController.d.ts.map +1 -1
  87. package/dist/types/current/streaming/buffering/BufferingController.js +1 -24
  88. package/dist/types/current/streaming/buffering/MediaSourceController.d.ts +41 -15
  89. package/dist/types/current/streaming/buffering/MediaSourceController.d.ts.map +1 -1
  90. package/dist/types/current/streaming/buffering/MediaSourceController.js +74 -17
  91. package/dist/types/current/streaming/buffering/SourceBufferController.d.ts +1 -1
  92. package/dist/types/current/streaming/buffering/SourceBufferController.d.ts.map +1 -1
  93. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts +1 -1
  94. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts.map +1 -1
  95. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.js +2 -2
  96. package/dist/types/current/streaming/mediaTimelineFilter.d.ts +3 -3
  97. package/dist/types/current/streaming/mediaTimelineFilter.d.ts.map +1 -1
  98. package/dist/types/current/streaming/mediaTimelineFilter.js +1 -1
  99. package/dist/types/current/streaming/mediaTimelineLanguageFilter.d.ts +1 -1
  100. package/dist/types/current/streaming/mediaTimelineLanguageFilter.d.ts.map +1 -1
  101. package/dist/types/current/streaming/util/segment.d.ts +1 -1
  102. package/dist/types/current/streaming/util/segment.d.ts.map +1 -1
  103. package/dist/types/current/track/AutoResetController.d.ts +37 -12
  104. package/dist/types/current/track/AutoResetController.d.ts.map +1 -1
  105. package/dist/types/current/track/AutoResetController.js +38 -28
  106. package/dist/types/current/track/Track.d.ts.map +1 -1
  107. package/dist/types/current/track/TrackBase.d.ts.map +1 -1
  108. package/dist/types/current/track/TrackController.d.ts +2 -2
  109. package/dist/types/current/track/TrackController.d.ts.map +1 -1
  110. package/dist/types/current/track/TrackFactory.d.ts +1 -1
  111. package/dist/types/current/track/TrackFactory.d.ts.map +1 -1
  112. package/dist/types/current/track/createSegmentDataProvider.d.ts.map +1 -1
  113. package/dist/types/current/track/createVinylTrackFactories.d.ts +5 -5
  114. package/dist/types/current/track/createVinylTrackFactories.d.ts.map +1 -1
  115. package/dist/types/current/track/createVinylTrackFactories.js +4 -4
  116. package/dist/types/current/track/dash/DashManifestController.d.ts +1 -1
  117. package/dist/types/current/track/dash/DashManifestController.d.ts.map +1 -1
  118. package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.d.ts.map +1 -1
  119. package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.js +1 -1
  120. package/dist/types/current/track/dash/DashTrack.d.ts +4 -4
  121. package/dist/types/current/track/dash/DashTrack.d.ts.map +1 -1
  122. package/dist/types/current/track/dash/DashTrack.js +2 -2
  123. package/dist/types/current/track/dash/buildDashMediaTimeline.d.ts +2 -2
  124. package/dist/types/current/track/dash/buildDashMediaTimeline.d.ts.map +1 -1
  125. package/dist/types/current/track/dash/buildDashMediaTimeline.js +2 -2
  126. package/dist/types/current/track/dash/createDashContentStreamFactories.d.ts.map +1 -1
  127. package/dist/types/current/track/dash/createDashContentTypesValue.d.ts +2 -2
  128. package/dist/types/current/track/dash/createDashContentTypesValue.d.ts.map +1 -1
  129. package/dist/types/current/track/dash/createDashContentTypesValue.js +1 -1
  130. package/dist/types/current/track/dash/createDashFactories.d.ts +12 -12
  131. package/dist/types/current/track/dash/createDashFactories.d.ts.map +1 -1
  132. package/dist/types/current/track/dash/createDashFactories.js +8 -8
  133. package/dist/types/current/track/dash/createDashManifestProvider.d.ts +1 -1
  134. package/dist/types/current/track/dash/createDashManifestProvider.d.ts.map +1 -1
  135. package/dist/types/current/track/dash/createDashManifestProvider.js +1 -1
  136. package/dist/types/current/track/dash/createDefaultDashManifestTransformer.d.ts +1 -1
  137. package/dist/types/current/track/dash/createDefaultDashManifestTransformer.d.ts.map +1 -1
  138. package/dist/types/current/track/dash/createDefaultDashManifestTransformer.js +1 -1
  139. package/dist/types/current/track/dash/createSegmentControllerFactory.d.ts.map +1 -1
  140. package/dist/types/current/track/dash/manifestTransformUtils.d.ts +1 -1
  141. package/dist/types/current/track/dash/manifestTransformUtils.d.ts.map +1 -1
  142. package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.d.ts +3 -3
  143. package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.d.ts.map +1 -1
  144. package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.js +3 -3
  145. package/dist/types/current/track/dash/urlDashManifestProvider.d.ts +1 -1
  146. package/dist/types/current/track/dash/urlDashManifestProvider.d.ts.map +1 -1
  147. package/dist/types/current/track/dash/util/mimeType.d.ts.map +1 -1
  148. package/dist/types/current/track/dash/util/mimeType.js +1 -1
  149. package/dist/types/current/track/dash/util/mpd.d.ts +3 -2
  150. package/dist/types/current/track/dash/util/mpd.d.ts.map +1 -1
  151. package/dist/types/current/track/dash/util/mpd.js +13 -3
  152. package/dist/types/current/track/dash/util/uriResolution.js +1 -1
  153. package/dist/types/current/track/filters/keySystemFilter.d.ts.map +1 -1
  154. package/dist/types/current/track/filters/resourceTypeFilter.d.ts.map +1 -1
  155. package/dist/types/current/track/filters/sampleRateFilter.d.ts.map +1 -1
  156. package/dist/types/current/track/hls/HlsTrack.d.ts.map +1 -1
  157. package/dist/types/current/track/hls/buildHlsMediaTimeline.d.ts +3 -3
  158. package/dist/types/current/track/hls/buildHlsMediaTimeline.d.ts.map +1 -1
  159. package/dist/types/current/track/hls/buildHlsMediaTimeline.js +16 -14
  160. package/dist/types/current/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
  161. package/dist/types/current/track/hls/createDefaultHlsManifestTransformer.d.ts.map +1 -1
  162. package/dist/types/current/track/hls/createHlsContentStreamFactories.d.ts.map +1 -1
  163. package/dist/types/current/track/hls/util/hlsSegmentTime.d.ts +1 -1
  164. package/dist/types/current/track/hls/util/hlsSegmentTime.d.ts.map +1 -1
  165. package/dist/types/current/track/hls/util/hlsSegmentTime.js +1 -1
  166. package/dist/types/current/track/mse/MseTrack.d.ts +2 -2
  167. package/dist/types/current/track/mse/MseTrack.d.ts.map +1 -1
  168. package/dist/types/current/track/mse/MseTrack.js +2 -1
  169. package/dist/types/current/track/mse/codec.d.ts.map +1 -1
  170. package/dist/types/current/track/source/FixedPlaybackQuality.d.ts +1 -1
  171. package/dist/types/current/track/source/FixedPlaybackQuality.d.ts.map +1 -1
  172. package/dist/types/current/track/source/SourceObjectTrack.d.ts +4 -4
  173. package/dist/types/current/track/source/SourceObjectTrack.d.ts.map +1 -1
  174. package/dist/types/current/track/source/SourceObjectTrack.js +2 -2
  175. package/dist/types/current/track/source/SourceTrack.d.ts +4 -4
  176. package/dist/types/current/track/source/SourceTrack.d.ts.map +1 -1
  177. package/dist/types/current/track/source/SourceTrack.js +2 -2
  178. package/dist/types/current/track/source/SourceTrackBase.d.ts +2 -2
  179. package/dist/types/current/track/source/SourceTrackBase.d.ts.map +1 -1
  180. package/dist/types/current/track/source/SourceTrackBase.js +2 -2
  181. package/dist/types/current/tsconfig.tsbuildinfo +1 -1
  182. package/dist/types/current/vinyl/ReadonlyPlaybackStreamingState.d.ts.map +1 -1
  183. package/dist/types/current/vinyl/VinylDeps.d.ts +1 -1
  184. package/dist/types/current/vinyl/VinylDeps.d.ts.map +1 -1
  185. package/dist/types/current/vinyl/VinylOptions.d.ts.map +1 -1
  186. package/dist/types/current/vinyl/VinylPatchOptions.d.ts.map +1 -1
  187. package/dist/types/current/vinyl/VinylPlayer.d.ts +26 -2
  188. package/dist/types/current/vinyl/VinylPlayer.d.ts.map +1 -1
  189. package/dist/types/current/vinyl/VinylPlayer.js +18 -3
  190. package/dist/types/current/vinyl/createVinylFactories.d.ts +9 -11
  191. package/dist/types/current/vinyl/createVinylFactories.d.ts.map +1 -1
  192. package/dist/types/current/vinyl/createVinylFactories.js +2 -2
  193. package/dist/types/ts3.7/drm/DrmController.d.ts +2 -2
  194. package/dist/types/ts3.7/drm/DrmControllerImpl.d.ts +3 -3
  195. package/dist/types/ts3.7/drm/DrmKeySystemResolver.d.ts +1 -1
  196. package/dist/types/ts3.7/drm/DrmOptions.d.ts +1 -1
  197. package/dist/types/ts3.7/drm/commonEme/CommonEme.d.ts +2 -2
  198. package/dist/types/ts3.7/drm/commonEme/CommonEmeFactory.d.ts +1 -1
  199. package/dist/types/ts3.7/drm/commonEme/MsCommonEme.d.ts +1 -1
  200. package/dist/types/ts3.7/drm/commonEme/StandardCommonEme.d.ts +1 -1
  201. package/dist/types/ts3.7/drm/commonEme/WebKitCommonEme.d.ts +2 -2
  202. package/dist/types/ts3.7/drm/licenseProvider/LicenseProvider.d.ts +1 -1
  203. package/dist/types/ts3.7/global/environment.d.ts +6 -2
  204. package/dist/types/ts3.7/patch/media/patches/createPreventStallsPatch.d.ts +1 -1
  205. package/dist/types/ts3.7/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +1 -1
  206. package/dist/types/ts3.7/playback/PlaybackControllerImpl.d.ts +1 -1
  207. package/dist/types/ts3.7/playback/logging/playbackStateLoggingHandler.d.ts +1 -1
  208. package/dist/types/ts3.7/playback/nextHasMetadata.d.ts +1 -1
  209. package/dist/types/ts3.7/streaming/ContentStream.d.ts +4 -4
  210. package/dist/types/ts3.7/streaming/ContentStreamingOptions.d.ts +2 -2
  211. package/dist/types/ts3.7/streaming/MediaQualityMetadata.d.ts +2 -2
  212. package/dist/types/ts3.7/streaming/MediaTimeline.d.ts +6 -5
  213. package/dist/types/ts3.7/streaming/SegmentController.d.ts +2 -7
  214. package/dist/types/ts3.7/streaming/SegmentControllerImpl.d.ts +5 -6
  215. package/dist/types/ts3.7/streaming/SegmentReference.d.ts +1 -1
  216. package/dist/types/ts3.7/streaming/StreamingEventMap.d.ts +1 -1
  217. package/dist/types/ts3.7/streaming/abr/QualitySelector.d.ts +1 -1
  218. package/dist/types/ts3.7/streaming/abr/QualitySelectorImpl.d.ts +18 -3
  219. package/dist/types/ts3.7/streaming/buffering/BufferingController.d.ts +3 -13
  220. package/dist/types/ts3.7/streaming/buffering/MediaSourceController.d.ts +41 -15
  221. package/dist/types/ts3.7/streaming/buffering/SourceBufferController.d.ts +1 -1
  222. package/dist/types/ts3.7/streaming/createDefaultMediaTimelineTransformer.d.ts +1 -1
  223. package/dist/types/ts3.7/streaming/mediaTimelineFilter.d.ts +3 -3
  224. package/dist/types/ts3.7/streaming/mediaTimelineLanguageFilter.d.ts +1 -1
  225. package/dist/types/ts3.7/streaming/util/segment.d.ts +1 -1
  226. package/dist/types/ts3.7/track/AutoResetController.d.ts +37 -12
  227. package/dist/types/ts3.7/track/TrackController.d.ts +2 -2
  228. package/dist/types/ts3.7/track/TrackFactory.d.ts +1 -1
  229. package/dist/types/ts3.7/track/createVinylTrackFactories.d.ts +5 -5
  230. package/dist/types/ts3.7/track/dash/DashManifestController.d.ts +1 -1
  231. package/dist/types/ts3.7/track/dash/DashTrack.d.ts +4 -4
  232. package/dist/types/ts3.7/track/dash/buildDashMediaTimeline.d.ts +2 -2
  233. package/dist/types/ts3.7/track/dash/createDashContentTypesValue.d.ts +2 -2
  234. package/dist/types/ts3.7/track/dash/createDashFactories.d.ts +12 -12
  235. package/dist/types/ts3.7/track/dash/createDashManifestProvider.d.ts +1 -1
  236. package/dist/types/ts3.7/track/dash/createDefaultDashManifestTransformer.d.ts +1 -1
  237. package/dist/types/ts3.7/track/dash/manifestTransformUtils.d.ts +1 -1
  238. package/dist/types/ts3.7/track/dash/timeline/DashRepresentationSegmentProvider.d.ts +3 -3
  239. package/dist/types/ts3.7/track/dash/urlDashManifestProvider.d.ts +1 -1
  240. package/dist/types/ts3.7/track/dash/util/mpd.d.ts +3 -2
  241. package/dist/types/ts3.7/track/hls/buildHlsMediaTimeline.d.ts +3 -3
  242. package/dist/types/ts3.7/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
  243. package/dist/types/ts3.7/track/hls/util/hlsSegmentTime.d.ts +1 -1
  244. package/dist/types/ts3.7/track/mse/MseTrack.d.ts +2 -2
  245. package/dist/types/ts3.7/track/source/FixedPlaybackQuality.d.ts +1 -1
  246. package/dist/types/ts3.7/track/source/SourceObjectTrack.d.ts +4 -4
  247. package/dist/types/ts3.7/track/source/SourceTrack.d.ts +4 -4
  248. package/dist/types/ts3.7/track/source/SourceTrackBase.d.ts +2 -2
  249. package/dist/types/ts3.7/vinyl/VinylDeps.d.ts +1 -1
  250. package/dist/types/ts3.7/vinyl/VinylPlayer.d.ts +18 -2
  251. package/dist/types/ts3.7/vinyl/createVinylFactories.d.ts +9 -11
  252. package/dist/types/ts4.1/drm/DrmController.d.ts +2 -2
  253. package/dist/types/ts4.1/drm/DrmControllerImpl.d.ts +3 -3
  254. package/dist/types/ts4.1/drm/DrmKeySystemResolver.d.ts +1 -1
  255. package/dist/types/ts4.1/drm/DrmOptions.d.ts +1 -1
  256. package/dist/types/ts4.1/drm/commonEme/CommonEme.d.ts +2 -2
  257. package/dist/types/ts4.1/drm/commonEme/CommonEmeFactory.d.ts +1 -1
  258. package/dist/types/ts4.1/drm/commonEme/MsCommonEme.d.ts +1 -1
  259. package/dist/types/ts4.1/drm/commonEme/StandardCommonEme.d.ts +1 -1
  260. package/dist/types/ts4.1/drm/commonEme/WebKitCommonEme.d.ts +2 -2
  261. package/dist/types/ts4.1/drm/licenseProvider/LicenseProvider.d.ts +1 -1
  262. package/dist/types/ts4.1/global/environment.d.ts +6 -2
  263. package/dist/types/ts4.1/patch/media/patches/createPreventStallsPatch.d.ts +1 -1
  264. package/dist/types/ts4.1/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +1 -1
  265. package/dist/types/ts4.1/playback/PlaybackControllerImpl.d.ts +1 -1
  266. package/dist/types/ts4.1/playback/logging/playbackStateLoggingHandler.d.ts +1 -1
  267. package/dist/types/ts4.1/playback/nextHasMetadata.d.ts +1 -1
  268. package/dist/types/ts4.1/streaming/ContentStream.d.ts +4 -4
  269. package/dist/types/ts4.1/streaming/ContentStreamingOptions.d.ts +2 -2
  270. package/dist/types/ts4.1/streaming/MediaQualityMetadata.d.ts +2 -2
  271. package/dist/types/ts4.1/streaming/MediaTimeline.d.ts +6 -5
  272. package/dist/types/ts4.1/streaming/SegmentController.d.ts +2 -7
  273. package/dist/types/ts4.1/streaming/SegmentControllerImpl.d.ts +5 -6
  274. package/dist/types/ts4.1/streaming/SegmentReference.d.ts +1 -1
  275. package/dist/types/ts4.1/streaming/StreamingEventMap.d.ts +1 -1
  276. package/dist/types/ts4.1/streaming/abr/QualitySelector.d.ts +1 -1
  277. package/dist/types/ts4.1/streaming/abr/QualitySelectorImpl.d.ts +18 -3
  278. package/dist/types/ts4.1/streaming/buffering/BufferingController.d.ts +3 -13
  279. package/dist/types/ts4.1/streaming/buffering/MediaSourceController.d.ts +41 -15
  280. package/dist/types/ts4.1/streaming/buffering/SourceBufferController.d.ts +1 -1
  281. package/dist/types/ts4.1/streaming/createDefaultMediaTimelineTransformer.d.ts +1 -1
  282. package/dist/types/ts4.1/streaming/mediaTimelineFilter.d.ts +3 -3
  283. package/dist/types/ts4.1/streaming/mediaTimelineLanguageFilter.d.ts +1 -1
  284. package/dist/types/ts4.1/streaming/util/segment.d.ts +1 -1
  285. package/dist/types/ts4.1/track/AutoResetController.d.ts +37 -12
  286. package/dist/types/ts4.1/track/TrackController.d.ts +2 -2
  287. package/dist/types/ts4.1/track/TrackFactory.d.ts +1 -1
  288. package/dist/types/ts4.1/track/createVinylTrackFactories.d.ts +5 -5
  289. package/dist/types/ts4.1/track/dash/DashManifestController.d.ts +1 -1
  290. package/dist/types/ts4.1/track/dash/DashTrack.d.ts +4 -4
  291. package/dist/types/ts4.1/track/dash/buildDashMediaTimeline.d.ts +2 -2
  292. package/dist/types/ts4.1/track/dash/createDashContentTypesValue.d.ts +2 -2
  293. package/dist/types/ts4.1/track/dash/createDashFactories.d.ts +12 -12
  294. package/dist/types/ts4.1/track/dash/createDashManifestProvider.d.ts +1 -1
  295. package/dist/types/ts4.1/track/dash/createDefaultDashManifestTransformer.d.ts +1 -1
  296. package/dist/types/ts4.1/track/dash/manifestTransformUtils.d.ts +1 -1
  297. package/dist/types/ts4.1/track/dash/timeline/DashRepresentationSegmentProvider.d.ts +3 -3
  298. package/dist/types/ts4.1/track/dash/urlDashManifestProvider.d.ts +1 -1
  299. package/dist/types/ts4.1/track/dash/util/mpd.d.ts +3 -2
  300. package/dist/types/ts4.1/track/hls/buildHlsMediaTimeline.d.ts +3 -3
  301. package/dist/types/ts4.1/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
  302. package/dist/types/ts4.1/track/hls/util/hlsSegmentTime.d.ts +1 -1
  303. package/dist/types/ts4.1/track/mse/MseTrack.d.ts +3 -3
  304. package/dist/types/ts4.1/track/source/FixedPlaybackQuality.d.ts +1 -1
  305. package/dist/types/ts4.1/track/source/SourceObjectTrack.d.ts +5 -5
  306. package/dist/types/ts4.1/track/source/SourceTrack.d.ts +5 -5
  307. package/dist/types/ts4.1/track/source/SourceTrackBase.d.ts +3 -3
  308. package/dist/types/ts4.1/vinyl/VinylDeps.d.ts +1 -1
  309. package/dist/types/ts4.1/vinyl/VinylPlayer.d.ts +18 -2
  310. package/dist/types/ts4.1/vinyl/createVinylFactories.d.ts +9 -11
  311. package/dist/types/ts4.7/drm/DrmController.d.ts +2 -2
  312. package/dist/types/ts4.7/drm/DrmControllerImpl.d.ts +3 -3
  313. package/dist/types/ts4.7/drm/DrmKeySystemResolver.d.ts +1 -1
  314. package/dist/types/ts4.7/drm/DrmOptions.d.ts +1 -1
  315. package/dist/types/ts4.7/drm/commonEme/CommonEme.d.ts +2 -2
  316. package/dist/types/ts4.7/drm/commonEme/CommonEmeFactory.d.ts +1 -1
  317. package/dist/types/ts4.7/drm/commonEme/MsCommonEme.d.ts +1 -1
  318. package/dist/types/ts4.7/drm/commonEme/StandardCommonEme.d.ts +1 -1
  319. package/dist/types/ts4.7/drm/commonEme/WebKitCommonEme.d.ts +2 -2
  320. package/dist/types/ts4.7/drm/licenseProvider/LicenseProvider.d.ts +1 -1
  321. package/dist/types/ts4.7/global/environment.d.ts +6 -2
  322. package/dist/types/ts4.7/patch/media/patches/createPreventStallsPatch.d.ts +1 -1
  323. package/dist/types/ts4.7/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +1 -1
  324. package/dist/types/ts4.7/playback/PlaybackControllerImpl.d.ts +1 -1
  325. package/dist/types/ts4.7/playback/logging/playbackStateLoggingHandler.d.ts +1 -1
  326. package/dist/types/ts4.7/playback/nextHasMetadata.d.ts +1 -1
  327. package/dist/types/ts4.7/streaming/ContentStream.d.ts +4 -4
  328. package/dist/types/ts4.7/streaming/ContentStreamingOptions.d.ts +2 -2
  329. package/dist/types/ts4.7/streaming/MediaQualityMetadata.d.ts +2 -2
  330. package/dist/types/ts4.7/streaming/MediaTimeline.d.ts +6 -5
  331. package/dist/types/ts4.7/streaming/SegmentController.d.ts +2 -7
  332. package/dist/types/ts4.7/streaming/SegmentControllerImpl.d.ts +5 -6
  333. package/dist/types/ts4.7/streaming/SegmentReference.d.ts +1 -1
  334. package/dist/types/ts4.7/streaming/StreamingEventMap.d.ts +1 -1
  335. package/dist/types/ts4.7/streaming/abr/QualitySelector.d.ts +1 -1
  336. package/dist/types/ts4.7/streaming/abr/QualitySelectorImpl.d.ts +18 -3
  337. package/dist/types/ts4.7/streaming/buffering/BufferingController.d.ts +3 -13
  338. package/dist/types/ts4.7/streaming/buffering/MediaSourceController.d.ts +41 -15
  339. package/dist/types/ts4.7/streaming/buffering/SourceBufferController.d.ts +1 -1
  340. package/dist/types/ts4.7/streaming/createDefaultMediaTimelineTransformer.d.ts +1 -1
  341. package/dist/types/ts4.7/streaming/mediaTimelineFilter.d.ts +3 -3
  342. package/dist/types/ts4.7/streaming/mediaTimelineLanguageFilter.d.ts +1 -1
  343. package/dist/types/ts4.7/streaming/util/segment.d.ts +1 -1
  344. package/dist/types/ts4.7/track/AutoResetController.d.ts +37 -12
  345. package/dist/types/ts4.7/track/TrackController.d.ts +2 -2
  346. package/dist/types/ts4.7/track/TrackFactory.d.ts +1 -1
  347. package/dist/types/ts4.7/track/createVinylTrackFactories.d.ts +5 -5
  348. package/dist/types/ts4.7/track/dash/DashManifestController.d.ts +1 -1
  349. package/dist/types/ts4.7/track/dash/DashTrack.d.ts +4 -4
  350. package/dist/types/ts4.7/track/dash/buildDashMediaTimeline.d.ts +2 -2
  351. package/dist/types/ts4.7/track/dash/createDashContentTypesValue.d.ts +2 -2
  352. package/dist/types/ts4.7/track/dash/createDashFactories.d.ts +12 -12
  353. package/dist/types/ts4.7/track/dash/createDashManifestProvider.d.ts +1 -1
  354. package/dist/types/ts4.7/track/dash/createDefaultDashManifestTransformer.d.ts +1 -1
  355. package/dist/types/ts4.7/track/dash/manifestTransformUtils.d.ts +1 -1
  356. package/dist/types/ts4.7/track/dash/timeline/DashRepresentationSegmentProvider.d.ts +3 -3
  357. package/dist/types/ts4.7/track/dash/urlDashManifestProvider.d.ts +1 -1
  358. package/dist/types/ts4.7/track/dash/util/mpd.d.ts +3 -2
  359. package/dist/types/ts4.7/track/hls/buildHlsMediaTimeline.d.ts +3 -3
  360. package/dist/types/ts4.7/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
  361. package/dist/types/ts4.7/track/hls/util/hlsSegmentTime.d.ts +1 -1
  362. package/dist/types/ts4.7/track/mse/MseTrack.d.ts +2 -2
  363. package/dist/types/ts4.7/track/source/FixedPlaybackQuality.d.ts +1 -1
  364. package/dist/types/ts4.7/track/source/SourceObjectTrack.d.ts +4 -4
  365. package/dist/types/ts4.7/track/source/SourceTrack.d.ts +4 -4
  366. package/dist/types/ts4.7/track/source/SourceTrackBase.d.ts +2 -2
  367. package/dist/types/ts4.7/vinyl/VinylDeps.d.ts +1 -1
  368. package/dist/types/ts4.7/vinyl/VinylPlayer.d.ts +26 -2
  369. package/dist/types/ts4.7/vinyl/createVinylFactories.d.ts +9 -11
  370. package/dist/unit/types/current/streaming/MediaTimeline.test.js +6 -1
  371. package/dist/unit/types/current/streaming/MseTrack.test.js +4 -0
  372. package/dist/unit/types/current/streaming/SegmentControllerImpl.test.js +3 -33
  373. package/dist/unit/types/current/streaming/abr/QualitySelectorImpl.test.js +73 -0
  374. package/dist/unit/types/current/streaming/buffering/BufferingController.test.js +1 -41
  375. package/dist/unit/types/current/streaming/buffering/MediaSourceController.test.js +97 -17
  376. package/dist/unit/types/current/streaming/createDefaultMediaTimelineTransformer.test.js +6 -0
  377. package/dist/unit/types/current/streaming/mediaTimelineFilter.test.js +2 -0
  378. package/dist/unit/types/current/streaming/mediaTimelineLanguageFilter.test.js +7 -0
  379. package/dist/unit/types/current/track/AutoResetController.test.js +134 -22
  380. package/dist/unit/types/current/track/dash/createDashContentStreamFactories.test.js +5 -1
  381. package/dist/unit/types/current/track/dash/createSegmentControllerFactory.test.js +5 -1
  382. package/dist/unit/types/current/track/dash/util/mpd.test.js +29 -0
  383. package/dist/unit/types/current/track/hls/buildHlsMediaTimeline.test.js +16 -8
  384. package/dist/unit/types/current/track/hls/createHlsContentStreamFactories.test.js +5 -1
  385. package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
  386. package/dist/unit/types/current/vinyl/VinylPlayer.test.js +35 -0
  387. package/dist/vinylTestUtil/index.js +20 -14
  388. package/dist/vinylTestUtil/index.js.map +2 -2
  389. package/dist/vinylTestUtil/types/current/media/FrequencyAnalyzer.js +1 -1
  390. package/dist/vinylTestUtil/types/current/mediaSource/ControlledMediaSource.d.ts.map +1 -1
  391. package/dist/vinylTestUtil/types/current/mock/dash/mockDashManifest.d.ts +12 -12
  392. package/dist/vinylTestUtil/types/current/mock/dom/ms/MockMSMediaKeySession.d.ts +2 -2
  393. package/dist/vinylTestUtil/types/current/mock/dom/webkit/MockWebKitMediaKeySession.d.ts +2 -2
  394. package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.d.ts +6 -6
  395. package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.d.ts.map +1 -1
  396. package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.js +7 -7
  397. package/dist/vinylTestUtil/types/current/mock/streaming/MockSegmentController.d.ts +0 -1
  398. package/dist/vinylTestUtil/types/current/mock/streaming/MockSegmentController.d.ts.map +1 -1
  399. package/dist/vinylTestUtil/types/current/mock/streaming/MockSegmentController.js +0 -1
  400. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockMediaSourceController.d.ts +0 -1
  401. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockMediaSourceController.d.ts.map +1 -1
  402. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockMediaSourceController.js +0 -1
  403. package/dist/vinylTestUtil/types/current/mock/track/MockAutoResetController.d.ts +1 -0
  404. package/dist/vinylTestUtil/types/current/mock/track/MockAutoResetController.d.ts.map +1 -1
  405. package/dist/vinylTestUtil/types/current/mock/track/MockAutoResetController.js +1 -0
  406. package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.d.ts +5 -5
  407. package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.d.ts.map +1 -1
  408. package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.js +11 -7
  409. package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.d.ts +5 -5
  410. package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.d.ts.map +1 -1
  411. package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.js +11 -7
  412. package/dist/vinylTestUtil/types/current/player/createVinylSuite.js +1 -1
  413. package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
  414. package/dist/vinylTestUtil/types/current/util/playback/expectTrackCanSeek.js +1 -1
  415. package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlays.js +2 -2
  416. package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlaysUntil.d.ts.map +1 -1
  417. package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlaysUntil.js +1 -2
  418. package/dist/vinylTestUtil/types/ts3.7/mock/dash/mockDashManifest.d.ts +12 -12
  419. package/dist/vinylTestUtil/types/ts3.7/mock/dom/ms/MockMSMediaKeySession.d.ts +2 -2
  420. package/dist/vinylTestUtil/types/ts3.7/mock/dom/webkit/MockWebKitMediaKeySession.d.ts +2 -2
  421. package/dist/vinylTestUtil/types/ts3.7/mock/player/MockVinylPlayerDependencies.d.ts +6 -6
  422. package/dist/vinylTestUtil/types/ts3.7/mock/streaming/MockSegmentController.d.ts +0 -1
  423. package/dist/vinylTestUtil/types/ts3.7/mock/streaming/buffering/MockMediaSourceController.d.ts +0 -1
  424. package/dist/vinylTestUtil/types/ts3.7/mock/track/MockAutoResetController.d.ts +1 -0
  425. package/dist/vinylTestUtil/types/ts3.7/mock/track/dash/createMockDashDependencies.d.ts +5 -5
  426. package/dist/vinylTestUtil/types/ts3.7/mock/track/hls/createMockHlsDependencies.d.ts +5 -5
  427. package/dist/vinylTestUtil/types/ts4.1/mock/dash/mockDashManifest.d.ts +12 -12
  428. package/dist/vinylTestUtil/types/ts4.1/mock/dom/ms/MockMSMediaKeySession.d.ts +2 -2
  429. package/dist/vinylTestUtil/types/ts4.1/mock/dom/webkit/MockWebKitMediaKeySession.d.ts +2 -2
  430. package/dist/vinylTestUtil/types/ts4.1/mock/player/MockVinylPlayerDependencies.d.ts +6 -6
  431. package/dist/vinylTestUtil/types/ts4.1/mock/streaming/MockSegmentController.d.ts +0 -1
  432. package/dist/vinylTestUtil/types/ts4.1/mock/streaming/buffering/MockMediaSourceController.d.ts +0 -1
  433. package/dist/vinylTestUtil/types/ts4.1/mock/track/MockAutoResetController.d.ts +1 -0
  434. package/dist/vinylTestUtil/types/ts4.1/mock/track/dash/createMockDashDependencies.d.ts +5 -5
  435. package/dist/vinylTestUtil/types/ts4.1/mock/track/hls/createMockHlsDependencies.d.ts +5 -5
  436. package/dist/vinylTestUtil/types/ts4.7/mock/dash/mockDashManifest.d.ts +12 -12
  437. package/dist/vinylTestUtil/types/ts4.7/mock/dom/ms/MockMSMediaKeySession.d.ts +2 -2
  438. package/dist/vinylTestUtil/types/ts4.7/mock/dom/webkit/MockWebKitMediaKeySession.d.ts +2 -2
  439. package/dist/vinylTestUtil/types/ts4.7/mock/player/MockVinylPlayerDependencies.d.ts +6 -6
  440. package/dist/vinylTestUtil/types/ts4.7/mock/streaming/MockSegmentController.d.ts +0 -1
  441. package/dist/vinylTestUtil/types/ts4.7/mock/streaming/buffering/MockMediaSourceController.d.ts +0 -1
  442. package/dist/vinylTestUtil/types/ts4.7/mock/track/MockAutoResetController.d.ts +1 -0
  443. package/dist/vinylTestUtil/types/ts4.7/mock/track/dash/createMockDashDependencies.d.ts +5 -5
  444. package/dist/vinylTestUtil/types/ts4.7/mock/track/hls/createMockHlsDependencies.d.ts +5 -5
  445. package/docs/USAGE.md +33 -0
  446. package/package.json +13 -15
package/dist/index.js CHANGED
@@ -118,7 +118,7 @@ function getAudioContext() {
118
118
  // src/client/CapabilitiesImpl.ts
119
119
  var CapabilitiesImpl = class {
120
120
  constructor(deps) {
121
- this.deps = deps;
121
+ __publicField(this, "deps", deps);
122
122
  }
123
123
  get mse() {
124
124
  return supportsMse();
@@ -507,9 +507,9 @@ var InvalidSeekError = class _InvalidSeekError extends ReportableError {
507
507
  ErrorOrigin.API,
508
508
  ErrorLevel.WARN
509
509
  );
510
- this.time = time;
511
- this.seekable = seekable;
512
- this.tolerance = tolerance;
510
+ __publicField(this, "time", time);
511
+ __publicField(this, "seekable", seekable);
512
+ __publicField(this, "tolerance", tolerance);
513
513
  Object.setPrototypeOf(this, _InvalidSeekError.prototype);
514
514
  }
515
515
  get [Symbol.toStringTag]() {
@@ -1377,9 +1377,9 @@ var trackBaseOptionsValidator = /* @__PURE__ */ object4(
1377
1377
  var TrackBase = class extends EventHostImpl2 {
1378
1378
  constructor(uri, type, deps) {
1379
1379
  super();
1380
- this.uri = uri;
1381
- this.type = type;
1382
- this.deps = deps;
1380
+ __publicField(this, "uri", uri);
1381
+ __publicField(this, "type", type);
1382
+ __publicField(this, "deps", deps);
1383
1383
  /**
1384
1384
  * The current load options, if this is an active track.
1385
1385
  */
@@ -1477,7 +1477,7 @@ import { EventHostImpl as EventHostImpl3 } from "@amazon/vinyl-util";
1477
1477
  var FixedPlaybackQuality = class extends EventHostImpl3 {
1478
1478
  constructor(fixedQuality, deps) {
1479
1479
  super();
1480
- this.deps = deps;
1480
+ __publicField(this, "deps", deps);
1481
1481
  __publicField(this, "_fixedQuality");
1482
1482
  __publicField(this, "_contentTypes", /* @__PURE__ */ new Set());
1483
1483
  __publicField(this, "_isActive", false);
@@ -1679,8 +1679,8 @@ var emptyMediaQualityMetadata = /* @__PURE__ */ createEmptyMediaQualityMetadata(
1679
1679
  var SourceTrackBase = class extends TrackBase {
1680
1680
  constructor(uri, type, src, deps) {
1681
1681
  super(uri, type, deps);
1682
- this.src = src;
1683
- this.deps = deps;
1682
+ __publicField(this, "src", src);
1683
+ __publicField(this, "deps", deps);
1684
1684
  __publicField(this, "fixedPlaybackQuality");
1685
1685
  __publicField(this, "_resolvedSrc", null);
1686
1686
  const add = this.disposer.add;
@@ -1766,7 +1766,7 @@ function createSourceObjectTrackFactory(deps) {
1766
1766
  var SourceObjectTrack = class extends SourceTrackBase {
1767
1767
  constructor(uri, type, srcObject, deps) {
1768
1768
  super(uri, type, srcObject, deps);
1769
- this.deps = deps;
1769
+ __publicField(this, "deps", deps);
1770
1770
  }
1771
1771
  get [Symbol.toStringTag]() {
1772
1772
  return "SourceObjectTrack";
@@ -1811,7 +1811,7 @@ function createSourceTrackFactory(deps) {
1811
1811
  var SourceTrack = class extends SourceTrackBase {
1812
1812
  constructor(uri, type, src, deps) {
1813
1813
  super(uri, type, src, deps);
1814
- this.deps = deps;
1814
+ __publicField(this, "deps", deps);
1815
1815
  }
1816
1816
  get [Symbol.toStringTag]() {
1817
1817
  return "SourceTrack";
@@ -1886,6 +1886,7 @@ var MseTrack = class extends TrackBase {
1886
1886
  contentTypesPromise.then((contentTypes) => {
1887
1887
  if (this.disposer.disposed) return;
1888
1888
  if (equalDeep(this.contentTypes, contentTypes)) return;
1889
+ logDebug5(this, "content types:", contentTypes);
1889
1890
  this.clearStreams();
1890
1891
  for (const contentType2 of contentTypes) {
1891
1892
  this.createStream(contentType2);
@@ -2225,7 +2226,7 @@ var trackPriority = {
2225
2226
  var TrackControllerImpl = class extends EventHostImpl4 {
2226
2227
  constructor(deps, initialOptions) {
2227
2228
  super();
2228
- this.deps = deps;
2229
+ __publicField(this, "deps", deps);
2229
2230
  // When tracks are preloaded, the cache capacity may expand automatically to accommodate.
2230
2231
  __publicField(this, "_autoPreloadCapacity", 0);
2231
2232
  __publicField(this, "trackCache", /* @__PURE__ */ new LruCache(0));
@@ -2606,9 +2607,18 @@ function flattenRepresentations(period) {
2606
2607
  return out;
2607
2608
  }
2608
2609
  function calculateDuration(manifest) {
2610
+ if (manifest.MPD.type === "dynamic") return Infinity;
2609
2611
  const mpdDuration = manifest.MPD.mediaPresentationDuration;
2610
2612
  if (mpdDuration != null) return mpdDuration;
2611
- return calculatePeriodEnd(last(manifest.MPD.Period));
2613
+ const lastPeriod = last(manifest.MPD.Period);
2614
+ if (!lastPeriod) {
2615
+ throw new Error("Unable to determine manifest duration: no periods");
2616
+ }
2617
+ const end = calculatePeriodEnd(lastPeriod);
2618
+ if (end == null) {
2619
+ throw new Error("Unable to determine manifest duration");
2620
+ }
2621
+ return end;
2612
2622
  }
2613
2623
 
2614
2624
  // src/track/dash/util/uriResolution.ts
@@ -3039,25 +3049,95 @@ function resolveAdaptationSetSwitchingGroupIds(adaptationSet, periodId, adaptati
3039
3049
 
3040
3050
  // src/streaming/buffering/MediaSourceController.ts
3041
3051
  import {
3052
+ closeTo as closeTo4,
3042
3053
  createDisposer as createDisposer7,
3043
3054
  DomEventHost as DomEventHost4,
3044
3055
  ErrorLevel as ErrorLevel4,
3045
- ErrorOrigin as ErrorOrigin11,
3056
+ ErrorOrigin as ErrorOrigin12,
3046
3057
  EventHostImpl as EventHostImpl5,
3058
+ isSilentError as isSilentError2,
3047
3059
  logDebug as logDebug7,
3048
- ReportableError as ReportableError3,
3060
+ ReportableError as ReportableError4,
3049
3061
  toJson,
3050
3062
  toLowerCase as toLowerCase2
3051
3063
  } from "@amazon/vinyl-util";
3064
+
3065
+ // src/util/media/sourceBuffer.ts
3066
+ import { promise } from "@amazon/vinyl-util";
3067
+
3068
+ // src/streaming/buffering/error/SourceBufferError.ts
3069
+ import { ErrorOrigin as ErrorOrigin11 } from "@amazon/vinyl-util";
3070
+ import { ReportableError as ReportableError3 } from "@amazon/vinyl-util";
3071
+ var SourceBufferError = class _SourceBufferError extends ReportableError3 {
3072
+ get [Symbol.toStringTag]() {
3073
+ return "SourceBufferError";
3074
+ }
3075
+ constructor(message = `A SourceBuffer error has occurred.`, origin = ErrorOrigin11.MEDIA) {
3076
+ super(message, origin);
3077
+ Object.setPrototypeOf(this, _SourceBufferError.prototype);
3078
+ }
3079
+ };
3080
+
3081
+ // src/util/media/sourceBuffer.ts
3082
+ import { AbortError as AbortError2 } from "@amazon/vinyl-util";
3083
+ function nextSourceBufferIdle(sourceBuffer) {
3084
+ if (!sourceBuffer) return Promise.resolve();
3085
+ if (!sourceBuffer.updating) return Promise.resolve();
3086
+ return promise((resolve, reject) => {
3087
+ const removeListeners = () => {
3088
+ sourceBuffer.removeEventListener("error", onErred);
3089
+ sourceBuffer.removeEventListener("abort", onAborted);
3090
+ sourceBuffer.removeEventListener("update", onEnded);
3091
+ };
3092
+ const onEnded = () => {
3093
+ removeListeners();
3094
+ resolve();
3095
+ };
3096
+ const onErred = (_event) => {
3097
+ removeListeners();
3098
+ reject(new SourceBufferError());
3099
+ };
3100
+ const onAborted = () => {
3101
+ removeListeners();
3102
+ reject(new AbortError2());
3103
+ };
3104
+ sourceBuffer.addEventListener("error", onErred);
3105
+ sourceBuffer.addEventListener("abort", onAborted);
3106
+ sourceBuffer.addEventListener("update", onEnded);
3107
+ });
3108
+ }
3109
+
3110
+ // src/streaming/buffering/MediaSourceController.ts
3111
+ var DURATION_PADDING = 0.1;
3052
3112
  var MediaSourceControllerImpl = class extends EventHostImpl5 {
3053
3113
  constructor(deps) {
3054
3114
  super();
3055
- __publicField(this, "sourceBufferCount", 0);
3115
+ __publicField(this, "deps", deps);
3116
+ __publicField(this, "sourceBuffers", /* @__PURE__ */ new Set());
3056
3117
  __publicField(this, "mediaSource");
3057
3118
  __publicField(this, "disposer", /* @__PURE__ */ createDisposer7());
3058
3119
  __publicField(this, "contentTypes", null);
3120
+ __publicField(this, "durationSet", false);
3121
+ /**
3122
+ * Token for the in-flight duration update; used to discard stale results when
3123
+ * the timeline changes or the source closes mid-fetch.
3124
+ */
3125
+ __publicField(this, "durationToken", 0);
3126
+ __publicField(this, "errorHandler", (error) => {
3127
+ if (isSilentError2(error)) return;
3128
+ this.dispatch("error", {
3129
+ target: this,
3130
+ error
3131
+ });
3132
+ });
3059
3133
  /**
3060
- * Emits a 'readyToAppend' event if all source buffers have been created.
3134
+ * Subscription to mediaTimelineTransformed; only attached while the media source is open
3135
+ * so the timeline pipeline isn't forced to evaluate before the source has opened.
3136
+ */
3137
+ __publicField(this, "timelineSub", null);
3138
+ /**
3139
+ * Emits a 'readyToAppend' event if all source buffers have been created and the duration
3140
+ * has been applied to the media source.
3061
3141
  */
3062
3142
  __publicField(this, "checkReady", () => {
3063
3143
  if (this.readyToAppend) this.dispatch("readyToAppend", {});
@@ -3070,18 +3150,16 @@ var MediaSourceControllerImpl = class extends EventHostImpl5 {
3070
3150
  value.then((contentTypes) => {
3071
3151
  this.contentTypes = contentTypes;
3072
3152
  this.checkReady();
3073
- }).catch((error) => {
3074
- this.dispatch("error", {
3075
- target: this,
3076
- error
3077
- });
3078
- });
3153
+ }).catch(this.errorHandler);
3079
3154
  })
3080
3155
  );
3081
3156
  }
3082
3157
  get [Symbol.toStringTag]() {
3083
3158
  return "MediaSourceControllerImpl";
3084
3159
  }
3160
+ get sourceBufferCount() {
3161
+ return this.sourceBuffers.size;
3162
+ }
3085
3163
  initializeEvents() {
3086
3164
  const domEvents = new DomEventHost4(
3087
3165
  this.mediaSource
@@ -3093,12 +3171,37 @@ var MediaSourceControllerImpl = class extends EventHostImpl5 {
3093
3171
  ]) {
3094
3172
  domEvents.on(toLowerCase2(key), () => this.dispatch(key, {}));
3095
3173
  }
3174
+ this.timelineSub = this.deps.mediaTimelineTransformed.onData(() => {
3175
+ this.refreshDuration().catch(this.errorHandler);
3176
+ });
3177
+ this.on("sourceOpen", () => {
3178
+ this.refreshDuration().catch(this.errorHandler);
3179
+ });
3180
+ this.on("sourceClose", () => {
3181
+ this.durationSet = false;
3182
+ ++this.durationToken;
3183
+ });
3096
3184
  }
3097
- get duration() {
3098
- return this.mediaSource.duration;
3099
- }
3100
- set duration(value) {
3185
+ /**
3186
+ * Sets the duration on the media source from the current media timeline.
3187
+ * Live streams use LIVE_DURATION since not all browsers support +Infinity duration.
3188
+ *
3189
+ * MSE throws InvalidStateError if duration is set while any source buffer is updating,
3190
+ * so we wait for all tracked source buffers to be idle first.
3191
+ */
3192
+ async refreshDuration() {
3193
+ const timelinePromise = this.deps.mediaTimelineTransformed.value;
3194
+ const token = ++this.durationToken;
3195
+ const timeline = await timelinePromise;
3196
+ const duration = await timeline.getDuration();
3197
+ const value = duration === Infinity ? LIVE_DURATION : duration + DURATION_PADDING;
3198
+ await Promise.all(Array.from(this.sourceBuffers, nextSourceBufferIdle));
3199
+ if (token !== this.durationToken || this.mediaSource.readyState !== "open" || closeTo4(this.mediaSource.duration, value, 0.1))
3200
+ return;
3201
+ logDebug7(this, `setting duration: ${value}`);
3101
3202
  this.mediaSource.duration = value;
3203
+ this.durationSet = true;
3204
+ this.checkReady();
3102
3205
  }
3103
3206
  get readyState() {
3104
3207
  return this.mediaSource.readyState;
@@ -3121,7 +3224,7 @@ var MediaSourceControllerImpl = class extends EventHostImpl5 {
3121
3224
  throw new MediaSourceError("error creating source buffer", error);
3122
3225
  }
3123
3226
  sourceBuffer.mode = "sequence";
3124
- ++this.sourceBufferCount;
3227
+ this.sourceBuffers.add(sourceBuffer);
3125
3228
  this.checkReady();
3126
3229
  const dispose = () => {
3127
3230
  logDebug7(
@@ -3132,7 +3235,7 @@ var MediaSourceControllerImpl = class extends EventHostImpl5 {
3132
3235
  if (mediaSource.readyState !== "closed") {
3133
3236
  mediaSource.removeSourceBuffer(sourceBuffer);
3134
3237
  }
3135
- --this.sourceBufferCount;
3238
+ this.sourceBuffers.delete(sourceBuffer);
3136
3239
  };
3137
3240
  return {
3138
3241
  value: sourceBuffer,
@@ -3148,17 +3251,20 @@ var MediaSourceControllerImpl = class extends EventHostImpl5 {
3148
3251
  }
3149
3252
  get readyToAppend() {
3150
3253
  var _a;
3151
- return ((_a = this.contentTypes) == null ? void 0 : _a.size) === this.sourceBufferCount;
3254
+ return this.durationSet && ((_a = this.contentTypes) == null ? void 0 : _a.size) === this.sourceBufferCount;
3152
3255
  }
3153
3256
  dispose() {
3257
+ var _a;
3154
3258
  super.dispose();
3259
+ (_a = this.timelineSub) == null ? void 0 : _a.call(this);
3260
+ this.timelineSub = null;
3155
3261
  this.disposer.dispose();
3156
3262
  }
3157
3263
  };
3158
- var MediaSourceError = class _MediaSourceError extends ReportableError3 {
3264
+ var MediaSourceError = class _MediaSourceError extends ReportableError4 {
3159
3265
  constructor(message, reason) {
3160
- super(message, ErrorOrigin11.INTERNAL, ErrorLevel4.FATAL);
3161
- this.reason = reason;
3266
+ super(message, ErrorOrigin12.INTERNAL, ErrorLevel4.FATAL);
3267
+ __publicField(this, "reason", reason);
3162
3268
  Object.setPrototypeOf(this, _MediaSourceError.prototype);
3163
3269
  }
3164
3270
  get [Symbol.toStringTag]() {
@@ -3176,7 +3282,7 @@ import { data as data2 } from "@amazon/vinyl-observable";
3176
3282
  import { createAbortSlot as createAbortSlot2, createDisposer as createDisposer8, logDebug as logDebug8 } from "@amazon/vinyl-util";
3177
3283
  var DashManifestControllerImpl = class {
3178
3284
  constructor(deps) {
3179
- this.deps = deps;
3285
+ __publicField(this, "deps", deps);
3180
3286
  __publicField(this, "_data", /* @__PURE__ */ data2(
3181
3287
  /* @__PURE__ */ Promise.reject(/* @__PURE__ */ new Error("manifest not loaded"))
3182
3288
  ));
@@ -3264,59 +3370,12 @@ import {
3264
3370
  logDebug as logDebug9,
3265
3371
  nextEventAsPromise as nextEventAsPromise3
3266
3372
  } from "@amazon/vinyl-util";
3267
-
3268
- // src/util/media/sourceBuffer.ts
3269
- import { promise } from "@amazon/vinyl-util";
3270
-
3271
- // src/streaming/buffering/error/SourceBufferError.ts
3272
- import { ErrorOrigin as ErrorOrigin12 } from "@amazon/vinyl-util";
3273
- import { ReportableError as ReportableError4 } from "@amazon/vinyl-util";
3274
- var SourceBufferError = class _SourceBufferError extends ReportableError4 {
3275
- get [Symbol.toStringTag]() {
3276
- return "SourceBufferError";
3277
- }
3278
- constructor(message = `A SourceBuffer error has occurred.`, origin = ErrorOrigin12.MEDIA) {
3279
- super(message, origin);
3280
- Object.setPrototypeOf(this, _SourceBufferError.prototype);
3281
- }
3282
- };
3283
-
3284
- // src/util/media/sourceBuffer.ts
3285
- import { AbortError as AbortError2 } from "@amazon/vinyl-util";
3286
- function nextSourceBufferIdle(sourceBuffer) {
3287
- if (!sourceBuffer) return Promise.resolve();
3288
- if (!sourceBuffer.updating) return Promise.resolve();
3289
- return promise((resolve, reject) => {
3290
- const removeListeners = () => {
3291
- sourceBuffer.removeEventListener("error", onErred);
3292
- sourceBuffer.removeEventListener("abort", onAborted);
3293
- sourceBuffer.removeEventListener("update", onEnded);
3294
- };
3295
- const onEnded = () => {
3296
- removeListeners();
3297
- resolve();
3298
- };
3299
- const onErred = (_event) => {
3300
- removeListeners();
3301
- reject(new SourceBufferError());
3302
- };
3303
- const onAborted = () => {
3304
- removeListeners();
3305
- reject(new AbortError2());
3306
- };
3307
- sourceBuffer.addEventListener("error", onErred);
3308
- sourceBuffer.addEventListener("abort", onAborted);
3309
- sourceBuffer.addEventListener("update", onEnded);
3310
- });
3311
- }
3312
-
3313
- // src/streaming/buffering/SourceBufferController.ts
3314
3373
  var APPEND_WINDOW_START_OFFSET = 0.05;
3315
3374
  var APPEND_WINDOW_END_OFFSET = 0.01;
3316
3375
  var READY_TO_APPEND_TIMEOUT = 30;
3317
3376
  var SourceBufferControllerImpl = class {
3318
3377
  constructor(deps, contentType2) {
3319
- this.contentType = contentType2;
3378
+ __publicField(this, "contentType", contentType2);
3320
3379
  __publicField(this, "sourceBufferRef", null);
3321
3380
  __publicField(this, "mimeType", null);
3322
3381
  __publicField(this, "queue", /* @__PURE__ */ createTaskQueue());
@@ -3473,7 +3532,7 @@ import {
3473
3532
  createTaskQueue as createTaskQueue2,
3474
3533
  EventHostImpl as EventHostImpl6,
3475
3534
  getLogLevel,
3476
- isSilentError as isSilentError2,
3535
+ isSilentError as isSilentError3,
3477
3536
  LinkedList,
3478
3537
  logDebug as logDebug10,
3479
3538
  LogLevel,
@@ -3486,7 +3545,6 @@ import {
3486
3545
  var SEGMENT_START_AFFORDANCE = 0.2;
3487
3546
 
3488
3547
  // src/streaming/buffering/BufferingController.ts
3489
- var DURATION_PADDING = 0.1;
3490
3548
  var POLL_BUFFER_THROTTLE = 0.1;
3491
3549
  var QUOTA_REACHED_SCALE = 0.8;
3492
3550
  var MIN_APPEND_SIZE = 524288;
@@ -3511,8 +3569,8 @@ var defaultBufferingControllerOptions = {
3511
3569
  var BufferingControllerImpl = class extends EventHostImpl6 {
3512
3570
  constructor(deps, contentType2, options) {
3513
3571
  super();
3514
- this.deps = deps;
3515
- this.contentType = contentType2;
3572
+ __publicField(this, "deps", deps);
3573
+ __publicField(this, "contentType", contentType2);
3516
3574
  __publicField(this, "options");
3517
3575
  __publicField(this, "mediaSourceController");
3518
3576
  __publicField(this, "playbackController");
@@ -3599,7 +3657,7 @@ var BufferingControllerImpl = class extends EventHostImpl6 {
3599
3657
  }
3600
3658
  }
3601
3659
  }
3602
- if (!isSilentError2(error)) {
3660
+ if (!isSilentError3(error)) {
3603
3661
  this._error = error;
3604
3662
  this.dispatch("error", {
3605
3663
  target: this,
@@ -3648,7 +3706,6 @@ var BufferingControllerImpl = class extends EventHostImpl6 {
3648
3706
  );
3649
3707
  const onMediaSourceOpen2 = () => {
3650
3708
  logDebug10(this, "media source opened");
3651
- this.refreshDuration();
3652
3709
  this.pollBufferImmediate();
3653
3710
  };
3654
3711
  if (this.mediaSourceOpen) {
@@ -3659,7 +3716,6 @@ var BufferingControllerImpl = class extends EventHostImpl6 {
3659
3716
  add(
3660
3717
  this.segmentController.on("change", () => {
3661
3718
  this.reopen = true;
3662
- this.refreshDuration();
3663
3719
  this.pollBufferImmediate();
3664
3720
  })
3665
3721
  );
@@ -3689,18 +3745,6 @@ var BufferingControllerImpl = class extends EventHostImpl6 {
3689
3745
  get busy() {
3690
3746
  return this.queue.running > 0;
3691
3747
  }
3692
- /**
3693
- * Enqueues a duration update.
3694
- */
3695
- refreshDuration() {
3696
- this.sourceBufferController.enqueue(async () => {
3697
- if (!this.mediaSourceOpen) return;
3698
- const duration = await this.segmentController.getDuration();
3699
- const newDuration = duration == null ? LIVE_DURATION : duration + DURATION_PADDING;
3700
- logDebug10(this, `setting duration: ${newDuration}`);
3701
- this.mediaSourceController.duration = newDuration;
3702
- }).catch(this.handleError);
3703
- }
3704
3748
  shouldAppend() {
3705
3749
  return this.active && !this.busy && !this.error && !this.mediaSourceClosed && (!this.bufferingEnded || this.reopen) && // Return true if the current buffer is less than the minimum buffer and the playhead has not reached duration.
3706
3750
  this.getBufferedTime() <= this.options.minBuffer;
@@ -3922,12 +3966,12 @@ var BufferingControllerImpl = class extends EventHostImpl6 {
3922
3966
  import {
3923
3967
  Abort as Abort3,
3924
3968
  clone as clone2,
3925
- closeTo as closeTo4,
3969
+ closeTo as closeTo5,
3926
3970
  createDisposer as createDisposer10,
3927
3971
  EventHostImpl as EventHostImpl7,
3928
3972
  getNetworkState,
3929
3973
  getOrSet as getOrSet3,
3930
- isSilentError as isSilentError4,
3974
+ isSilentError as isSilentError5,
3931
3975
  logDebug as logDebug11,
3932
3976
  logError,
3933
3977
  noop as noop4,
@@ -3940,7 +3984,7 @@ import {
3940
3984
  // src/streaming/SegmentDataSlot.ts
3941
3985
  import {
3942
3986
  createAbortSlot as createAbortSlot4,
3943
- isSilentError as isSilentError3
3987
+ isSilentError as isSilentError4
3944
3988
  } from "@amazon/vinyl-util";
3945
3989
  var SegmentStatus = /* @__PURE__ */ ((SegmentStatus2) => {
3946
3990
  SegmentStatus2["INACTIVE"] = "inactive";
@@ -3951,7 +3995,7 @@ var SegmentStatus = /* @__PURE__ */ ((SegmentStatus2) => {
3951
3995
  })(SegmentStatus || {});
3952
3996
  var SegmentDataSlot = class {
3953
3997
  constructor(requestSegmentData) {
3954
- this.requestSegmentData = requestSegmentData;
3998
+ __publicField(this, "requestSegmentData", requestSegmentData);
3955
3999
  /**
3956
4000
  * Called when the status has changed.
3957
4001
  */
@@ -3991,7 +4035,7 @@ var SegmentDataSlot = class {
3991
4035
  this.status = "resolved" /* RESOLVED */;
3992
4036
  return result;
3993
4037
  }).catch((error) => {
3994
- if (isSilentError3(error)) {
4038
+ if (isSilentError4(error)) {
3995
4039
  this.bufferPromise = null;
3996
4040
  this.status = "inactive" /* INACTIVE */;
3997
4041
  } else {
@@ -4088,8 +4132,8 @@ var defaultSegmentControllerBaseOptions = {
4088
4132
  var SegmentControllerImpl = class extends EventHostImpl7 {
4089
4133
  constructor(deps, contentType2, options) {
4090
4134
  super();
4091
- this.deps = deps;
4092
- this.contentType = contentType2;
4135
+ __publicField(this, "deps", deps);
4136
+ __publicField(this, "contentType", contentType2);
4093
4137
  __publicField(this, "_active", false);
4094
4138
  __publicField(this, "_fetchedRanges", /* @__PURE__ */ new RangesImpl());
4095
4139
  __publicField(this, "_startTime", 0);
@@ -4160,7 +4204,7 @@ var SegmentControllerImpl = class extends EventHostImpl7 {
4160
4204
  )
4161
4205
  ));
4162
4206
  __publicField(this, "prefetchErrorHandler", (error) => {
4163
- if (!isSilentError4(error)) {
4207
+ if (!isSilentError5(error)) {
4164
4208
  logError(this, "Error prefetching segment", error);
4165
4209
  this._error = error;
4166
4210
  }
@@ -4193,14 +4237,6 @@ var SegmentControllerImpl = class extends EventHostImpl7 {
4193
4237
  get error() {
4194
4238
  return this._error;
4195
4239
  }
4196
- async getDuration() {
4197
- const timeline = await this.deps.mediaTimelineTransformed.value;
4198
- if (timeline.getDuration) return timeline.getDuration();
4199
- const periods = timeline.periods;
4200
- if (periods.length === 0) return null;
4201
- const last4 = periods[periods.length - 1];
4202
- return last4.endTime === Infinity ? null : last4.endTime;
4203
- }
4204
4240
  /**
4205
4241
  * Gets the period at the given time, using a cache for the last returned period.
4206
4242
  */
@@ -4404,7 +4440,7 @@ var SegmentControllerImpl = class extends EventHostImpl7 {
4404
4440
  );
4405
4441
  if (insertionIndex > 0) {
4406
4442
  const cachedSegment2 = this.cachedSegments[insertionIndex - 1];
4407
- if (closeTo4(newSlot.startTime, cachedSegment2.startTime)) {
4443
+ if (closeTo5(newSlot.startTime, cachedSegment2.startTime)) {
4408
4444
  return cachedSegment2;
4409
4445
  }
4410
4446
  }
@@ -4607,7 +4643,8 @@ var qualitySelectorImplOptionsValidator = /* @__PURE__ */ object9({
4607
4643
  strategy: /* @__PURE__ */ enumOf3(AbrStrategy).optional(),
4608
4644
  bandwidthMultiplierLow: /* @__PURE__ */ number4().optional(),
4609
4645
  bandwidthMultiplierHigh: /* @__PURE__ */ number4().optional(),
4610
- restrictDecoderChangeOnAudioAbrUp: /* @__PURE__ */ boolean().optional()
4646
+ restrictDecoderChangeOnAudioAbrUp: /* @__PURE__ */ boolean().optional(),
4647
+ maxBandwidth: /* @__PURE__ */ number4().maybe().optional()
4611
4648
  });
4612
4649
  var defaultQualitySelectorImplOptions = {
4613
4650
  highBufferThreshold: 15,
@@ -4615,7 +4652,8 @@ var defaultQualitySelectorImplOptions = {
4615
4652
  strategy: "best" /* BEST */,
4616
4653
  bandwidthMultiplierLow: 0.4,
4617
4654
  bandwidthMultiplierHigh: 0.9,
4618
- restrictDecoderChangeOnAudioAbrUp: false
4655
+ restrictDecoderChangeOnAudioAbrUp: false,
4656
+ maxBandwidth: null
4619
4657
  };
4620
4658
  var QualitySelectorImpl = class {
4621
4659
  constructor(deps) {
@@ -4642,7 +4680,8 @@ var QualitySelectorImpl = class {
4642
4680
  lowBufferThreshold,
4643
4681
  bandwidthMultiplierLow,
4644
4682
  bandwidthMultiplierHigh,
4645
- restrictDecoderChangeOnAudioAbrUp
4683
+ restrictDecoderChangeOnAudioAbrUp,
4684
+ maxBandwidth
4646
4685
  } = this.options;
4647
4686
  const previousQuality = prefetchState.previousQuality;
4648
4687
  const previousIndex = previousQuality == null ? -1 : qualities.findIndex(
@@ -4659,7 +4698,10 @@ var QualitySelectorImpl = class {
4659
4698
  const bandwidthEstimate = getNetworkMetrics().estimatedDownlinkBandwidth;
4660
4699
  const bufferRatio = highBufferThreshold > 0 ? clamp2(fetchedTime / highBufferThreshold, 0, 1) : 1;
4661
4700
  const bandwidthMultiplier = prefetchState.active ? lerp(bandwidthMultiplierLow, bandwidthMultiplierHigh, bufferRatio) : bandwidthMultiplierHigh;
4662
- const bandwidth = (prefetchState.active ? Math.min(bandwidthEstimate.ewmaLow, bandwidthEstimate.latest) : bandwidthEstimate.ewmaLow) * bandwidthMultiplier;
4701
+ let bandwidth = (prefetchState.active ? Math.min(bandwidthEstimate.ewmaLow, bandwidthEstimate.latest) : bandwidthEstimate.ewmaLow) * bandwidthMultiplier;
4702
+ if (maxBandwidth != null && maxBandwidth < bandwidth) {
4703
+ bandwidth = maxBandwidth;
4704
+ }
4663
4705
  let restrictDecoderId = null;
4664
4706
  let restrictSwitchingGroupIds = null;
4665
4707
  if (previousQuality && previousIndex >= 0) {
@@ -4749,7 +4791,7 @@ import { createContainer as createContainer2 } from "@amazon/vinyl-di";
4749
4791
  var ContentStreamImpl = class extends EventHostImpl8 {
4750
4792
  constructor(dependencyFactories, contentType2) {
4751
4793
  super();
4752
- this.contentType = contentType2;
4794
+ __publicField(this, "contentType", contentType2);
4753
4795
  __publicField(this, "disposer", /* @__PURE__ */ createDisposer12());
4754
4796
  __publicField(this, "segmentController");
4755
4797
  __publicField(this, "bufferingController");
@@ -5730,7 +5772,7 @@ import { data as data3 } from "@amazon/vinyl-observable";
5730
5772
  import { createAbortSlot as createAbortSlot5, createDisposer as createDisposer13, logDebug as logDebug12 } from "@amazon/vinyl-util";
5731
5773
  var HlsManifestControllerImpl = class {
5732
5774
  constructor(manifestProvider) {
5733
- this.manifestProvider = manifestProvider;
5775
+ __publicField(this, "manifestProvider", manifestProvider);
5734
5776
  __publicField(this, "_data", /* @__PURE__ */ data3(
5735
5777
  /* @__PURE__ */ Promise.reject(/* @__PURE__ */ new Error("manifest not loaded"))
5736
5778
  ));
@@ -6040,17 +6082,21 @@ function buildHlsMediaTimeline(deps, data4) {
6040
6082
  minBufferTime: DEFAULT_MIN_BUFFER_TIME,
6041
6083
  async getDuration() {
6042
6084
  if (cachedDuration != null) return cachedDuration;
6043
- if (mainPlaylist.variants.length === 0) return null;
6044
- try {
6045
- const playlist = await data4.getMediaPlaylist(
6046
- mainPlaylist.variants[0].uri
6085
+ if (mainPlaylist.variants.length === 0) {
6086
+ throw new Error("Unable to determine HLS duration: no variants");
6087
+ }
6088
+ const playlist = await data4.getMediaPlaylist(
6089
+ mainPlaylist.variants[0].uri
6090
+ );
6091
+ if (!playlist.ended) return Infinity;
6092
+ if (playlist.segments.length === 0) {
6093
+ throw new Error(
6094
+ "Unable to determine HLS duration: no segments in media playlist"
6047
6095
  );
6048
- let total = 0;
6049
- for (const seg of playlist.segments) total += seg.duration;
6050
- cachedDuration = total > 0 ? total : null;
6051
- } catch (e) {
6052
- return null;
6053
6096
  }
6097
+ let total = 0;
6098
+ for (const seg of playlist.segments) total += seg.duration;
6099
+ cachedDuration = total;
6054
6100
  return cachedDuration;
6055
6101
  }
6056
6102
  };
@@ -6102,10 +6148,10 @@ import { ErrorLevel as ErrorLevel5, ErrorOrigin as ErrorOrigin15, ReportableErro
6102
6148
  var CommonMediaKeySessionError = class _CommonMediaKeySessionError extends ReportableError5 {
6103
6149
  constructor(code, codeStr, systemCode, systemCodeStr) {
6104
6150
  super(codeStr, ErrorOrigin15.DRM, ErrorLevel5.WARN);
6105
- this.code = code;
6106
- this.codeStr = codeStr;
6107
- this.systemCode = systemCode;
6108
- this.systemCodeStr = systemCodeStr;
6151
+ __publicField(this, "code", code);
6152
+ __publicField(this, "codeStr", codeStr);
6153
+ __publicField(this, "systemCode", systemCode);
6154
+ __publicField(this, "systemCodeStr", systemCodeStr);
6109
6155
  Object.setPrototypeOf(this, _CommonMediaKeySessionError.prototype);
6110
6156
  }
6111
6157
  get [Symbol.toStringTag]() {
@@ -6136,10 +6182,10 @@ import { ErrorLevel as ErrorLevel6, ReportableError as ReportableError6 } from "
6136
6182
  var DrmError = class _DrmError extends ReportableError6 {
6137
6183
  constructor(message, extra = null, origin = ErrorOrigin16.DRM, level = ErrorLevel6.FATAL) {
6138
6184
  super(message, origin, level);
6139
- this.message = message;
6140
- this.extra = extra;
6141
- this.origin = origin;
6142
- this.level = level;
6185
+ __publicField(this, "message", message);
6186
+ __publicField(this, "extra", extra);
6187
+ __publicField(this, "origin", origin);
6188
+ __publicField(this, "level", level);
6143
6189
  Object.setPrototypeOf(this, _DrmError.prototype);
6144
6190
  }
6145
6191
  get [Symbol.toStringTag]() {
@@ -6189,7 +6235,7 @@ var MsCommonEme = class {
6189
6235
  };
6190
6236
  var MsCommonMediaKeySystemAccess = class {
6191
6237
  constructor(keySystem) {
6192
- this.keySystem = keySystem;
6238
+ __publicField(this, "keySystem", keySystem);
6193
6239
  }
6194
6240
  createMediaKeys() {
6195
6241
  const msMediaKeys = new MSMediaKeys(this.keySystem);
@@ -6200,8 +6246,8 @@ var MsCommonMediaKeySystemAccess = class {
6200
6246
  };
6201
6247
  var MsCommonMediaKeys = class {
6202
6248
  constructor(keySystem, mediaKeys) {
6203
- this.keySystem = keySystem;
6204
- this.mediaKeys = mediaKeys;
6249
+ __publicField(this, "keySystem", keySystem);
6250
+ __publicField(this, "mediaKeys", mediaKeys);
6205
6251
  }
6206
6252
  /**
6207
6253
  * Sets the media keys on the given element.
@@ -6236,10 +6282,10 @@ var MsCommonMediaKeys = class {
6236
6282
  var MsCommonMediaKeySession = class extends EventHostImpl9 {
6237
6283
  constructor(session, mimeType, initDataType, initData) {
6238
6284
  super();
6239
- this.session = session;
6240
- this.mimeType = mimeType;
6241
- this.initDataType = initDataType;
6242
- this.initData = initData;
6285
+ __publicField(this, "session", session);
6286
+ __publicField(this, "mimeType", mimeType);
6287
+ __publicField(this, "initDataType", initDataType);
6288
+ __publicField(this, "initData", initData);
6243
6289
  __publicField(this, "_disposed", false);
6244
6290
  __publicField(this, "messageHandler", (event) => {
6245
6291
  this.dispatch("message", {
@@ -6328,8 +6374,8 @@ var StandardCommonEme = class {
6328
6374
  };
6329
6375
  var StandardCommonMediaKeySystemAccess = class {
6330
6376
  constructor(keySystem, access) {
6331
- this.keySystem = keySystem;
6332
- this.access = access;
6377
+ __publicField(this, "keySystem", keySystem);
6378
+ __publicField(this, "access", access);
6333
6379
  }
6334
6380
  /**
6335
6381
  * @return {Promise<CommonMediaKeys>}
@@ -6341,8 +6387,8 @@ var StandardCommonMediaKeySystemAccess = class {
6341
6387
  };
6342
6388
  var StandardCommonMediaKeys = class {
6343
6389
  constructor(keySystem, mediaKeys) {
6344
- this.keySystem = keySystem;
6345
- this.mediaKeys = mediaKeys;
6390
+ __publicField(this, "keySystem", keySystem);
6391
+ __publicField(this, "mediaKeys", mediaKeys);
6346
6392
  }
6347
6393
  setOnElement(element2) {
6348
6394
  return element2.setMediaKeys(this.mediaKeys);
@@ -6365,10 +6411,10 @@ var StandardCommonMediaKeys = class {
6365
6411
  var StandardCommonMediaKeySession = class extends EventHostImpl10 {
6366
6412
  constructor(session, mimeType, initDataType, initData) {
6367
6413
  super();
6368
- this.session = session;
6369
- this.mimeType = mimeType;
6370
- this.initDataType = initDataType;
6371
- this.initData = initData;
6414
+ __publicField(this, "session", session);
6415
+ __publicField(this, "mimeType", mimeType);
6416
+ __publicField(this, "initDataType", initDataType);
6417
+ __publicField(this, "initData", initData);
6372
6418
  __publicField(this, "_disposed", false);
6373
6419
  __publicField(this, "messageHandler", (event) => {
6374
6420
  this.dispatch("message", {
@@ -6456,7 +6502,7 @@ var WebKitCommonEme = class {
6456
6502
  };
6457
6503
  var WebKitCommonMediaKeySystemAccess = class {
6458
6504
  constructor(keySystem) {
6459
- this.keySystem = keySystem;
6505
+ __publicField(this, "keySystem", keySystem);
6460
6506
  }
6461
6507
  createMediaKeys() {
6462
6508
  const webKitMediaKeys = new WebKitMediaKeys(this.keySystem);
@@ -6469,8 +6515,8 @@ var WebKitCommonMediaKeySystemAccess = class {
6469
6515
  };
6470
6516
  var WebKitCommonMediaKeys = class {
6471
6517
  constructor(keySystem, mediaKeys) {
6472
- this.keySystem = keySystem;
6473
- this.mediaKeys = mediaKeys;
6518
+ __publicField(this, "keySystem", keySystem);
6519
+ __publicField(this, "mediaKeys", mediaKeys);
6474
6520
  }
6475
6521
  /**
6476
6522
  * Sets the media keys on the given element.
@@ -6505,10 +6551,10 @@ var WebKitCommonMediaKeys = class {
6505
6551
  var WebKitCommonMediaKeySession = class extends EventHostImpl11 {
6506
6552
  constructor(session, mimeType, initDataType, initData) {
6507
6553
  super();
6508
- this.session = session;
6509
- this.mimeType = mimeType;
6510
- this.initDataType = initDataType;
6511
- this.initData = initData;
6554
+ __publicField(this, "session", session);
6555
+ __publicField(this, "mimeType", mimeType);
6556
+ __publicField(this, "initDataType", initDataType);
6557
+ __publicField(this, "initData", initData);
6512
6558
  __publicField(this, "_disposed", false);
6513
6559
  __publicField(this, "messageHandler", (event) => {
6514
6560
  this.dispatch("message", {
@@ -6603,7 +6649,7 @@ import {
6603
6649
  createDisposer as createDisposer14,
6604
6650
  ErrorOrigin as ErrorOrigin21,
6605
6651
  EventHostImpl as EventHostImpl12,
6606
- isSilentError as isSilentError5,
6652
+ isSilentError as isSilentError6,
6607
6653
  logDebug as logDebug14,
6608
6654
  logVerbose as logVerbose2,
6609
6655
  memoize as memoize7,
@@ -6762,7 +6808,7 @@ var LICENSE_TIMEOUT_MESSAGE = "License provider timed out after {time}s";
6762
6808
  var DrmControllerImpl = class extends EventHostImpl12 {
6763
6809
  constructor(deps, options) {
6764
6810
  super();
6765
- this.deps = deps;
6811
+ __publicField(this, "deps", deps);
6766
6812
  __publicField(this, "optionsBase");
6767
6813
  __publicField(this, "options");
6768
6814
  __publicField(this, "mediaKeys", null);
@@ -6831,7 +6877,7 @@ var DrmControllerImpl = class extends EventHostImpl12 {
6831
6877
  * When track protections is set again, another error event may be emitted.
6832
6878
  */
6833
6879
  __publicField(this, "handleError", (error) => {
6834
- if (!this._error && !isSilentError5(error)) {
6880
+ if (!this._error && !isSilentError6(error)) {
6835
6881
  this._error = error;
6836
6882
  this.dispatch("error", { error, target: this });
6837
6883
  }
@@ -7273,7 +7319,7 @@ import {
7273
7319
  logDebug as logDebug15,
7274
7320
  createLogPrefix as createLogPrefix5,
7275
7321
  EventHostImpl as EventHostImpl13,
7276
- closeTo as closeTo5
7322
+ closeTo as closeTo6
7277
7323
  } from "@amazon/vinyl-util";
7278
7324
 
7279
7325
  // src/playback/loudness/LoudnessNormalizationControllerImplOptions.ts
@@ -7295,7 +7341,7 @@ var MAX_GAIN_LEVEL = 1;
7295
7341
  var LoudnessNormalizationControllerImpl = class extends EventHostImpl13 {
7296
7342
  constructor(deps) {
7297
7343
  super();
7298
- this.deps = deps;
7344
+ __publicField(this, "deps", deps);
7299
7345
  __publicField(this, "logPrefix", /* @__PURE__ */ createLogPrefix5(this));
7300
7346
  __publicField(this, "_gain", MAX_GAIN_LEVEL);
7301
7347
  __publicField(this, "disposer", /* @__PURE__ */ createDisposer15());
@@ -7332,7 +7378,7 @@ var LoudnessNormalizationControllerImpl = class extends EventHostImpl13 {
7332
7378
  */
7333
7379
  set gain(value) {
7334
7380
  const previousGain = this._gain;
7335
- if (!closeTo5(previousGain, value)) {
7381
+ if (!closeTo6(previousGain, value)) {
7336
7382
  this._gain = value;
7337
7383
  logDebug15(this, "loudness gain adjustment:", {
7338
7384
  trackLoudness: this.trackLoudness,
@@ -7373,12 +7419,11 @@ var LoudnessNormalizationControllerImpl = class extends EventHostImpl13 {
7373
7419
  // src/track/AutoResetController.ts
7374
7420
  import {
7375
7421
  createDisposer as createDisposer16,
7376
- ErrorOrigin as ErrorOrigin22,
7377
7422
  EventHostImpl as EventHostImpl14,
7378
7423
  getNetworkState as getNetworkState2,
7379
7424
  logDebug as logDebug16,
7380
7425
  onAny as onAny3,
7381
- ReportableError as ReportableError7
7426
+ RequestError
7382
7427
  } from "@amazon/vinyl-util";
7383
7428
  var defaultResetControllerOptions = {
7384
7429
  enabled: true,
@@ -7388,7 +7433,7 @@ var defaultResetControllerOptions = {
7388
7433
  var AutoResetControllerImpl = class extends EventHostImpl14 {
7389
7434
  constructor(deps, options) {
7390
7435
  super();
7391
- this.deps = deps;
7436
+ __publicField(this, "deps", deps);
7392
7437
  __publicField(this, "options");
7393
7438
  __publicField(this, "_error", null);
7394
7439
  __publicField(this, "watchSub", null);
@@ -7412,38 +7457,50 @@ var AutoResetControllerImpl = class extends EventHostImpl14 {
7412
7457
  }
7413
7458
  setError(error) {
7414
7459
  if (!this.options.enabled || this._error) return;
7415
- if (error instanceof ReportableError7 && error.origin === ErrorOrigin22.SERVICE_INTERNAL) {
7460
+ if (error instanceof RequestError && error.response == null) {
7416
7461
  this._error = error;
7417
- this.setWatching(true);
7462
+ this.setResetPending(true);
7418
7463
  }
7419
7464
  }
7420
- setWatching(value) {
7465
+ get resetPending() {
7466
+ return this.watchSub != null;
7467
+ }
7468
+ setResetPending(value) {
7421
7469
  var _a;
7422
- logDebug16(this, "setWatching", value);
7470
+ if (this.resetPending === value) {
7471
+ logDebug16(this, "setResetPending", value, "no-op");
7472
+ return;
7473
+ }
7474
+ logDebug16(this, "setResetPending", value);
7423
7475
  (_a = this.watchSub) == null ? void 0 : _a.call(this);
7424
7476
  this.watchSub = null;
7425
- if (!value) return;
7426
- const networkState = getNetworkState2();
7427
- const { add, dispose: watchSub } = createDisposer16();
7428
- this.watchSub = watchSub;
7429
- add(
7430
- networkState.on("online", () => {
7431
- logDebug16(this, "online, emitting reset");
7432
- this.reset();
7433
- })
7434
- );
7435
- const intervalId = setTimeout(() => {
7436
- if (this.currentRetry++ < this.options.maxRetries) {
7437
- if (networkState.onLine) {
7438
- logDebug16(this, "interval, emitting reset");
7477
+ if (value) {
7478
+ const networkState = getNetworkState2();
7479
+ const { add, dispose: watchSub } = createDisposer16();
7480
+ this.watchSub = watchSub;
7481
+ add(
7482
+ networkState.on("online", () => {
7483
+ logDebug16(this, "online, emitting reset");
7439
7484
  this.reset();
7485
+ })
7486
+ );
7487
+ const intervalId = setTimeout(() => {
7488
+ if (this.currentRetry++ < this.options.maxRetries) {
7489
+ if (networkState.onLine) {
7490
+ logDebug16(this, "interval, emitting reset");
7491
+ this.reset();
7492
+ }
7493
+ } else {
7494
+ logDebug16(this, "max retries exhausted, pausing playback");
7495
+ this.setResetPending(false);
7440
7496
  }
7441
- } else {
7442
- logDebug16(this, "max retries exhausted, pausing playback");
7443
- this.setWatching(false);
7444
- }
7445
- }, this.options.retryInterval * 1e3);
7446
- add(() => clearTimeout(intervalId));
7497
+ }, this.options.retryInterval * 1e3);
7498
+ add(() => clearTimeout(intervalId));
7499
+ }
7500
+ this.dispatch("resetPendingChange", {
7501
+ previous: !value,
7502
+ current: value
7503
+ });
7447
7504
  }
7448
7505
  reset() {
7449
7506
  if (!this._error) return;
@@ -7453,7 +7510,7 @@ var AutoResetControllerImpl = class extends EventHostImpl14 {
7453
7510
  clear() {
7454
7511
  if (!this._error) return;
7455
7512
  this._error = null;
7456
- this.setWatching(false);
7513
+ this.setResetPending(false);
7457
7514
  }
7458
7515
  get disposed() {
7459
7516
  return this.disposer.disposed;
@@ -7543,7 +7600,7 @@ var locale2 = {
7543
7600
  var DEFAULT_MAX_PLAYERS = 5;
7544
7601
  var PlayerRegistryImpl = class {
7545
7602
  constructor(maxPlayersWarning = DEFAULT_MAX_PLAYERS) {
7546
- this.maxPlayersWarning = maxPlayersWarning;
7603
+ __publicField(this, "maxPlayersWarning", maxPlayersWarning);
7547
7604
  __publicField(this, "_players", []);
7548
7605
  __publicField(this, "gaveMaxPlayersWarning", false);
7549
7606
  }
@@ -7594,7 +7651,7 @@ import {
7594
7651
  import { parseVersion } from "@amazon/vinyl-util";
7595
7652
  var vinylVersion = /* @__PURE__ */ parseVersion(
7596
7653
  /* istanbul ignore next */
7597
- "1.1.1"
7654
+ "1.2.0"
7598
7655
  );
7599
7656
 
7600
7657
  // src/global/globalRef.ts
@@ -7697,6 +7754,9 @@ var VinylPlayer = class extends EventHostImpl15 {
7697
7754
  get trackController() {
7698
7755
  return this.deps.trackController;
7699
7756
  }
7757
+ get autoResetController() {
7758
+ return this.deps.autoResetController;
7759
+ }
7700
7760
  redispatchSubControllerEvents() {
7701
7761
  const add = this.disposer.add;
7702
7762
  add(
@@ -7773,11 +7833,16 @@ var VinylPlayer = class extends EventHostImpl15 {
7773
7833
  }
7774
7834
  initializeAutoResetHandling() {
7775
7835
  const { add } = this.disposer;
7776
- const { autoResetController } = this.deps;
7777
7836
  this.on("error", (event) => {
7778
- autoResetController.setError(event.error);
7837
+ this.autoResetController.setError(event.error);
7779
7838
  });
7780
- add(autoResetController.on("reset", () => this.reset()));
7839
+ add(this.autoResetController.on("reset", () => this.reset()));
7840
+ add(
7841
+ this.autoResetController.on(
7842
+ "resetPendingChange",
7843
+ (event) => this.dispatch("resetPendingChange", event)
7844
+ )
7845
+ );
7781
7846
  }
7782
7847
  initializePreferredLanguageHandling() {
7783
7848
  const { add } = this.disposer;
@@ -7848,6 +7913,17 @@ var VinylPlayer = class extends EventHostImpl15 {
7848
7913
  get error() {
7849
7914
  return this._error;
7850
7915
  }
7916
+ /**
7917
+ * True when an error has interrupted playback and an automatic reset
7918
+ * is scheduled. This distinguishes transient, potentially recoverable
7919
+ * errors (such as a brief network outage) from terminal errors that
7920
+ * will not trigger a reset on their own.
7921
+ *
7922
+ * Listen to `resetPendingChange` events for changes.
7923
+ */
7924
+ get resetPending() {
7925
+ return this.autoResetController.resetPending;
7926
+ }
7851
7927
  get hasMetadata() {
7852
7928
  return this.playbackController.hasMetadata;
7853
7929
  }
@@ -7924,6 +8000,7 @@ var VinylPlayer = class extends EventHostImpl15 {
7924
8000
  this.drmController.reset();
7925
8001
  this.playbackController.reset();
7926
8002
  this.trackController.reset();
8003
+ this.autoResetController.clear();
7927
8004
  this.dispatch("reset", {});
7928
8005
  }
7929
8006
  //----------------------------------------------------