@editframe/elements 0.18.3-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.
Files changed (107) hide show
  1. package/dist/elements/EFMedia/AssetMediaEngine.browsertest.d.ts +0 -0
  2. package/dist/elements/EFMedia/AssetMediaEngine.d.ts +2 -4
  3. package/dist/elements/EFMedia/AssetMediaEngine.js +22 -3
  4. package/dist/elements/EFMedia/BaseMediaEngine.js +20 -1
  5. package/dist/elements/EFMedia/BufferedSeekingInput.d.ts +5 -5
  6. package/dist/elements/EFMedia/BufferedSeekingInput.js +27 -7
  7. package/dist/elements/EFMedia/JitMediaEngine.d.ts +1 -1
  8. package/dist/elements/EFMedia/JitMediaEngine.js +22 -3
  9. package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js +4 -1
  10. package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js +11 -3
  11. package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.chunkboundary.regression.browsertest.d.ts +0 -0
  12. package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js +10 -2
  13. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js +11 -1
  14. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js +3 -2
  15. package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js +4 -1
  16. package/dist/elements/EFMedia/shared/PrecisionUtils.d.ts +28 -0
  17. package/dist/elements/EFMedia/shared/PrecisionUtils.js +29 -0
  18. package/dist/elements/EFMedia/videoTasks/makeVideoSeekTask.js +11 -2
  19. package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.js +11 -1
  20. package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.js +3 -2
  21. package/dist/elements/EFMedia.d.ts +0 -12
  22. package/dist/elements/EFMedia.js +4 -30
  23. package/dist/elements/EFTimegroup.js +12 -17
  24. package/dist/elements/EFVideo.d.ts +0 -9
  25. package/dist/elements/EFVideo.js +0 -7
  26. package/dist/elements/SampleBuffer.js +6 -6
  27. package/dist/getRenderInfo.d.ts +2 -2
  28. package/dist/gui/ContextMixin.js +71 -17
  29. package/dist/gui/TWMixin.js +1 -1
  30. package/dist/style.css +1 -1
  31. package/dist/transcoding/types/index.d.ts +9 -9
  32. package/package.json +2 -3
  33. package/src/elements/EFAudio.browsertest.ts +7 -7
  34. package/src/elements/EFMedia/AssetMediaEngine.browsertest.ts +100 -0
  35. package/src/elements/EFMedia/AssetMediaEngine.ts +52 -7
  36. package/src/elements/EFMedia/BaseMediaEngine.ts +50 -1
  37. package/src/elements/EFMedia/BufferedSeekingInput.browsertest.ts +135 -54
  38. package/src/elements/EFMedia/BufferedSeekingInput.ts +74 -17
  39. package/src/elements/EFMedia/JitMediaEngine.ts +58 -2
  40. package/src/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.ts +10 -1
  41. package/src/elements/EFMedia/audioTasks/makeAudioInputTask.ts +16 -8
  42. package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.chunkboundary.regression.browsertest.ts +199 -0
  43. package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.ts +25 -3
  44. package/src/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.ts +12 -1
  45. package/src/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.ts +3 -2
  46. package/src/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.ts +10 -1
  47. package/src/elements/EFMedia/shared/PrecisionUtils.ts +46 -0
  48. package/src/elements/EFMedia/videoTasks/makeVideoSeekTask.ts +27 -3
  49. package/src/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.ts +12 -1
  50. package/src/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.ts +3 -2
  51. package/src/elements/EFMedia.browsertest.ts +73 -33
  52. package/src/elements/EFMedia.ts +11 -54
  53. package/src/elements/EFTimegroup.ts +21 -26
  54. package/src/elements/EFVideo.browsertest.ts +895 -162
  55. package/src/elements/EFVideo.ts +0 -16
  56. package/src/elements/SampleBuffer.ts +8 -10
  57. package/src/gui/ContextMixin.ts +104 -26
  58. package/src/transcoding/types/index.ts +10 -6
  59. package/test/EFVideo.framegen.browsertest.ts +1 -1
  60. package/test/__cache__/GET__api_v1_transcode_audio_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__32da3954ba60c96ad732020c65a08ebc/metadata.json +3 -3
  61. 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
  62. 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
  63. package/test/__cache__/GET__api_v1_transcode_audio_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__b0b2b07efcf607de8ee0f650328c32f7/metadata.json +3 -3
  64. 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
  65. 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
  66. package/test/__cache__/GET__api_v1_transcode_audio_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a75c2252b542e0c152c780e9a8d7b154/metadata.json +3 -3
  67. 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
  68. 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
  69. package/test/__cache__/GET__api_v1_transcode_audio_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a64ff1cfb1b52cae14df4b5dfa1e222b/metadata.json +3 -3
  70. package/test/__cache__/GET__api_v1_transcode_audio_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__e66d2c831d951e74ad0aeaa6489795d0/metadata.json +3 -3
  71. package/test/__cache__/GET__api_v1_transcode_high_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__26197f6f7c46cacb0a71134131c3f775/metadata.json +3 -3
  72. package/test/__cache__/GET__api_v1_transcode_high_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__4cb6774cd3650ccf59c8f8dc6678c0b9/metadata.json +3 -3
  73. 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
  74. 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
  75. 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
  76. 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
  77. package/test/__cache__/GET__api_v1_transcode_high_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0798c479b44aaeef850609a430f6e613/metadata.json +3 -3
  78. package/test/__cache__/GET__api_v1_transcode_manifest_json_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__3be92a0437de726b431ed5af2369158a/data.bin +1 -1
  79. package/test/__cache__/GET__api_v1_transcode_manifest_json_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__3be92a0437de726b431ed5af2369158a/metadata.json +4 -4
  80. package/test/recordReplayProxyPlugin.js +50 -0
  81. package/types.json +1 -1
  82. package/dist/DecoderResetFrequency.test.d.ts +0 -1
  83. package/dist/DecoderResetRecovery.test.d.ts +0 -1
  84. package/dist/ScrubTrackManager.d.ts +0 -96
  85. package/dist/elements/EFMedia/services/AudioElementFactory.browsertest.d.ts +0 -1
  86. package/dist/elements/EFMedia/services/AudioElementFactory.d.ts +0 -22
  87. package/dist/elements/EFMedia/services/AudioElementFactory.js +0 -72
  88. package/dist/elements/EFMedia/services/MediaSourceService.browsertest.d.ts +0 -1
  89. package/dist/elements/EFMedia/services/MediaSourceService.d.ts +0 -47
  90. package/dist/elements/EFMedia/services/MediaSourceService.js +0 -73
  91. package/dist/gui/services/ElementConnectionManager.browsertest.d.ts +0 -1
  92. package/dist/gui/services/ElementConnectionManager.d.ts +0 -59
  93. package/dist/gui/services/ElementConnectionManager.js +0 -128
  94. package/dist/gui/services/PlaybackController.browsertest.d.ts +0 -1
  95. package/dist/gui/services/PlaybackController.d.ts +0 -103
  96. package/dist/gui/services/PlaybackController.js +0 -290
  97. package/dist/services/MediaSourceManager.d.ts +0 -62
  98. package/dist/services/MediaSourceManager.js +0 -211
  99. package/src/elements/EFMedia/services/AudioElementFactory.browsertest.ts +0 -325
  100. package/src/elements/EFMedia/services/AudioElementFactory.ts +0 -119
  101. package/src/elements/EFMedia/services/MediaSourceService.browsertest.ts +0 -257
  102. package/src/elements/EFMedia/services/MediaSourceService.ts +0 -102
  103. package/src/gui/services/ElementConnectionManager.browsertest.ts +0 -263
  104. package/src/gui/services/ElementConnectionManager.ts +0 -224
  105. package/src/gui/services/PlaybackController.browsertest.ts +0 -437
  106. package/src/gui/services/PlaybackController.ts +0 -521
  107. package/src/services/MediaSourceManager.ts +0 -333
@@ -3,7 +3,6 @@ import { property, state } from "lit/decorators.js";
3
3
 
4
4
  import type { AudioSpan } from "../transcoding/types/index.ts";
5
5
  import { UrlGenerator } from "../transcoding/utils/UrlGenerator.ts";
6
- // Audio task imports
7
6
  import { makeAudioBufferTask } from "./EFMedia/audioTasks/makeAudioBufferTask.ts";
8
7
  import { makeAudioFrequencyAnalysisTask } from "./EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.ts";
9
8
  import { makeAudioInitSegmentFetchTask } from "./EFMedia/audioTasks/makeAudioInitSegmentFetchTask.ts";
@@ -12,10 +11,7 @@ import { makeAudioSeekTask } from "./EFMedia/audioTasks/makeAudioSeekTask.ts";
12
11
  import { makeAudioSegmentFetchTask } from "./EFMedia/audioTasks/makeAudioSegmentFetchTask.ts";
13
12
  import { makeAudioSegmentIdTask } from "./EFMedia/audioTasks/makeAudioSegmentIdTask.ts";
14
13
  import { makeAudioTimeDomainAnalysisTask } from "./EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.ts";
15
- import { AudioElementFactory } from "./EFMedia/services/AudioElementFactory.js";
16
- // Import extracted services and utilities
17
- import { MediaSourceService } from "./EFMedia/services/MediaSourceService.js";
18
- // Common task imports
14
+ import { fetchAudioSpanningTime } from "./EFMedia/shared/AudioSpanUtils.ts";
19
15
  import { makeMediaEngineTask } from "./EFMedia/tasks/makeMediaEngineTask.ts";
20
16
  import { EFSourceMixin } from "./EFSourceMixin.js";
21
17
  import { EFTemporal } from "./EFTemporal.js";
@@ -72,16 +68,6 @@ export class EFMedia extends EFTargetable(
72
68
  ];
73
69
  }
74
70
 
75
- // Services for media source and audio element management
76
- private mediaSourceService = new MediaSourceService({
77
- onError: (error) => {
78
- console.error("🎵 [EFMedia] MediaSourceService error:", error);
79
- },
80
- onReady: () => {},
81
- });
82
-
83
- private audioElementFactory = new AudioElementFactory();
84
-
85
71
  static styles = [
86
72
  css`
87
73
  :host {
@@ -220,6 +206,13 @@ export class EFMedia extends EFTargetable(
220
206
  changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>,
221
207
  ): void {
222
208
  super.updated(changedProperties);
209
+
210
+ // Check if our timeline position has actually changed, even if ownCurrentTimeMs isn't tracked as a property
211
+ const newCurrentSourceTimeMs = this.currentSourceTimeMs;
212
+ if (newCurrentSourceTimeMs !== this.desiredSeekTimeMs) {
213
+ this.executeSeek(newCurrentSourceTimeMs);
214
+ }
215
+
223
216
  if (changedProperties.has("ownCurrentTimeMs")) {
224
217
  this.executeSeek(this.currentSourceTimeMs);
225
218
  }
@@ -249,6 +242,8 @@ export class EFMedia extends EFTargetable(
249
242
  }
250
243
 
251
244
  protected async executeSeek(seekToMs: number) {
245
+ // The seekToMs parameter should be the timeline-relative media time
246
+ // calculated from currentSourceTimeMs which includes timeline positioning
252
247
  this.desiredSeekTimeMs = seekToMs;
253
248
  }
254
249
 
@@ -261,22 +256,7 @@ export class EFMedia extends EFTargetable(
261
256
  toMs: number,
262
257
  signal: AbortSignal = new AbortController().signal,
263
258
  ): Promise<AudioSpan> {
264
- // Reset MediaSourceManager for fresh playback session
265
- await this.mediaSourceService.initialize();
266
-
267
- // Use the clean, testable utility function
268
- const { fetchAudioSpanningTime: fetchAudioSpan } = await import(
269
- "./EFMedia/shared/AudioSpanUtils.ts"
270
- );
271
-
272
- return fetchAudioSpan(this, fromMs, toMs, signal);
273
- }
274
-
275
- /**
276
- * Get the HTML audio element for ContextMixin integration
277
- */
278
- get audioElement(): HTMLAudioElement | null {
279
- return this.mediaSourceService.getAudioElement();
259
+ return fetchAudioSpanningTime(this, fromMs, toMs, signal);
280
260
  }
281
261
 
282
262
  /**
@@ -300,27 +280,4 @@ export class EFMedia extends EFTargetable(
300
280
  segmentIds.filter((id) => bufferState.cachedSegments.has(id)),
301
281
  );
302
282
  }
303
-
304
- /**
305
- * Get MediaElementAudioSourceNode for ContextMixin integration
306
- * Uses AudioElementFactory for proper caching and lifecycle management
307
- */
308
- async getMediaElementSource(
309
- audioContext: AudioContext,
310
- ): Promise<MediaElementAudioSourceNode> {
311
- return this.audioElementFactory.createMediaElementSource(
312
- audioContext,
313
- this.mediaSourceService,
314
- );
315
- }
316
-
317
- disconnectedCallback(): void {
318
- super.disconnectedCallback?.();
319
-
320
- // Clean up MediaSource service
321
- this.mediaSourceService.cleanup();
322
-
323
- // Clear audio element factory cache
324
- this.audioElementFactory.clearCache();
325
- }
326
283
  }
@@ -503,32 +503,27 @@ export class EFTimegroup extends EFTemporal(LitElement) {
503
503
  * Usage: timegroup.testPlayAudio(0, 5000) // Play first 5 seconds
504
504
  */
505
505
  async testPlayAudio(fromMs: number, toMs: number) {
506
- try {
507
- // Render the audio using the existing renderAudio method
508
- const renderedBuffer = await this.renderAudio(fromMs, toMs);
509
-
510
- // Create a regular AudioContext for playback
511
- const playbackContext = new AudioContext();
512
-
513
- // Create a buffer source and connect it
514
- const bufferSource = playbackContext.createBufferSource();
515
- bufferSource.buffer = renderedBuffer;
516
- bufferSource.connect(playbackContext.destination);
517
-
518
- // Start playback immediately
519
- bufferSource.start(0);
520
-
521
- // Return a promise that resolves when playback ends
522
- return new Promise<void>((resolve) => {
523
- bufferSource.onended = () => {
524
- playbackContext.close();
525
- resolve();
526
- };
527
- });
528
- } catch (error) {
529
- console.error("🎵 [TEST_PLAY_AUDIO] Error:", error);
530
- throw error;
531
- }
506
+ // Render the audio using the existing renderAudio method
507
+ const renderedBuffer = await this.renderAudio(fromMs, toMs);
508
+
509
+ // Create a regular AudioContext for playback
510
+ const playbackContext = new AudioContext();
511
+
512
+ // Create a buffer source and connect it
513
+ const bufferSource = playbackContext.createBufferSource();
514
+ bufferSource.buffer = renderedBuffer;
515
+ bufferSource.connect(playbackContext.destination);
516
+
517
+ // Start playback immediately
518
+ bufferSource.start(0);
519
+
520
+ // Return a promise that resolves when playback ends
521
+ return new Promise<void>((resolve) => {
522
+ bufferSource.onended = () => {
523
+ playbackContext.close();
524
+ resolve();
525
+ };
526
+ });
532
527
  }
533
528
 
534
529
  async loadMd5Sums() {