@amazon/vinyl 3.0.1 → 3.1.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 (250) hide show
  1. package/dist/index.cjs +972 -954
  2. package/dist/index.cjs.map +4 -4
  3. package/dist/index.js +646 -619
  4. package/dist/index.js.map +4 -4
  5. package/dist/test/benchmark.js.map +2 -2
  6. package/dist/test/integ.es5.js +357 -353
  7. package/dist/test/integ.js +2251 -1852
  8. package/dist/test/integ.js.map +4 -4
  9. package/dist/test/jasmine.css +50 -3
  10. package/dist/test/jasmineHtml.es5.js +195 -155
  11. package/dist/test/jasmineHtml.js +2938 -1833
  12. package/dist/test/jasmineHtml.js.map +3 -3
  13. package/dist/types/current/ad/AdControllerImpl.d.ts.map +1 -1
  14. package/dist/types/current/ad/AdControllerImpl.js +4 -1
  15. package/dist/types/current/ad/discoverHlsInterstitials.d.ts.map +1 -1
  16. package/dist/types/current/ad/discoverHlsInterstitials.js +2 -2
  17. package/dist/types/current/drm/DrmControllerImpl.d.ts +2 -0
  18. package/dist/types/current/drm/DrmControllerImpl.d.ts.map +1 -1
  19. package/dist/types/current/drm/DrmControllerImpl.js +56 -48
  20. package/dist/types/current/drm/licenseProvider/defaultLicenseProvider.d.ts.map +1 -1
  21. package/dist/types/current/drm/licenseProvider/defaultLicenseProvider.js +2 -2
  22. package/dist/types/current/index.d.ts +3 -6
  23. package/dist/types/current/index.d.ts.map +1 -1
  24. package/dist/types/current/index.js +3 -6
  25. package/dist/types/current/playback/PlaybackControllerImpl.d.ts +15 -0
  26. package/dist/types/current/playback/PlaybackControllerImpl.d.ts.map +1 -1
  27. package/dist/types/current/playback/PlaybackControllerImpl.js +100 -9
  28. package/dist/types/current/playback/ReadonlyPlaybackController.d.ts +27 -1
  29. package/dist/types/current/playback/ReadonlyPlaybackController.d.ts.map +1 -1
  30. package/dist/types/current/playback/ReadonlyPlaybackController.js +16 -0
  31. package/dist/types/current/playback/createStallDetector.d.ts +43 -0
  32. package/dist/types/current/playback/createStallDetector.d.ts.map +1 -0
  33. package/dist/types/current/playback/createStallDetector.js +101 -0
  34. package/dist/types/current/playback/createStallMonitor.d.ts +45 -0
  35. package/dist/types/current/playback/createStallMonitor.d.ts.map +1 -0
  36. package/dist/types/current/playback/createStallMonitor.js +94 -0
  37. package/dist/types/current/streaming/AudioOptions.d.ts +27 -0
  38. package/dist/types/current/streaming/AudioOptions.d.ts.map +1 -1
  39. package/dist/types/current/streaming/AudioOptions.js +5 -1
  40. package/dist/types/current/streaming/ContentStream.d.ts +0 -5
  41. package/dist/types/current/streaming/ContentStream.d.ts.map +1 -1
  42. package/dist/types/current/streaming/ContentStream.js +0 -4
  43. package/dist/types/current/streaming/LoadMetric.d.ts.map +1 -1
  44. package/dist/types/current/streaming/StreamingEventMap.d.ts +1 -5
  45. package/dist/types/current/streaming/StreamingEventMap.d.ts.map +1 -1
  46. package/dist/types/current/streaming/StreamingEventMap.js +0 -1
  47. package/dist/types/current/streaming/buffering/BufferingController.d.ts +0 -11
  48. package/dist/types/current/streaming/buffering/BufferingController.d.ts.map +1 -1
  49. package/dist/types/current/streaming/buffering/BufferingController.js +0 -13
  50. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts.map +1 -1
  51. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.js +13 -4
  52. package/dist/types/current/text/SidecarTextTrackLoader.d.ts.map +1 -1
  53. package/dist/types/current/text/SidecarTextTrackLoader.js +4 -4
  54. package/dist/types/current/text/TextTrack.d.ts.map +1 -1
  55. package/dist/types/current/track/TrackController.d.ts.map +1 -1
  56. package/dist/types/current/track/TrackController.js +8 -2
  57. package/dist/types/current/track/createSegmentDataProvider.d.ts.map +1 -1
  58. package/dist/types/current/track/createSegmentDataProvider.js +6 -3
  59. package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
  60. package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.d.ts.map +1 -1
  61. package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.js +13 -8
  62. package/dist/types/current/track/dash/createDashFactories.d.ts +1 -1
  63. package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.d.ts.map +1 -1
  64. package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.js +71 -3
  65. package/dist/types/current/track/dash/urlDashManifestProvider.js +2 -2
  66. package/dist/types/current/track/dash/util/mpd.d.ts +6 -0
  67. package/dist/types/current/track/dash/util/mpd.d.ts.map +1 -1
  68. package/dist/types/current/track/dash/util/mpd.js +24 -3
  69. package/dist/types/current/track/filters/resourceTypeFilter.d.ts +4 -0
  70. package/dist/types/current/track/filters/resourceTypeFilter.d.ts.map +1 -1
  71. package/dist/types/current/track/filters/resourceTypeFilter.js +4 -0
  72. package/dist/types/current/track/filters/sampleRateFilter.d.ts +21 -7
  73. package/dist/types/current/track/filters/sampleRateFilter.d.ts.map +1 -1
  74. package/dist/types/current/track/filters/sampleRateFilter.js +42 -24
  75. package/dist/types/current/track/hls/createHlsFactories.d.ts +1 -1
  76. package/dist/types/current/track/hls/createUrlHlsManifestProvider.d.ts.map +1 -1
  77. package/dist/types/current/track/hls/createUrlHlsManifestProvider.js +3 -3
  78. package/dist/types/current/track/mse/MseTrack.d.ts +9 -17
  79. package/dist/types/current/track/mse/MseTrack.d.ts.map +1 -1
  80. package/dist/types/current/track/mse/MseTrack.js +29 -46
  81. package/dist/types/current/tsconfig.tsbuildinfo +1 -1
  82. package/dist/types/current/util/media/mimeType.d.ts +8 -0
  83. package/dist/types/current/util/media/mimeType.d.ts.map +1 -0
  84. package/dist/types/current/util/media/mimeType.js +13 -0
  85. package/dist/types/current/vinyl/createVinylFactories.d.ts +7 -16
  86. package/dist/types/current/vinyl/createVinylFactories.d.ts.map +1 -1
  87. package/dist/types/current/vinyl/createVinylFactories.js +2 -12
  88. package/dist/types/ts3.7/drm/DrmControllerImpl.d.ts +2 -0
  89. package/dist/types/ts3.7/index.d.ts +3 -6
  90. package/dist/types/ts3.7/playback/PlaybackControllerImpl.d.ts +15 -0
  91. package/dist/types/ts3.7/playback/ReadonlyPlaybackController.d.ts +28 -0
  92. package/dist/types/ts3.7/playback/createStallDetector.d.ts +43 -0
  93. package/dist/types/ts3.7/playback/createStallMonitor.d.ts +45 -0
  94. package/dist/types/ts3.7/streaming/AudioOptions.d.ts +27 -0
  95. package/dist/types/ts3.7/streaming/ContentStream.d.ts +0 -5
  96. package/dist/types/ts3.7/streaming/StreamingEventMap.d.ts +0 -5
  97. package/dist/types/ts3.7/streaming/buffering/BufferingController.d.ts +0 -11
  98. package/dist/types/ts3.7/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
  99. package/dist/types/ts3.7/track/dash/createDashFactories.d.ts +1 -1
  100. package/dist/types/ts3.7/track/dash/util/mpd.d.ts +6 -0
  101. package/dist/types/ts3.7/track/filters/resourceTypeFilter.d.ts +4 -0
  102. package/dist/types/ts3.7/track/filters/sampleRateFilter.d.ts +21 -7
  103. package/dist/types/ts3.7/track/hls/createHlsFactories.d.ts +1 -1
  104. package/dist/types/ts3.7/track/mse/MseTrack.d.ts +9 -17
  105. package/dist/types/ts3.7/util/media/mimeType.d.ts +8 -0
  106. package/dist/types/ts3.7/vinyl/createVinylFactories.d.ts +7 -16
  107. package/dist/types/ts4.1/drm/DrmControllerImpl.d.ts +2 -0
  108. package/dist/types/ts4.1/index.d.ts +3 -6
  109. package/dist/types/ts4.1/playback/PlaybackControllerImpl.d.ts +15 -0
  110. package/dist/types/ts4.1/playback/ReadonlyPlaybackController.d.ts +28 -0
  111. package/dist/types/ts4.1/playback/createStallDetector.d.ts +43 -0
  112. package/dist/types/ts4.1/playback/createStallMonitor.d.ts +45 -0
  113. package/dist/types/ts4.1/streaming/AudioOptions.d.ts +27 -0
  114. package/dist/types/ts4.1/streaming/ContentStream.d.ts +0 -5
  115. package/dist/types/ts4.1/streaming/StreamingEventMap.d.ts +0 -5
  116. package/dist/types/ts4.1/streaming/buffering/BufferingController.d.ts +0 -11
  117. package/dist/types/ts4.1/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
  118. package/dist/types/ts4.1/track/dash/createDashFactories.d.ts +1 -1
  119. package/dist/types/ts4.1/track/dash/util/mpd.d.ts +6 -0
  120. package/dist/types/ts4.1/track/filters/resourceTypeFilter.d.ts +4 -0
  121. package/dist/types/ts4.1/track/filters/sampleRateFilter.d.ts +21 -7
  122. package/dist/types/ts4.1/track/hls/createHlsFactories.d.ts +1 -1
  123. package/dist/types/ts4.1/track/mse/MseTrack.d.ts +9 -17
  124. package/dist/types/ts4.1/util/media/mimeType.d.ts +8 -0
  125. package/dist/types/ts4.1/vinyl/createVinylFactories.d.ts +7 -16
  126. package/dist/types/ts4.7/drm/DrmControllerImpl.d.ts +2 -0
  127. package/dist/types/ts4.7/index.d.ts +3 -6
  128. package/dist/types/ts4.7/playback/PlaybackControllerImpl.d.ts +15 -0
  129. package/dist/types/ts4.7/playback/ReadonlyPlaybackController.d.ts +28 -0
  130. package/dist/types/ts4.7/playback/createStallDetector.d.ts +43 -0
  131. package/dist/types/ts4.7/playback/createStallMonitor.d.ts +45 -0
  132. package/dist/types/ts4.7/streaming/AudioOptions.d.ts +27 -0
  133. package/dist/types/ts4.7/streaming/ContentStream.d.ts +0 -5
  134. package/dist/types/ts4.7/streaming/StreamingEventMap.d.ts +0 -5
  135. package/dist/types/ts4.7/streaming/buffering/BufferingController.d.ts +0 -11
  136. package/dist/types/ts4.7/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
  137. package/dist/types/ts4.7/track/dash/createDashFactories.d.ts +1 -1
  138. package/dist/types/ts4.7/track/dash/util/mpd.d.ts +6 -0
  139. package/dist/types/ts4.7/track/filters/resourceTypeFilter.d.ts +4 -0
  140. package/dist/types/ts4.7/track/filters/sampleRateFilter.d.ts +21 -7
  141. package/dist/types/ts4.7/track/hls/createHlsFactories.d.ts +1 -1
  142. package/dist/types/ts4.7/track/mse/MseTrack.d.ts +9 -17
  143. package/dist/types/ts4.7/util/media/mimeType.d.ts +8 -0
  144. package/dist/types/ts4.7/vinyl/createVinylFactories.d.ts +7 -16
  145. package/dist/unit/types/current/ad/AdControllerImpl.test.js +27 -1
  146. package/dist/unit/types/current/drm/DrmControllerImpl.test.js +93 -0
  147. package/dist/unit/types/current/index.d.ts +3 -4
  148. package/dist/unit/types/current/index.d.ts.map +1 -1
  149. package/dist/unit/types/current/index.js +3 -4
  150. package/dist/unit/types/current/playback/PlaybackControllerImpl.test.js +165 -0
  151. package/dist/unit/types/current/playback/createStallDetector.test.d.ts +2 -0
  152. package/dist/unit/types/current/playback/createStallDetector.test.d.ts.map +1 -0
  153. package/dist/unit/types/current/playback/createStallDetector.test.js +163 -0
  154. package/dist/unit/types/current/playback/createStallMonitor.test.d.ts +2 -0
  155. package/dist/unit/types/current/playback/createStallMonitor.test.d.ts.map +1 -0
  156. package/dist/unit/types/current/playback/createStallMonitor.test.js +125 -0
  157. package/dist/unit/types/current/streaming/ContentStream.test.js +0 -11
  158. package/dist/unit/types/current/streaming/MseTrack.test.js +47 -74
  159. package/dist/unit/types/current/streaming/abr/QualitySelectorImpl.test.js +1 -1
  160. package/dist/unit/types/current/streaming/buffering/BufferingController.test.js +0 -21
  161. package/dist/unit/types/current/streaming/createDefaultMediaTimelineTransformer.test.js +133 -0
  162. package/dist/unit/types/current/track/TrackController.test.js +61 -1
  163. package/dist/unit/types/current/track/createSegmentDataProvider.test.js +18 -0
  164. package/dist/unit/types/current/track/dash/DashMediaQualityMetadataResolver.test.js +46 -14
  165. package/dist/unit/types/current/track/dash/createSegmentControllerFactory.test.js +1 -0
  166. package/dist/unit/types/current/track/dash/timeline/DashRepresentationSegmentProvider.test.js +114 -0
  167. package/dist/unit/types/current/track/dash/util/mpd.test.js +37 -0
  168. package/dist/unit/types/current/track/filters/resourceTypeFilter.test.js +7 -0
  169. package/dist/unit/types/current/track/filters/sampleRateFilter.test.js +136 -34
  170. package/dist/unit/types/current/track/source/SourceObjectTrack.test.js +1 -1
  171. package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
  172. package/dist/unit/types/current/util/media/mimeType.test.d.ts +2 -0
  173. package/dist/unit/types/current/util/media/mimeType.test.d.ts.map +1 -0
  174. package/dist/unit/types/current/util/media/mimeType.test.js +22 -0
  175. package/dist/unit/types/current/vinyl/createVinylFactories.test.js +2 -36
  176. package/dist/vinylTestUtil/index.js +6 -4
  177. package/dist/vinylTestUtil/index.js.map +2 -2
  178. package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.d.ts +1 -0
  179. package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.d.ts.map +1 -1
  180. package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.js +1 -0
  181. package/dist/vinylTestUtil/types/current/media/FrequencyAnalyzer.d.ts.map +1 -1
  182. package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.d.ts +0 -1
  183. package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.d.ts.map +1 -1
  184. package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.js +0 -1
  185. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
  186. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.d.ts.map +1 -1
  187. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.js +0 -1
  188. package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
  189. package/dist/vinylTestUtil/types/current/util/playback/eventPromises.js +1 -1
  190. package/dist/vinylTestUtil/types/current/util/playback/expectTrackCanSeek.d.ts.map +1 -1
  191. package/dist/vinylTestUtil/types/current/util/playback/expectTrackCanSeek.js +9 -1
  192. package/dist/vinylTestUtil/types/ts3.7/assets/vinylTestAssets.d.ts +1 -0
  193. package/dist/vinylTestUtil/types/ts3.7/mock/streaming/MockContentStream.d.ts +0 -1
  194. package/dist/vinylTestUtil/types/ts3.7/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
  195. package/dist/vinylTestUtil/types/ts4.1/assets/vinylTestAssets.d.ts +1 -0
  196. package/dist/vinylTestUtil/types/ts4.1/mock/streaming/MockContentStream.d.ts +0 -1
  197. package/dist/vinylTestUtil/types/ts4.1/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
  198. package/dist/vinylTestUtil/types/ts4.7/assets/vinylTestAssets.d.ts +1 -0
  199. package/dist/vinylTestUtil/types/ts4.7/mock/streaming/MockContentStream.d.ts +0 -1
  200. package/dist/vinylTestUtil/types/ts4.7/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
  201. package/docs/USAGE.md +29 -0
  202. package/package.json +11 -10
  203. package/dist/types/current/patch/media/HtmlMediaElementPatch.d.ts +0 -3
  204. package/dist/types/current/patch/media/HtmlMediaElementPatch.d.ts.map +0 -1
  205. package/dist/types/current/patch/media/HtmlMediaElementPatch.js +0 -5
  206. package/dist/types/current/patch/media/MediaElementPatchOptions.d.ts +0 -19
  207. package/dist/types/current/patch/media/MediaElementPatchOptions.d.ts.map +0 -1
  208. package/dist/types/current/patch/media/MediaElementPatchOptions.js +0 -16
  209. package/dist/types/current/patch/media/patchMediaElement.d.ts +0 -9
  210. package/dist/types/current/patch/media/patchMediaElement.d.ts.map +0 -1
  211. package/dist/types/current/patch/media/patchMediaElement.js +0 -15
  212. package/dist/types/current/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
  213. package/dist/types/current/patch/media/patches/createPreventStallsPatch.d.ts.map +0 -1
  214. package/dist/types/current/patch/media/patches/createPreventStallsPatch.js +0 -55
  215. package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
  216. package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts.map +0 -1
  217. package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.js +0 -218
  218. package/dist/types/current/vinyl/VinylPatchOptions.d.ts +0 -10
  219. package/dist/types/current/vinyl/VinylPatchOptions.d.ts.map +0 -1
  220. package/dist/types/current/vinyl/VinylPatchOptions.js +0 -11
  221. package/dist/types/ts3.7/patch/media/HtmlMediaElementPatch.d.ts +0 -3
  222. package/dist/types/ts3.7/patch/media/MediaElementPatchOptions.d.ts +0 -19
  223. package/dist/types/ts3.7/patch/media/patchMediaElement.d.ts +0 -9
  224. package/dist/types/ts3.7/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
  225. package/dist/types/ts3.7/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
  226. package/dist/types/ts3.7/vinyl/VinylPatchOptions.d.ts +0 -10
  227. package/dist/types/ts4.1/patch/media/HtmlMediaElementPatch.d.ts +0 -3
  228. package/dist/types/ts4.1/patch/media/MediaElementPatchOptions.d.ts +0 -19
  229. package/dist/types/ts4.1/patch/media/patchMediaElement.d.ts +0 -9
  230. package/dist/types/ts4.1/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
  231. package/dist/types/ts4.1/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
  232. package/dist/types/ts4.1/vinyl/VinylPatchOptions.d.ts +0 -10
  233. package/dist/types/ts4.7/patch/media/HtmlMediaElementPatch.d.ts +0 -3
  234. package/dist/types/ts4.7/patch/media/MediaElementPatchOptions.d.ts +0 -19
  235. package/dist/types/ts4.7/patch/media/patchMediaElement.d.ts +0 -9
  236. package/dist/types/ts4.7/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
  237. package/dist/types/ts4.7/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
  238. package/dist/types/ts4.7/vinyl/VinylPatchOptions.d.ts +0 -10
  239. package/dist/unit/types/current/patch/media/MediaElementPatchOptions.test.d.ts +0 -2
  240. package/dist/unit/types/current/patch/media/MediaElementPatchOptions.test.d.ts.map +0 -1
  241. package/dist/unit/types/current/patch/media/MediaElementPatchOptions.test.js +0 -17
  242. package/dist/unit/types/current/patch/media/patchMediaElement.test.d.ts +0 -2
  243. package/dist/unit/types/current/patch/media/patchMediaElement.test.d.ts.map +0 -1
  244. package/dist/unit/types/current/patch/media/patchMediaElement.test.js +0 -36
  245. package/dist/unit/types/current/patch/media/patches/createPreventStallsPatch.test.d.ts +0 -2
  246. package/dist/unit/types/current/patch/media/patches/createPreventStallsPatch.test.d.ts.map +0 -1
  247. package/dist/unit/types/current/patch/media/patches/createPreventStallsPatch.test.js +0 -93
  248. package/dist/unit/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.test.d.ts +0 -2
  249. package/dist/unit/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.test.d.ts.map +0 -1
  250. package/dist/unit/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.test.js +0 -423
@@ -8,7 +8,7 @@ import { createLanguageFilter } from './mediaTimelineLanguageFilter';
8
8
  import { createAudioDescriptionFilter, throwNoPlayableAudio, } from './mediaTimelineAccessibilityFilter';
9
9
  import { canPlayMimeType, throwMimeTypesUnsupported, } from '../track/filters/resourceTypeFilter';
10
10
  import { canPlayKeySystem, throwKeySystemsUnsupported, } from '../track/filters/keySystemFilter';
11
- import { supportsAudioSamplingRate, throwSamplingRatesUnsupported, } from '../track/filters/sampleRateFilter';
11
+ import { throwSamplingRatesUnsupported, withinAudioSampleRateRange, } from '../track/filters/sampleRateFilter';
12
12
  import { throwLanguagesUnsupported } from '../track/filters/languageFilter';
13
13
  import { resolveCodecOverride } from '../util/media/codecOverrides';
14
14
  /**
@@ -32,10 +32,19 @@ export function createDefaultMediaTimelineTransformer(deps) {
32
32
  return canPlayMimeType(deps, quality);
33
33
  }
34
34
  async function transformTimeline(timeline) {
35
- const codecOverrides = deps.options.value.codecOverrides;
35
+ const { audio, codecOverrides } = deps.options.value;
36
36
  let t = filterTimelineQualities((quality) => canPlayWithOverrides(quality, codecOverrides), throwMimeTypesUnsupported, timeline);
37
37
  t = await filterTimelineQualitiesAsync((quality) => canPlayKeySystem(deps, quality), throwKeySystemsUnsupported, t);
38
- t = filterTimelineQualities((quality, index, array) => supportsAudioSamplingRate(deps, quality, index, array), throwSamplingRatesUnsupported, t);
38
+ // The sampling-rate filter can be turned off via audio options, keeping
39
+ // renditions the platform reports as unsupported.
40
+ if (!audio.disableSampleRateFilter) {
41
+ const sampleRateOptions = {
42
+ capabilities: deps.capabilities,
43
+ maxSampleRate: audio.maxSampleRate ?? null,
44
+ minSampleRate: audio.minSampleRate ?? null,
45
+ };
46
+ t = filterTimelineQualities((quality, index, array) => withinAudioSampleRateRange(sampleRateOptions, quality, index, array), throwSamplingRatesUnsupported, t);
47
+ }
39
48
  // Resolve audio-description eligibility BEFORE the language filter.
40
49
  // Description renditions are an accessibility opt-in, not general audio,
41
50
  // so they must be gated out (unless opted in via audio.selection.descriptive)
@@ -46,7 +55,7 @@ export function createDefaultMediaTimelineTransformer(deps) {
46
55
  // described audio they never opted into. With this gate first, the
47
56
  // language filter only ever picks among eligible (main, or opted-in
48
57
  // description) renditions.
49
- const selection = deps.options.value.audio.selection;
58
+ const selection = audio.selection;
50
59
  t = filterTimelineQualities(createAudioDescriptionFilter(selection?.descriptive ?? false), throwNoPlayableAudio, t);
51
60
  t = filterTimelineQualities(createLanguageFilter(selection?.language ?? null, 'audio'), throwLanguagesUnsupported, t);
52
61
  return t;
@@ -1 +1 @@
1
- {"version":3,"file":"SidecarTextTrackLoader.d.ts","sourceRoot":"","sources":["../../../../src/text/SidecarTextTrackLoader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,KAAK,EACL,aAAa,EACb,kBAAkB,EACrB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAE3D;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,KAAK,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAA;AAQzC,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAEhD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAE5D;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,KAAK,IAAI,CAAA;IAErD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC,CAAA;IAE9D;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,MAAM,CAAA;IAErC;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAElC;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CACtC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,cAAc,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,qBAAqB,GAC/B,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
1
+ {"version":3,"file":"SidecarTextTrackLoader.d.ts","sourceRoot":"","sources":["../../../../src/text/SidecarTextTrackLoader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,KAAK,EACL,aAAa,EACb,kBAAkB,EACrB,MAAM,oBAAoB,CAAA;AAQ3B,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAE3D;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,KAAK,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAA;AAQzC,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAEhD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAE5D;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,KAAK,IAAI,CAAA;IAErD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC,CAAA;IAE9D;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,MAAM,CAAA;IAErC;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAElC;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CACtC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,cAAc,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,qBAAqB,GAC/B,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
@@ -2,7 +2,7 @@
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
- import { requestWithRetry, resolveUrl, sleep } from '@amazon/vinyl-util';
5
+ import { readResponseBody, requestWithRetry, resolveUrl, sleep, } from '@amazon/vinyl-util';
6
6
  import { parseMediaPlaylist } from '@amazon/vinyl-hls-parser';
7
7
  import { parseWebVtt } from './parseWebVtt';
8
8
  /**
@@ -58,7 +58,7 @@ export async function loadWebVttCues(uri, options) {
58
58
  }
59
59
  const response = await requestWithRetry(uri, init, { abort });
60
60
  const contentType = (response.headers.get('content-type') ?? '').toLowerCase();
61
- const body = await response.text();
61
+ const body = await readResponseBody(response, 'text');
62
62
  if (contentType.includes('mpegurl') || body.startsWith('#EXTM3U')) {
63
63
  return streamMediaPlaylistText({
64
64
  text: body,
@@ -87,7 +87,7 @@ async function streamMediaPlaylist(ctx) {
87
87
  const response = await requestWithRetry(ctx.uri, ctx.init, {
88
88
  abort: ctx.abort,
89
89
  });
90
- const text = await response.text();
90
+ const text = await readResponseBody(response, 'text');
91
91
  return streamMediaPlaylistText({
92
92
  ...ctx,
93
93
  text,
@@ -116,7 +116,7 @@ async function streamMediaPlaylistText(ctx) {
116
116
  const res = await requestWithRetry(segUri, ctx.init, {
117
117
  abort: ctx.abort,
118
118
  });
119
- const body = await res.text();
119
+ const body = await readResponseBody(res, 'text');
120
120
  const doc = parseWebVtt(body);
121
121
  if (doc.cues.length > 0)
122
122
  ctx.onCues(doc.cues);
@@ -1 +1 @@
1
- {"version":3,"file":"TextTrack.d.ts","sourceRoot":"","sources":["../../../../src/text/TextTrack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TextTrack.d.ts","sourceRoot":"","sources":["../../../../src/text/TextTrack.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAS5D;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,CAAA;AAEvE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAE5B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAEhC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IAEtB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IAEzB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IAExB;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;IAE3C;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACxD;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,SAAS,aAAa,EAAE,CAAC,CAAA;IAEhE;;OAEG;IACH,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAEjE;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,mBAAmB,CAAA;CAC/C;AAED,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CACxB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAA;AAEjD;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAE3B;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IAEpC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IAErD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACvC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAErC;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;CACjD;AAmBD,eAAO,MAAM,mCAAmC,EAAE,YAAY,CAAC,0BAA0B,CAInF,CAAA;AAEN,eAAO,MAAM,qBAAqB,0EAIuB,CAAA;AAEzD;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC;IACrF;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAA;IAE7C;;OAEG;IACH,QAAQ,CAAC,eAAe,EAAE,aAAa,GAAG,IAAI,CAAA;IAE9C;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAA;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAoB,SAAQ,2BAA2B;IACpE;;;;;OAKG;IACH,UAAU,IAAI,IAAI,CAAA;IAElB;;;;OAIG;IACH,QAAQ,IAAI,IAAI,CAAA;CACnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"TrackController.d.ts","sourceRoot":"","sources":["../../../../src/track/TrackController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TrackController.d.ts","sourceRoot":"","sources":["../../../../src/track/TrackController.ts"],"names":[],"mappings":"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"}
@@ -179,6 +179,8 @@ export class TrackControllerImpl extends EventHostImpl {
179
179
  adController
180
180
  .enterPostroll()
181
181
  .then((postroll) => {
182
+ if (interrupted())
183
+ return;
182
184
  if (postroll) {
183
185
  // There is a pending postroll, do not advance the queue,
184
186
  // a new adEntered event will fire.
@@ -204,6 +206,8 @@ export class TrackControllerImpl extends EventHostImpl {
204
206
  }
205
207
  })
206
208
  .catch((error) => {
209
+ if (interrupted())
210
+ return;
207
211
  logError(this, 'enterPostroll failed', error);
208
212
  });
209
213
  };
@@ -349,7 +353,7 @@ export class TrackControllerImpl extends EventHostImpl {
349
353
  async preloadAd({ parentTrack, prefetchPriority, ad, }) {
350
354
  const { adTrackLoadOptionsProvider } = this.deps;
351
355
  const loadOptions = await adTrackLoadOptionsProvider(ad);
352
- if (parentTrack.disposed)
356
+ if (parentTrack.disposed || this.disposed)
353
357
  return;
354
358
  logVerbose(this, `preloading ad id=${ad.id} uri=${ad.uri} priority=${prefetchPriority}`);
355
359
  const adTrack = this.getOrCreateAdTrack(parentTrack.uri, loadOptions);
@@ -486,7 +490,7 @@ export class TrackControllerImpl extends EventHostImpl {
486
490
  const previousTrack = this._currentTrack;
487
491
  const previousWasActive = previousTrack?.active ?? false;
488
492
  this._currentTrack = newTrack;
489
- const interrupted = () => this._currentTrack !== newTrack;
493
+ const interrupted = () => this.disposed || this._currentTrack !== newTrack;
490
494
  previousTrack?.deactivate();
491
495
  if (previousTrack && previousWasActive) {
492
496
  this.dispatch('trackDeactivated', { track: previousTrack });
@@ -522,6 +526,8 @@ export class TrackControllerImpl extends EventHostImpl {
522
526
  activate();
523
527
  })
524
528
  .catch((error) => {
529
+ if (interrupted())
530
+ return;
525
531
  logError(this, 'enterPreroll failed', error);
526
532
  activate();
527
533
  });
@@ -1 +1 @@
1
- {"version":3,"file":"createSegmentDataProvider.d.ts","sourceRoot":"","sources":["../../../../src/track/createSegmentDataProvider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,KAAK,EAIL,kBAAkB,EAClB,kBAAkB,EAErB,MAAM,oBAAoB,CAAA;AAQ3B,OAAO,EAAE,KAAK,SAAS,EAAsB,MAAM,0BAA0B,CAAA;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAEvE,MAAM,WAAW,6BAA6B;IAC1C,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAA;IAC/C,QAAQ,CAAC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAA;CACzD;AAED,MAAM,WAAW,gCAAgC;IAC7C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAClC;;OAEG;IACH,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAA;CAC1C;AAED,wBAAgB,yBAAyB,CACrC,IAAI,EAAE,6BAA6B,EACnC,OAAO,EAAE,gCAAgC,GAC1C,mBAAmB,CAyDrB"}
1
+ {"version":3,"file":"createSegmentDataProvider.d.ts","sourceRoot":"","sources":["../../../../src/track/createSegmentDataProvider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,KAAK,EAIL,kBAAkB,EAClB,kBAAkB,EAErB,MAAM,oBAAoB,CAAA;AAS3B,OAAO,EAAE,KAAK,SAAS,EAAsB,MAAM,0BAA0B,CAAA;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAEvE,MAAM,WAAW,6BAA6B;IAC1C,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAA;IAC/C,QAAQ,CAAC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAA;CACzD;AAED,MAAM,WAAW,gCAAgC;IAC7C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAClC;;OAEG;IACH,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAA;CAC1C;AAED,wBAAgB,yBAAyB,CACrC,IAAI,EAAE,6BAA6B,EACnC,OAAO,EAAE,gCAAgC,GAC1C,mBAAmB,CA4DrB"}
@@ -2,7 +2,7 @@
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
- import { getHostname, last, networkMetricsController, normalizeHeadersInit, requestWithRetry, } from '@amazon/vinyl-util';
5
+ import { getHostname, last, networkMetricsController, normalizeHeadersInit, readResponseBody, requestWithRetry, } from '@amazon/vinyl-util';
6
6
  import { stringifyByteRange } from '@amazon/vinyl-mpd-parser';
7
7
  export function createSegmentDataProvider(deps, options) {
8
8
  return async (abort) => {
@@ -27,7 +27,7 @@ export function createSegmentDataProvider(deps, options) {
27
27
  abort,
28
28
  });
29
29
  const responseEnd = Date.now();
30
- const arrayBuffer = await response.arrayBuffer();
30
+ const arrayBuffer = await readResponseBody(response, 'arrayBuffer');
31
31
  const contentEnd = Date.now();
32
32
  let responseStart = null;
33
33
  if ('getEntriesByName' in performance) {
@@ -42,7 +42,10 @@ export function createSegmentDataProvider(deps, options) {
42
42
  }
43
43
  }
44
44
  }
45
- if (options.reportDownlinkMetrics) {
45
+ // Skip the metrics read when aborted: a prefetch that resolves after
46
+ // teardown must not touch the global networkMetricsController ref (it
47
+ // would re-initialize it and break integ spec isolation).
48
+ if (options.reportDownlinkMetrics && !abort?.aborted()) {
46
49
  networkMetricsController.value.addDownlinkTransferEntry({
47
50
  bytes: arrayBuffer.byteLength,
48
51
  serviceId,
@@ -20,13 +20,17 @@ export interface DashMediaQualityMetadataResolverDeps {
20
20
  }
21
21
  export declare function createMediaQualityMetadataFromDashRepresentation(representation: RepresentationType, deps: DashMediaQualityMetadataResolverDeps): MediaQualityMetadata;
22
22
  /**
23
- * Estimates the total bandwidth a representation would use when paired with
24
- * proportionally matched qualities from sibling content types.
23
+ * Estimates the total bandwidth a representation uses alongside sibling content
24
+ * types, pairing it with the cheapest sibling rendition in its proportional
25
+ * bucket.
25
26
  *
26
- * For each sibling content type, the representation's relative position within its own
27
- * content type's sorted bandwidth list is mapped to the corresponding position in the
28
- * sibling's list. This produces realistic pairings — e.g. with video [v1,v2,v3,v4] and
29
- * audio [a1,a2], v1 pairs with a1, v2 with a1, v3 with a2, v4 with a2.
27
+ * Each content type's sorted list is split into as many buckets as this
28
+ * representation's own list has tiers; the representation is paired with the
29
+ * cheapest sibling rendition in the matching bucket. A stream with few tiers
30
+ * therefore stays selected across the span of a finer sibling's tiers (e.g. the
31
+ * top audio across the top half of video tiers) rather than being pinned to a
32
+ * single endpoint — with video [v1..v4] and audio [a1,a2], a1's bucket is
33
+ * v1..v2 so a1 pairs with v2, and a2's bucket is v3..v4 so a2 pairs with v4.
30
34
  */
31
35
  export declare function estimatePeakBandwidth(representation: RepresentationType, contentType: ContentType): number;
32
36
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"DashMediaQualityMetadataResolver.d.ts","sourceRoot":"","sources":["../../../../../src/track/dash/DashMediaQualityMetadataResolver.ts"],"names":[],"mappings":"AAeA,OAAO,EAEH,KAAK,iBAAiB,EAGtB,KAAK,UAAU,EAEf,KAAK,kBAAkB,EAC1B,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EACR,WAAW,EACX,aAAa,EACb,oBAAoB,EACvB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAS1E;;;GAGG;AACH,eAAO,MAAM,+BAA+B,gDACK,CAAA;AAEjD;;GAEG;AACH,MAAM,MAAM,gCAAgC,GAAG,CAC3C,cAAc,EAAE,kBAAkB,KACjC,oBAAoB,CAAA;AAEzB;;;GAGG;AACH,wBAAgB,6CAA6C,CACzD,IAAI,EAAE,oCAAoC,GAC3C,gCAAgC,CAUlC;AAED,MAAM,WAAW,oCAAoC;IACjD,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAA;CACtD;AAED,wBAAgB,gDAAgD,CAC5D,cAAc,EAAE,kBAAkB,EAClC,IAAI,EAAE,oCAAoC,GAC3C,oBAAoB,CAwGtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACjC,cAAc,EAAE,kBAAkB,EAClC,WAAW,EAAE,WAAW,GACzB,MAAM,CAqBR;AAED;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,4DACzB,UAAU,KAAG,WAAW,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC,CA0BpE,CAAA;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACvC,iBAAiB,EAAE,iBAAiB,EACpC,IAAI,EAAE,oCAAoC,GAC3C,SAAS,aAAa,EAAE,CAS1B"}
1
+ {"version":3,"file":"DashMediaQualityMetadataResolver.d.ts","sourceRoot":"","sources":["../../../../../src/track/dash/DashMediaQualityMetadataResolver.ts"],"names":[],"mappings":"AAeA,OAAO,EAEH,KAAK,iBAAiB,EAGtB,KAAK,UAAU,EAEf,KAAK,kBAAkB,EAC1B,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EACR,WAAW,EACX,aAAa,EACb,oBAAoB,EACvB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAS1E;;;GAGG;AACH,eAAO,MAAM,+BAA+B,gDACK,CAAA;AAEjD;;GAEG;AACH,MAAM,MAAM,gCAAgC,GAAG,CAC3C,cAAc,EAAE,kBAAkB,KACjC,oBAAoB,CAAA;AAEzB;;;GAGG;AACH,wBAAgB,6CAA6C,CACzD,IAAI,EAAE,oCAAoC,GAC3C,gCAAgC,CAUlC;AAED,MAAM,WAAW,oCAAoC;IACjD,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAA;CACtD;AAED,wBAAgB,gDAAgD,CAC5D,cAAc,EAAE,kBAAkB,EAClC,IAAI,EAAE,oCAAoC,GAC3C,oBAAoB,CAwGtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACjC,cAAc,EAAE,kBAAkB,EAClC,WAAW,EAAE,WAAW,GACzB,MAAM,CAsBR;AAED;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,4DACzB,UAAU,KAAG,WAAW,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC,CA0BpE,CAAA;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACvC,iBAAiB,EAAE,iBAAiB,EACpC,IAAI,EAAE,oCAAoC,GAC3C,SAAS,aAAa,EAAE,CAS1B"}
@@ -99,13 +99,17 @@ export function createMediaQualityMetadataFromDashRepresentation(representation,
99
99
  };
100
100
  }
101
101
  /**
102
- * Estimates the total bandwidth a representation would use when paired with
103
- * proportionally matched qualities from sibling content types.
102
+ * Estimates the total bandwidth a representation uses alongside sibling content
103
+ * types, pairing it with the cheapest sibling rendition in its proportional
104
+ * bucket.
104
105
  *
105
- * For each sibling content type, the representation's relative position within its own
106
- * content type's sorted bandwidth list is mapped to the corresponding position in the
107
- * sibling's list. This produces realistic pairings — e.g. with video [v1,v2,v3,v4] and
108
- * audio [a1,a2], v1 pairs with a1, v2 with a1, v3 with a2, v4 with a2.
106
+ * Each content type's sorted list is split into as many buckets as this
107
+ * representation's own list has tiers; the representation is paired with the
108
+ * cheapest sibling rendition in the matching bucket. A stream with few tiers
109
+ * therefore stays selected across the span of a finer sibling's tiers (e.g. the
110
+ * top audio across the top half of video tiers) rather than being pinned to a
111
+ * single endpoint — with video [v1..v4] and audio [a1,a2], a1's bucket is
112
+ * v1..v2 so a1 pairs with v2, and a2's bucket is v3..v4 so a2 pairs with v4.
109
113
  */
110
114
  export function estimatePeakBandwidth(representation, contentType) {
111
115
  const sortedByType = getPeriodSortedBandwidths(representation.parent.parent);
@@ -115,12 +119,13 @@ export function estimatePeakBandwidth(representation, contentType) {
115
119
  // Find the closest match in the descending-sorted array. indexOf would return -1
116
120
  // when the representation's bandwidth was collapsed by the 10% dedup threshold.
117
121
  const ownIndex = Math.max(0, sortedInsertionIndex(own, representation.bandwidth, (a, b) => b - a) - 1);
118
- const position = own.length <= 1 ? 0 : ownIndex / (own.length - 1);
119
122
  let total = representation.bandwidth;
120
123
  for (const [ct, bandwidths] of sortedByType) {
121
124
  if (ct === contentType)
122
125
  continue;
123
- const peerIndex = Math.min(Math.round(position * (bandwidths.length - 1)), bandwidths.length - 1);
126
+ // The cheapest peer in this tier's bucket: bucket j spans peer indices
127
+ // up to ceil((j+1)/ownLen * peerLen) - 1.
128
+ const peerIndex = Math.min(bandwidths.length - 1, Math.ceil(((ownIndex + 1) / own.length) * bandwidths.length) - 1);
124
129
  total += bandwidths[peerIndex];
125
130
  }
126
131
  return total;
@@ -107,7 +107,7 @@ export declare function createDashFactories(options: Maybe<DashInitOptions>): (d
107
107
  readonly manifestTransformed: ObservableValue<Promise<DashManifestData>>;
108
108
  readonly options: ObservableValue<Pick<VinylOptions, "text">>;
109
109
  }) => SidecarTextTrackController;
110
- options: import("@amazon/vinyl-di").Factory<ObservableValue<Pick<VinylOptions, "audio" | "text" | "abr" | "allowedContentTypes">>>;
110
+ options: import("@amazon/vinyl-di").Factory<ObservableValue<Pick<VinylOptions, "text" | "audio" | "abr" | "allowedContentTypes">>>;
111
111
  playbackController: import("@amazon/vinyl-di").Factory<PlaybackController>;
112
112
  playbackSource: import("@amazon/vinyl-di").Factory<PlaybackSource>;
113
113
  drmKeySystemResolver: import("@amazon/vinyl-di").Factory<DrmKeySystemResolver>;
@@ -1 +1 @@
1
- {"version":3,"file":"DashRepresentationSegmentProvider.d.ts","sourceRoot":"","sources":["../../../../../../src/track/dash/timeline/DashRepresentationSegmentProvider.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAGR,kBAAkB,EAKrB,MAAM,0BAA0B,CAAA;AASjC,OAAO,EACH,KAAK,kBAAkB,EAG1B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAEH,KAAK,6BAA6B,EACrC,MAAM,iCAAiC,CAAA;AAExC,OAAO,KAAK,EAER,gBAAgB,EACnB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAA;AAE7E,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,qCAAqC,CAAA;AAE3F,MAAM,WAAW,uBACb,SAAQ,kBAAkB,EAAE,6BAA6B;IACzD;;OAEG;IACH,QAAQ,CAAC,4BAA4B,EAAE,gCAAgC,CAAA;CAC1E;AAED,MAAM,WAAW,iCAAiC;IAC9C;;;;;;OAMG;IACH,UAAU,CACN,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,CAAA;CAC3D;AAaD;;GAEG;AACH,wBAAgB,uCAAuC,CACnD,IAAI,EAAE,uBAAuB,EAC7B,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,kBAAkB,GACnC,iCAAiC,CAgHnC"}
1
+ {"version":3,"file":"DashRepresentationSegmentProvider.d.ts","sourceRoot":"","sources":["../../../../../../src/track/dash/timeline/DashRepresentationSegmentProvider.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAGR,kBAAkB,EAKrB,MAAM,0BAA0B,CAAA;AASjC,OAAO,EACH,KAAK,kBAAkB,EAG1B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAEH,KAAK,6BAA6B,EACrC,MAAM,iCAAiC,CAAA;AAGxC,OAAO,KAAK,EAER,gBAAgB,EACnB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAA;AAE7E,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,qCAAqC,CAAA;AAE3F,MAAM,WAAW,uBACb,SAAQ,kBAAkB,EAAE,6BAA6B;IACzD;;OAEG;IACH,QAAQ,CAAC,4BAA4B,EAAE,gCAAgC,CAAA;CAC1E;AAED,MAAM,WAAW,iCAAiC;IAC9C;;;;;;OAMG;IACH,UAAU,CACN,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,CAAA;CAC3D;AAaD;;GAEG;AACH,wBAAgB,uCAAuC,CACnD,IAAI,EAAE,uBAAuB,EAC7B,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,kBAAkB,GACnC,iCAAiC,CAoHnC"}
@@ -2,10 +2,11 @@
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
- import { ErrorOrigin, getSidxSampleTimes, parseSidxBox, ValidationError, } from '@amazon/vinyl-util';
5
+ import { ErrorOrigin, getSidxSampleTimes, parseSidxBox, parseWebmCues, parseWebmInit, ValidationError, } from '@amazon/vinyl-util';
6
6
  import { calculatePeriodTimeRange, getSegmentBase, getSegmentList, getSegmentTemplate, sampleToMpdTime, } from '../util/mpd';
7
7
  import { resolveDashUri, segmentTemplateUrl, } from '../util/uriResolution';
8
8
  import { createSegmentDataProvider, } from '../../createSegmentDataProvider';
9
+ import { getRepresentationMimeInfo } from '../util/mimeType';
9
10
  import { getSegmentAtTime } from '../../../streaming/util/segment';
10
11
  /**
11
12
  * Creates a representation timeline for the given representation.
@@ -72,7 +73,7 @@ export function createDashRepresentationSegmentProvider(deps, baseUrl, represent
72
73
  getSegmentReferences = () => createSegmentsFromSegmentBase(deps, {
73
74
  ...options,
74
75
  segmentBase,
75
- });
76
+ }, initData);
76
77
  }
77
78
  return {
78
79
  async getSegment(time, affordance = 0) {
@@ -183,9 +184,15 @@ function createSegmentsFromSegmentTemplate(deps, options) {
183
184
  /**
184
185
  * When SegmentBase is provided, get the timeline from the index range.
185
186
  */
186
- async function createSegmentsFromSegmentBase(deps, options) {
187
+ async function createSegmentsFromSegmentBase(deps, options, initData) {
187
188
  const { baseUrl, periodTimeRange, representation, segmentBase } = options;
188
189
  if (segmentBase.indexRange) {
190
+ // WebM indexes segments with an EBML `Cues` element, not an ISO-BMFF
191
+ // `sidx` box, so it needs a different reader.
192
+ const { mimeType } = getRepresentationMimeInfo(representation);
193
+ if (mimeType?.includes('webm')) {
194
+ return createSegmentsFromWebmCues(deps, options, initData);
195
+ }
189
196
  // Load the sidx box from the mp4.
190
197
  const indexRange = segmentBase.indexRange;
191
198
  const { url: indexUrl, serviceLocation: indexServiceLocation } = resolveDashUri(deps, { baseUrl, representation });
@@ -219,6 +226,67 @@ async function createSegmentsFromSegmentBase(deps, options) {
219
226
  throw new ValidationError('Manifest missing segments');
220
227
  }
221
228
  }
229
+ /**
230
+ * When SegmentBase is provided for a WebM stream, build the timeline from the
231
+ * EBML `Cues` element (the WebM analog of a `sidx`). Cue times are in the
232
+ * container's `TimecodeScale` ticks (from the init segment), and each cue's
233
+ * `CueClusterPosition` is a byte offset relative to the `Segment` data start.
234
+ */
235
+ async function createSegmentsFromWebmCues(deps, options, initData) {
236
+ const { baseUrl, periodTimeRange, representation, segmentBase } = options;
237
+ const indexRange = segmentBase.indexRange;
238
+ const { url, serviceLocation } = resolveDashUri(deps, {
239
+ baseUrl,
240
+ representation,
241
+ });
242
+ // The init segment (fetched via `initData`, whether by range or sourceURL)
243
+ // carries the Segment data offset and TimecodeScale; the index range holds
244
+ // the Cues.
245
+ const [{ segmentDataStart, timecodeScale }, cues] = await Promise.all([
246
+ Promise.resolve(initData()).then(parseWebmInit),
247
+ createSegmentDataProvider(deps, {
248
+ url,
249
+ mediaRange: indexRange,
250
+ serviceId: serviceLocation,
251
+ reportDownlinkMetrics: false,
252
+ })().then(parseWebmCues),
253
+ ]);
254
+ if (!cues.length) {
255
+ throw new ValidationError('WebM Cues contained no cue points');
256
+ }
257
+ // Cue times are in TimecodeScale ticks (ns per tick); express the timeline
258
+ // in ticks-per-second so sampleToMpdTime yields seconds.
259
+ const ticksPerSecond = Math.round(1e9 / timecodeScale);
260
+ const manifestTimescale = segmentBase.timescale ?? ticksPerSecond;
261
+ const presentationTimeOffset = ((segmentBase.presentationTimeOffset ?? 0) * ticksPerSecond) /
262
+ manifestTimescale;
263
+ // The final sample time is the last segment's end. WebM Cues don't carry
264
+ // it, so it comes from the period end (which VOD always defines).
265
+ const [, periodEnd] = periodTimeRange;
266
+ if (periodEnd == null)
267
+ throw new ValidationError('MPD.mediaPresentationDuration or Period.duration required', ErrorOrigin.MEDIA);
268
+ const sampleTimes = cues.map((cue) => cue.time);
269
+ sampleTimes.push(periodEnd * ticksPerSecond);
270
+ return createTimeline({
271
+ sampleTimes,
272
+ periodTimeRange,
273
+ presentationTimeOffset,
274
+ timescale: ticksPerSecond,
275
+ }, (i) => {
276
+ const start = segmentDataStart + cues[i].clusterPosition;
277
+ // Each cluster runs to the byte before the next cue's cluster; the
278
+ // last runs to the end of the file (open-ended range).
279
+ const end = i < cues.length - 1
280
+ ? segmentDataStart + cues[i + 1].clusterPosition - 1
281
+ : null;
282
+ return createSegmentDataProvider(deps, {
283
+ url,
284
+ mediaRange: [start, end],
285
+ serviceId: serviceLocation,
286
+ reportDownlinkMetrics: true,
287
+ });
288
+ });
289
+ }
222
290
  /**
223
291
  * Returns an array of start times, in timescale units for the segments in the given multiple segment base.
224
292
  * The last time in the list will be the end time, in timescale units.
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { noop } from '@amazon/vinyl-util';
6
6
  import { clone, getLocation, resolveUrl } from '@amazon/vinyl-util';
7
- import { requestWithRetry } from '@amazon/vinyl-util';
7
+ import { readResponseBody, requestWithRetry } from '@amazon/vinyl-util';
8
8
  import { parseDashManifest } from '@amazon/vinyl-mpd-parser';
9
9
  /**
10
10
  * Creates a DashManifestProvider which performs a request to retrieve a dash manifest.
@@ -27,7 +27,7 @@ export function urlDashManifestProvider(input, init, requestInterceptor = noop)
27
27
  const response = await requestWithRetry(params.input, params.init, {
28
28
  abort,
29
29
  });
30
- const xml = await response.text();
30
+ const xml = await readResponseBody(response, 'text');
31
31
  const manifest = parseDashManifest(xml);
32
32
  const baseInput = response.url || params.input;
33
33
  return {
@@ -28,6 +28,12 @@ export declare function calculatePeriodTimeRange(period: PeriodType): PeriodRang
28
28
  *
29
29
  * In a static presentation, the first period SHALL start at the zero point of the MPD timeline (with a
30
30
  * Period@start value of 0 seconds).
31
+ *
32
+ * When `Period@start` is absent, the start is derived from the sum of the
33
+ * preceding periods' `Period@duration` values, per the PeriodStart derivation
34
+ * in ISO/IEC 23009-1 §5.3.2.1. This is common in on-demand manifests that
35
+ * declare only per-period durations (no explicit `@start`, no
36
+ * `MPD@mediaPresentationDuration`).
31
37
  */
32
38
  export declare function calculatePeriodStart(period: PeriodType): number;
33
39
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"mpd.d.ts","sourceRoot":"","sources":["../../../../../../src/track/dash/util/mpd.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EAC3B,MAAM,0BAA0B,CAAA;AAKjC;;;GAGG;AACH,wBAAgB,cAAc,CAC1B,cAAc,EAAE,kBAAkB,GACnC,eAAe,GAAG,SAAS,CAM7B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAC9B,cAAc,EAAE,kBAAkB,GACnC,mBAAmB,GAAG,SAAS,CAMjC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC1B,cAAc,EAAE,kBAAkB,GACnC,eAAe,GAAG,SAAS,CAM7B;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACrC,cAAc,EAAE,kBAAkB,GACnC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAKvE;AAYD,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;AAE1D;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAExE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAE/D;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CASpE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC3B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,sBAAsB,EAAE,MAAM,EAC9B,SAAS,EAAE,MAAM,GAClB,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,MAAM,GACb,UAAU,GAAG,IAAI,CASnB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,UAAU,GACnB,kBAAkB,EAAE,CAQtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACvC,MAAM,EAAE,UAAU,GACnB,kBAAkB,EAAE,CAKtB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAahE"}
1
+ {"version":3,"file":"mpd.d.ts","sourceRoot":"","sources":["../../../../../../src/track/dash/util/mpd.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EAC3B,MAAM,0BAA0B,CAAA;AAKjC;;;GAGG;AACH,wBAAgB,cAAc,CAC1B,cAAc,EAAE,kBAAkB,GACnC,eAAe,GAAG,SAAS,CAM7B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAC9B,cAAc,EAAE,kBAAkB,GACnC,mBAAmB,GAAG,SAAS,CAMjC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC1B,cAAc,EAAE,kBAAkB,GACnC,eAAe,GAAG,SAAS,CAM7B;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACrC,cAAc,EAAE,kBAAkB,GACnC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAKvE;AAYD,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;AAE1D;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAExE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAc/D;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAYpE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC3B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,sBAAsB,EAAE,MAAM,EAC9B,SAAS,EAAE,MAAM,GAClB,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,MAAM,GACb,UAAU,GAAG,IAAI,CASnB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,UAAU,GACnB,kBAAkB,EAAE,CAQtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACvC,MAAM,EAAE,UAAU,GACnB,kBAAkB,EAAE,CAKtB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAahE"}
@@ -56,9 +56,27 @@ export function calculatePeriodTimeRange(period) {
56
56
  *
57
57
  * In a static presentation, the first period SHALL start at the zero point of the MPD timeline (with a
58
58
  * Period@start value of 0 seconds).
59
+ *
60
+ * When `Period@start` is absent, the start is derived from the sum of the
61
+ * preceding periods' `Period@duration` values, per the PeriodStart derivation
62
+ * in ISO/IEC 23009-1 §5.3.2.1. This is common in on-demand manifests that
63
+ * declare only per-period durations (no explicit `@start`, no
64
+ * `MPD@mediaPresentationDuration`).
59
65
  */
60
66
  export function calculatePeriodStart(period) {
61
- return period.start ?? 0;
67
+ if (period.start != null)
68
+ return period.start;
69
+ const mpd = period.parent;
70
+ const periodIndex = mpd.Period.indexOf(period);
71
+ if (periodIndex <= 0)
72
+ return 0;
73
+ const previous = mpd.Period[periodIndex - 1];
74
+ const previousStart = calculatePeriodStart(previous);
75
+ // The previous period's duration extends the timeline; without it the start
76
+ // cannot be advanced, so it inherits the previous period's start.
77
+ return previous.duration != null
78
+ ? previousStart + previous.duration
79
+ : previousStart;
62
80
  }
63
81
  /**
64
82
  * In a static presentation, the last period SHALL have a Period@duration.
@@ -71,8 +89,11 @@ export function calculatePeriodStart(period) {
71
89
  * shortened by an MPD update).
72
90
  */
73
91
  export function calculatePeriodEnd(period) {
74
- if (period.start != null && period.duration != null)
75
- return period.start + period.duration;
92
+ // A period's own duration defines its end regardless of whether `@start`
93
+ // is explicit, since `calculatePeriodStart` derives the start from the
94
+ // preceding periods when `@start` is absent.
95
+ if (period.duration != null)
96
+ return calculatePeriodStart(period) + period.duration;
76
97
  const mpd = period.parent;
77
98
  const periodIndex = mpd.Period.indexOf(period);
78
99
  if (periodIndex < mpd.Period.length - 1)
@@ -3,6 +3,10 @@ import type { MediaFormatMetadata } from '../../streaming/MediaQualityMetadata';
3
3
  export declare function throwMimeTypesUnsupported(): never;
4
4
  /**
5
5
  * Returns true when the media's codec and container is supported.
6
+ *
7
+ * Both ISO-BMFF (MP4/fMP4) and WebM containers are supported: the DASH
8
+ * `SegmentBase` indexer reads ISO-BMFF `sidx` boxes or WebM EBML `Cues` as
9
+ * appropriate, and MSE appends each to a matching SourceBuffer.
6
10
  */
7
11
  export declare function canPlayMimeType(deps: {
8
12
  readonly capabilities: Capabilities;
@@ -1 +1 @@
1
- {"version":3,"file":"resourceTypeFilter.d.ts","sourceRoot":"","sources":["../../../../../src/track/filters/resourceTypeFilter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAG/E,wBAAgB,yBAAyB,IAAI,KAAK,CAKjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC3B,IAAI,EAAE;IAAE,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;CAAE,EAC7C,QAAQ,EAAE,mBAAmB,GAC9B,OAAO,CAGT"}
1
+ {"version":3,"file":"resourceTypeFilter.d.ts","sourceRoot":"","sources":["../../../../../src/track/filters/resourceTypeFilter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAG/E,wBAAgB,yBAAyB,IAAI,KAAK,CAKjD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC3B,IAAI,EAAE;IAAE,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;CAAE,EAC7C,QAAQ,EAAE,mBAAmB,GAC9B,OAAO,CAGT"}
@@ -8,6 +8,10 @@ export function throwMimeTypesUnsupported() {
8
8
  }
9
9
  /**
10
10
  * Returns true when the media's codec and container is supported.
11
+ *
12
+ * Both ISO-BMFF (MP4/fMP4) and WebM containers are supported: the DASH
13
+ * `SegmentBase` indexer reads ISO-BMFF `sidx` boxes or WebM EBML `Cues` as
14
+ * appropriate, and MSE appends each to a matching SourceBuffer.
11
15
  */
12
16
  export function canPlayMimeType(deps, metadata) {
13
17
  if (!metadata.mimeType)
@@ -1,13 +1,27 @@
1
1
  import type { MediaQualityMetadata } from '../../streaming/MediaQualityMetadata';
2
2
  import type { Capabilities } from '../../client/Capabilities';
3
3
  export declare function throwSamplingRatesUnsupported(): never;
4
+ export interface AudioSampleRateRangeOptions {
5
+ readonly capabilities: Capabilities;
6
+ /**
7
+ * An explicit maximum sampling rate that takes precedence over the
8
+ * platform's `AudioContext`-reported output rate when set.
9
+ */
10
+ readonly maxSampleRate?: number | null;
11
+ /** An optional minimum sampling-rate floor. */
12
+ readonly minSampleRate?: number | null;
13
+ }
4
14
  /**
5
- * Returns true when the media's sampling rate is supported.
6
- * If Firefox (which does not support >48kHz), filter out all sampling rates above the supported sampling rate.
7
- * All other browsers filter out all sampling rates above the supported sampling rate unless this will filter all
8
- * and then do not filter the lowest sampling rate.
15
+ * Returns true when the media's sampling rate is within the supported range.
16
+ * Only audio content types are gated; every other content type passes through.
17
+ *
18
+ * The upper bound is `maxSampleRate` when set, otherwise the platform's
19
+ * `AudioContext`-reported output rate (Firefox is hard-capped at 48kHz, which it
20
+ * cannot decode beyond via MSE). The optional lower bound is `minSampleRate`.
21
+ * Both bounds are soft: if every audio rendition is above the max the lowest is
22
+ * kept, and if every audio rendition is below the min the highest is kept, so
23
+ * playback is never stranded. Only audio renditions count toward those
24
+ * fallbacks — a co-present video quality (no audio rate) never influences them.
9
25
  */
10
- export declare function supportsAudioSamplingRate(deps: {
11
- readonly capabilities: Capabilities;
12
- }, metadata: MediaQualityMetadata, _index: number, array: ArrayLike<MediaQualityMetadata>): boolean;
26
+ export declare function withinAudioSampleRateRange(options: AudioSampleRateRangeOptions, metadata: MediaQualityMetadata, _index: number, array: ArrayLike<MediaQualityMetadata>): boolean;
13
27
  //# sourceMappingURL=sampleRateFilter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sampleRateFilter.d.ts","sourceRoot":"","sources":["../../../../../src/track/filters/sampleRateFilter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAUhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE7D,wBAAgB,6BAA6B,IAAI,KAAK,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACrC,IAAI,EAAE;IAAE,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;CAAE,EAC7C,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,CAAC,oBAAoB,CAAC,GACvC,OAAO,CA+BT"}
1
+ {"version":3,"file":"sampleRateFilter.d.ts","sourceRoot":"","sources":["../../../../../src/track/filters/sampleRateFilter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAWhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE7D,wBAAgB,6BAA6B,IAAI,KAAK,CAErD;AAED,MAAM,WAAW,2BAA2B;IACxC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,2BAA2B,EACpC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,CAAC,oBAAoB,CAAC,GACvC,OAAO,CA+CT"}