@amazon/vinyl 3.0.1 → 3.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 (268) hide show
  1. package/dist/index.cjs +1103 -1042
  2. package/dist/index.cjs.map +4 -4
  3. package/dist/index.js +810 -739
  4. package/dist/index.js.map +4 -4
  5. package/dist/test/benchmark.js.map +2 -2
  6. package/dist/test/integ.es5.js +394 -388
  7. package/dist/test/integ.js +2626 -2032
  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 +19 -1
  18. package/dist/types/current/drm/DrmControllerImpl.d.ts.map +1 -1
  19. package/dist/types/current/drm/DrmControllerImpl.js +101 -58
  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 +15 -1
  44. package/dist/types/current/streaming/LoadMetric.d.ts.map +1 -1
  45. package/dist/types/current/streaming/StreamingEventMap.d.ts +1 -5
  46. package/dist/types/current/streaming/StreamingEventMap.d.ts.map +1 -1
  47. package/dist/types/current/streaming/StreamingEventMap.js +0 -1
  48. package/dist/types/current/streaming/buffering/BufferingController.d.ts +0 -11
  49. package/dist/types/current/streaming/buffering/BufferingController.d.ts.map +1 -1
  50. package/dist/types/current/streaming/buffering/BufferingController.js +0 -13
  51. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts.map +1 -1
  52. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.js +13 -4
  53. package/dist/types/current/streaming/mediaTimelineFilter.d.ts +4 -2
  54. package/dist/types/current/streaming/mediaTimelineFilter.d.ts.map +1 -1
  55. package/dist/types/current/streaming/mediaTimelineFilter.js +23 -8
  56. package/dist/types/current/text/SidecarTextTrackLoader.d.ts.map +1 -1
  57. package/dist/types/current/text/SidecarTextTrackLoader.js +4 -4
  58. package/dist/types/current/text/TextTrack.d.ts.map +1 -1
  59. package/dist/types/current/track/TrackController.d.ts.map +1 -1
  60. package/dist/types/current/track/TrackController.js +8 -2
  61. package/dist/types/current/track/createSegmentDataProvider.d.ts.map +1 -1
  62. package/dist/types/current/track/createSegmentDataProvider.js +6 -3
  63. package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
  64. package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.d.ts.map +1 -1
  65. package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.js +13 -8
  66. package/dist/types/current/track/dash/createDashFactories.d.ts +1 -1
  67. package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.d.ts.map +1 -1
  68. package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.js +71 -3
  69. package/dist/types/current/track/dash/urlDashManifestProvider.js +2 -2
  70. package/dist/types/current/track/dash/util/mpd.d.ts +6 -0
  71. package/dist/types/current/track/dash/util/mpd.d.ts.map +1 -1
  72. package/dist/types/current/track/dash/util/mpd.js +24 -3
  73. package/dist/types/current/track/filters/resourceTypeFilter.d.ts +4 -0
  74. package/dist/types/current/track/filters/resourceTypeFilter.d.ts.map +1 -1
  75. package/dist/types/current/track/filters/resourceTypeFilter.js +4 -0
  76. package/dist/types/current/track/filters/sampleRateFilter.d.ts +25 -7
  77. package/dist/types/current/track/filters/sampleRateFilter.d.ts.map +1 -1
  78. package/dist/types/current/track/filters/sampleRateFilter.js +52 -24
  79. package/dist/types/current/track/hls/createHlsFactories.d.ts +1 -1
  80. package/dist/types/current/track/hls/createUrlHlsManifestProvider.d.ts.map +1 -1
  81. package/dist/types/current/track/hls/createUrlHlsManifestProvider.js +3 -3
  82. package/dist/types/current/track/mse/MseTrack.d.ts +0 -17
  83. package/dist/types/current/track/mse/MseTrack.d.ts.map +1 -1
  84. package/dist/types/current/track/mse/MseTrack.js +1 -45
  85. package/dist/types/current/tsconfig.tsbuildinfo +1 -1
  86. package/dist/types/current/util/media/mimeType.d.ts +8 -0
  87. package/dist/types/current/util/media/mimeType.d.ts.map +1 -0
  88. package/dist/types/current/util/media/mimeType.js +13 -0
  89. package/dist/types/current/vinyl/VinylPlayer.d.ts +5 -0
  90. package/dist/types/current/vinyl/VinylPlayer.d.ts.map +1 -1
  91. package/dist/types/current/vinyl/VinylPlayer.js +23 -1
  92. package/dist/types/current/vinyl/createVinylFactories.d.ts +7 -16
  93. package/dist/types/current/vinyl/createVinylFactories.d.ts.map +1 -1
  94. package/dist/types/current/vinyl/createVinylFactories.js +2 -12
  95. package/dist/types/ts3.7/drm/DrmControllerImpl.d.ts +19 -1
  96. package/dist/types/ts3.7/index.d.ts +3 -6
  97. package/dist/types/ts3.7/playback/PlaybackControllerImpl.d.ts +15 -0
  98. package/dist/types/ts3.7/playback/ReadonlyPlaybackController.d.ts +28 -0
  99. package/dist/types/ts3.7/playback/createStallDetector.d.ts +43 -0
  100. package/dist/types/ts3.7/playback/createStallMonitor.d.ts +45 -0
  101. package/dist/types/ts3.7/streaming/AudioOptions.d.ts +27 -0
  102. package/dist/types/ts3.7/streaming/ContentStream.d.ts +0 -5
  103. package/dist/types/ts3.7/streaming/LoadMetric.d.ts +15 -1
  104. package/dist/types/ts3.7/streaming/StreamingEventMap.d.ts +0 -5
  105. package/dist/types/ts3.7/streaming/buffering/BufferingController.d.ts +0 -11
  106. package/dist/types/ts3.7/streaming/mediaTimelineFilter.d.ts +4 -2
  107. package/dist/types/ts3.7/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
  108. package/dist/types/ts3.7/track/dash/createDashFactories.d.ts +1 -1
  109. package/dist/types/ts3.7/track/dash/util/mpd.d.ts +6 -0
  110. package/dist/types/ts3.7/track/filters/resourceTypeFilter.d.ts +4 -0
  111. package/dist/types/ts3.7/track/filters/sampleRateFilter.d.ts +25 -7
  112. package/dist/types/ts3.7/track/hls/createHlsFactories.d.ts +1 -1
  113. package/dist/types/ts3.7/track/mse/MseTrack.d.ts +0 -17
  114. package/dist/types/ts3.7/util/media/mimeType.d.ts +8 -0
  115. package/dist/types/ts3.7/vinyl/VinylPlayer.d.ts +5 -0
  116. package/dist/types/ts3.7/vinyl/createVinylFactories.d.ts +7 -16
  117. package/dist/types/ts4.1/drm/DrmControllerImpl.d.ts +19 -1
  118. package/dist/types/ts4.1/index.d.ts +3 -6
  119. package/dist/types/ts4.1/playback/PlaybackControllerImpl.d.ts +15 -0
  120. package/dist/types/ts4.1/playback/ReadonlyPlaybackController.d.ts +28 -0
  121. package/dist/types/ts4.1/playback/createStallDetector.d.ts +43 -0
  122. package/dist/types/ts4.1/playback/createStallMonitor.d.ts +45 -0
  123. package/dist/types/ts4.1/streaming/AudioOptions.d.ts +27 -0
  124. package/dist/types/ts4.1/streaming/ContentStream.d.ts +0 -5
  125. package/dist/types/ts4.1/streaming/LoadMetric.d.ts +15 -1
  126. package/dist/types/ts4.1/streaming/StreamingEventMap.d.ts +0 -5
  127. package/dist/types/ts4.1/streaming/buffering/BufferingController.d.ts +0 -11
  128. package/dist/types/ts4.1/streaming/mediaTimelineFilter.d.ts +4 -2
  129. package/dist/types/ts4.1/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
  130. package/dist/types/ts4.1/track/dash/createDashFactories.d.ts +1 -1
  131. package/dist/types/ts4.1/track/dash/util/mpd.d.ts +6 -0
  132. package/dist/types/ts4.1/track/filters/resourceTypeFilter.d.ts +4 -0
  133. package/dist/types/ts4.1/track/filters/sampleRateFilter.d.ts +25 -7
  134. package/dist/types/ts4.1/track/hls/createHlsFactories.d.ts +1 -1
  135. package/dist/types/ts4.1/track/mse/MseTrack.d.ts +0 -17
  136. package/dist/types/ts4.1/util/media/mimeType.d.ts +8 -0
  137. package/dist/types/ts4.1/vinyl/VinylPlayer.d.ts +5 -0
  138. package/dist/types/ts4.1/vinyl/createVinylFactories.d.ts +7 -16
  139. package/dist/types/ts4.7/drm/DrmControllerImpl.d.ts +19 -1
  140. package/dist/types/ts4.7/index.d.ts +3 -6
  141. package/dist/types/ts4.7/playback/PlaybackControllerImpl.d.ts +15 -0
  142. package/dist/types/ts4.7/playback/ReadonlyPlaybackController.d.ts +28 -0
  143. package/dist/types/ts4.7/playback/createStallDetector.d.ts +43 -0
  144. package/dist/types/ts4.7/playback/createStallMonitor.d.ts +45 -0
  145. package/dist/types/ts4.7/streaming/AudioOptions.d.ts +27 -0
  146. package/dist/types/ts4.7/streaming/ContentStream.d.ts +0 -5
  147. package/dist/types/ts4.7/streaming/LoadMetric.d.ts +15 -1
  148. package/dist/types/ts4.7/streaming/StreamingEventMap.d.ts +0 -5
  149. package/dist/types/ts4.7/streaming/buffering/BufferingController.d.ts +0 -11
  150. package/dist/types/ts4.7/streaming/mediaTimelineFilter.d.ts +4 -2
  151. package/dist/types/ts4.7/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
  152. package/dist/types/ts4.7/track/dash/createDashFactories.d.ts +1 -1
  153. package/dist/types/ts4.7/track/dash/util/mpd.d.ts +6 -0
  154. package/dist/types/ts4.7/track/filters/resourceTypeFilter.d.ts +4 -0
  155. package/dist/types/ts4.7/track/filters/sampleRateFilter.d.ts +25 -7
  156. package/dist/types/ts4.7/track/hls/createHlsFactories.d.ts +1 -1
  157. package/dist/types/ts4.7/track/mse/MseTrack.d.ts +0 -17
  158. package/dist/types/ts4.7/util/media/mimeType.d.ts +8 -0
  159. package/dist/types/ts4.7/vinyl/VinylPlayer.d.ts +5 -0
  160. package/dist/types/ts4.7/vinyl/createVinylFactories.d.ts +7 -16
  161. package/dist/unit/types/current/ad/AdControllerImpl.test.js +27 -1
  162. package/dist/unit/types/current/drm/DrmControllerImpl.test.js +146 -9
  163. package/dist/unit/types/current/index.d.ts +3 -4
  164. package/dist/unit/types/current/index.d.ts.map +1 -1
  165. package/dist/unit/types/current/index.js +3 -4
  166. package/dist/unit/types/current/playback/PlaybackControllerImpl.test.js +165 -0
  167. package/dist/unit/types/current/playback/createStallDetector.test.d.ts +2 -0
  168. package/dist/unit/types/current/playback/createStallDetector.test.d.ts.map +1 -0
  169. package/dist/unit/types/current/playback/createStallDetector.test.js +163 -0
  170. package/dist/unit/types/current/playback/createStallMonitor.test.d.ts +2 -0
  171. package/dist/unit/types/current/playback/createStallMonitor.test.d.ts.map +1 -0
  172. package/dist/unit/types/current/playback/createStallMonitor.test.js +125 -0
  173. package/dist/unit/types/current/streaming/ContentStream.test.js +0 -11
  174. package/dist/unit/types/current/streaming/MseTrack.test.js +49 -73
  175. package/dist/unit/types/current/streaming/abr/QualitySelectorImpl.test.js +1 -1
  176. package/dist/unit/types/current/streaming/buffering/BufferingController.test.js +0 -21
  177. package/dist/unit/types/current/streaming/createDefaultMediaTimelineTransformer.test.js +133 -0
  178. package/dist/unit/types/current/streaming/mediaTimelineFilter.test.js +60 -54
  179. package/dist/unit/types/current/track/TrackController.test.js +61 -1
  180. package/dist/unit/types/current/track/createSegmentDataProvider.test.js +18 -0
  181. package/dist/unit/types/current/track/dash/DashMediaQualityMetadataResolver.test.js +46 -14
  182. package/dist/unit/types/current/track/dash/createSegmentControllerFactory.test.js +1 -0
  183. package/dist/unit/types/current/track/dash/timeline/DashRepresentationSegmentProvider.test.js +114 -0
  184. package/dist/unit/types/current/track/dash/util/mpd.test.js +37 -0
  185. package/dist/unit/types/current/track/filters/resourceTypeFilter.test.js +7 -0
  186. package/dist/unit/types/current/track/filters/sampleRateFilter.test.js +211 -34
  187. package/dist/unit/types/current/track/source/SourceObjectTrack.test.js +1 -1
  188. package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
  189. package/dist/unit/types/current/util/media/mimeType.test.d.ts +2 -0
  190. package/dist/unit/types/current/util/media/mimeType.test.d.ts.map +1 -0
  191. package/dist/unit/types/current/util/media/mimeType.test.js +22 -0
  192. package/dist/unit/types/current/vinyl/VinylPlayer.test.js +33 -2
  193. package/dist/unit/types/current/vinyl/createVinylFactories.test.js +2 -36
  194. package/dist/vinylTestUtil/index.js +6 -4
  195. package/dist/vinylTestUtil/index.js.map +2 -2
  196. package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.d.ts +1 -0
  197. package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.d.ts.map +1 -1
  198. package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.js +1 -0
  199. package/dist/vinylTestUtil/types/current/media/FrequencyAnalyzer.d.ts.map +1 -1
  200. package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.d.ts +0 -1
  201. package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.d.ts.map +1 -1
  202. package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.js +0 -1
  203. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
  204. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.d.ts.map +1 -1
  205. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.js +0 -1
  206. package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
  207. package/dist/vinylTestUtil/types/current/util/playback/eventPromises.js +1 -1
  208. package/dist/vinylTestUtil/types/current/util/playback/expectTrackCanSeek.d.ts.map +1 -1
  209. package/dist/vinylTestUtil/types/current/util/playback/expectTrackCanSeek.js +9 -1
  210. package/dist/vinylTestUtil/types/ts3.7/assets/vinylTestAssets.d.ts +1 -0
  211. package/dist/vinylTestUtil/types/ts3.7/mock/streaming/MockContentStream.d.ts +0 -1
  212. package/dist/vinylTestUtil/types/ts3.7/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
  213. package/dist/vinylTestUtil/types/ts4.1/assets/vinylTestAssets.d.ts +1 -0
  214. package/dist/vinylTestUtil/types/ts4.1/mock/streaming/MockContentStream.d.ts +0 -1
  215. package/dist/vinylTestUtil/types/ts4.1/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
  216. package/dist/vinylTestUtil/types/ts4.7/assets/vinylTestAssets.d.ts +1 -0
  217. package/dist/vinylTestUtil/types/ts4.7/mock/streaming/MockContentStream.d.ts +0 -1
  218. package/dist/vinylTestUtil/types/ts4.7/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
  219. package/docs/USAGE.md +29 -0
  220. package/package.json +11 -10
  221. package/dist/types/current/patch/media/HtmlMediaElementPatch.d.ts +0 -3
  222. package/dist/types/current/patch/media/HtmlMediaElementPatch.d.ts.map +0 -1
  223. package/dist/types/current/patch/media/HtmlMediaElementPatch.js +0 -5
  224. package/dist/types/current/patch/media/MediaElementPatchOptions.d.ts +0 -19
  225. package/dist/types/current/patch/media/MediaElementPatchOptions.d.ts.map +0 -1
  226. package/dist/types/current/patch/media/MediaElementPatchOptions.js +0 -16
  227. package/dist/types/current/patch/media/patchMediaElement.d.ts +0 -9
  228. package/dist/types/current/patch/media/patchMediaElement.d.ts.map +0 -1
  229. package/dist/types/current/patch/media/patchMediaElement.js +0 -15
  230. package/dist/types/current/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
  231. package/dist/types/current/patch/media/patches/createPreventStallsPatch.d.ts.map +0 -1
  232. package/dist/types/current/patch/media/patches/createPreventStallsPatch.js +0 -55
  233. package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
  234. package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts.map +0 -1
  235. package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.js +0 -218
  236. package/dist/types/current/vinyl/VinylPatchOptions.d.ts +0 -10
  237. package/dist/types/current/vinyl/VinylPatchOptions.d.ts.map +0 -1
  238. package/dist/types/current/vinyl/VinylPatchOptions.js +0 -11
  239. package/dist/types/ts3.7/patch/media/HtmlMediaElementPatch.d.ts +0 -3
  240. package/dist/types/ts3.7/patch/media/MediaElementPatchOptions.d.ts +0 -19
  241. package/dist/types/ts3.7/patch/media/patchMediaElement.d.ts +0 -9
  242. package/dist/types/ts3.7/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
  243. package/dist/types/ts3.7/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
  244. package/dist/types/ts3.7/vinyl/VinylPatchOptions.d.ts +0 -10
  245. package/dist/types/ts4.1/patch/media/HtmlMediaElementPatch.d.ts +0 -3
  246. package/dist/types/ts4.1/patch/media/MediaElementPatchOptions.d.ts +0 -19
  247. package/dist/types/ts4.1/patch/media/patchMediaElement.d.ts +0 -9
  248. package/dist/types/ts4.1/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
  249. package/dist/types/ts4.1/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
  250. package/dist/types/ts4.1/vinyl/VinylPatchOptions.d.ts +0 -10
  251. package/dist/types/ts4.7/patch/media/HtmlMediaElementPatch.d.ts +0 -3
  252. package/dist/types/ts4.7/patch/media/MediaElementPatchOptions.d.ts +0 -19
  253. package/dist/types/ts4.7/patch/media/patchMediaElement.d.ts +0 -9
  254. package/dist/types/ts4.7/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
  255. package/dist/types/ts4.7/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
  256. package/dist/types/ts4.7/vinyl/VinylPatchOptions.d.ts +0 -10
  257. package/dist/unit/types/current/patch/media/MediaElementPatchOptions.test.d.ts +0 -2
  258. package/dist/unit/types/current/patch/media/MediaElementPatchOptions.test.d.ts.map +0 -1
  259. package/dist/unit/types/current/patch/media/MediaElementPatchOptions.test.js +0 -17
  260. package/dist/unit/types/current/patch/media/patchMediaElement.test.d.ts +0 -2
  261. package/dist/unit/types/current/patch/media/patchMediaElement.test.d.ts.map +0 -1
  262. package/dist/unit/types/current/patch/media/patchMediaElement.test.js +0 -36
  263. package/dist/unit/types/current/patch/media/patches/createPreventStallsPatch.test.d.ts +0 -2
  264. package/dist/unit/types/current/patch/media/patches/createPreventStallsPatch.test.d.ts.map +0 -1
  265. package/dist/unit/types/current/patch/media/patches/createPreventStallsPatch.test.js +0 -93
  266. package/dist/unit/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.test.d.ts +0 -2
  267. package/dist/unit/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.test.d.ts.map +0 -1
  268. package/dist/unit/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.test.js +0 -423
@@ -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,31 @@
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, and soft *together*: when no audio rendition sits in the
22
+ * acceptable `[minSampleRate, maxSampleRate]` band, a single fallback is kept so
23
+ * playback is never stranded — the highest rate the ceiling can decode, or, when
24
+ * every rate is above the ceiling, the lowest. This holds even when renditions
25
+ * straddle an empty band (some below the floor, some above the ceiling). Only
26
+ * audio renditions count toward the fallback — a co-present video quality (no
27
+ * audio rate) never influences it. Firefox is the exception: its 48kHz cap is
28
+ * hard, with no fallback.
9
29
  */
10
- export declare function supportsAudioSamplingRate(deps: {
11
- readonly capabilities: Capabilities;
12
- }, metadata: MediaQualityMetadata, _index: number, array: ArrayLike<MediaQualityMetadata>): boolean;
30
+ export declare function withinAudioSampleRateRange(options: AudioSampleRateRangeOptions, metadata: MediaQualityMetadata, _index: number, array: ArrayLike<MediaQualityMetadata>): boolean;
13
31
  //# 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;AAUhF,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;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,2BAA2B,EACpC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,CAAC,oBAAoB,CAAC,GACvC,OAAO,CAmDT"}
@@ -2,39 +2,67 @@
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
- import { hasBrowser, Browser, last, MediaUnsupportedError, every, map, min, } from '@amazon/vinyl-util';
5
+ import { hasBrowser, Browser, last, MediaUnsupportedError, map, max, min, } from '@amazon/vinyl-util';
6
6
  export function throwSamplingRatesUnsupported() {
7
7
  throw new MediaUnsupportedError('No supported sample rate', 'sampling-rate');
8
8
  }
9
9
  /**
10
- * Returns true when the media's sampling rate is supported.
11
- * If Firefox (which does not support >48kHz), filter out all sampling rates above the supported sampling rate.
12
- * All other browsers filter out all sampling rates above the supported sampling rate unless this will filter all
13
- * and then do not filter the lowest sampling rate.
10
+ * Returns true when the media's sampling rate is within the supported range.
11
+ * Only audio content types are gated; every other content type passes through.
12
+ *
13
+ * The upper bound is `maxSampleRate` when set, otherwise the platform's
14
+ * `AudioContext`-reported output rate (Firefox is hard-capped at 48kHz, which it
15
+ * cannot decode beyond via MSE). The optional lower bound is `minSampleRate`.
16
+ * Both bounds are soft, and soft *together*: when no audio rendition sits in the
17
+ * acceptable `[minSampleRate, maxSampleRate]` band, a single fallback is kept so
18
+ * playback is never stranded — the highest rate the ceiling can decode, or, when
19
+ * every rate is above the ceiling, the lowest. This holds even when renditions
20
+ * straddle an empty band (some below the floor, some above the ceiling). Only
21
+ * audio renditions count toward the fallback — a co-present video quality (no
22
+ * audio rate) never influences it. Firefox is the exception: its 48kHz cap is
23
+ * hard, with no fallback.
14
24
  */
15
- export function supportsAudioSamplingRate(deps, metadata, _index, array) {
16
- const isFirefox = hasBrowser(Browser.FIREFOX);
17
- const maxSampleRate = deps.capabilities.sampleRate;
25
+ export function withinAudioSampleRateRange(options, metadata, _index, array) {
26
+ // Muxed video carrying an audio rate, and every non-audio type, pass through.
27
+ if (metadata.contentType !== 'audio')
28
+ return true;
18
29
  const samplingRate = last(metadata.audioSamplingRate);
19
- if (!samplingRate || !maxSampleRate)
30
+ if (!samplingRate)
20
31
  return true; // sampling rate not set
21
- if (isFirefox) {
22
- // Firefox: filter out all sampling rates above 48_000 Hz
32
+ const { minSampleRate } = options;
33
+ // An explicit maxSampleRate takes precedence over the AudioContext rate.
34
+ const maxSampleRate = options.maxSampleRate ?? options.capabilities.sampleRate;
35
+ const audioRates = () => map(array, (item) => item.contentType === 'audio'
36
+ ? last(item.audioSamplingRate)
37
+ : undefined).filter((rate) => rate != null);
38
+ // The single rate to keep when this rendition is out of band — or undefined
39
+ // when some rendition IS in band, so out-of-band renditions are dropped.
40
+ // Evaluating both bounds together is what stops a straddle from stranding.
41
+ const outOfBandFallback = () => {
42
+ const rates = audioRates();
43
+ const inBand = (rate) => (minSampleRate == null || rate >= minSampleRate) &&
44
+ (!maxSampleRate || rate <= maxSampleRate);
45
+ if (rates.some(inBand))
46
+ return undefined;
47
+ const decodable = maxSampleRate
48
+ ? rates.filter((rate) => rate <= maxSampleRate)
49
+ : rates;
50
+ return decodable.length ? max(decodable) : min(rates);
51
+ };
52
+ // Lower bound (soft floor), independent of the platform max.
53
+ if (minSampleRate != null && samplingRate < minSampleRate) {
54
+ return samplingRate === outOfBandFallback();
55
+ }
56
+ // No platform max to gauge support: keep. This also lets >48kHz through on
57
+ // Firefox (its cap below is skipped) — accepted.
58
+ if (!maxSampleRate)
59
+ return true;
60
+ if (hasBrowser(Browser.FIREFOX)) {
61
+ // Firefox cannot decode >48kHz (e.g. high-res FLAC) via MSE; drop those.
23
62
  return samplingRate <= 48_000;
24
63
  }
25
- // Other browsers: filter out all sampling rates above supported unless this will filter all
26
64
  if (samplingRate <= maxSampleRate)
27
65
  return true;
28
- // Check if filtering all would remove everything
29
- const allAboveMax = every(array, (item) => {
30
- const itemSamplingRate = last(item.audioSamplingRate);
31
- return itemSamplingRate != null && itemSamplingRate > maxSampleRate;
32
- });
33
- if (allAboveMax) {
34
- // Find the lowest sampling rate and only allow that one
35
- const samplingRates = map(array, (item) => last(item.audioSamplingRate)).filter((rate) => rate != null);
36
- const lowestSamplingRate = min(samplingRates);
37
- return samplingRate === lowestSamplingRate;
38
- }
39
- return false;
66
+ // Above the ceiling (soft): keep only the fallback when no rate is in band.
67
+ return samplingRate === outOfBandFallback();
40
68
  }
@@ -96,7 +96,7 @@ export declare function createHlsFactories(options: Maybe<HlsInitOptions>): (dep
96
96
  readonly manifestTransformed: ObservableValue<Promise<HlsManifestData>>;
97
97
  readonly options: ObservableValue<Pick<VinylOptions, "text">>;
98
98
  }) => SidecarTextTrackController;
99
- options: import("@amazon/vinyl-di").Factory<ObservableValue<Pick<VinylOptions, "audio" | "text" | "abr" | "allowedContentTypes">>>;
99
+ options: import("@amazon/vinyl-di").Factory<ObservableValue<Pick<VinylOptions, "text" | "audio" | "abr" | "allowedContentTypes">>>;
100
100
  playbackController: import("@amazon/vinyl-di").Factory<PlaybackController>;
101
101
  playbackSource: import("@amazon/vinyl-di").Factory<PlaybackSource>;
102
102
  drmKeySystemResolver: import("@amazon/vinyl-di").Factory<DrmKeySystemResolver>;
@@ -1 +1 @@
1
- {"version":3,"file":"createUrlHlsManifestProvider.d.ts","sourceRoot":"","sources":["../../../../../src/track/hls/createUrlHlsManifestProvider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,eAAe,EACf,gBAAgB,EACnB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,KAAK,EACR,KAAK,EACL,aAAa,EACb,kBAAkB,EACrB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEtE,wBAAgB,4BAA4B,CACxC,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,kBAAkB,GACjC,mBAAmB,CAiCrB;AAED,MAAM,WAAW,yBAAyB;IACtC,uDAAuD;IACvD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IAC5C,sCAAsC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAChD,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAA;CACxC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACpC,OAAO,EAAE,yBAAyB,GACnC,OAAO,CAAC,gBAAgB,CAAC,CAU3B"}
1
+ {"version":3,"file":"createUrlHlsManifestProvider.d.ts","sourceRoot":"","sources":["../../../../../src/track/hls/createUrlHlsManifestProvider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,eAAe,EACf,gBAAgB,EACnB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,KAAK,EACR,KAAK,EACL,aAAa,EACb,kBAAkB,EACrB,MAAM,oBAAoB,CAAA;AAQ3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEtE,wBAAgB,4BAA4B,CACxC,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,kBAAkB,GACjC,mBAAmB,CAiCrB;AAED,MAAM,WAAW,yBAAyB;IACtC,uDAAuD;IACvD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IAC5C,sCAAsC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAChD,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAA;CACxC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACpC,OAAO,EAAE,yBAAyB,GACnC,OAAO,CAAC,gBAAgB,CAAC,CAU3B"}
@@ -3,13 +3,13 @@
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
5
  import { parseMainPlaylist, parseMediaPlaylist } from '@amazon/vinyl-hls-parser';
6
- import { memoize, requestWithRetry, resolveUrl } from '@amazon/vinyl-util';
6
+ import { memoize, readResponseBody, requestWithRetry, resolveUrl, } from '@amazon/vinyl-util';
7
7
  export function createUrlHlsManifestProvider(url, requestInit) {
8
8
  return async (abort) => {
9
9
  const mainResponse = await requestWithRetry(url, requestInit, {
10
10
  abort,
11
11
  });
12
- const mainText = await mainResponse.text();
12
+ const mainText = await readResponseBody(mainResponse, 'text');
13
13
  // Use the response URL (after redirects) as the base for resolving
14
14
  // relative URIs and for resolving #EXT-X-DEFINE:QUERYPARAM tokens.
15
15
  const baseUrl = mainResponse.url || url;
@@ -35,7 +35,7 @@ export async function fetchMediaPlaylist(options) {
35
35
  const { uri, baseUrl, defines, requestInit, abort } = options;
36
36
  const variantUrl = resolveUrl(uri, baseUrl);
37
37
  const response = await requestWithRetry(variantUrl, requestInit, { abort });
38
- const text = await response.text();
38
+ const text = await readResponseBody(response, 'text');
39
39
  // The resolved URL (after redirects) carries the query parameters that
40
40
  // #EXT-X-DEFINE:QUERYPARAM entries resolve against (e.g. MediaTailor ad
41
41
  // manifests). Fall back to the requested URL if the response omits it.
@@ -14,15 +14,6 @@ import type { TextTrackController } from '../../text/TextTrack';
14
14
  import type { TrackConfigOptions } from '../TrackFactory';
15
15
  import type { TrackAds } from '../../ad/AdBreakInfo';
16
16
  import type { VinylOptions } from '../../vinyl/VinylOptions';
17
- /**
18
- * How long to wait after all streams have data before checking whether a seek
19
- * is still stuck, in seconds.
20
- */
21
- export declare const SEEKING_STALL_TIME_CHECK = 0.1;
22
- /**
23
- * How far to nudge the playhead, in seconds, to recover a stuck seek.
24
- */
25
- export declare const PLAYHEAD_NUDGE = 0.05;
26
17
  export type MseTrackDeps = TrackBaseDeps & {
27
18
  readonly contentTypesValue: ContentTypesValue;
28
19
  readonly contentStreamFactory: (contentType: ContentType) => ContentStream;
@@ -54,7 +45,6 @@ export declare class MseTrack extends TrackBase {
54
45
  protected readonly deps: MseTrackDeps;
55
46
  get textTrackController(): TextTrackController | null;
56
47
  private readonly streams;
57
- private stallNudgeTimer;
58
48
  private readonly disposeAbort;
59
49
  private lastPreloadOptions;
60
50
  private readonly allFetchedRanges;
@@ -129,13 +119,6 @@ export declare class MseTrack extends TrackBase {
129
119
  private getStream;
130
120
  private clearStreams;
131
121
  get bufferingEnded(): boolean;
132
- /**
133
- * A seek only completes once every stream has data at the target, but on
134
- * some platforms the element can stay stuck `seeking` even after that. Once
135
- * all streams hold data, if we're still seeking a moment later, nudge the
136
- * playhead to prod the element into completing the seek.
137
- */
138
- private checkStalledSeek;
139
122
  private setContentTypes;
140
123
  dispose(): void;
141
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MseTrack.d.ts","sourceRoot":"","sources":["../../../../../src/track/mse/MseTrack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MseTrack.d.ts","sourceRoot":"","sources":["../../../../../src/track/mse/MseTrack.ts"],"names":[],"mappings":"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"}
@@ -3,18 +3,9 @@
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
5
  import { TrackBase } from '../TrackBase';
6
- import { Abort, equalDeep, first, IntersectionRanges, logDebug, noop, redispatchEvents, } from '@amazon/vinyl-util';
6
+ import { Abort, equalDeep, first, IntersectionRanges, logDebug, redispatchEvents, } from '@amazon/vinyl-util';
7
7
  import { createContainer } from '@amazon/vinyl-di';
8
8
  import { getMediaPeriodAtTime, } from '../../streaming/MediaTimeline';
9
- /**
10
- * How long to wait after all streams have data before checking whether a seek
11
- * is still stuck, in seconds.
12
- */
13
- export const SEEKING_STALL_TIME_CHECK = 0.1;
14
- /**
15
- * How far to nudge the playhead, in seconds, to recover a stuck seek.
16
- */
17
- export const PLAYHEAD_NUDGE = 0.05;
18
9
  /**
19
10
  * An MseTrack uses media source extensions for streaming.
20
11
  */
@@ -30,7 +21,6 @@ export class MseTrack extends TrackBase {
30
21
  return this.deps.textTrackController ?? null;
31
22
  }
32
23
  streams = [];
33
- stallNudgeTimer = null;
34
24
  disposeAbort = new Abort();
35
25
  lastPreloadOptions = null;
36
26
  allFetchedRanges = [];
@@ -94,10 +84,6 @@ export class MseTrack extends TrackBase {
94
84
  if (previous !== undefined)
95
85
  this.reloadStreams();
96
86
  }));
97
- add(deps.allowedContentTypes.onData((_value, previous) => {
98
- if (previous !== undefined)
99
- this.reloadStreams();
100
- }));
101
87
  // A resolution-restriction change re-selects a quality from the same
102
88
  // streams, so clearing the buffer is enough — no rebuild is needed.
103
89
  add(deps.abr.onData((value, previous) => {
@@ -237,7 +223,6 @@ export class MseTrack extends TrackBase {
237
223
  this.dispatch('bufferingEnded', {});
238
224
  }
239
225
  });
240
- stream.on('hasDataChange', () => this.checkStalledSeek());
241
226
  stream.on('fetchedRangesChange', () => {
242
227
  this._fetchedRanges.invalidate();
243
228
  });
@@ -382,33 +367,6 @@ export class MseTrack extends TrackBase {
382
367
  get bufferingEnded() {
383
368
  return this.streams.every((stream) => stream.bufferingEnded);
384
369
  }
385
- /**
386
- * A seek only completes once every stream has data at the target, but on
387
- * some platforms the element can stay stuck `seeking` even after that. Once
388
- * all streams hold data, if we're still seeking a moment later, nudge the
389
- * playhead to prod the element into completing the seek.
390
- */
391
- checkStalledSeek() {
392
- const { playbackController } = this.deps;
393
- if (this.stallNudgeTimer !== null || !playbackController.seeking)
394
- return;
395
- if (!this.streams.length || !this.streams.every((s) => s.hasData)) {
396
- return;
397
- }
398
- this.stallNudgeTimer = setTimeout(() => {
399
- this.stallNudgeTimer = null;
400
- if (this.disposed || !playbackController.seeking)
401
- return;
402
- if (!this.streams.every((s) => s.hasData))
403
- return;
404
- const from = playbackController.currentTime;
405
- const to = from + PLAYHEAD_NUDGE;
406
- // An internal recovery seek, not a user seek — logged so the two
407
- // are distinguishable in playback traces.
408
- logDebug(this, 'nudging playhead to recover a stalled seek', from, '->', to);
409
- playbackController.seekTo(to, 0).catch(noop);
410
- }, SEEKING_STALL_TIME_CHECK * 1000);
411
- }
412
370
  setContentTypes(contentTypes) {
413
371
  if (this.disposed)
414
372
  return;
@@ -434,8 +392,6 @@ export class MseTrack extends TrackBase {
434
392
  }
435
393
  dispose() {
436
394
  logDebug(this, 'dispose');
437
- if (this.stallNudgeTimer !== null)
438
- clearTimeout(this.stallNudgeTimer);
439
395
  this.clearStreams();
440
396
  super.dispose();
441
397
  }