@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.cjs CHANGED
@@ -380,7 +380,7 @@ function getAudioContext() {
380
380
  // src/client/CapabilitiesImpl.ts
381
381
  var CapabilitiesImpl = class {
382
382
  constructor(deps) {
383
- this.deps = deps;
383
+ __publicField(this, "deps", deps);
384
384
  }
385
385
  get mse() {
386
386
  return supportsMse();
@@ -729,9 +729,9 @@ var InvalidSeekError = class _InvalidSeekError extends import_vinyl_util8.Report
729
729
  import_vinyl_util9.ErrorOrigin.API,
730
730
  import_vinyl_util8.ErrorLevel.WARN
731
731
  );
732
- this.time = time;
733
- this.seekable = seekable;
734
- this.tolerance = tolerance;
732
+ __publicField(this, "time", time);
733
+ __publicField(this, "seekable", seekable);
734
+ __publicField(this, "tolerance", tolerance);
735
735
  Object.setPrototypeOf(this, _InvalidSeekError.prototype);
736
736
  }
737
737
  get [Symbol.toStringTag]() {
@@ -1567,9 +1567,9 @@ var trackBaseOptionsValidator = /* @__PURE__ */ (0, import_vinyl_validation5.obj
1567
1567
  var TrackBase = class extends import_vinyl_util19.EventHostImpl {
1568
1568
  constructor(uri, type, deps) {
1569
1569
  super();
1570
- this.uri = uri;
1571
- this.type = type;
1572
- this.deps = deps;
1570
+ __publicField(this, "uri", uri);
1571
+ __publicField(this, "type", type);
1572
+ __publicField(this, "deps", deps);
1573
1573
  /**
1574
1574
  * The current load options, if this is an active track.
1575
1575
  */
@@ -1667,7 +1667,7 @@ var import_vinyl_util20 = require("@amazon/vinyl-util");
1667
1667
  var FixedPlaybackQuality = class extends import_vinyl_util20.EventHostImpl {
1668
1668
  constructor(fixedQuality, deps) {
1669
1669
  super();
1670
- this.deps = deps;
1670
+ __publicField(this, "deps", deps);
1671
1671
  __publicField(this, "_fixedQuality");
1672
1672
  __publicField(this, "_contentTypes", /* @__PURE__ */ new Set());
1673
1673
  __publicField(this, "_isActive", false);
@@ -1851,8 +1851,8 @@ var emptyMediaQualityMetadata = /* @__PURE__ */ createEmptyMediaQualityMetadata(
1851
1851
  var SourceTrackBase = class extends TrackBase {
1852
1852
  constructor(uri, type, src, deps) {
1853
1853
  super(uri, type, deps);
1854
- this.src = src;
1855
- this.deps = deps;
1854
+ __publicField(this, "src", src);
1855
+ __publicField(this, "deps", deps);
1856
1856
  __publicField(this, "fixedPlaybackQuality");
1857
1857
  __publicField(this, "_resolvedSrc", null);
1858
1858
  const add = this.disposer.add;
@@ -1938,7 +1938,7 @@ function createSourceObjectTrackFactory(deps) {
1938
1938
  var SourceObjectTrack = class extends SourceTrackBase {
1939
1939
  constructor(uri, type, srcObject, deps) {
1940
1940
  super(uri, type, srcObject, deps);
1941
- this.deps = deps;
1941
+ __publicField(this, "deps", deps);
1942
1942
  }
1943
1943
  get [Symbol.toStringTag]() {
1944
1944
  return "SourceObjectTrack";
@@ -1979,7 +1979,7 @@ function createSourceTrackFactory(deps) {
1979
1979
  var SourceTrack = class extends SourceTrackBase {
1980
1980
  constructor(uri, type, src, deps) {
1981
1981
  super(uri, type, src, deps);
1982
- this.deps = deps;
1982
+ __publicField(this, "deps", deps);
1983
1983
  }
1984
1984
  get [Symbol.toStringTag]() {
1985
1985
  return "SourceTrack";
@@ -2041,6 +2041,7 @@ var MseTrack = class extends TrackBase {
2041
2041
  contentTypesPromise.then((contentTypes) => {
2042
2042
  if (this.disposer.disposed) return;
2043
2043
  if ((0, import_vinyl_util27.equalDeep)(this.contentTypes, contentTypes)) return;
2044
+ (0, import_vinyl_util27.logDebug)(this, "content types:", contentTypes);
2044
2045
  this.clearStreams();
2045
2046
  for (const contentType2 of contentTypes) {
2046
2047
  this.createStream(contentType2);
@@ -2365,7 +2366,7 @@ var trackPriority = {
2365
2366
  var TrackControllerImpl = class extends import_vinyl_util30.EventHostImpl {
2366
2367
  constructor(deps, initialOptions) {
2367
2368
  super();
2368
- this.deps = deps;
2369
+ __publicField(this, "deps", deps);
2369
2370
  // When tracks are preloaded, the cache capacity may expand automatically to accommodate.
2370
2371
  __publicField(this, "_autoPreloadCapacity", 0);
2371
2372
  __publicField(this, "trackCache", /* @__PURE__ */ new import_vinyl_util30.LruCache(0));
@@ -2746,9 +2747,18 @@ function flattenRepresentations(period) {
2746
2747
  return out;
2747
2748
  }
2748
2749
  function calculateDuration(manifest) {
2750
+ if (manifest.MPD.type === "dynamic") return Infinity;
2749
2751
  const mpdDuration = manifest.MPD.mediaPresentationDuration;
2750
2752
  if (mpdDuration != null) return mpdDuration;
2751
- return calculatePeriodEnd((0, import_vinyl_util33.last)(manifest.MPD.Period));
2753
+ const lastPeriod = (0, import_vinyl_util33.last)(manifest.MPD.Period);
2754
+ if (!lastPeriod) {
2755
+ throw new Error("Unable to determine manifest duration: no periods");
2756
+ }
2757
+ const end = calculatePeriodEnd(lastPeriod);
2758
+ if (end == null) {
2759
+ throw new Error("Unable to determine manifest duration");
2760
+ }
2761
+ return end;
2752
2762
  }
2753
2763
 
2754
2764
  // src/track/dash/util/uriResolution.ts
@@ -3159,16 +3169,84 @@ function resolveAdaptationSetSwitchingGroupIds(adaptationSet, periodId, adaptati
3159
3169
  }
3160
3170
 
3161
3171
  // src/streaming/buffering/MediaSourceController.ts
3172
+ var import_vinyl_util43 = require("@amazon/vinyl-util");
3173
+
3174
+ // src/util/media/sourceBuffer.ts
3175
+ var import_vinyl_util41 = require("@amazon/vinyl-util");
3176
+
3177
+ // src/streaming/buffering/error/SourceBufferError.ts
3162
3178
  var import_vinyl_util39 = require("@amazon/vinyl-util");
3163
- var MediaSourceControllerImpl = class extends import_vinyl_util39.EventHostImpl {
3179
+ var import_vinyl_util40 = require("@amazon/vinyl-util");
3180
+ var SourceBufferError = class _SourceBufferError extends import_vinyl_util40.ReportableError {
3181
+ get [Symbol.toStringTag]() {
3182
+ return "SourceBufferError";
3183
+ }
3184
+ constructor(message = `A SourceBuffer error has occurred.`, origin = import_vinyl_util39.ErrorOrigin.MEDIA) {
3185
+ super(message, origin);
3186
+ Object.setPrototypeOf(this, _SourceBufferError.prototype);
3187
+ }
3188
+ };
3189
+
3190
+ // src/util/media/sourceBuffer.ts
3191
+ var import_vinyl_util42 = require("@amazon/vinyl-util");
3192
+ function nextSourceBufferIdle(sourceBuffer) {
3193
+ if (!sourceBuffer) return Promise.resolve();
3194
+ if (!sourceBuffer.updating) return Promise.resolve();
3195
+ return (0, import_vinyl_util41.promise)((resolve, reject) => {
3196
+ const removeListeners = () => {
3197
+ sourceBuffer.removeEventListener("error", onErred);
3198
+ sourceBuffer.removeEventListener("abort", onAborted);
3199
+ sourceBuffer.removeEventListener("update", onEnded);
3200
+ };
3201
+ const onEnded = () => {
3202
+ removeListeners();
3203
+ resolve();
3204
+ };
3205
+ const onErred = (_event) => {
3206
+ removeListeners();
3207
+ reject(new SourceBufferError());
3208
+ };
3209
+ const onAborted = () => {
3210
+ removeListeners();
3211
+ reject(new import_vinyl_util42.AbortError());
3212
+ };
3213
+ sourceBuffer.addEventListener("error", onErred);
3214
+ sourceBuffer.addEventListener("abort", onAborted);
3215
+ sourceBuffer.addEventListener("update", onEnded);
3216
+ });
3217
+ }
3218
+
3219
+ // src/streaming/buffering/MediaSourceController.ts
3220
+ var DURATION_PADDING = 0.1;
3221
+ var MediaSourceControllerImpl = class extends import_vinyl_util43.EventHostImpl {
3164
3222
  constructor(deps) {
3165
3223
  super();
3166
- __publicField(this, "sourceBufferCount", 0);
3224
+ __publicField(this, "deps", deps);
3225
+ __publicField(this, "sourceBuffers", /* @__PURE__ */ new Set());
3167
3226
  __publicField(this, "mediaSource");
3168
- __publicField(this, "disposer", /* @__PURE__ */ (0, import_vinyl_util39.createDisposer)());
3227
+ __publicField(this, "disposer", /* @__PURE__ */ (0, import_vinyl_util43.createDisposer)());
3169
3228
  __publicField(this, "contentTypes", null);
3229
+ __publicField(this, "durationSet", false);
3230
+ /**
3231
+ * Token for the in-flight duration update; used to discard stale results when
3232
+ * the timeline changes or the source closes mid-fetch.
3233
+ */
3234
+ __publicField(this, "durationToken", 0);
3235
+ __publicField(this, "errorHandler", (error) => {
3236
+ if ((0, import_vinyl_util43.isSilentError)(error)) return;
3237
+ this.dispatch("error", {
3238
+ target: this,
3239
+ error
3240
+ });
3241
+ });
3170
3242
  /**
3171
- * Emits a 'readyToAppend' event if all source buffers have been created.
3243
+ * Subscription to mediaTimelineTransformed; only attached while the media source is open
3244
+ * so the timeline pipeline isn't forced to evaluate before the source has opened.
3245
+ */
3246
+ __publicField(this, "timelineSub", null);
3247
+ /**
3248
+ * Emits a 'readyToAppend' event if all source buffers have been created and the duration
3249
+ * has been applied to the media source.
3172
3250
  */
3173
3251
  __publicField(this, "checkReady", () => {
3174
3252
  if (this.readyToAppend) this.dispatch("readyToAppend", {});
@@ -3181,20 +3259,18 @@ var MediaSourceControllerImpl = class extends import_vinyl_util39.EventHostImpl
3181
3259
  value.then((contentTypes) => {
3182
3260
  this.contentTypes = contentTypes;
3183
3261
  this.checkReady();
3184
- }).catch((error) => {
3185
- this.dispatch("error", {
3186
- target: this,
3187
- error
3188
- });
3189
- });
3262
+ }).catch(this.errorHandler);
3190
3263
  })
3191
3264
  );
3192
3265
  }
3193
3266
  get [Symbol.toStringTag]() {
3194
3267
  return "MediaSourceControllerImpl";
3195
3268
  }
3269
+ get sourceBufferCount() {
3270
+ return this.sourceBuffers.size;
3271
+ }
3196
3272
  initializeEvents() {
3197
- const domEvents = new import_vinyl_util39.DomEventHost(
3273
+ const domEvents = new import_vinyl_util43.DomEventHost(
3198
3274
  this.mediaSource
3199
3275
  );
3200
3276
  for (const key of [
@@ -3202,21 +3278,46 @@ var MediaSourceControllerImpl = class extends import_vinyl_util39.EventHostImpl
3202
3278
  "sourceOpen",
3203
3279
  "sourceEnded"
3204
3280
  ]) {
3205
- domEvents.on((0, import_vinyl_util39.toLowerCase)(key), () => this.dispatch(key, {}));
3281
+ domEvents.on((0, import_vinyl_util43.toLowerCase)(key), () => this.dispatch(key, {}));
3206
3282
  }
3283
+ this.timelineSub = this.deps.mediaTimelineTransformed.onData(() => {
3284
+ this.refreshDuration().catch(this.errorHandler);
3285
+ });
3286
+ this.on("sourceOpen", () => {
3287
+ this.refreshDuration().catch(this.errorHandler);
3288
+ });
3289
+ this.on("sourceClose", () => {
3290
+ this.durationSet = false;
3291
+ ++this.durationToken;
3292
+ });
3207
3293
  }
3208
- get duration() {
3209
- return this.mediaSource.duration;
3210
- }
3211
- set duration(value) {
3294
+ /**
3295
+ * Sets the duration on the media source from the current media timeline.
3296
+ * Live streams use LIVE_DURATION since not all browsers support +Infinity duration.
3297
+ *
3298
+ * MSE throws InvalidStateError if duration is set while any source buffer is updating,
3299
+ * so we wait for all tracked source buffers to be idle first.
3300
+ */
3301
+ async refreshDuration() {
3302
+ const timelinePromise = this.deps.mediaTimelineTransformed.value;
3303
+ const token = ++this.durationToken;
3304
+ const timeline = await timelinePromise;
3305
+ const duration = await timeline.getDuration();
3306
+ const value = duration === Infinity ? LIVE_DURATION : duration + DURATION_PADDING;
3307
+ await Promise.all(Array.from(this.sourceBuffers, nextSourceBufferIdle));
3308
+ if (token !== this.durationToken || this.mediaSource.readyState !== "open" || (0, import_vinyl_util43.closeTo)(this.mediaSource.duration, value, 0.1))
3309
+ return;
3310
+ (0, import_vinyl_util43.logDebug)(this, `setting duration: ${value}`);
3212
3311
  this.mediaSource.duration = value;
3312
+ this.durationSet = true;
3313
+ this.checkReady();
3213
3314
  }
3214
3315
  get readyState() {
3215
3316
  return this.mediaSource.readyState;
3216
3317
  }
3217
3318
  createSourceBuffer(contentType2, mimeType) {
3218
3319
  const mediaSource = this.mediaSource;
3219
- (0, import_vinyl_util39.logDebug)(
3320
+ (0, import_vinyl_util43.logDebug)(
3220
3321
  this,
3221
3322
  "create source buffer",
3222
3323
  contentType2,
@@ -3232,10 +3333,10 @@ var MediaSourceControllerImpl = class extends import_vinyl_util39.EventHostImpl
3232
3333
  throw new MediaSourceError("error creating source buffer", error);
3233
3334
  }
3234
3335
  sourceBuffer.mode = "sequence";
3235
- ++this.sourceBufferCount;
3336
+ this.sourceBuffers.add(sourceBuffer);
3236
3337
  this.checkReady();
3237
3338
  const dispose = () => {
3238
- (0, import_vinyl_util39.logDebug)(
3339
+ (0, import_vinyl_util43.logDebug)(
3239
3340
  this,
3240
3341
  "removing source buffer from media source",
3241
3342
  mediaSource.readyState
@@ -3243,7 +3344,7 @@ var MediaSourceControllerImpl = class extends import_vinyl_util39.EventHostImpl
3243
3344
  if (mediaSource.readyState !== "closed") {
3244
3345
  mediaSource.removeSourceBuffer(sourceBuffer);
3245
3346
  }
3246
- --this.sourceBufferCount;
3347
+ this.sourceBuffers.delete(sourceBuffer);
3247
3348
  };
3248
3349
  return {
3249
3350
  value: sourceBuffer,
@@ -3251,7 +3352,7 @@ var MediaSourceControllerImpl = class extends import_vinyl_util39.EventHostImpl
3251
3352
  };
3252
3353
  }
3253
3354
  endOfStream(error) {
3254
- (0, import_vinyl_util39.logDebug)(this, "endOfStream, error:", error);
3355
+ (0, import_vinyl_util43.logDebug)(this, "endOfStream, error:", error);
3255
3356
  this.mediaSource.endOfStream(error);
3256
3357
  }
3257
3358
  createUrl() {
@@ -3259,17 +3360,20 @@ var MediaSourceControllerImpl = class extends import_vinyl_util39.EventHostImpl
3259
3360
  }
3260
3361
  get readyToAppend() {
3261
3362
  var _a;
3262
- return ((_a = this.contentTypes) == null ? void 0 : _a.size) === this.sourceBufferCount;
3363
+ return this.durationSet && ((_a = this.contentTypes) == null ? void 0 : _a.size) === this.sourceBufferCount;
3263
3364
  }
3264
3365
  dispose() {
3366
+ var _a;
3265
3367
  super.dispose();
3368
+ (_a = this.timelineSub) == null ? void 0 : _a.call(this);
3369
+ this.timelineSub = null;
3266
3370
  this.disposer.dispose();
3267
3371
  }
3268
3372
  };
3269
- var MediaSourceError = class _MediaSourceError extends import_vinyl_util39.ReportableError {
3373
+ var MediaSourceError = class _MediaSourceError extends import_vinyl_util43.ReportableError {
3270
3374
  constructor(message, reason) {
3271
- super(message, import_vinyl_util39.ErrorOrigin.INTERNAL, import_vinyl_util39.ErrorLevel.FATAL);
3272
- this.reason = reason;
3375
+ super(message, import_vinyl_util43.ErrorOrigin.INTERNAL, import_vinyl_util43.ErrorLevel.FATAL);
3376
+ __publicField(this, "reason", reason);
3273
3377
  Object.setPrototypeOf(this, _MediaSourceError.prototype);
3274
3378
  }
3275
3379
  get [Symbol.toStringTag]() {
@@ -3277,23 +3381,23 @@ var MediaSourceError = class _MediaSourceError extends import_vinyl_util39.Repor
3277
3381
  }
3278
3382
  toJSON() {
3279
3383
  return __spreadProps(__spreadValues({}, super.toJSON()), {
3280
- reason: (0, import_vinyl_util39.toJson)(this.reason)
3384
+ reason: (0, import_vinyl_util43.toJson)(this.reason)
3281
3385
  });
3282
3386
  }
3283
3387
  };
3284
3388
 
3285
3389
  // src/track/dash/DashManifestController.ts
3286
3390
  var import_vinyl_observable2 = require("@amazon/vinyl-observable");
3287
- var import_vinyl_util40 = require("@amazon/vinyl-util");
3391
+ var import_vinyl_util44 = require("@amazon/vinyl-util");
3288
3392
  var DashManifestControllerImpl = class {
3289
3393
  constructor(deps) {
3290
- this.deps = deps;
3394
+ __publicField(this, "deps", deps);
3291
3395
  __publicField(this, "_data", /* @__PURE__ */ (0, import_vinyl_observable2.data)(
3292
3396
  /* @__PURE__ */ Promise.reject(/* @__PURE__ */ new Error("manifest not loaded"))
3293
3397
  ));
3294
3398
  __publicField(this, "_error", null);
3295
- __publicField(this, "abortSlot", /* @__PURE__ */ (0, import_vinyl_util40.createAbortSlot)());
3296
- __publicField(this, "disposer", /* @__PURE__ */ (0, import_vinyl_util40.createDisposer)());
3399
+ __publicField(this, "abortSlot", /* @__PURE__ */ (0, import_vinyl_util44.createAbortSlot)());
3400
+ __publicField(this, "disposer", /* @__PURE__ */ (0, import_vinyl_util44.createDisposer)());
3297
3401
  this._data.value.catch(() => {
3298
3402
  });
3299
3403
  this.refresh();
@@ -3316,7 +3420,7 @@ var DashManifestControllerImpl = class {
3316
3420
  * previous error before starting a new fetch.
3317
3421
  */
3318
3422
  refresh() {
3319
- (0, import_vinyl_util40.logDebug)(this, "refresh");
3423
+ (0, import_vinyl_util44.logDebug)(this, "refresh");
3320
3424
  this.abort();
3321
3425
  this._error = null;
3322
3426
  const promise2 = this.deps.manifestProvider(this.abortSlot.value);
@@ -3329,7 +3433,7 @@ var DashManifestControllerImpl = class {
3329
3433
  * If the manifest is in an error state, triggers a refresh.
3330
3434
  */
3331
3435
  reset() {
3332
- (0, import_vinyl_util40.logDebug)(this, "reset");
3436
+ (0, import_vinyl_util44.logDebug)(this, "reset");
3333
3437
  if (this._error) {
3334
3438
  this.refresh();
3335
3439
  }
@@ -3366,59 +3470,12 @@ var DashManifestControllerImpl = class {
3366
3470
 
3367
3471
  // src/streaming/buffering/SourceBufferController.ts
3368
3472
  var import_vinyl_util45 = require("@amazon/vinyl-util");
3369
-
3370
- // src/util/media/sourceBuffer.ts
3371
- var import_vinyl_util43 = require("@amazon/vinyl-util");
3372
-
3373
- // src/streaming/buffering/error/SourceBufferError.ts
3374
- var import_vinyl_util41 = require("@amazon/vinyl-util");
3375
- var import_vinyl_util42 = require("@amazon/vinyl-util");
3376
- var SourceBufferError = class _SourceBufferError extends import_vinyl_util42.ReportableError {
3377
- get [Symbol.toStringTag]() {
3378
- return "SourceBufferError";
3379
- }
3380
- constructor(message = `A SourceBuffer error has occurred.`, origin = import_vinyl_util41.ErrorOrigin.MEDIA) {
3381
- super(message, origin);
3382
- Object.setPrototypeOf(this, _SourceBufferError.prototype);
3383
- }
3384
- };
3385
-
3386
- // src/util/media/sourceBuffer.ts
3387
- var import_vinyl_util44 = require("@amazon/vinyl-util");
3388
- function nextSourceBufferIdle(sourceBuffer) {
3389
- if (!sourceBuffer) return Promise.resolve();
3390
- if (!sourceBuffer.updating) return Promise.resolve();
3391
- return (0, import_vinyl_util43.promise)((resolve, reject) => {
3392
- const removeListeners = () => {
3393
- sourceBuffer.removeEventListener("error", onErred);
3394
- sourceBuffer.removeEventListener("abort", onAborted);
3395
- sourceBuffer.removeEventListener("update", onEnded);
3396
- };
3397
- const onEnded = () => {
3398
- removeListeners();
3399
- resolve();
3400
- };
3401
- const onErred = (_event) => {
3402
- removeListeners();
3403
- reject(new SourceBufferError());
3404
- };
3405
- const onAborted = () => {
3406
- removeListeners();
3407
- reject(new import_vinyl_util44.AbortError());
3408
- };
3409
- sourceBuffer.addEventListener("error", onErred);
3410
- sourceBuffer.addEventListener("abort", onAborted);
3411
- sourceBuffer.addEventListener("update", onEnded);
3412
- });
3413
- }
3414
-
3415
- // src/streaming/buffering/SourceBufferController.ts
3416
3473
  var APPEND_WINDOW_START_OFFSET = 0.05;
3417
3474
  var APPEND_WINDOW_END_OFFSET = 0.01;
3418
3475
  var READY_TO_APPEND_TIMEOUT = 30;
3419
3476
  var SourceBufferControllerImpl = class {
3420
3477
  constructor(deps, contentType2) {
3421
- this.contentType = contentType2;
3478
+ __publicField(this, "contentType", contentType2);
3422
3479
  __publicField(this, "sourceBufferRef", null);
3423
3480
  __publicField(this, "mimeType", null);
3424
3481
  __publicField(this, "queue", /* @__PURE__ */ (0, import_vinyl_util45.createTaskQueue)());
@@ -3575,7 +3632,6 @@ var import_vinyl_util46 = require("@amazon/vinyl-util");
3575
3632
  var SEGMENT_START_AFFORDANCE = 0.2;
3576
3633
 
3577
3634
  // src/streaming/buffering/BufferingController.ts
3578
- var DURATION_PADDING = 0.1;
3579
3635
  var POLL_BUFFER_THROTTLE = 0.1;
3580
3636
  var QUOTA_REACHED_SCALE = 0.8;
3581
3637
  var MIN_APPEND_SIZE = 524288;
@@ -3600,8 +3656,8 @@ var defaultBufferingControllerOptions = {
3600
3656
  var BufferingControllerImpl = class extends import_vinyl_util46.EventHostImpl {
3601
3657
  constructor(deps, contentType2, options) {
3602
3658
  super();
3603
- this.deps = deps;
3604
- this.contentType = contentType2;
3659
+ __publicField(this, "deps", deps);
3660
+ __publicField(this, "contentType", contentType2);
3605
3661
  __publicField(this, "options");
3606
3662
  __publicField(this, "mediaSourceController");
3607
3663
  __publicField(this, "playbackController");
@@ -3737,7 +3793,6 @@ var BufferingControllerImpl = class extends import_vinyl_util46.EventHostImpl {
3737
3793
  );
3738
3794
  const onMediaSourceOpen2 = () => {
3739
3795
  (0, import_vinyl_util46.logDebug)(this, "media source opened");
3740
- this.refreshDuration();
3741
3796
  this.pollBufferImmediate();
3742
3797
  };
3743
3798
  if (this.mediaSourceOpen) {
@@ -3748,7 +3803,6 @@ var BufferingControllerImpl = class extends import_vinyl_util46.EventHostImpl {
3748
3803
  add(
3749
3804
  this.segmentController.on("change", () => {
3750
3805
  this.reopen = true;
3751
- this.refreshDuration();
3752
3806
  this.pollBufferImmediate();
3753
3807
  })
3754
3808
  );
@@ -3778,18 +3832,6 @@ var BufferingControllerImpl = class extends import_vinyl_util46.EventHostImpl {
3778
3832
  get busy() {
3779
3833
  return this.queue.running > 0;
3780
3834
  }
3781
- /**
3782
- * Enqueues a duration update.
3783
- */
3784
- refreshDuration() {
3785
- this.sourceBufferController.enqueue(async () => {
3786
- if (!this.mediaSourceOpen) return;
3787
- const duration = await this.segmentController.getDuration();
3788
- const newDuration = duration == null ? LIVE_DURATION : duration + DURATION_PADDING;
3789
- (0, import_vinyl_util46.logDebug)(this, `setting duration: ${newDuration}`);
3790
- this.mediaSourceController.duration = newDuration;
3791
- }).catch(this.handleError);
3792
- }
3793
3835
  shouldAppend() {
3794
3836
  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.
3795
3837
  this.getBufferedTime() <= this.options.minBuffer;
@@ -4021,7 +4063,7 @@ var SegmentStatus = /* @__PURE__ */ ((SegmentStatus2) => {
4021
4063
  })(SegmentStatus || {});
4022
4064
  var SegmentDataSlot = class {
4023
4065
  constructor(requestSegmentData) {
4024
- this.requestSegmentData = requestSegmentData;
4066
+ __publicField(this, "requestSegmentData", requestSegmentData);
4025
4067
  /**
4026
4068
  * Called when the status has changed.
4027
4069
  */
@@ -4154,8 +4196,8 @@ var defaultSegmentControllerBaseOptions = {
4154
4196
  var SegmentControllerImpl = class extends import_vinyl_util50.EventHostImpl {
4155
4197
  constructor(deps, contentType2, options) {
4156
4198
  super();
4157
- this.deps = deps;
4158
- this.contentType = contentType2;
4199
+ __publicField(this, "deps", deps);
4200
+ __publicField(this, "contentType", contentType2);
4159
4201
  __publicField(this, "_active", false);
4160
4202
  __publicField(this, "_fetchedRanges", /* @__PURE__ */ new import_vinyl_util50.RangesImpl());
4161
4203
  __publicField(this, "_startTime", 0);
@@ -4259,14 +4301,6 @@ var SegmentControllerImpl = class extends import_vinyl_util50.EventHostImpl {
4259
4301
  get error() {
4260
4302
  return this._error;
4261
4303
  }
4262
- async getDuration() {
4263
- const timeline = await this.deps.mediaTimelineTransformed.value;
4264
- if (timeline.getDuration) return timeline.getDuration();
4265
- const periods = timeline.periods;
4266
- if (periods.length === 0) return null;
4267
- const last4 = periods[periods.length - 1];
4268
- return last4.endTime === Infinity ? null : last4.endTime;
4269
- }
4270
4304
  /**
4271
4305
  * Gets the period at the given time, using a cache for the last returned period.
4272
4306
  */
@@ -4659,7 +4693,8 @@ var qualitySelectorImplOptionsValidator = /* @__PURE__ */ (0, import_vinyl_valid
4659
4693
  strategy: /* @__PURE__ */ (0, import_vinyl_validation12.enumOf)(AbrStrategy).optional(),
4660
4694
  bandwidthMultiplierLow: /* @__PURE__ */ (0, import_vinyl_validation12.number)().optional(),
4661
4695
  bandwidthMultiplierHigh: /* @__PURE__ */ (0, import_vinyl_validation12.number)().optional(),
4662
- restrictDecoderChangeOnAudioAbrUp: /* @__PURE__ */ (0, import_vinyl_validation12.boolean)().optional()
4696
+ restrictDecoderChangeOnAudioAbrUp: /* @__PURE__ */ (0, import_vinyl_validation12.boolean)().optional(),
4697
+ maxBandwidth: /* @__PURE__ */ (0, import_vinyl_validation12.number)().maybe().optional()
4663
4698
  });
4664
4699
  var defaultQualitySelectorImplOptions = {
4665
4700
  highBufferThreshold: 15,
@@ -4667,7 +4702,8 @@ var defaultQualitySelectorImplOptions = {
4667
4702
  strategy: "best" /* BEST */,
4668
4703
  bandwidthMultiplierLow: 0.4,
4669
4704
  bandwidthMultiplierHigh: 0.9,
4670
- restrictDecoderChangeOnAudioAbrUp: false
4705
+ restrictDecoderChangeOnAudioAbrUp: false,
4706
+ maxBandwidth: null
4671
4707
  };
4672
4708
  var QualitySelectorImpl = class {
4673
4709
  constructor(deps) {
@@ -4694,7 +4730,8 @@ var QualitySelectorImpl = class {
4694
4730
  lowBufferThreshold,
4695
4731
  bandwidthMultiplierLow,
4696
4732
  bandwidthMultiplierHigh,
4697
- restrictDecoderChangeOnAudioAbrUp
4733
+ restrictDecoderChangeOnAudioAbrUp,
4734
+ maxBandwidth
4698
4735
  } = this.options;
4699
4736
  const previousQuality = prefetchState.previousQuality;
4700
4737
  const previousIndex = previousQuality == null ? -1 : qualities.findIndex(
@@ -4711,7 +4748,10 @@ var QualitySelectorImpl = class {
4711
4748
  const bandwidthEstimate = (0, import_vinyl_util52.getNetworkMetrics)().estimatedDownlinkBandwidth;
4712
4749
  const bufferRatio = highBufferThreshold > 0 ? (0, import_vinyl_util52.clamp)(fetchedTime / highBufferThreshold, 0, 1) : 1;
4713
4750
  const bandwidthMultiplier = prefetchState.active ? (0, import_vinyl_util52.lerp)(bandwidthMultiplierLow, bandwidthMultiplierHigh, bufferRatio) : bandwidthMultiplierHigh;
4714
- const bandwidth = (prefetchState.active ? Math.min(bandwidthEstimate.ewmaLow, bandwidthEstimate.latest) : bandwidthEstimate.ewmaLow) * bandwidthMultiplier;
4751
+ let bandwidth = (prefetchState.active ? Math.min(bandwidthEstimate.ewmaLow, bandwidthEstimate.latest) : bandwidthEstimate.ewmaLow) * bandwidthMultiplier;
4752
+ if (maxBandwidth != null && maxBandwidth < bandwidth) {
4753
+ bandwidth = maxBandwidth;
4754
+ }
4715
4755
  let restrictDecoderId = null;
4716
4756
  let restrictSwitchingGroupIds = null;
4717
4757
  if (previousQuality && previousIndex >= 0) {
@@ -4794,7 +4834,7 @@ var import_vinyl_di3 = require("@amazon/vinyl-di");
4794
4834
  var ContentStreamImpl = class extends import_vinyl_util56.EventHostImpl {
4795
4835
  constructor(dependencyFactories, contentType2) {
4796
4836
  super();
4797
- this.contentType = contentType2;
4837
+ __publicField(this, "contentType", contentType2);
4798
4838
  __publicField(this, "disposer", /* @__PURE__ */ (0, import_vinyl_util56.createDisposer)());
4799
4839
  __publicField(this, "segmentController");
4800
4840
  __publicField(this, "bufferingController");
@@ -5756,7 +5796,7 @@ var import_vinyl_observable4 = require("@amazon/vinyl-observable");
5756
5796
  var import_vinyl_util65 = require("@amazon/vinyl-util");
5757
5797
  var HlsManifestControllerImpl = class {
5758
5798
  constructor(manifestProvider) {
5759
- this.manifestProvider = manifestProvider;
5799
+ __publicField(this, "manifestProvider", manifestProvider);
5760
5800
  __publicField(this, "_data", /* @__PURE__ */ (0, import_vinyl_observable4.data)(
5761
5801
  /* @__PURE__ */ Promise.reject(/* @__PURE__ */ new Error("manifest not loaded"))
5762
5802
  ));
@@ -6060,17 +6100,21 @@ function buildHlsMediaTimeline(deps, data4) {
6060
6100
  minBufferTime: DEFAULT_MIN_BUFFER_TIME,
6061
6101
  async getDuration() {
6062
6102
  if (cachedDuration != null) return cachedDuration;
6063
- if (mainPlaylist.variants.length === 0) return null;
6064
- try {
6065
- const playlist = await data4.getMediaPlaylist(
6066
- mainPlaylist.variants[0].uri
6103
+ if (mainPlaylist.variants.length === 0) {
6104
+ throw new Error("Unable to determine HLS duration: no variants");
6105
+ }
6106
+ const playlist = await data4.getMediaPlaylist(
6107
+ mainPlaylist.variants[0].uri
6108
+ );
6109
+ if (!playlist.ended) return Infinity;
6110
+ if (playlist.segments.length === 0) {
6111
+ throw new Error(
6112
+ "Unable to determine HLS duration: no segments in media playlist"
6067
6113
  );
6068
- let total = 0;
6069
- for (const seg of playlist.segments) total += seg.duration;
6070
- cachedDuration = total > 0 ? total : null;
6071
- } catch (e) {
6072
- return null;
6073
6114
  }
6115
+ let total = 0;
6116
+ for (const seg of playlist.segments) total += seg.duration;
6117
+ cachedDuration = total;
6074
6118
  return cachedDuration;
6075
6119
  }
6076
6120
  };
@@ -6117,10 +6161,10 @@ var import_vinyl_util70 = require("@amazon/vinyl-util");
6117
6161
  var CommonMediaKeySessionError = class _CommonMediaKeySessionError extends import_vinyl_util70.ReportableError {
6118
6162
  constructor(code, codeStr, systemCode, systemCodeStr) {
6119
6163
  super(codeStr, import_vinyl_util70.ErrorOrigin.DRM, import_vinyl_util70.ErrorLevel.WARN);
6120
- this.code = code;
6121
- this.codeStr = codeStr;
6122
- this.systemCode = systemCode;
6123
- this.systemCodeStr = systemCodeStr;
6164
+ __publicField(this, "code", code);
6165
+ __publicField(this, "codeStr", codeStr);
6166
+ __publicField(this, "systemCode", systemCode);
6167
+ __publicField(this, "systemCodeStr", systemCodeStr);
6124
6168
  Object.setPrototypeOf(this, _CommonMediaKeySessionError.prototype);
6125
6169
  }
6126
6170
  get [Symbol.toStringTag]() {
@@ -6151,10 +6195,10 @@ var import_vinyl_util72 = require("@amazon/vinyl-util");
6151
6195
  var DrmError = class _DrmError extends import_vinyl_util72.ReportableError {
6152
6196
  constructor(message, extra = null, origin = import_vinyl_util71.ErrorOrigin.DRM, level = import_vinyl_util72.ErrorLevel.FATAL) {
6153
6197
  super(message, origin, level);
6154
- this.message = message;
6155
- this.extra = extra;
6156
- this.origin = origin;
6157
- this.level = level;
6198
+ __publicField(this, "message", message);
6199
+ __publicField(this, "extra", extra);
6200
+ __publicField(this, "origin", origin);
6201
+ __publicField(this, "level", level);
6158
6202
  Object.setPrototypeOf(this, _DrmError.prototype);
6159
6203
  }
6160
6204
  get [Symbol.toStringTag]() {
@@ -6204,7 +6248,7 @@ var MsCommonEme = class {
6204
6248
  };
6205
6249
  var MsCommonMediaKeySystemAccess = class {
6206
6250
  constructor(keySystem) {
6207
- this.keySystem = keySystem;
6251
+ __publicField(this, "keySystem", keySystem);
6208
6252
  }
6209
6253
  createMediaKeys() {
6210
6254
  const msMediaKeys = new MSMediaKeys(this.keySystem);
@@ -6215,8 +6259,8 @@ var MsCommonMediaKeySystemAccess = class {
6215
6259
  };
6216
6260
  var MsCommonMediaKeys = class {
6217
6261
  constructor(keySystem, mediaKeys) {
6218
- this.keySystem = keySystem;
6219
- this.mediaKeys = mediaKeys;
6262
+ __publicField(this, "keySystem", keySystem);
6263
+ __publicField(this, "mediaKeys", mediaKeys);
6220
6264
  }
6221
6265
  /**
6222
6266
  * Sets the media keys on the given element.
@@ -6251,10 +6295,10 @@ var MsCommonMediaKeys = class {
6251
6295
  var MsCommonMediaKeySession = class extends import_vinyl_util73.EventHostImpl {
6252
6296
  constructor(session, mimeType, initDataType, initData) {
6253
6297
  super();
6254
- this.session = session;
6255
- this.mimeType = mimeType;
6256
- this.initDataType = initDataType;
6257
- this.initData = initData;
6298
+ __publicField(this, "session", session);
6299
+ __publicField(this, "mimeType", mimeType);
6300
+ __publicField(this, "initDataType", initDataType);
6301
+ __publicField(this, "initData", initData);
6258
6302
  __publicField(this, "_disposed", false);
6259
6303
  __publicField(this, "messageHandler", (event) => {
6260
6304
  this.dispatch("message", {
@@ -6339,8 +6383,8 @@ var StandardCommonEme = class {
6339
6383
  };
6340
6384
  var StandardCommonMediaKeySystemAccess = class {
6341
6385
  constructor(keySystem, access) {
6342
- this.keySystem = keySystem;
6343
- this.access = access;
6386
+ __publicField(this, "keySystem", keySystem);
6387
+ __publicField(this, "access", access);
6344
6388
  }
6345
6389
  /**
6346
6390
  * @return {Promise<CommonMediaKeys>}
@@ -6352,8 +6396,8 @@ var StandardCommonMediaKeySystemAccess = class {
6352
6396
  };
6353
6397
  var StandardCommonMediaKeys = class {
6354
6398
  constructor(keySystem, mediaKeys) {
6355
- this.keySystem = keySystem;
6356
- this.mediaKeys = mediaKeys;
6399
+ __publicField(this, "keySystem", keySystem);
6400
+ __publicField(this, "mediaKeys", mediaKeys);
6357
6401
  }
6358
6402
  setOnElement(element2) {
6359
6403
  return element2.setMediaKeys(this.mediaKeys);
@@ -6376,10 +6420,10 @@ var StandardCommonMediaKeys = class {
6376
6420
  var StandardCommonMediaKeySession = class extends import_vinyl_util75.EventHostImpl {
6377
6421
  constructor(session, mimeType, initDataType, initData) {
6378
6422
  super();
6379
- this.session = session;
6380
- this.mimeType = mimeType;
6381
- this.initDataType = initDataType;
6382
- this.initData = initData;
6423
+ __publicField(this, "session", session);
6424
+ __publicField(this, "mimeType", mimeType);
6425
+ __publicField(this, "initDataType", initDataType);
6426
+ __publicField(this, "initData", initData);
6383
6427
  __publicField(this, "_disposed", false);
6384
6428
  __publicField(this, "messageHandler", (event) => {
6385
6429
  this.dispatch("message", {
@@ -6462,7 +6506,7 @@ var WebKitCommonEme = class {
6462
6506
  };
6463
6507
  var WebKitCommonMediaKeySystemAccess = class {
6464
6508
  constructor(keySystem) {
6465
- this.keySystem = keySystem;
6509
+ __publicField(this, "keySystem", keySystem);
6466
6510
  }
6467
6511
  createMediaKeys() {
6468
6512
  const webKitMediaKeys = new WebKitMediaKeys(this.keySystem);
@@ -6475,8 +6519,8 @@ var WebKitCommonMediaKeySystemAccess = class {
6475
6519
  };
6476
6520
  var WebKitCommonMediaKeys = class {
6477
6521
  constructor(keySystem, mediaKeys) {
6478
- this.keySystem = keySystem;
6479
- this.mediaKeys = mediaKeys;
6522
+ __publicField(this, "keySystem", keySystem);
6523
+ __publicField(this, "mediaKeys", mediaKeys);
6480
6524
  }
6481
6525
  /**
6482
6526
  * Sets the media keys on the given element.
@@ -6511,10 +6555,10 @@ var WebKitCommonMediaKeys = class {
6511
6555
  var WebKitCommonMediaKeySession = class extends import_vinyl_util76.EventHostImpl {
6512
6556
  constructor(session, mimeType, initDataType, initData) {
6513
6557
  super();
6514
- this.session = session;
6515
- this.mimeType = mimeType;
6516
- this.initDataType = initDataType;
6517
- this.initData = initData;
6558
+ __publicField(this, "session", session);
6559
+ __publicField(this, "mimeType", mimeType);
6560
+ __publicField(this, "initDataType", initDataType);
6561
+ __publicField(this, "initData", initData);
6518
6562
  __publicField(this, "_disposed", false);
6519
6563
  __publicField(this, "messageHandler", (event) => {
6520
6564
  this.dispatch("message", {
@@ -6737,7 +6781,7 @@ var LICENSE_TIMEOUT_MESSAGE = "License provider timed out after {time}s";
6737
6781
  var DrmControllerImpl = class extends import_vinyl_util84.EventHostImpl {
6738
6782
  constructor(deps, options) {
6739
6783
  super();
6740
- this.deps = deps;
6784
+ __publicField(this, "deps", deps);
6741
6785
  __publicField(this, "optionsBase");
6742
6786
  __publicField(this, "options");
6743
6787
  __publicField(this, "mediaKeys", null);
@@ -7265,7 +7309,7 @@ var MAX_GAIN_LEVEL = 1;
7265
7309
  var LoudnessNormalizationControllerImpl = class extends import_vinyl_util86.EventHostImpl {
7266
7310
  constructor(deps) {
7267
7311
  super();
7268
- this.deps = deps;
7312
+ __publicField(this, "deps", deps);
7269
7313
  __publicField(this, "logPrefix", /* @__PURE__ */ (0, import_vinyl_util86.createLogPrefix)(this));
7270
7314
  __publicField(this, "_gain", MAX_GAIN_LEVEL);
7271
7315
  __publicField(this, "disposer", /* @__PURE__ */ (0, import_vinyl_util85.createDisposer)());
@@ -7350,7 +7394,7 @@ var defaultResetControllerOptions = {
7350
7394
  var AutoResetControllerImpl = class extends import_vinyl_util87.EventHostImpl {
7351
7395
  constructor(deps, options) {
7352
7396
  super();
7353
- this.deps = deps;
7397
+ __publicField(this, "deps", deps);
7354
7398
  __publicField(this, "options");
7355
7399
  __publicField(this, "_error", null);
7356
7400
  __publicField(this, "watchSub", null);
@@ -7374,38 +7418,50 @@ var AutoResetControllerImpl = class extends import_vinyl_util87.EventHostImpl {
7374
7418
  }
7375
7419
  setError(error) {
7376
7420
  if (!this.options.enabled || this._error) return;
7377
- if (error instanceof import_vinyl_util87.ReportableError && error.origin === import_vinyl_util87.ErrorOrigin.SERVICE_INTERNAL) {
7421
+ if (error instanceof import_vinyl_util87.RequestError && error.response == null) {
7378
7422
  this._error = error;
7379
- this.setWatching(true);
7423
+ this.setResetPending(true);
7380
7424
  }
7381
7425
  }
7382
- setWatching(value) {
7426
+ get resetPending() {
7427
+ return this.watchSub != null;
7428
+ }
7429
+ setResetPending(value) {
7383
7430
  var _a;
7384
- (0, import_vinyl_util87.logDebug)(this, "setWatching", value);
7431
+ if (this.resetPending === value) {
7432
+ (0, import_vinyl_util87.logDebug)(this, "setResetPending", value, "no-op");
7433
+ return;
7434
+ }
7435
+ (0, import_vinyl_util87.logDebug)(this, "setResetPending", value);
7385
7436
  (_a = this.watchSub) == null ? void 0 : _a.call(this);
7386
7437
  this.watchSub = null;
7387
- if (!value) return;
7388
- const networkState = (0, import_vinyl_util87.getNetworkState)();
7389
- const { add, dispose: watchSub } = (0, import_vinyl_util87.createDisposer)();
7390
- this.watchSub = watchSub;
7391
- add(
7392
- networkState.on("online", () => {
7393
- (0, import_vinyl_util87.logDebug)(this, "online, emitting reset");
7394
- this.reset();
7395
- })
7396
- );
7397
- const intervalId = setTimeout(() => {
7398
- if (this.currentRetry++ < this.options.maxRetries) {
7399
- if (networkState.onLine) {
7400
- (0, import_vinyl_util87.logDebug)(this, "interval, emitting reset");
7438
+ if (value) {
7439
+ const networkState = (0, import_vinyl_util87.getNetworkState)();
7440
+ const { add, dispose: watchSub } = (0, import_vinyl_util87.createDisposer)();
7441
+ this.watchSub = watchSub;
7442
+ add(
7443
+ networkState.on("online", () => {
7444
+ (0, import_vinyl_util87.logDebug)(this, "online, emitting reset");
7401
7445
  this.reset();
7446
+ })
7447
+ );
7448
+ const intervalId = setTimeout(() => {
7449
+ if (this.currentRetry++ < this.options.maxRetries) {
7450
+ if (networkState.onLine) {
7451
+ (0, import_vinyl_util87.logDebug)(this, "interval, emitting reset");
7452
+ this.reset();
7453
+ }
7454
+ } else {
7455
+ (0, import_vinyl_util87.logDebug)(this, "max retries exhausted, pausing playback");
7456
+ this.setResetPending(false);
7402
7457
  }
7403
- } else {
7404
- (0, import_vinyl_util87.logDebug)(this, "max retries exhausted, pausing playback");
7405
- this.setWatching(false);
7406
- }
7407
- }, this.options.retryInterval * 1e3);
7408
- add(() => clearTimeout(intervalId));
7458
+ }, this.options.retryInterval * 1e3);
7459
+ add(() => clearTimeout(intervalId));
7460
+ }
7461
+ this.dispatch("resetPendingChange", {
7462
+ previous: !value,
7463
+ current: value
7464
+ });
7409
7465
  }
7410
7466
  reset() {
7411
7467
  if (!this._error) return;
@@ -7415,7 +7471,7 @@ var AutoResetControllerImpl = class extends import_vinyl_util87.EventHostImpl {
7415
7471
  clear() {
7416
7472
  if (!this._error) return;
7417
7473
  this._error = null;
7418
- this.setWatching(false);
7474
+ this.setResetPending(false);
7419
7475
  }
7420
7476
  get disposed() {
7421
7477
  return this.disposer.disposed;
@@ -7488,7 +7544,7 @@ var locale2 = {
7488
7544
  var DEFAULT_MAX_PLAYERS = 5;
7489
7545
  var PlayerRegistryImpl = class {
7490
7546
  constructor(maxPlayersWarning = DEFAULT_MAX_PLAYERS) {
7491
- this.maxPlayersWarning = maxPlayersWarning;
7547
+ __publicField(this, "maxPlayersWarning", maxPlayersWarning);
7492
7548
  __publicField(this, "_players", []);
7493
7549
  __publicField(this, "gaveMaxPlayersWarning", false);
7494
7550
  }
@@ -7533,7 +7589,7 @@ var import_vinyl_util91 = require("@amazon/vinyl-util");
7533
7589
  var import_vinyl_util90 = require("@amazon/vinyl-util");
7534
7590
  var vinylVersion = /* @__PURE__ */ (0, import_vinyl_util90.parseVersion)(
7535
7591
  /* istanbul ignore next */
7536
- "1.1.1"
7592
+ "1.2.0"
7537
7593
  );
7538
7594
 
7539
7595
  // src/global/globalRef.ts
@@ -7636,6 +7692,9 @@ var VinylPlayer = class extends import_vinyl_util93.EventHostImpl {
7636
7692
  get trackController() {
7637
7693
  return this.deps.trackController;
7638
7694
  }
7695
+ get autoResetController() {
7696
+ return this.deps.autoResetController;
7697
+ }
7639
7698
  redispatchSubControllerEvents() {
7640
7699
  const add = this.disposer.add;
7641
7700
  add(
@@ -7712,11 +7771,16 @@ var VinylPlayer = class extends import_vinyl_util93.EventHostImpl {
7712
7771
  }
7713
7772
  initializeAutoResetHandling() {
7714
7773
  const { add } = this.disposer;
7715
- const { autoResetController } = this.deps;
7716
7774
  this.on("error", (event) => {
7717
- autoResetController.setError(event.error);
7775
+ this.autoResetController.setError(event.error);
7718
7776
  });
7719
- add(autoResetController.on("reset", () => this.reset()));
7777
+ add(this.autoResetController.on("reset", () => this.reset()));
7778
+ add(
7779
+ this.autoResetController.on(
7780
+ "resetPendingChange",
7781
+ (event) => this.dispatch("resetPendingChange", event)
7782
+ )
7783
+ );
7720
7784
  }
7721
7785
  initializePreferredLanguageHandling() {
7722
7786
  const { add } = this.disposer;
@@ -7787,6 +7851,17 @@ var VinylPlayer = class extends import_vinyl_util93.EventHostImpl {
7787
7851
  get error() {
7788
7852
  return this._error;
7789
7853
  }
7854
+ /**
7855
+ * True when an error has interrupted playback and an automatic reset
7856
+ * is scheduled. This distinguishes transient, potentially recoverable
7857
+ * errors (such as a brief network outage) from terminal errors that
7858
+ * will not trigger a reset on their own.
7859
+ *
7860
+ * Listen to `resetPendingChange` events for changes.
7861
+ */
7862
+ get resetPending() {
7863
+ return this.autoResetController.resetPending;
7864
+ }
7790
7865
  get hasMetadata() {
7791
7866
  return this.playbackController.hasMetadata;
7792
7867
  }
@@ -7863,6 +7938,7 @@ var VinylPlayer = class extends import_vinyl_util93.EventHostImpl {
7863
7938
  this.drmController.reset();
7864
7939
  this.playbackController.reset();
7865
7940
  this.trackController.reset();
7941
+ this.autoResetController.clear();
7866
7942
  this.dispatch("reset", {});
7867
7943
  }
7868
7944
  //----------------------------------------------------