@editframe/elements 0.17.6-beta.0 → 0.18.7-beta.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/EF_FRAMEGEN.js +1 -1
- package/dist/elements/EFAudio.d.ts +21 -2
- package/dist/elements/EFAudio.js +41 -11
- package/dist/elements/EFImage.d.ts +1 -0
- package/dist/elements/EFImage.js +11 -3
- package/dist/elements/EFMedia/AssetIdMediaEngine.d.ts +18 -0
- package/dist/elements/EFMedia/AssetIdMediaEngine.js +41 -0
- package/dist/elements/EFMedia/AssetMediaEngine.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/AssetMediaEngine.d.ts +45 -0
- package/dist/elements/EFMedia/AssetMediaEngine.js +135 -0
- package/dist/elements/EFMedia/BaseMediaEngine.d.ts +55 -0
- package/dist/elements/EFMedia/BaseMediaEngine.js +115 -0
- package/dist/elements/EFMedia/BufferedSeekingInput.d.ts +43 -0
- package/dist/elements/EFMedia/BufferedSeekingInput.js +179 -0
- package/dist/elements/EFMedia/JitMediaEngine.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/JitMediaEngine.d.ts +31 -0
- package/dist/elements/EFMedia/JitMediaEngine.js +81 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.d.ts +16 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.js +48 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.d.ts +3 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js +141 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.d.ts +4 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.js +16 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.d.ts +3 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js +30 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.chunkboundary.regression.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.d.ts +7 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js +32 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.d.ts +4 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js +28 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.d.ts +4 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js +17 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.d.ts +3 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js +107 -0
- package/dist/elements/EFMedia/shared/AudioSpanUtils.d.ts +7 -0
- package/dist/elements/EFMedia/shared/AudioSpanUtils.js +54 -0
- package/dist/elements/EFMedia/shared/BufferUtils.d.ts +70 -0
- package/dist/elements/EFMedia/shared/BufferUtils.js +89 -0
- package/dist/elements/EFMedia/shared/MediaTaskUtils.d.ts +23 -0
- package/dist/elements/EFMedia/shared/PrecisionUtils.d.ts +28 -0
- package/dist/elements/EFMedia/shared/PrecisionUtils.js +29 -0
- package/dist/elements/EFMedia/shared/RenditionHelpers.d.ts +19 -0
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.d.ts +18 -0
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.js +60 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.d.ts +16 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.js +46 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.d.ts +4 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.js +16 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.d.ts +3 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.js +27 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSeekTask.d.ts +7 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSeekTask.js +34 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.d.ts +4 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.js +28 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.d.ts +4 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.js +17 -0
- package/dist/elements/EFMedia.browsertest.d.ts +1 -0
- package/dist/elements/EFMedia.d.ts +63 -111
- package/dist/elements/EFMedia.js +117 -1113
- package/dist/elements/EFTemporal.d.ts +1 -1
- package/dist/elements/EFTemporal.js +1 -1
- package/dist/elements/EFTimegroup.d.ts +11 -0
- package/dist/elements/EFTimegroup.js +83 -13
- package/dist/elements/EFVideo.d.ts +54 -32
- package/dist/elements/EFVideo.js +100 -207
- package/dist/elements/EFWaveform.js +2 -2
- package/dist/elements/SampleBuffer.d.ts +14 -0
- package/dist/elements/SampleBuffer.js +52 -0
- package/dist/getRenderInfo.js +2 -1
- package/dist/gui/ContextMixin.js +3 -2
- package/dist/gui/EFFilmstrip.d.ts +3 -3
- package/dist/gui/EFFilmstrip.js +1 -1
- package/dist/gui/EFFitScale.d.ts +2 -2
- package/dist/gui/TWMixin.js +1 -1
- package/dist/style.css +1 -1
- package/dist/transcoding/cache/CacheManager.d.ts +73 -0
- package/dist/transcoding/cache/RequestDeduplicator.d.ts +29 -0
- package/dist/transcoding/cache/RequestDeduplicator.js +53 -0
- package/dist/transcoding/cache/RequestDeduplicator.test.d.ts +1 -0
- package/dist/transcoding/types/index.d.ts +242 -0
- package/dist/transcoding/utils/MediaUtils.d.ts +9 -0
- package/dist/transcoding/utils/UrlGenerator.d.ts +26 -0
- package/dist/transcoding/utils/UrlGenerator.js +45 -0
- package/dist/transcoding/utils/constants.d.ts +27 -0
- package/dist/utils/LRUCache.d.ts +34 -0
- package/dist/utils/LRUCache.js +115 -0
- package/package.json +3 -3
- package/src/elements/EFAudio.browsertest.ts +189 -49
- package/src/elements/EFAudio.ts +59 -13
- package/src/elements/EFImage.browsertest.ts +42 -0
- package/src/elements/EFImage.ts +23 -3
- package/src/elements/EFMedia/AssetIdMediaEngine.test.ts +222 -0
- package/src/elements/EFMedia/AssetIdMediaEngine.ts +70 -0
- package/src/elements/EFMedia/AssetMediaEngine.browsertest.ts +100 -0
- package/src/elements/EFMedia/AssetMediaEngine.ts +255 -0
- package/src/elements/EFMedia/BaseMediaEngine.test.ts +164 -0
- package/src/elements/EFMedia/BaseMediaEngine.ts +219 -0
- package/src/elements/EFMedia/BufferedSeekingInput.browsertest.ts +481 -0
- package/src/elements/EFMedia/BufferedSeekingInput.ts +324 -0
- package/src/elements/EFMedia/JitMediaEngine.browsertest.ts +165 -0
- package/src/elements/EFMedia/JitMediaEngine.ts +166 -0
- package/src/elements/EFMedia/audioTasks/makeAudioBufferTask.browsertest.ts +554 -0
- package/src/elements/EFMedia/audioTasks/makeAudioBufferTask.ts +81 -0
- package/src/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.ts +250 -0
- package/src/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.browsertest.ts +59 -0
- package/src/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.ts +23 -0
- package/src/elements/EFMedia/audioTasks/makeAudioInputTask.browsertest.ts +55 -0
- package/src/elements/EFMedia/audioTasks/makeAudioInputTask.ts +43 -0
- package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.chunkboundary.regression.browsertest.ts +199 -0
- package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.ts +64 -0
- package/src/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.ts +45 -0
- package/src/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.ts +24 -0
- package/src/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.ts +183 -0
- package/src/elements/EFMedia/shared/AudioSpanUtils.ts +128 -0
- package/src/elements/EFMedia/shared/BufferUtils.ts +310 -0
- package/src/elements/EFMedia/shared/MediaTaskUtils.ts +44 -0
- package/src/elements/EFMedia/shared/PrecisionUtils.ts +46 -0
- package/src/elements/EFMedia/shared/RenditionHelpers.browsertest.ts +247 -0
- package/src/elements/EFMedia/shared/RenditionHelpers.ts +79 -0
- package/src/elements/EFMedia/tasks/makeMediaEngineTask.browsertest.ts +128 -0
- package/src/elements/EFMedia/tasks/makeMediaEngineTask.test.ts +233 -0
- package/src/elements/EFMedia/tasks/makeMediaEngineTask.ts +89 -0
- package/src/elements/EFMedia/videoTasks/makeVideoBufferTask.browsertest.ts +555 -0
- package/src/elements/EFMedia/videoTasks/makeVideoBufferTask.ts +79 -0
- package/src/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.browsertest.ts +59 -0
- package/src/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.ts +23 -0
- package/src/elements/EFMedia/videoTasks/makeVideoInputTask.browsertest.ts +55 -0
- package/src/elements/EFMedia/videoTasks/makeVideoInputTask.ts +45 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSeekTask.ts +68 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.browsertest.ts +57 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.ts +43 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.browsertest.ts +56 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.ts +24 -0
- package/src/elements/EFMedia.browsertest.ts +706 -273
- package/src/elements/EFMedia.ts +136 -1769
- package/src/elements/EFTemporal.ts +3 -4
- package/src/elements/EFTimegroup.browsertest.ts +6 -3
- package/src/elements/EFTimegroup.ts +147 -21
- package/src/elements/EFVideo.browsertest.ts +980 -169
- package/src/elements/EFVideo.ts +113 -458
- package/src/elements/EFWaveform.ts +1 -1
- package/src/elements/MediaController.ts +2 -12
- package/src/elements/SampleBuffer.ts +95 -0
- package/src/gui/ContextMixin.ts +3 -6
- package/src/transcoding/cache/CacheManager.ts +208 -0
- package/src/transcoding/cache/RequestDeduplicator.test.ts +170 -0
- package/src/transcoding/cache/RequestDeduplicator.ts +65 -0
- package/src/transcoding/types/index.ts +269 -0
- package/src/transcoding/utils/MediaUtils.ts +63 -0
- package/src/transcoding/utils/UrlGenerator.ts +68 -0
- package/src/transcoding/utils/constants.ts +36 -0
- package/src/utils/LRUCache.ts +153 -0
- package/test/EFVideo.framegen.browsertest.ts +39 -30
- package/test/__cache__/GET__api_v1_transcode_audio_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__32da3954ba60c96ad732020c65a08ebc/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__32da3954ba60c96ad732020c65a08ebc/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_1_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__9ed2d25c675aa6bb6ff5b3ae23887c71/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_1_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__9ed2d25c675aa6bb6ff5b3ae23887c71/metadata.json +22 -0
- package/test/__cache__/GET__api_v1_transcode_audio_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__b0b2b07efcf607de8ee0f650328c32f7/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__b0b2b07efcf607de8ee0f650328c32f7/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_2_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__d5a3309a2bf756dd6e304807eb402f56/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_2_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__d5a3309a2bf756dd6e304807eb402f56/metadata.json +22 -0
- package/test/__cache__/GET__api_v1_transcode_audio_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a75c2252b542e0c152c780e9a8d7b154/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a75c2252b542e0c152c780e9a8d7b154/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_3_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__773254bb671e3466fca8677139fb239e/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_3_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__773254bb671e3466fca8677139fb239e/metadata.json +22 -0
- package/test/__cache__/GET__api_v1_transcode_audio_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a64ff1cfb1b52cae14df4b5dfa1e222b/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a64ff1cfb1b52cae14df4b5dfa1e222b/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_5_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__91e8a522f950809b9f09f4173113b4b0/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_5_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__91e8a522f950809b9f09f4173113b4b0/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__e66d2c831d951e74ad0aeaa6489795d0/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__e66d2c831d951e74ad0aeaa6489795d0/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__26197f6f7c46cacb0a71134131c3f775/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__26197f6f7c46cacb0a71134131c3f775/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__4cb6774cd3650ccf59c8f8dc6678c0b9/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__4cb6774cd3650ccf59c8f8dc6678c0b9/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0b3b2b1c8933f7fcf8a9ecaa88d58b41/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0b3b2b1c8933f7fcf8a9ecaa88d58b41/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a6fb05a22b18d850f7f2950bbcdbdeed/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a6fb05a22b18d850f7f2950bbcdbdeed/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_5_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a50058c7c3602e90879fe3428ed891f4/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_5_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a50058c7c3602e90879fe3428ed891f4/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0798c479b44aaeef850609a430f6e613/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0798c479b44aaeef850609a430f6e613/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_manifest_json_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__3be92a0437de726b431ed5af2369158a/data.bin +1 -0
- package/test/__cache__/GET__api_v1_transcode_manifest_json_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__3be92a0437de726b431ed5af2369158a/metadata.json +19 -0
- package/test/createJitTestClips.ts +320 -188
- package/test/recordReplayProxyPlugin.js +352 -0
- package/test/useAssetMSW.ts +1 -1
- package/test/useMSW.ts +35 -22
- package/types.json +1 -1
- package/dist/JitTranscodingClient.d.ts +0 -167
- package/dist/JitTranscodingClient.js +0 -373
- package/dist/ScrubTrackManager.d.ts +0 -96
- package/dist/ScrubTrackManager.js +0 -216
- package/dist/elements/printTaskStatus.js +0 -11
- package/src/elements/__screenshots__/EFMedia.browsertest.ts/EFMedia-JIT-audio-playback-audioBufferTask-should-work-in-JIT-mode-without-URL-errors-1.png +0 -0
- package/test/EFVideo.frame-tasks.browsertest.ts +0 -524
- /package/dist/{DecoderResetFrequency.test.d.ts → elements/EFMedia/AssetIdMediaEngine.test.d.ts} +0 -0
- /package/dist/{DecoderResetRecovery.test.d.ts → elements/EFMedia/BaseMediaEngine.test.d.ts} +0 -0
- /package/dist/{JitTranscodingClient.browsertest.d.ts → elements/EFMedia/BufferedSeekingInput.browsertest.d.ts} +0 -0
- /package/dist/{JitTranscodingClient.test.d.ts → elements/EFMedia/shared/RenditionHelpers.browsertest.d.ts} +0 -0
- /package/dist/{ScrubTrackIntegration.test.d.ts → elements/EFMedia/tasks/makeMediaEngineTask.browsertest.d.ts} +0 -0
- /package/dist/{SegmentSwitchLoading.test.d.ts → elements/EFMedia/tasks/makeMediaEngineTask.test.d.ts} +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getLatestMediaEngine } from "../tasks/makeMediaEngineTask.js";
|
|
2
|
+
import { Task } from "@lit/task";
|
|
3
|
+
const makeVideoInitSegmentFetchTask = (host) => {
|
|
4
|
+
return new Task(host, {
|
|
5
|
+
args: () => [host.mediaEngineTask.value],
|
|
6
|
+
onError: (error) => {
|
|
7
|
+
console.error("videoInitSegmentFetchTask error", error);
|
|
8
|
+
},
|
|
9
|
+
onComplete: (_value) => {},
|
|
10
|
+
task: async ([_mediaEngine], { signal }) => {
|
|
11
|
+
const mediaEngine = await getLatestMediaEngine(host, signal);
|
|
12
|
+
return mediaEngine.fetchInitSegment(mediaEngine.getVideoRendition(), signal);
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
export { makeVideoInitSegmentFetchTask };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { BufferedSeekingInput } from "../BufferedSeekingInput.js";
|
|
2
|
+
import { EFMedia } from "../../EFMedia.js";
|
|
3
|
+
import { Task } from "@lit/task";
|
|
4
|
+
const makeVideoInputTask = (host) => {
|
|
5
|
+
return new Task(host, {
|
|
6
|
+
args: () => [host.videoInitSegmentFetchTask.value, host.videoSegmentFetchTask.value],
|
|
7
|
+
onError: (error) => {
|
|
8
|
+
console.error("videoInputTask error", error);
|
|
9
|
+
},
|
|
10
|
+
onComplete: (_value) => {},
|
|
11
|
+
task: async () => {
|
|
12
|
+
const initSegment = await host.videoInitSegmentFetchTask.taskComplete;
|
|
13
|
+
const segment = await host.videoSegmentFetchTask.taskComplete;
|
|
14
|
+
if (!initSegment || !segment) throw new Error("Init segment or segment is not available");
|
|
15
|
+
const mediaEngine = await host.mediaEngineTask.taskComplete;
|
|
16
|
+
const videoRendition = mediaEngine?.videoRendition;
|
|
17
|
+
const startTimeOffsetMs = videoRendition?.startTimeOffsetMs;
|
|
18
|
+
const input = new BufferedSeekingInput(await new Blob([initSegment, segment]).arrayBuffer(), {
|
|
19
|
+
videoBufferSize: EFMedia.VIDEO_SAMPLE_BUFFER_SIZE,
|
|
20
|
+
audioBufferSize: EFMedia.AUDIO_SAMPLE_BUFFER_SIZE,
|
|
21
|
+
startTimeOffsetMs
|
|
22
|
+
});
|
|
23
|
+
return input;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
export { makeVideoInputTask };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Task } from '@lit/task';
|
|
2
|
+
import { VideoSample } from 'mediabunny';
|
|
3
|
+
import { EFVideo } from '../../EFVideo';
|
|
4
|
+
import { BufferedSeekingInput } from '../BufferedSeekingInput';
|
|
5
|
+
type VideoSeekTask = Task<readonly [number, BufferedSeekingInput | undefined], VideoSample | undefined>;
|
|
6
|
+
export declare const makeVideoSeekTask: (host: EFVideo) => VideoSeekTask;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { IgnorableError } from "../../EFMedia.js";
|
|
2
|
+
import { Task } from "@lit/task";
|
|
3
|
+
const makeVideoSeekTask = (host) => {
|
|
4
|
+
return new Task(host, {
|
|
5
|
+
args: () => [host.desiredSeekTimeMs, host.videoInputTask.value],
|
|
6
|
+
onError: (error) => {
|
|
7
|
+
if (error instanceof IgnorableError) console.info("videoSeekTask aborted");
|
|
8
|
+
console.error("videoSeekTask error", error);
|
|
9
|
+
},
|
|
10
|
+
onComplete: (_value) => {},
|
|
11
|
+
task: async ([targetSeekTimeMs], { signal }) => {
|
|
12
|
+
await host.mediaEngineTask.taskComplete;
|
|
13
|
+
signal.throwIfAborted();
|
|
14
|
+
await host.videoSegmentIdTask.taskComplete;
|
|
15
|
+
signal.throwIfAborted();
|
|
16
|
+
await host.videoSegmentFetchTask.taskComplete;
|
|
17
|
+
signal.throwIfAborted();
|
|
18
|
+
await host.videoInitSegmentFetchTask.taskComplete;
|
|
19
|
+
signal.throwIfAborted();
|
|
20
|
+
const videoInput = await host.videoInputTask.taskComplete;
|
|
21
|
+
signal.throwIfAborted();
|
|
22
|
+
if (!videoInput) throw new Error("Video input is not available");
|
|
23
|
+
const videoTrack = await videoInput.getFirstVideoTrack();
|
|
24
|
+
if (!videoTrack) throw new Error("Video track is not available");
|
|
25
|
+
signal.throwIfAborted();
|
|
26
|
+
const sample = await videoInput.seek(videoTrack.id, targetSeekTimeMs);
|
|
27
|
+
signal.throwIfAborted();
|
|
28
|
+
if (sample === void 0 && signal.aborted) return void 0;
|
|
29
|
+
if (sample === void 0) throw new Error("Video seek failed to find sample");
|
|
30
|
+
return sample;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
export { makeVideoSeekTask };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Task } from '@lit/task';
|
|
2
|
+
import { MediaEngine } from '../../../transcoding/types';
|
|
3
|
+
import { EFVideo } from '../../EFVideo';
|
|
4
|
+
export declare const makeVideoSegmentFetchTask: (host: EFVideo) => Task<readonly [MediaEngine | undefined, number | undefined], ArrayBuffer>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { getLatestMediaEngine } from "../tasks/makeMediaEngineTask.js";
|
|
2
|
+
import { Task } from "@lit/task";
|
|
3
|
+
const makeVideoSegmentFetchTask = (host) => {
|
|
4
|
+
return new Task(host, {
|
|
5
|
+
args: () => [host.mediaEngineTask.value, host.videoSegmentIdTask.value],
|
|
6
|
+
onError: (error) => {
|
|
7
|
+
console.error("videoSegmentFetchTask error", error);
|
|
8
|
+
},
|
|
9
|
+
onComplete: (_value) => {},
|
|
10
|
+
task: async (_, { signal }) => {
|
|
11
|
+
const mediaEngine = await getLatestMediaEngine(host, signal);
|
|
12
|
+
const segmentId = await host.videoSegmentIdTask.taskComplete;
|
|
13
|
+
if (segmentId === void 0) {
|
|
14
|
+
const rendition = mediaEngine.videoRendition;
|
|
15
|
+
const debugInfo = {
|
|
16
|
+
hasRendition: !!rendition,
|
|
17
|
+
segmentDurationMs: rendition?.segmentDurationMs,
|
|
18
|
+
segmentDurationsMs: rendition?.segmentDurationsMs?.length || 0,
|
|
19
|
+
desiredSeekTimeMs: host.desiredSeekTimeMs,
|
|
20
|
+
intrinsicDurationMs: host.intrinsicDurationMs
|
|
21
|
+
};
|
|
22
|
+
throw new Error(`Segment ID is not available for video. Debug info: ${JSON.stringify(debugInfo)}`);
|
|
23
|
+
}
|
|
24
|
+
return mediaEngine.fetchMediaSegment(segmentId, mediaEngine.getVideoRendition(), signal);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
export { makeVideoSegmentFetchTask };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { getLatestMediaEngine } from "../tasks/makeMediaEngineTask.js";
|
|
2
|
+
import { Task } from "@lit/task";
|
|
3
|
+
const makeVideoSegmentIdTask = (host) => {
|
|
4
|
+
return new Task(host, {
|
|
5
|
+
args: () => [host.mediaEngineTask.value, host.desiredSeekTimeMs],
|
|
6
|
+
onError: (error) => {
|
|
7
|
+
console.error("videoSegmentIdTask error", error);
|
|
8
|
+
},
|
|
9
|
+
onComplete: (_value) => {},
|
|
10
|
+
task: async ([, targetSeekTimeMs], { signal }) => {
|
|
11
|
+
const mediaEngine = await getLatestMediaEngine(host, signal);
|
|
12
|
+
signal.throwIfAborted();
|
|
13
|
+
return mediaEngine.computeSegmentId(targetSeekTimeMs, mediaEngine.getVideoRendition());
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
export { makeVideoSegmentIdTask };
|
|
@@ -1,146 +1,98 @@
|
|
|
1
|
-
import { TrackFragmentIndex, TrackSegment } from '../../../assets/src/index.ts';
|
|
2
|
-
import { VideoAsset } from '../../../assets/src/EncodedAsset.ts';
|
|
3
|
-
import { MP4File } from '../../../assets/src/MP4File.ts';
|
|
4
|
-
import { Task } from '@lit/task';
|
|
5
1
|
import { LitElement, PropertyValueMap } from 'lit';
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
2
|
+
import { AudioSpan } from '../transcoding/types/index.ts';
|
|
3
|
+
import { UrlGenerator } from '../transcoding/utils/UrlGenerator.ts';
|
|
8
4
|
declare global {
|
|
9
5
|
var EF_FRAMEGEN: import("../EF_FRAMEGEN.js").EFFramegen;
|
|
10
6
|
}
|
|
7
|
+
export declare class IgnorableError extends Error {
|
|
8
|
+
}
|
|
11
9
|
export declare const deepGetMediaElements: (element: Element, medias?: EFMedia[]) => EFMedia[];
|
|
12
10
|
declare const EFMedia_base: (new (...args: any[]) => import('./EFSourceMixin.js').EFSourceMixinInterface) & (new (...args: any[]) => import('./EFTemporal.js').TemporalMixinInterface) & (new (...args: any[]) => import('./FetchMixin.js').FetchMixinInterface) & typeof LitElement;
|
|
13
11
|
export declare class EFMedia extends EFMedia_base {
|
|
14
|
-
|
|
12
|
+
static readonly VIDEO_SAMPLE_BUFFER_SIZE = 30;
|
|
13
|
+
static readonly AUDIO_SAMPLE_BUFFER_SIZE = 120;
|
|
14
|
+
static get observedAttributes(): string[];
|
|
15
15
|
static styles: import('lit').CSSResult[];
|
|
16
16
|
currentTimeMs: number;
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
* Duration in milliseconds for audio buffering ahead of current time
|
|
19
|
+
* @domAttribute "audio-buffer-duration"
|
|
20
|
+
*/
|
|
21
|
+
audioBufferDurationMs: number;
|
|
22
|
+
/**
|
|
23
|
+
* Maximum number of concurrent audio segment fetches for buffering
|
|
24
|
+
* @domAttribute "max-audio-buffer-fetches"
|
|
22
25
|
*/
|
|
23
|
-
|
|
26
|
+
maxAudioBufferFetches: number;
|
|
24
27
|
/**
|
|
25
|
-
*
|
|
28
|
+
* Enable/disable audio buffering system
|
|
29
|
+
* @domAttribute "enable-audio-buffering"
|
|
26
30
|
*/
|
|
27
|
-
|
|
28
|
-
set mode(value: "asset" | "jit-transcode" | "auto");
|
|
29
|
-
connectedCallback(): void;
|
|
31
|
+
enableAudioBuffering: boolean;
|
|
30
32
|
/**
|
|
31
|
-
*
|
|
33
|
+
* Mute/unmute the media element
|
|
34
|
+
* @domAttribute "mute"
|
|
32
35
|
*/
|
|
33
|
-
|
|
34
|
-
cacheSize: number;
|
|
35
|
-
enablePrefetch: boolean;
|
|
36
|
+
mute: boolean;
|
|
36
37
|
/**
|
|
37
|
-
*
|
|
38
|
+
* FFT size for frequency analysis
|
|
39
|
+
* @domAttribute "fft-size"
|
|
38
40
|
*/
|
|
39
|
-
|
|
40
|
-
jitErrorMessage: string | null;
|
|
41
|
-
jitCacheStats: {
|
|
42
|
-
size: number;
|
|
43
|
-
hitRate: number;
|
|
44
|
-
efficiency: number;
|
|
45
|
-
} | null;
|
|
41
|
+
fftSize: number;
|
|
46
42
|
/**
|
|
47
|
-
*
|
|
43
|
+
* FFT decay rate for frequency analysis
|
|
44
|
+
* @domAttribute "fft-decay"
|
|
48
45
|
*/
|
|
49
|
-
|
|
50
|
-
jitClientTask: Task<readonly [string | undefined, number, boolean, number], JitTranscodingClient>;
|
|
46
|
+
fftDecay: number;
|
|
51
47
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
48
|
+
* FFT gain for frequency analysis
|
|
49
|
+
* @domAttribute "fft-gain"
|
|
54
50
|
*/
|
|
55
|
-
|
|
51
|
+
fftGain: number;
|
|
52
|
+
/**
|
|
53
|
+
* Enable/disable frequency interpolation
|
|
54
|
+
* @domAttribute "interpolate-frequencies"
|
|
55
|
+
*/
|
|
56
|
+
interpolateFrequencies: boolean;
|
|
57
|
+
get FREQ_WEIGHTS(): Float32Array;
|
|
58
|
+
get shouldInterpolateFrequencies(): boolean;
|
|
59
|
+
get urlGenerator(): UrlGenerator;
|
|
60
|
+
mediaEngineTask: import('@lit/task').Task<readonly [string, string | null], import('../transcoding/types/index.ts').MediaEngine>;
|
|
61
|
+
audioSegmentIdTask: import('@lit/task').Task<readonly [import('../transcoding/types/index.ts').MediaEngine | undefined, number], number | undefined>;
|
|
62
|
+
audioInitSegmentFetchTask: import('@lit/task').Task<readonly [import('../transcoding/types/index.ts').MediaEngine | undefined], ArrayBuffer>;
|
|
63
|
+
audioSegmentFetchTask: import('@lit/task').Task<readonly [import('../transcoding/types/index.ts').MediaEngine | undefined, number | undefined], ArrayBuffer>;
|
|
64
|
+
audioInputTask: import('./EFMedia/shared/MediaTaskUtils.ts').InputTask;
|
|
65
|
+
audioSeekTask: import('@lit/task').Task<readonly [number, import('./EFMedia/BufferedSeekingInput.ts').BufferedSeekingInput | undefined], import('mediabunny').VideoSample | undefined>;
|
|
66
|
+
audioBufferTask: import('@lit/task').Task<readonly [number], import('./EFMedia/audioTasks/makeAudioBufferTask.ts').AudioBufferState>;
|
|
67
|
+
byteTimeDomainTask: import('@lit/task').Task<readonly [import('@lit/task').TaskStatus, number, number, number, number, boolean], Uint8Array | null>;
|
|
68
|
+
frequencyDataTask: import('@lit/task').Task<readonly [import('@lit/task').TaskStatus, number, number, number, number, boolean], Uint8Array | null>;
|
|
56
69
|
/**
|
|
57
70
|
* The unique identifier for the media asset.
|
|
58
71
|
* This property can be set programmatically or via the "asset-id" attribute.
|
|
59
72
|
* @domAttribute "asset-id"
|
|
60
73
|
*/
|
|
61
|
-
|
|
62
|
-
get assetId(): string | null;
|
|
63
|
-
fragmentIndexPath(): string;
|
|
64
|
-
fragmentTrackPath(trackId: string): string;
|
|
65
|
-
get mediaDurationTask(): Task<readonly [Record<number, TrackFragmentIndex> | null | undefined, import('../JitTranscodingClient.js').VideoMetadata | null | undefined], Record<number, TrackFragmentIndex> | null>;
|
|
66
|
-
get defaultVideoTrackId(): number | undefined;
|
|
67
|
-
get defaultAudioTrackId(): number | undefined;
|
|
74
|
+
assetId: string | null;
|
|
68
75
|
get intrinsicDurationMs(): number;
|
|
69
|
-
audioBufferTask: Task<readonly [Record<string, File> | null | undefined, Record<string, {
|
|
70
|
-
segment: TrackSegment;
|
|
71
|
-
track: MP4Box.TrackInfo;
|
|
72
|
-
nextSegment?: TrackSegment;
|
|
73
|
-
}> | null | undefined], {
|
|
74
|
-
buffer: AudioBuffer;
|
|
75
|
-
startOffsetMs: number;
|
|
76
|
-
} | undefined>;
|
|
77
|
-
fetchAudioSpanningTime(fromMs: number, toMs: number): Promise<{
|
|
78
|
-
blob: Blob;
|
|
79
|
-
startMs: number;
|
|
80
|
-
endMs: number;
|
|
81
|
-
} | undefined>;
|
|
82
|
-
/**
|
|
83
|
-
* Encode an AudioBuffer to a WAV blob
|
|
84
|
-
*/
|
|
85
|
-
private encodeWAVBuffer;
|
|
86
|
-
set fftSize(value: number);
|
|
87
|
-
set fftDecay(value: number);
|
|
88
|
-
get fftSize(): number;
|
|
89
|
-
get fftDecay(): number;
|
|
90
|
-
set interpolateFrequencies(value: boolean);
|
|
91
|
-
get interpolateFrequencies(): boolean;
|
|
92
|
-
get shouldInterpolateFrequencies(): boolean;
|
|
93
|
-
private static readonly DECAY_WEIGHT;
|
|
94
|
-
get FREQ_WEIGHTS(): Float32Array;
|
|
95
|
-
byteTimeDomainTask: Task<readonly [import('@lit/task').TaskStatus, number, number, number, number, boolean], Uint8Array | null>;
|
|
96
|
-
frequencyDataTask: Task<readonly [import('@lit/task').TaskStatus, number, number, number, number, boolean], Uint8Array | null>;
|
|
97
|
-
set fftGain(value: number);
|
|
98
|
-
get fftGain(): number;
|
|
99
|
-
private synthesizeFragmentIndex;
|
|
100
|
-
private calculateAssetSegmentKeys;
|
|
101
|
-
private calculateJitSegmentKeys;
|
|
102
|
-
private calculateAssetSeekResult;
|
|
103
|
-
private calculateJitSeekResult;
|
|
104
|
-
private createTrackInfo;
|
|
105
76
|
protected updated(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
|
|
106
77
|
get hasOwnDuration(): boolean;
|
|
107
|
-
videoAssetTask: Task<readonly ["asset" | "jit-transcode", Record<string, File> | null | undefined], VideoAsset | undefined>;
|
|
108
78
|
private _desiredSeekTimeMs;
|
|
109
79
|
get desiredSeekTimeMs(): number;
|
|
110
80
|
set desiredSeekTimeMs(value: number);
|
|
111
81
|
protected executeSeek(seekToMs: number): Promise<void>;
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
buffer: MP4Box.MP4ArrayBuffer;
|
|
128
|
-
mp4File: MP4File;
|
|
129
|
-
}[] | null | undefined, typeof fetch], Record<string, File> | null>;
|
|
130
|
-
jitSegmentKeysTask: Task<readonly [import('../JitTranscodingClient.js').VideoMetadata | null | undefined, number], Record<string, {
|
|
131
|
-
startTimeMs: number;
|
|
132
|
-
trackId: string;
|
|
133
|
-
}> | null>;
|
|
134
|
-
jitSegmentLoader: Task<readonly [string, Record<string, {
|
|
135
|
-
startTimeMs: number;
|
|
136
|
-
trackId: string;
|
|
137
|
-
}> | null | undefined, import('../JitTranscodingClient.js').VideoMetadata | null | undefined], Record<string, File> | null>;
|
|
138
|
-
fragmentIndexTask: Task<readonly [Record<number, TrackFragmentIndex> | null | undefined, import('../JitTranscodingClient.js').VideoMetadata | null | undefined], Record<number, TrackFragmentIndex> | null>;
|
|
139
|
-
mediaSegmentsTask: Task<readonly [Record<string, File> | null | undefined, Record<string, File> | null | undefined], Record<string, File> | null>;
|
|
140
|
-
seekTask: Task<readonly [Record<number, TrackFragmentIndex> | null | undefined, Record<string, File> | null | undefined, number], Record<string, {
|
|
141
|
-
segment: TrackSegment;
|
|
142
|
-
track: MP4Box.TrackInfo;
|
|
143
|
-
nextSegment?: TrackSegment;
|
|
144
|
-
}> | null>;
|
|
82
|
+
/**
|
|
83
|
+
* Main integration method for EFTimegroup audio playback
|
|
84
|
+
* Now powered by clean, testable utility functions
|
|
85
|
+
*/
|
|
86
|
+
fetchAudioSpanningTime(fromMs: number, toMs: number, signal?: AbortSignal): Promise<AudioSpan>;
|
|
87
|
+
/**
|
|
88
|
+
* Check if an audio segment is cached in the unified buffer system
|
|
89
|
+
* Now uses the same caching approach as video for consistency
|
|
90
|
+
*/
|
|
91
|
+
getCachedAudioSegment(segmentId: number): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Get cached audio segments from the unified buffer system
|
|
94
|
+
* Now uses the same caching approach as video for consistency
|
|
95
|
+
*/
|
|
96
|
+
getCachedAudioSegments(segmentIds: number[]): Set<number>;
|
|
145
97
|
}
|
|
146
98
|
export {};
|