@amazon/vinyl 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +276 -200
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +280 -203
- package/dist/index.js.map +4 -4
- package/dist/test/benchmark.es5.js +169 -232
- package/dist/test/benchmark.js +1475 -1933
- package/dist/test/benchmark.js.map +4 -4
- package/dist/test/integ.es5.js +771 -394
- package/dist/test/integ.js +6063 -5273
- package/dist/test/integ.js.map +4 -4
- package/dist/test/jasmineHtml.es5.js +8 -8
- package/dist/test/jasmineHtml.js +8 -4
- package/dist/test/jasmineHtml.js.map +3 -3
- package/dist/types/current/client/Capabilities.d.ts.map +1 -1
- package/dist/types/current/client/CapabilitiesImpl.d.ts.map +1 -1
- package/dist/types/current/drm/DrmController.d.ts +2 -2
- package/dist/types/current/drm/DrmController.d.ts.map +1 -1
- package/dist/types/current/drm/DrmControllerImpl.d.ts +3 -3
- package/dist/types/current/drm/DrmControllerImpl.d.ts.map +1 -1
- package/dist/types/current/drm/DrmControllerImpl.js +7 -7
- package/dist/types/current/drm/DrmKeySystemResolver.d.ts +1 -1
- package/dist/types/current/drm/DrmKeySystemResolver.d.ts.map +1 -1
- package/dist/types/current/drm/DrmKeySystemResolver.js +1 -1
- package/dist/types/current/drm/DrmOptions.d.ts +1 -1
- package/dist/types/current/drm/DrmOptions.d.ts.map +1 -1
- package/dist/types/current/drm/DrmOptions.js +1 -1
- package/dist/types/current/drm/commonEme/CommonEme.d.ts +2 -2
- package/dist/types/current/drm/commonEme/CommonEme.d.ts.map +1 -1
- package/dist/types/current/drm/commonEme/CommonEmeFactory.d.ts +1 -1
- package/dist/types/current/drm/commonEme/CommonEmeFactory.d.ts.map +1 -1
- package/dist/types/current/drm/commonEme/MsCommonEme.d.ts +1 -1
- package/dist/types/current/drm/commonEme/MsCommonEme.d.ts.map +1 -1
- package/dist/types/current/drm/commonEme/MsCommonEme.js +1 -1
- package/dist/types/current/drm/commonEme/StandardCommonEme.d.ts +1 -1
- package/dist/types/current/drm/commonEme/StandardCommonEme.d.ts.map +1 -1
- package/dist/types/current/drm/commonEme/WebKitCommonEme.d.ts +2 -2
- package/dist/types/current/drm/commonEme/WebKitCommonEme.d.ts.map +1 -1
- package/dist/types/current/drm/commonEme/WebKitCommonEme.js +1 -1
- package/dist/types/current/drm/commonEme/createDrmErrorHandler.js +1 -1
- package/dist/types/current/drm/licenseProvider/LicenseProvider.d.ts +1 -1
- package/dist/types/current/drm/licenseProvider/LicenseProvider.d.ts.map +1 -1
- package/dist/types/current/global/environment.d.ts +6 -2
- package/dist/types/current/global/environment.d.ts.map +1 -1
- package/dist/types/current/global/environment.js +4 -3
- package/dist/types/current/global/initializeVinylGlobal.js +1 -1
- package/dist/types/current/patch/media/MediaElementPatchOptions.js +1 -1
- package/dist/types/current/patch/media/patchMediaElement.js +1 -1
- package/dist/types/current/patch/media/patches/createPreventStallsPatch.d.ts +1 -1
- package/dist/types/current/patch/media/patches/createPreventStallsPatch.d.ts.map +1 -1
- package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +1 -1
- package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts.map +1 -1
- package/dist/types/current/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/current/playback/PlaybackControllerImpl.d.ts.map +1 -1
- package/dist/types/current/playback/PlaybackControllerImpl.js +4 -4
- package/dist/types/current/playback/ReadonlyPlaybackController.d.ts.map +1 -1
- package/dist/types/current/playback/error/ReportableMediaError.js +1 -1
- package/dist/types/current/playback/logging/playbackStateLoggingHandler.d.ts +1 -1
- package/dist/types/current/playback/logging/playbackStateLoggingHandler.d.ts.map +1 -1
- package/dist/types/current/playback/logging/playbackStateLoggingHandler.js +1 -1
- package/dist/types/current/playback/nextHasMetadata.d.ts +1 -1
- package/dist/types/current/playback/nextHasMetadata.d.ts.map +1 -1
- package/dist/types/current/streaming/ContentStream.d.ts +4 -4
- package/dist/types/current/streaming/ContentStream.d.ts.map +1 -1
- package/dist/types/current/streaming/ContentStreamingOptions.d.ts +2 -2
- package/dist/types/current/streaming/ContentStreamingOptions.d.ts.map +1 -1
- package/dist/types/current/streaming/MediaQualityMetadata.d.ts +2 -2
- package/dist/types/current/streaming/MediaQualityMetadata.d.ts.map +1 -1
- package/dist/types/current/streaming/MediaQualityMetadata.js +1 -1
- package/dist/types/current/streaming/MediaTimeline.d.ts +6 -5
- package/dist/types/current/streaming/MediaTimeline.d.ts.map +1 -1
- package/dist/types/current/streaming/SegmentController.d.ts +2 -7
- package/dist/types/current/streaming/SegmentController.d.ts.map +1 -1
- package/dist/types/current/streaming/SegmentControllerImpl.d.ts +5 -6
- package/dist/types/current/streaming/SegmentControllerImpl.d.ts.map +1 -1
- package/dist/types/current/streaming/SegmentControllerImpl.js +5 -15
- package/dist/types/current/streaming/SegmentReference.d.ts +1 -1
- package/dist/types/current/streaming/SegmentReference.d.ts.map +1 -1
- package/dist/types/current/streaming/StreamingEventMap.d.ts +1 -1
- package/dist/types/current/streaming/StreamingEventMap.d.ts.map +1 -1
- package/dist/types/current/streaming/abr/QualitySelector.d.ts +1 -1
- package/dist/types/current/streaming/abr/QualitySelector.d.ts.map +1 -1
- package/dist/types/current/streaming/abr/QualitySelectorImpl.d.ts +18 -3
- package/dist/types/current/streaming/abr/QualitySelectorImpl.d.ts.map +1 -1
- package/dist/types/current/streaming/abr/QualitySelectorImpl.js +8 -2
- package/dist/types/current/streaming/buffering/BufferingController.d.ts +3 -13
- package/dist/types/current/streaming/buffering/BufferingController.d.ts.map +1 -1
- package/dist/types/current/streaming/buffering/BufferingController.js +1 -24
- package/dist/types/current/streaming/buffering/MediaSourceController.d.ts +41 -15
- package/dist/types/current/streaming/buffering/MediaSourceController.d.ts.map +1 -1
- package/dist/types/current/streaming/buffering/MediaSourceController.js +74 -17
- package/dist/types/current/streaming/buffering/SourceBufferController.d.ts +1 -1
- package/dist/types/current/streaming/buffering/SourceBufferController.d.ts.map +1 -1
- package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts +1 -1
- package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts.map +1 -1
- package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.js +2 -2
- package/dist/types/current/streaming/mediaTimelineFilter.d.ts +3 -3
- package/dist/types/current/streaming/mediaTimelineFilter.d.ts.map +1 -1
- package/dist/types/current/streaming/mediaTimelineFilter.js +1 -1
- package/dist/types/current/streaming/mediaTimelineLanguageFilter.d.ts +1 -1
- package/dist/types/current/streaming/mediaTimelineLanguageFilter.d.ts.map +1 -1
- package/dist/types/current/streaming/util/segment.d.ts +1 -1
- package/dist/types/current/streaming/util/segment.d.ts.map +1 -1
- package/dist/types/current/track/AutoResetController.d.ts +37 -12
- package/dist/types/current/track/AutoResetController.d.ts.map +1 -1
- package/dist/types/current/track/AutoResetController.js +38 -28
- package/dist/types/current/track/Track.d.ts.map +1 -1
- package/dist/types/current/track/TrackBase.d.ts.map +1 -1
- package/dist/types/current/track/TrackController.d.ts +2 -2
- package/dist/types/current/track/TrackController.d.ts.map +1 -1
- package/dist/types/current/track/TrackFactory.d.ts +1 -1
- package/dist/types/current/track/TrackFactory.d.ts.map +1 -1
- package/dist/types/current/track/createSegmentDataProvider.d.ts.map +1 -1
- package/dist/types/current/track/createVinylTrackFactories.d.ts +5 -5
- package/dist/types/current/track/createVinylTrackFactories.d.ts.map +1 -1
- package/dist/types/current/track/createVinylTrackFactories.js +4 -4
- package/dist/types/current/track/dash/DashManifestController.d.ts +1 -1
- package/dist/types/current/track/dash/DashManifestController.d.ts.map +1 -1
- package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.d.ts.map +1 -1
- package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.js +1 -1
- package/dist/types/current/track/dash/DashTrack.d.ts +4 -4
- package/dist/types/current/track/dash/DashTrack.d.ts.map +1 -1
- package/dist/types/current/track/dash/DashTrack.js +2 -2
- package/dist/types/current/track/dash/buildDashMediaTimeline.d.ts +2 -2
- package/dist/types/current/track/dash/buildDashMediaTimeline.d.ts.map +1 -1
- package/dist/types/current/track/dash/buildDashMediaTimeline.js +2 -2
- package/dist/types/current/track/dash/createDashContentStreamFactories.d.ts.map +1 -1
- package/dist/types/current/track/dash/createDashContentTypesValue.d.ts +2 -2
- package/dist/types/current/track/dash/createDashContentTypesValue.d.ts.map +1 -1
- package/dist/types/current/track/dash/createDashContentTypesValue.js +1 -1
- package/dist/types/current/track/dash/createDashFactories.d.ts +12 -12
- package/dist/types/current/track/dash/createDashFactories.d.ts.map +1 -1
- package/dist/types/current/track/dash/createDashFactories.js +8 -8
- package/dist/types/current/track/dash/createDashManifestProvider.d.ts +1 -1
- package/dist/types/current/track/dash/createDashManifestProvider.d.ts.map +1 -1
- package/dist/types/current/track/dash/createDashManifestProvider.js +1 -1
- package/dist/types/current/track/dash/createDefaultDashManifestTransformer.d.ts +1 -1
- package/dist/types/current/track/dash/createDefaultDashManifestTransformer.d.ts.map +1 -1
- package/dist/types/current/track/dash/createDefaultDashManifestTransformer.js +1 -1
- package/dist/types/current/track/dash/createSegmentControllerFactory.d.ts.map +1 -1
- package/dist/types/current/track/dash/manifestTransformUtils.d.ts +1 -1
- package/dist/types/current/track/dash/manifestTransformUtils.d.ts.map +1 -1
- package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.d.ts +3 -3
- package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.d.ts.map +1 -1
- package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.js +3 -3
- package/dist/types/current/track/dash/urlDashManifestProvider.d.ts +1 -1
- package/dist/types/current/track/dash/urlDashManifestProvider.d.ts.map +1 -1
- package/dist/types/current/track/dash/util/mimeType.d.ts.map +1 -1
- package/dist/types/current/track/dash/util/mimeType.js +1 -1
- package/dist/types/current/track/dash/util/mpd.d.ts +3 -2
- package/dist/types/current/track/dash/util/mpd.d.ts.map +1 -1
- package/dist/types/current/track/dash/util/mpd.js +13 -3
- package/dist/types/current/track/dash/util/uriResolution.js +1 -1
- package/dist/types/current/track/filters/keySystemFilter.d.ts.map +1 -1
- package/dist/types/current/track/filters/resourceTypeFilter.d.ts.map +1 -1
- package/dist/types/current/track/filters/sampleRateFilter.d.ts.map +1 -1
- package/dist/types/current/track/hls/HlsTrack.d.ts.map +1 -1
- package/dist/types/current/track/hls/buildHlsMediaTimeline.d.ts +3 -3
- package/dist/types/current/track/hls/buildHlsMediaTimeline.d.ts.map +1 -1
- package/dist/types/current/track/hls/buildHlsMediaTimeline.js +16 -14
- package/dist/types/current/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
- package/dist/types/current/track/hls/createDefaultHlsManifestTransformer.d.ts.map +1 -1
- package/dist/types/current/track/hls/createHlsContentStreamFactories.d.ts.map +1 -1
- package/dist/types/current/track/hls/util/hlsSegmentTime.d.ts +1 -1
- package/dist/types/current/track/hls/util/hlsSegmentTime.d.ts.map +1 -1
- package/dist/types/current/track/hls/util/hlsSegmentTime.js +1 -1
- package/dist/types/current/track/mse/MseTrack.d.ts +2 -2
- package/dist/types/current/track/mse/MseTrack.d.ts.map +1 -1
- package/dist/types/current/track/mse/MseTrack.js +2 -1
- package/dist/types/current/track/mse/codec.d.ts.map +1 -1
- package/dist/types/current/track/source/FixedPlaybackQuality.d.ts +1 -1
- package/dist/types/current/track/source/FixedPlaybackQuality.d.ts.map +1 -1
- package/dist/types/current/track/source/SourceObjectTrack.d.ts +4 -4
- package/dist/types/current/track/source/SourceObjectTrack.d.ts.map +1 -1
- package/dist/types/current/track/source/SourceObjectTrack.js +2 -2
- package/dist/types/current/track/source/SourceTrack.d.ts +4 -4
- package/dist/types/current/track/source/SourceTrack.d.ts.map +1 -1
- package/dist/types/current/track/source/SourceTrack.js +2 -2
- package/dist/types/current/track/source/SourceTrackBase.d.ts +2 -2
- package/dist/types/current/track/source/SourceTrackBase.d.ts.map +1 -1
- package/dist/types/current/track/source/SourceTrackBase.js +2 -2
- package/dist/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/types/current/vinyl/ReadonlyPlaybackStreamingState.d.ts.map +1 -1
- package/dist/types/current/vinyl/VinylDeps.d.ts +1 -1
- package/dist/types/current/vinyl/VinylDeps.d.ts.map +1 -1
- package/dist/types/current/vinyl/VinylOptions.d.ts.map +1 -1
- package/dist/types/current/vinyl/VinylPatchOptions.d.ts.map +1 -1
- package/dist/types/current/vinyl/VinylPlayer.d.ts +26 -2
- package/dist/types/current/vinyl/VinylPlayer.d.ts.map +1 -1
- package/dist/types/current/vinyl/VinylPlayer.js +18 -3
- package/dist/types/current/vinyl/createVinylFactories.d.ts +9 -11
- package/dist/types/current/vinyl/createVinylFactories.d.ts.map +1 -1
- package/dist/types/current/vinyl/createVinylFactories.js +2 -2
- package/dist/types/ts3.7/drm/DrmController.d.ts +2 -2
- package/dist/types/ts3.7/drm/DrmControllerImpl.d.ts +3 -3
- package/dist/types/ts3.7/drm/DrmKeySystemResolver.d.ts +1 -1
- package/dist/types/ts3.7/drm/DrmOptions.d.ts +1 -1
- package/dist/types/ts3.7/drm/commonEme/CommonEme.d.ts +2 -2
- package/dist/types/ts3.7/drm/commonEme/CommonEmeFactory.d.ts +1 -1
- package/dist/types/ts3.7/drm/commonEme/MsCommonEme.d.ts +1 -1
- package/dist/types/ts3.7/drm/commonEme/StandardCommonEme.d.ts +1 -1
- package/dist/types/ts3.7/drm/commonEme/WebKitCommonEme.d.ts +2 -2
- package/dist/types/ts3.7/drm/licenseProvider/LicenseProvider.d.ts +1 -1
- package/dist/types/ts3.7/global/environment.d.ts +6 -2
- package/dist/types/ts3.7/patch/media/patches/createPreventStallsPatch.d.ts +1 -1
- package/dist/types/ts3.7/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +1 -1
- package/dist/types/ts3.7/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts3.7/playback/logging/playbackStateLoggingHandler.d.ts +1 -1
- package/dist/types/ts3.7/playback/nextHasMetadata.d.ts +1 -1
- package/dist/types/ts3.7/streaming/ContentStream.d.ts +4 -4
- package/dist/types/ts3.7/streaming/ContentStreamingOptions.d.ts +2 -2
- package/dist/types/ts3.7/streaming/MediaQualityMetadata.d.ts +2 -2
- package/dist/types/ts3.7/streaming/MediaTimeline.d.ts +6 -5
- package/dist/types/ts3.7/streaming/SegmentController.d.ts +2 -7
- package/dist/types/ts3.7/streaming/SegmentControllerImpl.d.ts +5 -6
- package/dist/types/ts3.7/streaming/SegmentReference.d.ts +1 -1
- package/dist/types/ts3.7/streaming/StreamingEventMap.d.ts +1 -1
- package/dist/types/ts3.7/streaming/abr/QualitySelector.d.ts +1 -1
- package/dist/types/ts3.7/streaming/abr/QualitySelectorImpl.d.ts +18 -3
- package/dist/types/ts3.7/streaming/buffering/BufferingController.d.ts +3 -13
- package/dist/types/ts3.7/streaming/buffering/MediaSourceController.d.ts +41 -15
- package/dist/types/ts3.7/streaming/buffering/SourceBufferController.d.ts +1 -1
- package/dist/types/ts3.7/streaming/createDefaultMediaTimelineTransformer.d.ts +1 -1
- package/dist/types/ts3.7/streaming/mediaTimelineFilter.d.ts +3 -3
- package/dist/types/ts3.7/streaming/mediaTimelineLanguageFilter.d.ts +1 -1
- package/dist/types/ts3.7/streaming/util/segment.d.ts +1 -1
- package/dist/types/ts3.7/track/AutoResetController.d.ts +37 -12
- package/dist/types/ts3.7/track/TrackController.d.ts +2 -2
- package/dist/types/ts3.7/track/TrackFactory.d.ts +1 -1
- package/dist/types/ts3.7/track/createVinylTrackFactories.d.ts +5 -5
- package/dist/types/ts3.7/track/dash/DashManifestController.d.ts +1 -1
- package/dist/types/ts3.7/track/dash/DashTrack.d.ts +4 -4
- package/dist/types/ts3.7/track/dash/buildDashMediaTimeline.d.ts +2 -2
- package/dist/types/ts3.7/track/dash/createDashContentTypesValue.d.ts +2 -2
- package/dist/types/ts3.7/track/dash/createDashFactories.d.ts +12 -12
- package/dist/types/ts3.7/track/dash/createDashManifestProvider.d.ts +1 -1
- package/dist/types/ts3.7/track/dash/createDefaultDashManifestTransformer.d.ts +1 -1
- package/dist/types/ts3.7/track/dash/manifestTransformUtils.d.ts +1 -1
- package/dist/types/ts3.7/track/dash/timeline/DashRepresentationSegmentProvider.d.ts +3 -3
- package/dist/types/ts3.7/track/dash/urlDashManifestProvider.d.ts +1 -1
- package/dist/types/ts3.7/track/dash/util/mpd.d.ts +3 -2
- package/dist/types/ts3.7/track/hls/buildHlsMediaTimeline.d.ts +3 -3
- package/dist/types/ts3.7/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
- package/dist/types/ts3.7/track/hls/util/hlsSegmentTime.d.ts +1 -1
- package/dist/types/ts3.7/track/mse/MseTrack.d.ts +2 -2
- package/dist/types/ts3.7/track/source/FixedPlaybackQuality.d.ts +1 -1
- package/dist/types/ts3.7/track/source/SourceObjectTrack.d.ts +4 -4
- package/dist/types/ts3.7/track/source/SourceTrack.d.ts +4 -4
- package/dist/types/ts3.7/track/source/SourceTrackBase.d.ts +2 -2
- package/dist/types/ts3.7/vinyl/VinylDeps.d.ts +1 -1
- package/dist/types/ts3.7/vinyl/VinylPlayer.d.ts +18 -2
- package/dist/types/ts3.7/vinyl/createVinylFactories.d.ts +9 -11
- package/dist/types/ts4.1/drm/DrmController.d.ts +2 -2
- package/dist/types/ts4.1/drm/DrmControllerImpl.d.ts +3 -3
- package/dist/types/ts4.1/drm/DrmKeySystemResolver.d.ts +1 -1
- package/dist/types/ts4.1/drm/DrmOptions.d.ts +1 -1
- package/dist/types/ts4.1/drm/commonEme/CommonEme.d.ts +2 -2
- package/dist/types/ts4.1/drm/commonEme/CommonEmeFactory.d.ts +1 -1
- package/dist/types/ts4.1/drm/commonEme/MsCommonEme.d.ts +1 -1
- package/dist/types/ts4.1/drm/commonEme/StandardCommonEme.d.ts +1 -1
- package/dist/types/ts4.1/drm/commonEme/WebKitCommonEme.d.ts +2 -2
- package/dist/types/ts4.1/drm/licenseProvider/LicenseProvider.d.ts +1 -1
- package/dist/types/ts4.1/global/environment.d.ts +6 -2
- package/dist/types/ts4.1/patch/media/patches/createPreventStallsPatch.d.ts +1 -1
- package/dist/types/ts4.1/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +1 -1
- package/dist/types/ts4.1/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts4.1/playback/logging/playbackStateLoggingHandler.d.ts +1 -1
- package/dist/types/ts4.1/playback/nextHasMetadata.d.ts +1 -1
- package/dist/types/ts4.1/streaming/ContentStream.d.ts +4 -4
- package/dist/types/ts4.1/streaming/ContentStreamingOptions.d.ts +2 -2
- package/dist/types/ts4.1/streaming/MediaQualityMetadata.d.ts +2 -2
- package/dist/types/ts4.1/streaming/MediaTimeline.d.ts +6 -5
- package/dist/types/ts4.1/streaming/SegmentController.d.ts +2 -7
- package/dist/types/ts4.1/streaming/SegmentControllerImpl.d.ts +5 -6
- package/dist/types/ts4.1/streaming/SegmentReference.d.ts +1 -1
- package/dist/types/ts4.1/streaming/StreamingEventMap.d.ts +1 -1
- package/dist/types/ts4.1/streaming/abr/QualitySelector.d.ts +1 -1
- package/dist/types/ts4.1/streaming/abr/QualitySelectorImpl.d.ts +18 -3
- package/dist/types/ts4.1/streaming/buffering/BufferingController.d.ts +3 -13
- package/dist/types/ts4.1/streaming/buffering/MediaSourceController.d.ts +41 -15
- package/dist/types/ts4.1/streaming/buffering/SourceBufferController.d.ts +1 -1
- package/dist/types/ts4.1/streaming/createDefaultMediaTimelineTransformer.d.ts +1 -1
- package/dist/types/ts4.1/streaming/mediaTimelineFilter.d.ts +3 -3
- package/dist/types/ts4.1/streaming/mediaTimelineLanguageFilter.d.ts +1 -1
- package/dist/types/ts4.1/streaming/util/segment.d.ts +1 -1
- package/dist/types/ts4.1/track/AutoResetController.d.ts +37 -12
- package/dist/types/ts4.1/track/TrackController.d.ts +2 -2
- package/dist/types/ts4.1/track/TrackFactory.d.ts +1 -1
- package/dist/types/ts4.1/track/createVinylTrackFactories.d.ts +5 -5
- package/dist/types/ts4.1/track/dash/DashManifestController.d.ts +1 -1
- package/dist/types/ts4.1/track/dash/DashTrack.d.ts +4 -4
- package/dist/types/ts4.1/track/dash/buildDashMediaTimeline.d.ts +2 -2
- package/dist/types/ts4.1/track/dash/createDashContentTypesValue.d.ts +2 -2
- package/dist/types/ts4.1/track/dash/createDashFactories.d.ts +12 -12
- package/dist/types/ts4.1/track/dash/createDashManifestProvider.d.ts +1 -1
- package/dist/types/ts4.1/track/dash/createDefaultDashManifestTransformer.d.ts +1 -1
- package/dist/types/ts4.1/track/dash/manifestTransformUtils.d.ts +1 -1
- package/dist/types/ts4.1/track/dash/timeline/DashRepresentationSegmentProvider.d.ts +3 -3
- package/dist/types/ts4.1/track/dash/urlDashManifestProvider.d.ts +1 -1
- package/dist/types/ts4.1/track/dash/util/mpd.d.ts +3 -2
- package/dist/types/ts4.1/track/hls/buildHlsMediaTimeline.d.ts +3 -3
- package/dist/types/ts4.1/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
- package/dist/types/ts4.1/track/hls/util/hlsSegmentTime.d.ts +1 -1
- package/dist/types/ts4.1/track/mse/MseTrack.d.ts +3 -3
- package/dist/types/ts4.1/track/source/FixedPlaybackQuality.d.ts +1 -1
- package/dist/types/ts4.1/track/source/SourceObjectTrack.d.ts +5 -5
- package/dist/types/ts4.1/track/source/SourceTrack.d.ts +5 -5
- package/dist/types/ts4.1/track/source/SourceTrackBase.d.ts +3 -3
- package/dist/types/ts4.1/vinyl/VinylDeps.d.ts +1 -1
- package/dist/types/ts4.1/vinyl/VinylPlayer.d.ts +18 -2
- package/dist/types/ts4.1/vinyl/createVinylFactories.d.ts +9 -11
- package/dist/types/ts4.7/drm/DrmController.d.ts +2 -2
- package/dist/types/ts4.7/drm/DrmControllerImpl.d.ts +3 -3
- package/dist/types/ts4.7/drm/DrmKeySystemResolver.d.ts +1 -1
- package/dist/types/ts4.7/drm/DrmOptions.d.ts +1 -1
- package/dist/types/ts4.7/drm/commonEme/CommonEme.d.ts +2 -2
- package/dist/types/ts4.7/drm/commonEme/CommonEmeFactory.d.ts +1 -1
- package/dist/types/ts4.7/drm/commonEme/MsCommonEme.d.ts +1 -1
- package/dist/types/ts4.7/drm/commonEme/StandardCommonEme.d.ts +1 -1
- package/dist/types/ts4.7/drm/commonEme/WebKitCommonEme.d.ts +2 -2
- package/dist/types/ts4.7/drm/licenseProvider/LicenseProvider.d.ts +1 -1
- package/dist/types/ts4.7/global/environment.d.ts +6 -2
- package/dist/types/ts4.7/patch/media/patches/createPreventStallsPatch.d.ts +1 -1
- package/dist/types/ts4.7/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +1 -1
- package/dist/types/ts4.7/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts4.7/playback/logging/playbackStateLoggingHandler.d.ts +1 -1
- package/dist/types/ts4.7/playback/nextHasMetadata.d.ts +1 -1
- package/dist/types/ts4.7/streaming/ContentStream.d.ts +4 -4
- package/dist/types/ts4.7/streaming/ContentStreamingOptions.d.ts +2 -2
- package/dist/types/ts4.7/streaming/MediaQualityMetadata.d.ts +2 -2
- package/dist/types/ts4.7/streaming/MediaTimeline.d.ts +6 -5
- package/dist/types/ts4.7/streaming/SegmentController.d.ts +2 -7
- package/dist/types/ts4.7/streaming/SegmentControllerImpl.d.ts +5 -6
- package/dist/types/ts4.7/streaming/SegmentReference.d.ts +1 -1
- package/dist/types/ts4.7/streaming/StreamingEventMap.d.ts +1 -1
- package/dist/types/ts4.7/streaming/abr/QualitySelector.d.ts +1 -1
- package/dist/types/ts4.7/streaming/abr/QualitySelectorImpl.d.ts +18 -3
- package/dist/types/ts4.7/streaming/buffering/BufferingController.d.ts +3 -13
- package/dist/types/ts4.7/streaming/buffering/MediaSourceController.d.ts +41 -15
- package/dist/types/ts4.7/streaming/buffering/SourceBufferController.d.ts +1 -1
- package/dist/types/ts4.7/streaming/createDefaultMediaTimelineTransformer.d.ts +1 -1
- package/dist/types/ts4.7/streaming/mediaTimelineFilter.d.ts +3 -3
- package/dist/types/ts4.7/streaming/mediaTimelineLanguageFilter.d.ts +1 -1
- package/dist/types/ts4.7/streaming/util/segment.d.ts +1 -1
- package/dist/types/ts4.7/track/AutoResetController.d.ts +37 -12
- package/dist/types/ts4.7/track/TrackController.d.ts +2 -2
- package/dist/types/ts4.7/track/TrackFactory.d.ts +1 -1
- package/dist/types/ts4.7/track/createVinylTrackFactories.d.ts +5 -5
- package/dist/types/ts4.7/track/dash/DashManifestController.d.ts +1 -1
- package/dist/types/ts4.7/track/dash/DashTrack.d.ts +4 -4
- package/dist/types/ts4.7/track/dash/buildDashMediaTimeline.d.ts +2 -2
- package/dist/types/ts4.7/track/dash/createDashContentTypesValue.d.ts +2 -2
- package/dist/types/ts4.7/track/dash/createDashFactories.d.ts +12 -12
- package/dist/types/ts4.7/track/dash/createDashManifestProvider.d.ts +1 -1
- package/dist/types/ts4.7/track/dash/createDefaultDashManifestTransformer.d.ts +1 -1
- package/dist/types/ts4.7/track/dash/manifestTransformUtils.d.ts +1 -1
- package/dist/types/ts4.7/track/dash/timeline/DashRepresentationSegmentProvider.d.ts +3 -3
- package/dist/types/ts4.7/track/dash/urlDashManifestProvider.d.ts +1 -1
- package/dist/types/ts4.7/track/dash/util/mpd.d.ts +3 -2
- package/dist/types/ts4.7/track/hls/buildHlsMediaTimeline.d.ts +3 -3
- package/dist/types/ts4.7/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
- package/dist/types/ts4.7/track/hls/util/hlsSegmentTime.d.ts +1 -1
- package/dist/types/ts4.7/track/mse/MseTrack.d.ts +2 -2
- package/dist/types/ts4.7/track/source/FixedPlaybackQuality.d.ts +1 -1
- package/dist/types/ts4.7/track/source/SourceObjectTrack.d.ts +4 -4
- package/dist/types/ts4.7/track/source/SourceTrack.d.ts +4 -4
- package/dist/types/ts4.7/track/source/SourceTrackBase.d.ts +2 -2
- package/dist/types/ts4.7/vinyl/VinylDeps.d.ts +1 -1
- package/dist/types/ts4.7/vinyl/VinylPlayer.d.ts +26 -2
- package/dist/types/ts4.7/vinyl/createVinylFactories.d.ts +9 -11
- package/dist/unit/types/current/streaming/MediaTimeline.test.js +6 -1
- package/dist/unit/types/current/streaming/MseTrack.test.js +4 -0
- package/dist/unit/types/current/streaming/SegmentControllerImpl.test.js +3 -33
- package/dist/unit/types/current/streaming/abr/QualitySelectorImpl.test.js +73 -0
- package/dist/unit/types/current/streaming/buffering/BufferingController.test.js +1 -41
- package/dist/unit/types/current/streaming/buffering/MediaSourceController.test.js +97 -17
- package/dist/unit/types/current/streaming/createDefaultMediaTimelineTransformer.test.js +6 -0
- package/dist/unit/types/current/streaming/mediaTimelineFilter.test.js +2 -0
- package/dist/unit/types/current/streaming/mediaTimelineLanguageFilter.test.js +7 -0
- package/dist/unit/types/current/track/AutoResetController.test.js +134 -22
- package/dist/unit/types/current/track/dash/createDashContentStreamFactories.test.js +5 -1
- package/dist/unit/types/current/track/dash/createSegmentControllerFactory.test.js +5 -1
- package/dist/unit/types/current/track/dash/util/mpd.test.js +29 -0
- package/dist/unit/types/current/track/hls/buildHlsMediaTimeline.test.js +16 -8
- package/dist/unit/types/current/track/hls/createHlsContentStreamFactories.test.js +5 -1
- package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/unit/types/current/vinyl/VinylPlayer.test.js +35 -0
- package/dist/vinylTestUtil/index.js +20 -14
- package/dist/vinylTestUtil/index.js.map +2 -2
- package/dist/vinylTestUtil/types/current/media/FrequencyAnalyzer.js +1 -1
- package/dist/vinylTestUtil/types/current/mediaSource/ControlledMediaSource.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/dash/mockDashManifest.d.ts +12 -12
- package/dist/vinylTestUtil/types/current/mock/dom/ms/MockMSMediaKeySession.d.ts +2 -2
- package/dist/vinylTestUtil/types/current/mock/dom/webkit/MockWebKitMediaKeySession.d.ts +2 -2
- package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.d.ts +6 -6
- package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.js +7 -7
- package/dist/vinylTestUtil/types/current/mock/streaming/MockSegmentController.d.ts +0 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/MockSegmentController.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/MockSegmentController.js +0 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockMediaSourceController.d.ts +0 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockMediaSourceController.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockMediaSourceController.js +0 -1
- package/dist/vinylTestUtil/types/current/mock/track/MockAutoResetController.d.ts +1 -0
- package/dist/vinylTestUtil/types/current/mock/track/MockAutoResetController.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/track/MockAutoResetController.js +1 -0
- package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.d.ts +5 -5
- package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.js +11 -7
- package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.d.ts +5 -5
- package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.js +11 -7
- package/dist/vinylTestUtil/types/current/player/createVinylSuite.js +1 -1
- package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/vinylTestUtil/types/current/util/playback/expectTrackCanSeek.js +1 -1
- package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlays.js +2 -2
- package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlaysUntil.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlaysUntil.js +1 -2
- package/dist/vinylTestUtil/types/ts3.7/mock/dash/mockDashManifest.d.ts +12 -12
- package/dist/vinylTestUtil/types/ts3.7/mock/dom/ms/MockMSMediaKeySession.d.ts +2 -2
- package/dist/vinylTestUtil/types/ts3.7/mock/dom/webkit/MockWebKitMediaKeySession.d.ts +2 -2
- package/dist/vinylTestUtil/types/ts3.7/mock/player/MockVinylPlayerDependencies.d.ts +6 -6
- package/dist/vinylTestUtil/types/ts3.7/mock/streaming/MockSegmentController.d.ts +0 -1
- package/dist/vinylTestUtil/types/ts3.7/mock/streaming/buffering/MockMediaSourceController.d.ts +0 -1
- package/dist/vinylTestUtil/types/ts3.7/mock/track/MockAutoResetController.d.ts +1 -0
- package/dist/vinylTestUtil/types/ts3.7/mock/track/dash/createMockDashDependencies.d.ts +5 -5
- package/dist/vinylTestUtil/types/ts3.7/mock/track/hls/createMockHlsDependencies.d.ts +5 -5
- package/dist/vinylTestUtil/types/ts4.1/mock/dash/mockDashManifest.d.ts +12 -12
- package/dist/vinylTestUtil/types/ts4.1/mock/dom/ms/MockMSMediaKeySession.d.ts +2 -2
- package/dist/vinylTestUtil/types/ts4.1/mock/dom/webkit/MockWebKitMediaKeySession.d.ts +2 -2
- package/dist/vinylTestUtil/types/ts4.1/mock/player/MockVinylPlayerDependencies.d.ts +6 -6
- package/dist/vinylTestUtil/types/ts4.1/mock/streaming/MockSegmentController.d.ts +0 -1
- package/dist/vinylTestUtil/types/ts4.1/mock/streaming/buffering/MockMediaSourceController.d.ts +0 -1
- package/dist/vinylTestUtil/types/ts4.1/mock/track/MockAutoResetController.d.ts +1 -0
- package/dist/vinylTestUtil/types/ts4.1/mock/track/dash/createMockDashDependencies.d.ts +5 -5
- package/dist/vinylTestUtil/types/ts4.1/mock/track/hls/createMockHlsDependencies.d.ts +5 -5
- package/dist/vinylTestUtil/types/ts4.7/mock/dash/mockDashManifest.d.ts +12 -12
- package/dist/vinylTestUtil/types/ts4.7/mock/dom/ms/MockMSMediaKeySession.d.ts +2 -2
- package/dist/vinylTestUtil/types/ts4.7/mock/dom/webkit/MockWebKitMediaKeySession.d.ts +2 -2
- package/dist/vinylTestUtil/types/ts4.7/mock/player/MockVinylPlayerDependencies.d.ts +6 -6
- package/dist/vinylTestUtil/types/ts4.7/mock/streaming/MockSegmentController.d.ts +0 -1
- package/dist/vinylTestUtil/types/ts4.7/mock/streaming/buffering/MockMediaSourceController.d.ts +0 -1
- package/dist/vinylTestUtil/types/ts4.7/mock/track/MockAutoResetController.d.ts +1 -0
- package/dist/vinylTestUtil/types/ts4.7/mock/track/dash/createMockDashDependencies.d.ts +5 -5
- package/dist/vinylTestUtil/types/ts4.7/mock/track/hls/createMockHlsDependencies.d.ts +5 -5
- package/docs/USAGE.md +33 -0
- package/package.json +13 -15
|
@@ -2,28 +2,49 @@
|
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import { MediaSourceControllerImpl, MediaSourceError, } from '@amazon/vinyl';
|
|
6
|
-
import { Deferred } from '@amazon/vinyl-util';
|
|
7
|
-
import { flushPromises, MockMediaSource, MockSourceBuffer, } from '@amazon/vinyl-util/browserTestUtil';
|
|
5
|
+
import { DURATION_PADDING, LIVE_DURATION, MediaSourceControllerImpl, MediaSourceError, } from '@amazon/vinyl';
|
|
6
|
+
import { AbortError, Deferred } from '@amazon/vinyl-util';
|
|
7
|
+
import { flushPromises, implementEventFakes, mockEvent, MockMediaSource, MockSourceBuffer, } from '@amazon/vinyl-util/browserTestUtil';
|
|
8
8
|
import { data } from '@amazon/vinyl-observable';
|
|
9
9
|
var createSpy = jasmine.createSpy;
|
|
10
10
|
var objectContaining = jasmine.objectContaining;
|
|
11
11
|
import { createEventSpy } from '@amazon/vinyl-util/testUtil';
|
|
12
|
+
const VOD_DURATION = 60;
|
|
13
|
+
function createVodTimeline(duration = VOD_DURATION) {
|
|
14
|
+
return {
|
|
15
|
+
periods: [],
|
|
16
|
+
minBufferTime: 0,
|
|
17
|
+
getDuration: () => Promise.resolve(duration),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const liveTimeline = {
|
|
21
|
+
periods: [],
|
|
22
|
+
minBufferTime: 0,
|
|
23
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
24
|
+
};
|
|
12
25
|
describe('MediaSourceControllerImpl', () => {
|
|
13
26
|
let mediaSourceFactory;
|
|
14
27
|
let contentTypesValue;
|
|
28
|
+
let mediaTimelineTransformed;
|
|
15
29
|
let mockMediaSource;
|
|
16
30
|
let deps;
|
|
17
31
|
let controller;
|
|
32
|
+
function open() {
|
|
33
|
+
mockMediaSource.readyState = 'open';
|
|
34
|
+
mockMediaSource.dispatchEvent(mockEvent('sourceopen'));
|
|
35
|
+
}
|
|
18
36
|
beforeEach(() => {
|
|
19
37
|
mockMediaSource = new MockMediaSource();
|
|
38
|
+
implementEventFakes(mockMediaSource);
|
|
20
39
|
mockMediaSource.addSourceBuffer.and.callFake(() => new MockSourceBuffer());
|
|
21
40
|
mediaSourceFactory =
|
|
22
41
|
createSpy('mediaSourceFactory').and.returnValue(mockMediaSource);
|
|
23
42
|
contentTypesValue = data(Promise.resolve(new Set(['audio'])));
|
|
43
|
+
mediaTimelineTransformed = data(Promise.resolve(createVodTimeline()));
|
|
24
44
|
deps = {
|
|
25
45
|
mediaSourceFactory,
|
|
26
46
|
contentTypesValue,
|
|
47
|
+
mediaTimelineTransformed,
|
|
27
48
|
};
|
|
28
49
|
controller = new MediaSourceControllerImpl(deps);
|
|
29
50
|
});
|
|
@@ -42,13 +63,71 @@ describe('MediaSourceControllerImpl', () => {
|
|
|
42
63
|
});
|
|
43
64
|
});
|
|
44
65
|
describe('duration', () => {
|
|
45
|
-
it('
|
|
46
|
-
|
|
47
|
-
|
|
66
|
+
it('sets media source duration after sourceopen', async () => {
|
|
67
|
+
open();
|
|
68
|
+
await flushPromises();
|
|
69
|
+
expect(mockMediaSource.duration).toBe(VOD_DURATION + DURATION_PADDING);
|
|
70
|
+
});
|
|
71
|
+
it('uses LIVE_DURATION for live timelines', async () => {
|
|
72
|
+
mediaTimelineTransformed.value = Promise.resolve(liveTimeline);
|
|
73
|
+
open();
|
|
74
|
+
await flushPromises();
|
|
75
|
+
expect(mockMediaSource.duration).toBe(LIVE_DURATION);
|
|
76
|
+
});
|
|
77
|
+
it('does not set duration when media source is not open', async () => {
|
|
78
|
+
await flushPromises();
|
|
79
|
+
expect(mockMediaSource.duration).toBe(0);
|
|
80
|
+
});
|
|
81
|
+
it('refreshes duration when timeline changes', async () => {
|
|
82
|
+
open();
|
|
83
|
+
await flushPromises();
|
|
84
|
+
expect(mockMediaSource.duration).toBe(VOD_DURATION + DURATION_PADDING);
|
|
85
|
+
mediaTimelineTransformed.value = Promise.resolve(createVodTimeline(120));
|
|
86
|
+
await flushPromises();
|
|
87
|
+
expect(mockMediaSource.duration).toBe(120 + DURATION_PADDING);
|
|
88
|
+
});
|
|
89
|
+
it('emits an error if getDuration rejects', async () => {
|
|
90
|
+
const errorSpy = createEventSpy(controller, 'error');
|
|
91
|
+
const error = new Error('expected');
|
|
92
|
+
mediaTimelineTransformed.value = Promise.resolve({
|
|
93
|
+
periods: [],
|
|
94
|
+
minBufferTime: 0,
|
|
95
|
+
getDuration: () => Promise.reject(error),
|
|
96
|
+
});
|
|
97
|
+
open();
|
|
98
|
+
await flushPromises();
|
|
99
|
+
expect(errorSpy).toHaveBeenCalledWith({
|
|
100
|
+
target: controller,
|
|
101
|
+
error,
|
|
102
|
+
});
|
|
48
103
|
});
|
|
49
|
-
it('
|
|
50
|
-
|
|
51
|
-
|
|
104
|
+
it('does not emit silent (abort) errors', async () => {
|
|
105
|
+
const errorSpy = createEventSpy(controller, 'error');
|
|
106
|
+
mediaTimelineTransformed.value = Promise.resolve({
|
|
107
|
+
periods: [],
|
|
108
|
+
minBufferTime: 0,
|
|
109
|
+
getDuration: () => Promise.reject(new AbortError()),
|
|
110
|
+
});
|
|
111
|
+
open();
|
|
112
|
+
await flushPromises();
|
|
113
|
+
expect(errorSpy).not.toHaveBeenCalled();
|
|
114
|
+
});
|
|
115
|
+
it('discards a duration result if the source closed before it resolved', async () => {
|
|
116
|
+
const deferred = new Deferred();
|
|
117
|
+
mediaTimelineTransformed.value = Promise.resolve({
|
|
118
|
+
periods: [],
|
|
119
|
+
minBufferTime: 0,
|
|
120
|
+
getDuration: () => deferred,
|
|
121
|
+
});
|
|
122
|
+
open();
|
|
123
|
+
await flushPromises();
|
|
124
|
+
// Close before the duration resolves; the late result should be ignored.
|
|
125
|
+
mockMediaSource.readyState = 'closed';
|
|
126
|
+
mockMediaSource.dispatchEvent(mockEvent('sourceclose'));
|
|
127
|
+
deferred.resolve(123);
|
|
128
|
+
await flushPromises();
|
|
129
|
+
expect(mockMediaSource.duration).toBe(0);
|
|
130
|
+
expect(controller.readyToAppend).toBeFalse();
|
|
52
131
|
});
|
|
53
132
|
});
|
|
54
133
|
describe('createSourceBuffer', () => {
|
|
@@ -58,18 +137,15 @@ describe('MediaSourceControllerImpl', () => {
|
|
|
58
137
|
mockMediaSource.addSourceBuffer.and.returnValue(mockSourceBuffer);
|
|
59
138
|
});
|
|
60
139
|
it('creates source buffer with correct mime type', () => {
|
|
61
|
-
const controller = new MediaSourceControllerImpl(deps);
|
|
62
140
|
const ref = controller.createSourceBuffer('audio', 'audio/mp4');
|
|
63
141
|
expect(mockMediaSource.addSourceBuffer).toHaveBeenCalledWith('audio/mp4');
|
|
64
142
|
expect(ref.value).toBe(mockSourceBuffer);
|
|
65
143
|
});
|
|
66
144
|
it('sets source buffer mode to sequence', () => {
|
|
67
|
-
const controller = new MediaSourceControllerImpl(deps);
|
|
68
145
|
controller.createSourceBuffer('audio', 'audio/mp4');
|
|
69
146
|
expect(mockSourceBuffer.mode).toBe('sequence');
|
|
70
147
|
});
|
|
71
148
|
it('emits error events when contentTypesValue rejects', async () => {
|
|
72
|
-
const controller = new MediaSourceControllerImpl(deps);
|
|
73
149
|
const errorSpy = createEventSpy(controller, 'error');
|
|
74
150
|
const error = new Error('expected error');
|
|
75
151
|
contentTypesValue.value = Promise.reject(error);
|
|
@@ -80,13 +156,20 @@ describe('MediaSourceControllerImpl', () => {
|
|
|
80
156
|
});
|
|
81
157
|
});
|
|
82
158
|
describe('readyToAppend', () => {
|
|
83
|
-
it('is true
|
|
84
|
-
|
|
159
|
+
it('is true only after duration is set and all source buffers are created', async () => {
|
|
160
|
+
// Each createSourceBuffer must return a distinct SourceBuffer because
|
|
161
|
+
// the controller dedupes buffers by identity.
|
|
162
|
+
mockMediaSource.addSourceBuffer.and.callFake(() => new MockSourceBuffer());
|
|
85
163
|
const readyToAppendSpy = createEventSpy(controller, 'readyToAppend');
|
|
86
164
|
expect(controller.readyToAppend).toBeFalse();
|
|
87
165
|
await flushPromises();
|
|
88
166
|
expect(readyToAppendSpy).not.toHaveBeenCalled();
|
|
167
|
+
// Source buffer alone is not enough — duration must be set.
|
|
89
168
|
controller.createSourceBuffer('audio', 'audio/mp4');
|
|
169
|
+
expect(controller.readyToAppend).toBeFalse();
|
|
170
|
+
expect(readyToAppendSpy).not.toHaveBeenCalled();
|
|
171
|
+
open();
|
|
172
|
+
await flushPromises();
|
|
90
173
|
expect(controller.readyToAppend).toBeTrue();
|
|
91
174
|
expect(readyToAppendSpy).toHaveBeenCalledTimes(1);
|
|
92
175
|
readyToAppendSpy.calls.reset();
|
|
@@ -104,21 +187,18 @@ describe('MediaSourceControllerImpl', () => {
|
|
|
104
187
|
});
|
|
105
188
|
});
|
|
106
189
|
it('throws MediaSourceError when addSourceBuffer fails', () => {
|
|
107
|
-
const controller = new MediaSourceControllerImpl(deps);
|
|
108
190
|
const error = new Error('test error');
|
|
109
191
|
mockMediaSource.addSourceBuffer.and.throwError(error);
|
|
110
192
|
expect(() => controller.createSourceBuffer('audio', 'invalid/type')).toThrowError(MediaSourceError, 'error creating source buffer');
|
|
111
193
|
});
|
|
112
194
|
describe('SourceBufferRef disposal', () => {
|
|
113
195
|
it('removes source buffer from media source', () => {
|
|
114
|
-
const controller = new MediaSourceControllerImpl(deps);
|
|
115
196
|
mockMediaSource.readyState = 'open';
|
|
116
197
|
const ref = controller.createSourceBuffer('audio', 'audio/mp4');
|
|
117
198
|
ref.dispose();
|
|
118
199
|
expect(mockMediaSource.removeSourceBuffer).toHaveBeenCalledWith(mockSourceBuffer);
|
|
119
200
|
});
|
|
120
201
|
it('does not remove source buffer when media source is closed', () => {
|
|
121
|
-
const controller = new MediaSourceControllerImpl(deps);
|
|
122
202
|
mockMediaSource.readyState = 'open';
|
|
123
203
|
const ref = controller.createSourceBuffer('audio', 'audio/mp4');
|
|
124
204
|
mockMediaSource.readyState = 'closed';
|
|
@@ -48,6 +48,7 @@ describe('createDefaultMediaTimelineTransformer', () => {
|
|
|
48
48
|
},
|
|
49
49
|
],
|
|
50
50
|
minBufferTime: 2,
|
|
51
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
51
52
|
};
|
|
52
53
|
const result = await createDefaultMediaTimelineTransformer(createDeps(timeline)).value;
|
|
53
54
|
expect(result.periods[0].qualities.length).toBe(1);
|
|
@@ -75,6 +76,7 @@ describe('createDefaultMediaTimelineTransformer', () => {
|
|
|
75
76
|
},
|
|
76
77
|
],
|
|
77
78
|
minBufferTime: 2,
|
|
79
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
78
80
|
};
|
|
79
81
|
const result = await createDefaultMediaTimelineTransformer(createDeps(timeline)).value;
|
|
80
82
|
expect(result.periods[0].qualities.length).toBe(1);
|
|
@@ -107,6 +109,7 @@ describe('createDefaultMediaTimelineTransformer', () => {
|
|
|
107
109
|
},
|
|
108
110
|
],
|
|
109
111
|
minBufferTime: 2,
|
|
112
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
110
113
|
};
|
|
111
114
|
const result = await createDefaultMediaTimelineTransformer(createDeps(timeline)).value;
|
|
112
115
|
expect(result.periods[0].qualities.length).toBe(1);
|
|
@@ -135,6 +138,7 @@ describe('createDefaultMediaTimelineTransformer', () => {
|
|
|
135
138
|
},
|
|
136
139
|
],
|
|
137
140
|
minBufferTime: 2,
|
|
141
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
138
142
|
};
|
|
139
143
|
const result = await createDefaultMediaTimelineTransformer(createDeps(timeline, 'en')).value;
|
|
140
144
|
expect(result.periods[0].qualities.length).toBe(1);
|
|
@@ -163,6 +167,7 @@ describe('createDefaultMediaTimelineTransformer', () => {
|
|
|
163
167
|
},
|
|
164
168
|
],
|
|
165
169
|
minBufferTime: 2,
|
|
170
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
166
171
|
};
|
|
167
172
|
const options = data({
|
|
168
173
|
preferredAudioLanguage: 'en',
|
|
@@ -197,6 +202,7 @@ describe('createDefaultMediaTimelineTransformer', () => {
|
|
|
197
202
|
},
|
|
198
203
|
],
|
|
199
204
|
minBufferTime: 5,
|
|
205
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
200
206
|
};
|
|
201
207
|
const result = await createDefaultMediaTimelineTransformer(createDeps(timeline)).value;
|
|
202
208
|
expect(result.minBufferTime).toBe(5);
|
|
@@ -27,6 +27,7 @@ describe('filterTimelineQualities', () => {
|
|
|
27
27
|
},
|
|
28
28
|
],
|
|
29
29
|
minBufferTime: 2,
|
|
30
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
30
31
|
};
|
|
31
32
|
it('filters qualities by predicate', () => {
|
|
32
33
|
const result = filterTimelineQualities((q) => q.contentType === 'audio', () => {
|
|
@@ -60,6 +61,7 @@ describe('filterTimelineQualitiesAsync', () => {
|
|
|
60
61
|
},
|
|
61
62
|
],
|
|
62
63
|
minBufferTime: 2,
|
|
64
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
63
65
|
};
|
|
64
66
|
it('filters qualities by async predicate', async () => {
|
|
65
67
|
const result = await filterTimelineQualitiesAsync((q) => Promise.resolve(q.contentType === 'audio'), () => {
|
|
@@ -41,6 +41,7 @@ describe('createLanguageFilter', () => {
|
|
|
41
41
|
},
|
|
42
42
|
],
|
|
43
43
|
minBufferTime: 2,
|
|
44
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
44
45
|
};
|
|
45
46
|
const result = applyLanguageFilter(timeline, 'en', 'audio');
|
|
46
47
|
expect(result.periods[0].qualities.length).toBe(2); // en audio + video
|
|
@@ -59,6 +60,7 @@ describe('createLanguageFilter', () => {
|
|
|
59
60
|
},
|
|
60
61
|
],
|
|
61
62
|
minBufferTime: 2,
|
|
63
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
62
64
|
};
|
|
63
65
|
const result = applyLanguageFilter(timeline, 'en', 'audio');
|
|
64
66
|
expect(result.periods[0].qualities.length).toBe(2); // en + null
|
|
@@ -73,6 +75,7 @@ describe('createLanguageFilter', () => {
|
|
|
73
75
|
},
|
|
74
76
|
],
|
|
75
77
|
minBufferTime: 5,
|
|
78
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
76
79
|
};
|
|
77
80
|
const result = applyLanguageFilter(timeline, 'en', 'audio');
|
|
78
81
|
expect(result.minBufferTime).toBe(5);
|
|
@@ -91,6 +94,7 @@ describe('createLanguageFilter', () => {
|
|
|
91
94
|
},
|
|
92
95
|
],
|
|
93
96
|
minBufferTime: 2,
|
|
97
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
94
98
|
};
|
|
95
99
|
const result = applyLanguageFilter(timeline, 'en', 'audio');
|
|
96
100
|
expect(result.periods[0].qualities.some((q) => q.metadata.contentType === 'video')).toBeTrue();
|
|
@@ -105,6 +109,7 @@ describe('createLanguageFilter', () => {
|
|
|
105
109
|
},
|
|
106
110
|
],
|
|
107
111
|
minBufferTime: 2,
|
|
112
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
108
113
|
};
|
|
109
114
|
// 'xx' doesn't match 'ja', so all kept
|
|
110
115
|
const result = applyLanguageFilter(timeline, 'xx', 'audio');
|
|
@@ -131,6 +136,7 @@ describe('createLanguageFilter', () => {
|
|
|
131
136
|
},
|
|
132
137
|
],
|
|
133
138
|
minBufferTime: 2,
|
|
139
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
134
140
|
};
|
|
135
141
|
// 'en' matches period 1 but not period 2
|
|
136
142
|
// Period 1: filtered to 'en' only
|
|
@@ -161,6 +167,7 @@ describe('createLanguageFilter', () => {
|
|
|
161
167
|
},
|
|
162
168
|
],
|
|
163
169
|
minBufferTime: 2,
|
|
170
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
164
171
|
};
|
|
165
172
|
const result = applyLanguageFilter(timeline, 'en', 'audio');
|
|
166
173
|
// Period 1: filtered to 'en'
|
|
@@ -3,10 +3,25 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
5
|
import { AutoResetControllerImpl, } from '@amazon/vinyl';
|
|
6
|
-
import {
|
|
6
|
+
import { networkState, DisposedError, RequestError } from '@amazon/vinyl-util';
|
|
7
7
|
import { MockPlaybackController } from '@amazon/vinyl/vinylTestUtil';
|
|
8
|
-
import { createEventSpy, MockNetworkState, overrideGlobalInit, } from '@amazon/vinyl-util/testUtil';
|
|
8
|
+
import { createEventSpy, emptyInternalError, emptyResponseError, MockNetworkState, overrideGlobalInit, } from '@amazon/vinyl-util/testUtil';
|
|
9
9
|
import { mockEvent, useMockTime } from '@amazon/vinyl-util/browserTestUtil';
|
|
10
|
+
/**
|
|
11
|
+
* Creates a RequestError representing a transient network failure (no response received).
|
|
12
|
+
* These are the only errors that AutoResetController watches for retry opportunities.
|
|
13
|
+
*/
|
|
14
|
+
function createNetworkRequestError() {
|
|
15
|
+
return new RequestError(null, emptyInternalError);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Creates a RequestError that received an HTTP response. These should be ignored by
|
|
19
|
+
* the AutoResetController, since a service that responded is unlikely to recover
|
|
20
|
+
* on its own.
|
|
21
|
+
*/
|
|
22
|
+
function createResponseRequestError() {
|
|
23
|
+
return new RequestError(new Response(null, { status: 500 }), emptyResponseError);
|
|
24
|
+
}
|
|
10
25
|
describe('AutoResetControllerImpl', () => {
|
|
11
26
|
let deps;
|
|
12
27
|
let controller;
|
|
@@ -47,32 +62,35 @@ describe('AutoResetControllerImpl', () => {
|
|
|
47
62
|
expect(playbackController.on).toHaveBeenCalledWith('seeking', jasmine.any(Function));
|
|
48
63
|
expect(playbackController.on).toHaveBeenCalledWith('playing', jasmine.any(Function));
|
|
49
64
|
});
|
|
65
|
+
it('starts with resetPending false', () => {
|
|
66
|
+
controller = new AutoResetControllerImpl(deps);
|
|
67
|
+
expect(controller.resetPending).toBeFalse();
|
|
68
|
+
});
|
|
50
69
|
});
|
|
51
70
|
describe('setError', () => {
|
|
52
71
|
beforeEach(() => {
|
|
53
72
|
controller = new AutoResetControllerImpl(deps);
|
|
54
73
|
});
|
|
55
|
-
it('ignores non-
|
|
74
|
+
it('ignores non-RequestError', () => {
|
|
56
75
|
const error = new Error('test error');
|
|
57
76
|
controller.setError(error);
|
|
58
77
|
expect(mockNetworkState.on).not.toHaveBeenCalled();
|
|
78
|
+
expect(controller.resetPending).toBeFalse();
|
|
59
79
|
});
|
|
60
|
-
it('ignores
|
|
61
|
-
|
|
62
|
-
controller.setError(error);
|
|
80
|
+
it('ignores RequestError with a response (HTTP failure)', () => {
|
|
81
|
+
controller.setError(createResponseRequestError());
|
|
63
82
|
expect(mockNetworkState.on).not.toHaveBeenCalled();
|
|
83
|
+
expect(controller.resetPending).toBeFalse();
|
|
64
84
|
});
|
|
65
|
-
it('sets error and starts watching for
|
|
66
|
-
|
|
67
|
-
controller.setError(error);
|
|
85
|
+
it('sets error and starts watching for transient network RequestError', () => {
|
|
86
|
+
controller.setError(createNetworkRequestError());
|
|
68
87
|
expect(mockNetworkState.on).toHaveBeenCalledWith('online', jasmine.any(Function));
|
|
88
|
+
expect(controller.resetPending).toBeTrue();
|
|
69
89
|
});
|
|
70
90
|
it('ignores subsequent errors when already in error state', () => {
|
|
71
|
-
|
|
72
|
-
const error2 = new ReportableError('test2', ErrorOrigin.SERVICE_INTERNAL);
|
|
73
|
-
controller.setError(error1);
|
|
91
|
+
controller.setError(createNetworkRequestError());
|
|
74
92
|
mockNetworkState.on.calls.reset();
|
|
75
|
-
controller.setError(
|
|
93
|
+
controller.setError(createNetworkRequestError());
|
|
76
94
|
expect(mockNetworkState.on).not.toHaveBeenCalled();
|
|
77
95
|
});
|
|
78
96
|
});
|
|
@@ -82,7 +100,7 @@ describe('AutoResetControllerImpl', () => {
|
|
|
82
100
|
beforeEach(() => {
|
|
83
101
|
controller = new AutoResetControllerImpl(deps);
|
|
84
102
|
resetSpy = createEventSpy(controller, 'reset');
|
|
85
|
-
error =
|
|
103
|
+
error = createNetworkRequestError();
|
|
86
104
|
});
|
|
87
105
|
it('emits reset event when network comes online', () => {
|
|
88
106
|
controller.setError(error);
|
|
@@ -160,7 +178,7 @@ describe('AutoResetControllerImpl', () => {
|
|
|
160
178
|
let resetSpy;
|
|
161
179
|
let error;
|
|
162
180
|
beforeEach(() => {
|
|
163
|
-
error =
|
|
181
|
+
error = createNetworkRequestError();
|
|
164
182
|
});
|
|
165
183
|
it('retries at specified interval when online', async () => {
|
|
166
184
|
controller = new AutoResetControllerImpl(deps, { retryInterval: 5 });
|
|
@@ -197,12 +215,109 @@ describe('AutoResetControllerImpl', () => {
|
|
|
197
215
|
expect(resetSpy).toHaveBeenCalledTimes(3);
|
|
198
216
|
}
|
|
199
217
|
});
|
|
218
|
+
it('clears resetPending when max retries are exhausted', async () => {
|
|
219
|
+
controller = new AutoResetControllerImpl(deps, {
|
|
220
|
+
retryInterval: 1,
|
|
221
|
+
maxRetries: 1,
|
|
222
|
+
});
|
|
223
|
+
controller.setError(error);
|
|
224
|
+
expect(controller.resetPending).toBeTrue();
|
|
225
|
+
// First retry succeeds (resets) and re-arms on next setError
|
|
226
|
+
await clock.tick(1);
|
|
227
|
+
controller.setError(error);
|
|
228
|
+
expect(controller.resetPending).toBeTrue();
|
|
229
|
+
// Second retry exhausts the budget — interval fires but no reset emitted,
|
|
230
|
+
// and resetPending should transition to false.
|
|
231
|
+
await clock.tick(1);
|
|
232
|
+
expect(controller.resetPending).toBeFalse();
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
describe('resetPending', () => {
|
|
236
|
+
let error;
|
|
237
|
+
beforeEach(() => {
|
|
238
|
+
controller = new AutoResetControllerImpl(deps);
|
|
239
|
+
error = createNetworkRequestError();
|
|
240
|
+
});
|
|
241
|
+
it('is false initially', () => {
|
|
242
|
+
expect(controller.resetPending).toBeFalse();
|
|
243
|
+
});
|
|
244
|
+
it('becomes true when an eligible error is set', () => {
|
|
245
|
+
controller.setError(error);
|
|
246
|
+
expect(controller.resetPending).toBeTrue();
|
|
247
|
+
});
|
|
248
|
+
it('remains false when a non-eligible error is set', () => {
|
|
249
|
+
controller.setError(new Error('not eligible'));
|
|
250
|
+
expect(controller.resetPending).toBeFalse();
|
|
251
|
+
});
|
|
252
|
+
it('becomes false after a reset is emitted', () => {
|
|
253
|
+
controller.setError(error);
|
|
254
|
+
playbackController.dispatch('play', {});
|
|
255
|
+
expect(controller.resetPending).toBeFalse();
|
|
256
|
+
});
|
|
257
|
+
it('becomes false when cleared', () => {
|
|
258
|
+
controller.setError(error);
|
|
259
|
+
controller.clear();
|
|
260
|
+
expect(controller.resetPending).toBeFalse();
|
|
261
|
+
});
|
|
262
|
+
it('is false when the controller is disabled', () => {
|
|
263
|
+
controller = new AutoResetControllerImpl(deps, { enabled: false });
|
|
264
|
+
controller.setError(error);
|
|
265
|
+
expect(controller.resetPending).toBeFalse();
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
describe('resetPendingChange event', () => {
|
|
269
|
+
let resetPendingChangeSpy;
|
|
270
|
+
let error;
|
|
271
|
+
beforeEach(() => {
|
|
272
|
+
controller = new AutoResetControllerImpl(deps);
|
|
273
|
+
resetPendingChangeSpy = createEventSpy(controller, 'resetPendingChange');
|
|
274
|
+
error = createNetworkRequestError();
|
|
275
|
+
});
|
|
276
|
+
it('dispatches when resetPending becomes true', () => {
|
|
277
|
+
controller.setError(error);
|
|
278
|
+
expect(resetPendingChangeSpy).toHaveBeenCalledOnceWith({
|
|
279
|
+
previous: false,
|
|
280
|
+
current: true,
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
it('dispatches when resetPending becomes false via reset', () => {
|
|
284
|
+
controller.setError(error);
|
|
285
|
+
resetPendingChangeSpy.calls.reset();
|
|
286
|
+
playbackController.dispatch('play', {});
|
|
287
|
+
expect(resetPendingChangeSpy).toHaveBeenCalledOnceWith({
|
|
288
|
+
previous: true,
|
|
289
|
+
current: false,
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
it('dispatches when resetPending becomes false via clear', () => {
|
|
293
|
+
controller.setError(error);
|
|
294
|
+
resetPendingChangeSpy.calls.reset();
|
|
295
|
+
controller.clear();
|
|
296
|
+
expect(resetPendingChangeSpy).toHaveBeenCalledOnceWith({
|
|
297
|
+
previous: true,
|
|
298
|
+
current: false,
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
it('does not dispatch when setError is called with an in-progress error', () => {
|
|
302
|
+
controller.setError(error);
|
|
303
|
+
resetPendingChangeSpy.calls.reset();
|
|
304
|
+
controller.setError(error);
|
|
305
|
+
expect(resetPendingChangeSpy).not.toHaveBeenCalled();
|
|
306
|
+
});
|
|
307
|
+
it('does not dispatch when clear is called with no error', () => {
|
|
308
|
+
controller.clear();
|
|
309
|
+
expect(resetPendingChangeSpy).not.toHaveBeenCalled();
|
|
310
|
+
});
|
|
311
|
+
it('does not dispatch when an ineligible error is set', () => {
|
|
312
|
+
controller.setError(new Error('not eligible'));
|
|
313
|
+
expect(resetPendingChangeSpy).not.toHaveBeenCalled();
|
|
314
|
+
});
|
|
200
315
|
});
|
|
201
316
|
describe('clear', () => {
|
|
202
317
|
let error;
|
|
203
318
|
beforeEach(() => {
|
|
204
319
|
controller = new AutoResetControllerImpl(deps);
|
|
205
|
-
error =
|
|
320
|
+
error = createNetworkRequestError();
|
|
206
321
|
});
|
|
207
322
|
it('clears error state and stops watching', () => {
|
|
208
323
|
controller.setError(error);
|
|
@@ -229,8 +344,7 @@ describe('AutoResetControllerImpl', () => {
|
|
|
229
344
|
describe('dispose', () => {
|
|
230
345
|
it('clears error state and disposes resources', () => {
|
|
231
346
|
controller = new AutoResetControllerImpl(deps);
|
|
232
|
-
|
|
233
|
-
controller.setError(error);
|
|
347
|
+
controller.setError(createNetworkRequestError());
|
|
234
348
|
controller.dispose();
|
|
235
349
|
// Should not emit reset after disposing
|
|
236
350
|
const resetSpy = createEventSpy(controller, 'reset');
|
|
@@ -250,15 +364,13 @@ describe('AutoResetControllerImpl', () => {
|
|
|
250
364
|
describe('disabled behavior', () => {
|
|
251
365
|
it('does not watch for errors when disabled', () => {
|
|
252
366
|
controller = new AutoResetControllerImpl(deps, { enabled: false });
|
|
253
|
-
|
|
254
|
-
controller.setError(error);
|
|
367
|
+
controller.setError(createNetworkRequestError());
|
|
255
368
|
expect(mockNetworkState.on).not.toHaveBeenCalled();
|
|
256
369
|
});
|
|
257
370
|
it('does not emit reset events when disabled', () => {
|
|
258
371
|
controller = new AutoResetControllerImpl(deps, { enabled: false });
|
|
259
372
|
const resetSpy = createEventSpy(controller, 'reset');
|
|
260
|
-
|
|
261
|
-
controller.setError(error);
|
|
373
|
+
controller.setError(createNetworkRequestError());
|
|
262
374
|
playbackController.dispatch('play', {});
|
|
263
375
|
expect(resetSpy).not.toHaveBeenCalled();
|
|
264
376
|
});
|
|
@@ -12,7 +12,11 @@ describe('createDashContentStreamFactories', () => {
|
|
|
12
12
|
let mediaSourceController;
|
|
13
13
|
let playbackController;
|
|
14
14
|
let qualitySelector;
|
|
15
|
-
const emptyTimeline = {
|
|
15
|
+
const emptyTimeline = {
|
|
16
|
+
periods: [],
|
|
17
|
+
minBufferTime: 0,
|
|
18
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
19
|
+
};
|
|
16
20
|
beforeEach(() => {
|
|
17
21
|
mediaSourceController = new MockMediaSourceController();
|
|
18
22
|
playbackController = new MockPlaybackController();
|
|
@@ -9,7 +9,11 @@ var objectContaining = jasmine.objectContaining;
|
|
|
9
9
|
describe('createSegmentControllerFactory', () => {
|
|
10
10
|
it('creates SegmentControllerImpl with merged dependencies', () => {
|
|
11
11
|
const playbackController = new MockPlaybackController();
|
|
12
|
-
const emptyTimeline = {
|
|
12
|
+
const emptyTimeline = {
|
|
13
|
+
periods: [],
|
|
14
|
+
minBufferTime: 0,
|
|
15
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
16
|
+
};
|
|
13
17
|
const factory = createSegmentControllerFactory({ playbackController }, 'audio', { prefetchActive: 100 });
|
|
14
18
|
const controller = factory({
|
|
15
19
|
mediaTimelineTransformed: data(Promise.resolve(emptyTimeline)),
|
|
@@ -308,5 +308,34 @@ describe('mpd utils', () => {
|
|
|
308
308
|
expect(calculateDuration(manifest)).toBe(50);
|
|
309
309
|
});
|
|
310
310
|
});
|
|
311
|
+
describe('when MPD type is dynamic', () => {
|
|
312
|
+
it('returns Infinity for live presentations', () => {
|
|
313
|
+
// language=XML
|
|
314
|
+
const manifest = parseDashManifest(`<?xml version="1.0" ?>
|
|
315
|
+
<MPD type="dynamic" minBufferTime="PT0.0S" profiles="urn:mpeg:dash:profile:isoff-live:2011" xmlns="urn:mpeg:dash:schema:mpd:2011">
|
|
316
|
+
<Period/>
|
|
317
|
+
</MPD>`);
|
|
318
|
+
expect(calculateDuration(manifest)).toBe(Infinity);
|
|
319
|
+
});
|
|
320
|
+
});
|
|
321
|
+
describe('when there are no periods', () => {
|
|
322
|
+
it('throws', () => {
|
|
323
|
+
const manifest = clone(mockDashManifest);
|
|
324
|
+
delete manifest.MPD
|
|
325
|
+
.mediaPresentationDuration;
|
|
326
|
+
manifest.MPD.Period = [];
|
|
327
|
+
expect(() => calculateDuration(manifest)).toThrowError(/no periods/i);
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
describe('when the last period has no determinable end', () => {
|
|
331
|
+
it('throws', () => {
|
|
332
|
+
// language=XML
|
|
333
|
+
const manifest = parseDashManifest(`<?xml version="1.0" ?>
|
|
334
|
+
<MPD minBufferTime="PT0.0S" profiles="urn:mpeg:dash:profile:isoff-live:2011" xmlns="urn:mpeg:dash:schema:mpd:2011">
|
|
335
|
+
<Period/>
|
|
336
|
+
</MPD>`);
|
|
337
|
+
expect(() => calculateDuration(manifest)).toThrowError(/Unable to determine/);
|
|
338
|
+
});
|
|
339
|
+
});
|
|
311
340
|
});
|
|
312
341
|
});
|