@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.
- package/dist/index.cjs +972 -954
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +646 -619
- package/dist/index.js.map +4 -4
- package/dist/test/benchmark.js.map +2 -2
- package/dist/test/integ.es5.js +357 -353
- package/dist/test/integ.js +2251 -1852
- package/dist/test/integ.js.map +4 -4
- package/dist/test/jasmine.css +50 -3
- package/dist/test/jasmineHtml.es5.js +195 -155
- package/dist/test/jasmineHtml.js +2938 -1833
- package/dist/test/jasmineHtml.js.map +3 -3
- package/dist/types/current/ad/AdControllerImpl.d.ts.map +1 -1
- package/dist/types/current/ad/AdControllerImpl.js +4 -1
- package/dist/types/current/ad/discoverHlsInterstitials.d.ts.map +1 -1
- package/dist/types/current/ad/discoverHlsInterstitials.js +2 -2
- package/dist/types/current/drm/DrmControllerImpl.d.ts +2 -0
- package/dist/types/current/drm/DrmControllerImpl.d.ts.map +1 -1
- package/dist/types/current/drm/DrmControllerImpl.js +56 -48
- package/dist/types/current/drm/licenseProvider/defaultLicenseProvider.d.ts.map +1 -1
- package/dist/types/current/drm/licenseProvider/defaultLicenseProvider.js +2 -2
- package/dist/types/current/index.d.ts +3 -6
- package/dist/types/current/index.d.ts.map +1 -1
- package/dist/types/current/index.js +3 -6
- package/dist/types/current/playback/PlaybackControllerImpl.d.ts +15 -0
- package/dist/types/current/playback/PlaybackControllerImpl.d.ts.map +1 -1
- package/dist/types/current/playback/PlaybackControllerImpl.js +100 -9
- package/dist/types/current/playback/ReadonlyPlaybackController.d.ts +27 -1
- package/dist/types/current/playback/ReadonlyPlaybackController.d.ts.map +1 -1
- package/dist/types/current/playback/ReadonlyPlaybackController.js +16 -0
- package/dist/types/current/playback/createStallDetector.d.ts +43 -0
- package/dist/types/current/playback/createStallDetector.d.ts.map +1 -0
- package/dist/types/current/playback/createStallDetector.js +101 -0
- package/dist/types/current/playback/createStallMonitor.d.ts +45 -0
- package/dist/types/current/playback/createStallMonitor.d.ts.map +1 -0
- package/dist/types/current/playback/createStallMonitor.js +94 -0
- package/dist/types/current/streaming/AudioOptions.d.ts +27 -0
- package/dist/types/current/streaming/AudioOptions.d.ts.map +1 -1
- package/dist/types/current/streaming/AudioOptions.js +5 -1
- package/dist/types/current/streaming/ContentStream.d.ts +0 -5
- package/dist/types/current/streaming/ContentStream.d.ts.map +1 -1
- package/dist/types/current/streaming/ContentStream.js +0 -4
- package/dist/types/current/streaming/LoadMetric.d.ts.map +1 -1
- package/dist/types/current/streaming/StreamingEventMap.d.ts +1 -5
- package/dist/types/current/streaming/StreamingEventMap.d.ts.map +1 -1
- package/dist/types/current/streaming/StreamingEventMap.js +0 -1
- package/dist/types/current/streaming/buffering/BufferingController.d.ts +0 -11
- package/dist/types/current/streaming/buffering/BufferingController.d.ts.map +1 -1
- package/dist/types/current/streaming/buffering/BufferingController.js +0 -13
- package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts.map +1 -1
- package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.js +13 -4
- package/dist/types/current/text/SidecarTextTrackLoader.d.ts.map +1 -1
- package/dist/types/current/text/SidecarTextTrackLoader.js +4 -4
- package/dist/types/current/text/TextTrack.d.ts.map +1 -1
- package/dist/types/current/track/TrackController.d.ts.map +1 -1
- package/dist/types/current/track/TrackController.js +8 -2
- package/dist/types/current/track/createSegmentDataProvider.d.ts.map +1 -1
- package/dist/types/current/track/createSegmentDataProvider.js +6 -3
- package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
- package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.d.ts.map +1 -1
- package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.js +13 -8
- package/dist/types/current/track/dash/createDashFactories.d.ts +1 -1
- package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.d.ts.map +1 -1
- package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.js +71 -3
- package/dist/types/current/track/dash/urlDashManifestProvider.js +2 -2
- package/dist/types/current/track/dash/util/mpd.d.ts +6 -0
- package/dist/types/current/track/dash/util/mpd.d.ts.map +1 -1
- package/dist/types/current/track/dash/util/mpd.js +24 -3
- package/dist/types/current/track/filters/resourceTypeFilter.d.ts +4 -0
- package/dist/types/current/track/filters/resourceTypeFilter.d.ts.map +1 -1
- package/dist/types/current/track/filters/resourceTypeFilter.js +4 -0
- package/dist/types/current/track/filters/sampleRateFilter.d.ts +21 -7
- package/dist/types/current/track/filters/sampleRateFilter.d.ts.map +1 -1
- package/dist/types/current/track/filters/sampleRateFilter.js +42 -24
- package/dist/types/current/track/hls/createHlsFactories.d.ts +1 -1
- package/dist/types/current/track/hls/createUrlHlsManifestProvider.d.ts.map +1 -1
- package/dist/types/current/track/hls/createUrlHlsManifestProvider.js +3 -3
- package/dist/types/current/track/mse/MseTrack.d.ts +9 -17
- package/dist/types/current/track/mse/MseTrack.d.ts.map +1 -1
- package/dist/types/current/track/mse/MseTrack.js +29 -46
- package/dist/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/types/current/util/media/mimeType.d.ts +8 -0
- package/dist/types/current/util/media/mimeType.d.ts.map +1 -0
- package/dist/types/current/util/media/mimeType.js +13 -0
- package/dist/types/current/vinyl/createVinylFactories.d.ts +7 -16
- package/dist/types/current/vinyl/createVinylFactories.d.ts.map +1 -1
- package/dist/types/current/vinyl/createVinylFactories.js +2 -12
- package/dist/types/ts3.7/drm/DrmControllerImpl.d.ts +2 -0
- package/dist/types/ts3.7/index.d.ts +3 -6
- package/dist/types/ts3.7/playback/PlaybackControllerImpl.d.ts +15 -0
- package/dist/types/ts3.7/playback/ReadonlyPlaybackController.d.ts +28 -0
- package/dist/types/ts3.7/playback/createStallDetector.d.ts +43 -0
- package/dist/types/ts3.7/playback/createStallMonitor.d.ts +45 -0
- package/dist/types/ts3.7/streaming/AudioOptions.d.ts +27 -0
- package/dist/types/ts3.7/streaming/ContentStream.d.ts +0 -5
- package/dist/types/ts3.7/streaming/StreamingEventMap.d.ts +0 -5
- package/dist/types/ts3.7/streaming/buffering/BufferingController.d.ts +0 -11
- package/dist/types/ts3.7/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
- package/dist/types/ts3.7/track/dash/createDashFactories.d.ts +1 -1
- package/dist/types/ts3.7/track/dash/util/mpd.d.ts +6 -0
- package/dist/types/ts3.7/track/filters/resourceTypeFilter.d.ts +4 -0
- package/dist/types/ts3.7/track/filters/sampleRateFilter.d.ts +21 -7
- package/dist/types/ts3.7/track/hls/createHlsFactories.d.ts +1 -1
- package/dist/types/ts3.7/track/mse/MseTrack.d.ts +9 -17
- package/dist/types/ts3.7/util/media/mimeType.d.ts +8 -0
- package/dist/types/ts3.7/vinyl/createVinylFactories.d.ts +7 -16
- package/dist/types/ts4.1/drm/DrmControllerImpl.d.ts +2 -0
- package/dist/types/ts4.1/index.d.ts +3 -6
- package/dist/types/ts4.1/playback/PlaybackControllerImpl.d.ts +15 -0
- package/dist/types/ts4.1/playback/ReadonlyPlaybackController.d.ts +28 -0
- package/dist/types/ts4.1/playback/createStallDetector.d.ts +43 -0
- package/dist/types/ts4.1/playback/createStallMonitor.d.ts +45 -0
- package/dist/types/ts4.1/streaming/AudioOptions.d.ts +27 -0
- package/dist/types/ts4.1/streaming/ContentStream.d.ts +0 -5
- package/dist/types/ts4.1/streaming/StreamingEventMap.d.ts +0 -5
- package/dist/types/ts4.1/streaming/buffering/BufferingController.d.ts +0 -11
- package/dist/types/ts4.1/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
- package/dist/types/ts4.1/track/dash/createDashFactories.d.ts +1 -1
- package/dist/types/ts4.1/track/dash/util/mpd.d.ts +6 -0
- package/dist/types/ts4.1/track/filters/resourceTypeFilter.d.ts +4 -0
- package/dist/types/ts4.1/track/filters/sampleRateFilter.d.ts +21 -7
- package/dist/types/ts4.1/track/hls/createHlsFactories.d.ts +1 -1
- package/dist/types/ts4.1/track/mse/MseTrack.d.ts +9 -17
- package/dist/types/ts4.1/util/media/mimeType.d.ts +8 -0
- package/dist/types/ts4.1/vinyl/createVinylFactories.d.ts +7 -16
- package/dist/types/ts4.7/drm/DrmControllerImpl.d.ts +2 -0
- package/dist/types/ts4.7/index.d.ts +3 -6
- package/dist/types/ts4.7/playback/PlaybackControllerImpl.d.ts +15 -0
- package/dist/types/ts4.7/playback/ReadonlyPlaybackController.d.ts +28 -0
- package/dist/types/ts4.7/playback/createStallDetector.d.ts +43 -0
- package/dist/types/ts4.7/playback/createStallMonitor.d.ts +45 -0
- package/dist/types/ts4.7/streaming/AudioOptions.d.ts +27 -0
- package/dist/types/ts4.7/streaming/ContentStream.d.ts +0 -5
- package/dist/types/ts4.7/streaming/StreamingEventMap.d.ts +0 -5
- package/dist/types/ts4.7/streaming/buffering/BufferingController.d.ts +0 -11
- package/dist/types/ts4.7/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
- package/dist/types/ts4.7/track/dash/createDashFactories.d.ts +1 -1
- package/dist/types/ts4.7/track/dash/util/mpd.d.ts +6 -0
- package/dist/types/ts4.7/track/filters/resourceTypeFilter.d.ts +4 -0
- package/dist/types/ts4.7/track/filters/sampleRateFilter.d.ts +21 -7
- package/dist/types/ts4.7/track/hls/createHlsFactories.d.ts +1 -1
- package/dist/types/ts4.7/track/mse/MseTrack.d.ts +9 -17
- package/dist/types/ts4.7/util/media/mimeType.d.ts +8 -0
- package/dist/types/ts4.7/vinyl/createVinylFactories.d.ts +7 -16
- package/dist/unit/types/current/ad/AdControllerImpl.test.js +27 -1
- package/dist/unit/types/current/drm/DrmControllerImpl.test.js +93 -0
- package/dist/unit/types/current/index.d.ts +3 -4
- package/dist/unit/types/current/index.d.ts.map +1 -1
- package/dist/unit/types/current/index.js +3 -4
- package/dist/unit/types/current/playback/PlaybackControllerImpl.test.js +165 -0
- package/dist/unit/types/current/playback/createStallDetector.test.d.ts +2 -0
- package/dist/unit/types/current/playback/createStallDetector.test.d.ts.map +1 -0
- package/dist/unit/types/current/playback/createStallDetector.test.js +163 -0
- package/dist/unit/types/current/playback/createStallMonitor.test.d.ts +2 -0
- package/dist/unit/types/current/playback/createStallMonitor.test.d.ts.map +1 -0
- package/dist/unit/types/current/playback/createStallMonitor.test.js +125 -0
- package/dist/unit/types/current/streaming/ContentStream.test.js +0 -11
- package/dist/unit/types/current/streaming/MseTrack.test.js +47 -74
- package/dist/unit/types/current/streaming/abr/QualitySelectorImpl.test.js +1 -1
- package/dist/unit/types/current/streaming/buffering/BufferingController.test.js +0 -21
- package/dist/unit/types/current/streaming/createDefaultMediaTimelineTransformer.test.js +133 -0
- package/dist/unit/types/current/track/TrackController.test.js +61 -1
- package/dist/unit/types/current/track/createSegmentDataProvider.test.js +18 -0
- package/dist/unit/types/current/track/dash/DashMediaQualityMetadataResolver.test.js +46 -14
- package/dist/unit/types/current/track/dash/createSegmentControllerFactory.test.js +1 -0
- package/dist/unit/types/current/track/dash/timeline/DashRepresentationSegmentProvider.test.js +114 -0
- package/dist/unit/types/current/track/dash/util/mpd.test.js +37 -0
- package/dist/unit/types/current/track/filters/resourceTypeFilter.test.js +7 -0
- package/dist/unit/types/current/track/filters/sampleRateFilter.test.js +136 -34
- package/dist/unit/types/current/track/source/SourceObjectTrack.test.js +1 -1
- package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/unit/types/current/util/media/mimeType.test.d.ts +2 -0
- package/dist/unit/types/current/util/media/mimeType.test.d.ts.map +1 -0
- package/dist/unit/types/current/util/media/mimeType.test.js +22 -0
- package/dist/unit/types/current/vinyl/createVinylFactories.test.js +2 -36
- package/dist/vinylTestUtil/index.js +6 -4
- package/dist/vinylTestUtil/index.js.map +2 -2
- package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.d.ts +1 -0
- package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.js +1 -0
- package/dist/vinylTestUtil/types/current/media/FrequencyAnalyzer.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.d.ts +0 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.js +0 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.js +0 -1
- package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/vinylTestUtil/types/current/util/playback/eventPromises.js +1 -1
- package/dist/vinylTestUtil/types/current/util/playback/expectTrackCanSeek.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/util/playback/expectTrackCanSeek.js +9 -1
- package/dist/vinylTestUtil/types/ts3.7/assets/vinylTestAssets.d.ts +1 -0
- package/dist/vinylTestUtil/types/ts3.7/mock/streaming/MockContentStream.d.ts +0 -1
- package/dist/vinylTestUtil/types/ts3.7/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
- package/dist/vinylTestUtil/types/ts4.1/assets/vinylTestAssets.d.ts +1 -0
- package/dist/vinylTestUtil/types/ts4.1/mock/streaming/MockContentStream.d.ts +0 -1
- package/dist/vinylTestUtil/types/ts4.1/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
- package/dist/vinylTestUtil/types/ts4.7/assets/vinylTestAssets.d.ts +1 -0
- package/dist/vinylTestUtil/types/ts4.7/mock/streaming/MockContentStream.d.ts +0 -1
- package/dist/vinylTestUtil/types/ts4.7/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
- package/docs/USAGE.md +29 -0
- package/package.json +11 -10
- package/dist/types/current/patch/media/HtmlMediaElementPatch.d.ts +0 -3
- package/dist/types/current/patch/media/HtmlMediaElementPatch.d.ts.map +0 -1
- package/dist/types/current/patch/media/HtmlMediaElementPatch.js +0 -5
- package/dist/types/current/patch/media/MediaElementPatchOptions.d.ts +0 -19
- package/dist/types/current/patch/media/MediaElementPatchOptions.d.ts.map +0 -1
- package/dist/types/current/patch/media/MediaElementPatchOptions.js +0 -16
- package/dist/types/current/patch/media/patchMediaElement.d.ts +0 -9
- package/dist/types/current/patch/media/patchMediaElement.d.ts.map +0 -1
- package/dist/types/current/patch/media/patchMediaElement.js +0 -15
- package/dist/types/current/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
- package/dist/types/current/patch/media/patches/createPreventStallsPatch.d.ts.map +0 -1
- package/dist/types/current/patch/media/patches/createPreventStallsPatch.js +0 -55
- package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
- package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts.map +0 -1
- package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.js +0 -218
- package/dist/types/current/vinyl/VinylPatchOptions.d.ts +0 -10
- package/dist/types/current/vinyl/VinylPatchOptions.d.ts.map +0 -1
- package/dist/types/current/vinyl/VinylPatchOptions.js +0 -11
- package/dist/types/ts3.7/patch/media/HtmlMediaElementPatch.d.ts +0 -3
- package/dist/types/ts3.7/patch/media/MediaElementPatchOptions.d.ts +0 -19
- package/dist/types/ts3.7/patch/media/patchMediaElement.d.ts +0 -9
- package/dist/types/ts3.7/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
- package/dist/types/ts3.7/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
- package/dist/types/ts3.7/vinyl/VinylPatchOptions.d.ts +0 -10
- package/dist/types/ts4.1/patch/media/HtmlMediaElementPatch.d.ts +0 -3
- package/dist/types/ts4.1/patch/media/MediaElementPatchOptions.d.ts +0 -19
- package/dist/types/ts4.1/patch/media/patchMediaElement.d.ts +0 -9
- package/dist/types/ts4.1/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
- package/dist/types/ts4.1/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
- package/dist/types/ts4.1/vinyl/VinylPatchOptions.d.ts +0 -10
- package/dist/types/ts4.7/patch/media/HtmlMediaElementPatch.d.ts +0 -3
- package/dist/types/ts4.7/patch/media/MediaElementPatchOptions.d.ts +0 -19
- package/dist/types/ts4.7/patch/media/patchMediaElement.d.ts +0 -9
- package/dist/types/ts4.7/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
- package/dist/types/ts4.7/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
- package/dist/types/ts4.7/vinyl/VinylPatchOptions.d.ts +0 -10
- package/dist/unit/types/current/patch/media/MediaElementPatchOptions.test.d.ts +0 -2
- package/dist/unit/types/current/patch/media/MediaElementPatchOptions.test.d.ts.map +0 -1
- package/dist/unit/types/current/patch/media/MediaElementPatchOptions.test.js +0 -17
- package/dist/unit/types/current/patch/media/patchMediaElement.test.d.ts +0 -2
- package/dist/unit/types/current/patch/media/patchMediaElement.test.d.ts.map +0 -1
- package/dist/unit/types/current/patch/media/patchMediaElement.test.js +0 -36
- package/dist/unit/types/current/patch/media/patches/createPreventStallsPatch.test.d.ts +0 -2
- package/dist/unit/types/current/patch/media/patches/createPreventStallsPatch.test.d.ts.map +0 -1
- package/dist/unit/types/current/patch/media/patches/createPreventStallsPatch.test.js +0 -93
- package/dist/unit/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.test.d.ts +0 -2
- package/dist/unit/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.test.d.ts.map +0 -1
- 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 {
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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;
|
|
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
|
|
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
|
|
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
|
|
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":"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,
|
|
1
|
+
{"version":3,"file":"TextTrack.d.ts","sourceRoot":"","sources":["../../../../src/text/TextTrack.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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
|
|
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
|
-
|
|
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
|
|
24
|
-
*
|
|
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
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* sibling
|
|
29
|
-
*
|
|
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
|
|
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
|
|
103
|
-
*
|
|
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
|
-
*
|
|
106
|
-
*
|
|
107
|
-
* sibling
|
|
108
|
-
*
|
|
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
|
-
|
|
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, "
|
|
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":"
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
75
|
-
|
|
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
|
|
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
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
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
|
|
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;
|
|
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"}
|