@editframe/elements 0.16.8-beta.0 → 0.18.3-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 (267) hide show
  1. package/README.md +30 -0
  2. package/dist/DecoderResetFrequency.test.d.ts +1 -0
  3. package/dist/DecoderResetRecovery.test.d.ts +1 -0
  4. package/dist/DelayedLoadingState.d.ts +48 -0
  5. package/dist/DelayedLoadingState.integration.test.d.ts +1 -0
  6. package/dist/DelayedLoadingState.js +113 -0
  7. package/dist/DelayedLoadingState.test.d.ts +1 -0
  8. package/dist/EF_FRAMEGEN.d.ts +10 -1
  9. package/dist/EF_FRAMEGEN.js +199 -179
  10. package/dist/EF_INTERACTIVE.js +2 -6
  11. package/dist/EF_RENDERING.js +1 -3
  12. package/dist/LoadingDebounce.test.d.ts +1 -0
  13. package/dist/LoadingIndicator.browsertest.d.ts +0 -0
  14. package/dist/ManualScrubTest.test.d.ts +1 -0
  15. package/dist/ScrubResolvedFlashing.test.d.ts +1 -0
  16. package/dist/ScrubTrackManager.d.ts +96 -0
  17. package/dist/ScrubTrackManager.test.d.ts +1 -0
  18. package/dist/VideoSeekFlashing.browsertest.d.ts +0 -0
  19. package/dist/VideoStuckDiagnostic.test.d.ts +1 -0
  20. package/dist/elements/CrossUpdateController.js +13 -15
  21. package/dist/elements/EFAudio.browsertest.d.ts +0 -0
  22. package/dist/elements/EFAudio.d.ts +22 -3
  23. package/dist/elements/EFAudio.js +60 -43
  24. package/dist/elements/EFCaptions.js +337 -373
  25. package/dist/elements/EFImage.d.ts +1 -0
  26. package/dist/elements/EFImage.js +73 -91
  27. package/dist/elements/EFMedia/AssetIdMediaEngine.d.ts +18 -0
  28. package/dist/elements/EFMedia/AssetIdMediaEngine.js +41 -0
  29. package/dist/elements/EFMedia/AssetIdMediaEngine.test.d.ts +1 -0
  30. package/dist/elements/EFMedia/AssetMediaEngine.d.ts +47 -0
  31. package/dist/elements/EFMedia/AssetMediaEngine.js +116 -0
  32. package/dist/elements/EFMedia/BaseMediaEngine.d.ts +55 -0
  33. package/dist/elements/EFMedia/BaseMediaEngine.js +96 -0
  34. package/dist/elements/EFMedia/BaseMediaEngine.test.d.ts +1 -0
  35. package/dist/elements/EFMedia/BufferedSeekingInput.browsertest.d.ts +1 -0
  36. package/dist/elements/EFMedia/BufferedSeekingInput.d.ts +43 -0
  37. package/dist/elements/EFMedia/BufferedSeekingInput.js +159 -0
  38. package/dist/elements/EFMedia/JitMediaEngine.browsertest.d.ts +0 -0
  39. package/dist/elements/EFMedia/JitMediaEngine.d.ts +31 -0
  40. package/dist/elements/EFMedia/JitMediaEngine.js +62 -0
  41. package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.browsertest.d.ts +9 -0
  42. package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.d.ts +16 -0
  43. package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.js +48 -0
  44. package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.d.ts +3 -0
  45. package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js +138 -0
  46. package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.browsertest.d.ts +9 -0
  47. package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.d.ts +4 -0
  48. package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.js +16 -0
  49. package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.browsertest.d.ts +9 -0
  50. package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.d.ts +3 -0
  51. package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js +22 -0
  52. package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.d.ts +7 -0
  53. package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js +24 -0
  54. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.d.ts +4 -0
  55. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js +18 -0
  56. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.d.ts +4 -0
  57. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js +16 -0
  58. package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.d.ts +3 -0
  59. package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js +104 -0
  60. package/dist/elements/EFMedia/services/AudioElementFactory.browsertest.d.ts +1 -0
  61. package/dist/elements/EFMedia/services/AudioElementFactory.d.ts +22 -0
  62. package/dist/elements/EFMedia/services/AudioElementFactory.js +72 -0
  63. package/dist/elements/EFMedia/services/MediaSourceService.browsertest.d.ts +1 -0
  64. package/dist/elements/EFMedia/services/MediaSourceService.d.ts +47 -0
  65. package/dist/elements/EFMedia/services/MediaSourceService.js +73 -0
  66. package/dist/elements/EFMedia/shared/AudioSpanUtils.d.ts +7 -0
  67. package/dist/elements/EFMedia/shared/AudioSpanUtils.js +54 -0
  68. package/dist/elements/EFMedia/shared/BufferUtils.d.ts +70 -0
  69. package/dist/elements/EFMedia/shared/BufferUtils.js +89 -0
  70. package/dist/elements/EFMedia/shared/MediaTaskUtils.d.ts +23 -0
  71. package/dist/elements/EFMedia/shared/RenditionHelpers.browsertest.d.ts +1 -0
  72. package/dist/elements/EFMedia/shared/RenditionHelpers.d.ts +19 -0
  73. package/dist/elements/EFMedia/tasks/makeMediaEngineTask.browsertest.d.ts +1 -0
  74. package/dist/elements/EFMedia/tasks/makeMediaEngineTask.d.ts +18 -0
  75. package/dist/elements/EFMedia/tasks/makeMediaEngineTask.js +60 -0
  76. package/dist/elements/EFMedia/tasks/makeMediaEngineTask.test.d.ts +1 -0
  77. package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.browsertest.d.ts +9 -0
  78. package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.d.ts +16 -0
  79. package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.js +46 -0
  80. package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.browsertest.d.ts +9 -0
  81. package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.d.ts +4 -0
  82. package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.js +16 -0
  83. package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.browsertest.d.ts +9 -0
  84. package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.d.ts +3 -0
  85. package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.js +27 -0
  86. package/dist/elements/EFMedia/videoTasks/makeVideoSeekTask.d.ts +7 -0
  87. package/dist/elements/EFMedia/videoTasks/makeVideoSeekTask.js +25 -0
  88. package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.browsertest.d.ts +9 -0
  89. package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.d.ts +4 -0
  90. package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.js +18 -0
  91. package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.browsertest.d.ts +9 -0
  92. package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.d.ts +4 -0
  93. package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.js +16 -0
  94. package/dist/elements/EFMedia.browsertest.d.ts +1 -0
  95. package/dist/elements/EFMedia.d.ts +95 -66
  96. package/dist/elements/EFMedia.js +204 -683
  97. package/dist/elements/EFSourceMixin.js +31 -48
  98. package/dist/elements/EFTemporal.d.ts +2 -1
  99. package/dist/elements/EFTemporal.js +266 -360
  100. package/dist/elements/EFTimegroup.d.ts +14 -1
  101. package/dist/elements/EFTimegroup.js +337 -323
  102. package/dist/elements/EFVideo.browsertest.d.ts +0 -0
  103. package/dist/elements/EFVideo.d.ts +123 -4
  104. package/dist/elements/EFVideo.js +308 -111
  105. package/dist/elements/EFWaveform.js +375 -411
  106. package/dist/elements/FetchMixin.js +14 -24
  107. package/dist/elements/MediaController.d.ts +30 -0
  108. package/dist/elements/SampleBuffer.d.ts +14 -0
  109. package/dist/elements/SampleBuffer.js +52 -0
  110. package/dist/elements/TargetController.js +130 -156
  111. package/dist/elements/TimegroupController.js +17 -19
  112. package/dist/elements/durationConverter.js +15 -4
  113. package/dist/elements/parseTimeToMs.js +4 -10
  114. package/dist/elements/printTaskStatus.d.ts +2 -0
  115. package/dist/elements/updateAnimations.js +39 -59
  116. package/dist/getRenderInfo.d.ts +2 -2
  117. package/dist/getRenderInfo.js +59 -67
  118. package/dist/gui/ContextMixin.js +150 -288
  119. package/dist/gui/EFConfiguration.js +27 -43
  120. package/dist/gui/EFFilmstrip.d.ts +3 -3
  121. package/dist/gui/EFFilmstrip.js +440 -620
  122. package/dist/gui/EFFitScale.d.ts +2 -2
  123. package/dist/gui/EFFitScale.js +112 -135
  124. package/dist/gui/EFFocusOverlay.js +45 -61
  125. package/dist/gui/EFPreview.js +30 -49
  126. package/dist/gui/EFScrubber.js +78 -99
  127. package/dist/gui/EFTimeDisplay.js +49 -70
  128. package/dist/gui/EFToggleLoop.js +17 -34
  129. package/dist/gui/EFTogglePlay.js +37 -58
  130. package/dist/gui/EFWorkbench.js +66 -88
  131. package/dist/gui/TWMixin.js +2 -48
  132. package/dist/gui/TWMixin2.js +31 -0
  133. package/dist/gui/efContext.js +2 -6
  134. package/dist/gui/fetchContext.js +1 -3
  135. package/dist/gui/focusContext.js +1 -3
  136. package/dist/gui/focusedElementContext.js +2 -6
  137. package/dist/gui/playingContext.js +1 -4
  138. package/dist/gui/services/ElementConnectionManager.browsertest.d.ts +1 -0
  139. package/dist/gui/services/ElementConnectionManager.d.ts +59 -0
  140. package/dist/gui/services/ElementConnectionManager.js +128 -0
  141. package/dist/gui/services/PlaybackController.browsertest.d.ts +1 -0
  142. package/dist/gui/services/PlaybackController.d.ts +103 -0
  143. package/dist/gui/services/PlaybackController.js +290 -0
  144. package/dist/index.js +5 -30
  145. package/dist/msToTimeCode.js +11 -13
  146. package/dist/services/MediaSourceManager.d.ts +62 -0
  147. package/dist/services/MediaSourceManager.js +211 -0
  148. package/dist/style.css +2 -1
  149. package/dist/transcoding/cache/CacheManager.d.ts +73 -0
  150. package/dist/transcoding/cache/RequestDeduplicator.d.ts +29 -0
  151. package/dist/transcoding/cache/RequestDeduplicator.js +53 -0
  152. package/dist/transcoding/cache/RequestDeduplicator.test.d.ts +1 -0
  153. package/dist/transcoding/types/index.d.ts +242 -0
  154. package/dist/transcoding/utils/MediaUtils.d.ts +9 -0
  155. package/dist/transcoding/utils/UrlGenerator.d.ts +26 -0
  156. package/dist/transcoding/utils/UrlGenerator.js +45 -0
  157. package/dist/transcoding/utils/constants.d.ts +27 -0
  158. package/dist/utils/LRUCache.d.ts +34 -0
  159. package/dist/utils/LRUCache.js +115 -0
  160. package/package.json +4 -3
  161. package/src/elements/EFAudio.browsertest.ts +709 -0
  162. package/src/elements/EFAudio.ts +59 -15
  163. package/src/elements/EFCaptions.browsertest.ts +0 -1
  164. package/src/elements/EFImage.browsertest.ts +42 -1
  165. package/src/elements/EFImage.ts +23 -3
  166. package/src/elements/EFMedia/AssetIdMediaEngine.test.ts +222 -0
  167. package/src/elements/EFMedia/AssetIdMediaEngine.ts +70 -0
  168. package/src/elements/EFMedia/AssetMediaEngine.ts +210 -0
  169. package/src/elements/EFMedia/BaseMediaEngine.test.ts +164 -0
  170. package/src/elements/EFMedia/BaseMediaEngine.ts +170 -0
  171. package/src/elements/EFMedia/BufferedSeekingInput.browsertest.ts +400 -0
  172. package/src/elements/EFMedia/BufferedSeekingInput.ts +267 -0
  173. package/src/elements/EFMedia/JitMediaEngine.browsertest.ts +165 -0
  174. package/src/elements/EFMedia/JitMediaEngine.ts +110 -0
  175. package/src/elements/EFMedia/audioTasks/makeAudioBufferTask.browsertest.ts +554 -0
  176. package/src/elements/EFMedia/audioTasks/makeAudioBufferTask.ts +81 -0
  177. package/src/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.ts +241 -0
  178. package/src/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.browsertest.ts +59 -0
  179. package/src/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.ts +23 -0
  180. package/src/elements/EFMedia/audioTasks/makeAudioInputTask.browsertest.ts +55 -0
  181. package/src/elements/EFMedia/audioTasks/makeAudioInputTask.ts +35 -0
  182. package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.ts +42 -0
  183. package/src/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.ts +34 -0
  184. package/src/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.ts +23 -0
  185. package/src/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.ts +174 -0
  186. package/src/elements/EFMedia/services/AudioElementFactory.browsertest.ts +325 -0
  187. package/src/elements/EFMedia/services/AudioElementFactory.ts +119 -0
  188. package/src/elements/EFMedia/services/MediaSourceService.browsertest.ts +257 -0
  189. package/src/elements/EFMedia/services/MediaSourceService.ts +102 -0
  190. package/src/elements/EFMedia/shared/AudioSpanUtils.ts +128 -0
  191. package/src/elements/EFMedia/shared/BufferUtils.ts +310 -0
  192. package/src/elements/EFMedia/shared/MediaTaskUtils.ts +44 -0
  193. package/src/elements/EFMedia/shared/RenditionHelpers.browsertest.ts +247 -0
  194. package/src/elements/EFMedia/shared/RenditionHelpers.ts +79 -0
  195. package/src/elements/EFMedia/tasks/makeMediaEngineTask.browsertest.ts +128 -0
  196. package/src/elements/EFMedia/tasks/makeMediaEngineTask.test.ts +233 -0
  197. package/src/elements/EFMedia/tasks/makeMediaEngineTask.ts +89 -0
  198. package/src/elements/EFMedia/videoTasks/makeVideoBufferTask.browsertest.ts +555 -0
  199. package/src/elements/EFMedia/videoTasks/makeVideoBufferTask.ts +79 -0
  200. package/src/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.browsertest.ts +59 -0
  201. package/src/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.ts +23 -0
  202. package/src/elements/EFMedia/videoTasks/makeVideoInputTask.browsertest.ts +55 -0
  203. package/src/elements/EFMedia/videoTasks/makeVideoInputTask.ts +45 -0
  204. package/src/elements/EFMedia/videoTasks/makeVideoSeekTask.ts +44 -0
  205. package/src/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.browsertest.ts +57 -0
  206. package/src/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.ts +32 -0
  207. package/src/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.browsertest.ts +56 -0
  208. package/src/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.ts +23 -0
  209. package/src/elements/EFMedia.browsertest.ts +696 -271
  210. package/src/elements/EFMedia.ts +218 -776
  211. package/src/elements/EFTemporal.browsertest.ts +0 -1
  212. package/src/elements/EFTemporal.ts +13 -3
  213. package/src/elements/EFTimegroup.browsertest.ts +6 -3
  214. package/src/elements/EFTimegroup.ts +221 -27
  215. package/src/elements/EFVideo.browsertest.ts +758 -0
  216. package/src/elements/EFVideo.ts +418 -68
  217. package/src/elements/EFWaveform.ts +5 -5
  218. package/src/elements/MediaController.ts +98 -0
  219. package/src/elements/SampleBuffer.ts +97 -0
  220. package/src/elements/printTaskStatus.ts +16 -0
  221. package/src/elements/updateAnimations.ts +6 -0
  222. package/src/gui/ContextMixin.ts +23 -104
  223. package/src/gui/TWMixin.ts +10 -3
  224. package/src/gui/services/ElementConnectionManager.browsertest.ts +263 -0
  225. package/src/gui/services/ElementConnectionManager.ts +224 -0
  226. package/src/gui/services/PlaybackController.browsertest.ts +437 -0
  227. package/src/gui/services/PlaybackController.ts +521 -0
  228. package/src/services/MediaSourceManager.ts +333 -0
  229. package/src/transcoding/cache/CacheManager.ts +208 -0
  230. package/src/transcoding/cache/RequestDeduplicator.test.ts +170 -0
  231. package/src/transcoding/cache/RequestDeduplicator.ts +65 -0
  232. package/src/transcoding/types/index.ts +265 -0
  233. package/src/transcoding/utils/MediaUtils.ts +63 -0
  234. package/src/transcoding/utils/UrlGenerator.ts +68 -0
  235. package/src/transcoding/utils/constants.ts +36 -0
  236. package/src/utils/LRUCache.ts +153 -0
  237. package/test/EFVideo.framegen.browsertest.ts +127 -0
  238. 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
  239. 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
  240. 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
  241. 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
  242. 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
  243. 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
  244. 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
  245. 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
  246. 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
  247. 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
  248. 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
  249. 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
  250. 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
  251. 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
  252. 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
  253. 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
  254. 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
  255. 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
  256. 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
  257. 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
  258. package/test/__cache__/GET__api_v1_transcode_manifest_json_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__3be92a0437de726b431ed5af2369158a/data.bin +1 -0
  259. package/test/__cache__/GET__api_v1_transcode_manifest_json_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__3be92a0437de726b431ed5af2369158a/metadata.json +19 -0
  260. package/test/createJitTestClips.ts +425 -0
  261. package/test/recordReplayProxyPlugin.js +302 -0
  262. package/test/useAssetMSW.ts +49 -0
  263. package/test/useMSW.ts +44 -0
  264. package/types.json +1 -1
  265. package/dist/gui/TWMixin.css.js +0 -4
  266. /package/dist/elements/{TargetController.test.d.ts → TargetController.browsertest.d.ts} +0 -0
  267. /package/src/elements/{TargetController.test.ts → TargetController.browsertest.ts} +0 -0
@@ -0,0 +1,60 @@
1
+ import { EF_INTERACTIVE } from "../../../EF_INTERACTIVE.js";
2
+ import { AssetMediaEngine } from "../AssetMediaEngine.js";
3
+ import { AssetIdMediaEngine } from "../AssetIdMediaEngine.js";
4
+ import { JitMediaEngine } from "../JitMediaEngine.js";
5
+ import { Task } from "@lit/task";
6
+ const getLatestMediaEngine = async (host, signal) => {
7
+ const mediaEngine = await host.mediaEngineTask.taskComplete;
8
+ signal.throwIfAborted();
9
+ if (!mediaEngine) throw new Error("Media engine is not available");
10
+ return mediaEngine;
11
+ };
12
+ const getVideoRendition = (mediaEngine) => {
13
+ const videoRendition = mediaEngine.videoRendition;
14
+ if (!videoRendition) throw new Error("Video rendition is not available");
15
+ return videoRendition;
16
+ };
17
+ /**
18
+ * Core logic for creating a MediaEngine with explicit dependencies.
19
+ * Pure function that requires all dependencies to be provided.
20
+ */
21
+ const createMediaEngine = (host) => {
22
+ const { src, assetId, urlGenerator, apiHost } = host;
23
+ if (assetId !== null && assetId !== void 0 && assetId.trim() !== "") {
24
+ if (!apiHost) return Promise.reject(/* @__PURE__ */ new Error("API host is required for AssetID mode"));
25
+ return AssetIdMediaEngine.fetchByAssetId(host, urlGenerator, assetId, apiHost);
26
+ }
27
+ if (!src || typeof src !== "string" || src.trim() === "") {
28
+ console.error(`Unsupported media source: ${src}, assetId: ${assetId}`);
29
+ return Promise.reject(/* @__PURE__ */ new Error("Unsupported media source"));
30
+ }
31
+ const lowerSrc = src.toLowerCase();
32
+ if (lowerSrc.startsWith("http://") || lowerSrc.startsWith("https://")) {
33
+ const url = urlGenerator.generateManifestUrl(src);
34
+ return JitMediaEngine.fetch(host, urlGenerator, url);
35
+ }
36
+ return AssetMediaEngine.fetch(host, urlGenerator, src);
37
+ };
38
+ /**
39
+ * Handle completion of media engine task - triggers necessary updates.
40
+ * Extracted for testability.
41
+ */
42
+ const handleMediaEngineComplete = (host) => {
43
+ host.requestUpdate("intrinsicDurationMs");
44
+ host.requestUpdate("ownCurrentTimeMs");
45
+ host.rootTimegroup?.requestUpdate("ownCurrentTimeMs");
46
+ host.rootTimegroup?.requestUpdate("durationMs");
47
+ };
48
+ const makeMediaEngineTask = (host) => {
49
+ return new Task(host, {
50
+ autoRun: EF_INTERACTIVE,
51
+ args: () => [host.src, host.assetId],
52
+ task: async () => {
53
+ return createMediaEngine(host);
54
+ },
55
+ onComplete: (_value) => {
56
+ handleMediaEngineComplete(host);
57
+ }
58
+ });
59
+ };
60
+ export { getLatestMediaEngine, getVideoRendition, makeMediaEngineTask };
@@ -0,0 +1,9 @@
1
+ import { EFVideo } from '../../EFVideo';
2
+ declare class TestMediaVideoBuffer extends EFVideo {
3
+ }
4
+ declare global {
5
+ interface HTMLElementTagNameMap {
6
+ "test-media-video-buffer": TestMediaVideoBuffer;
7
+ }
8
+ }
9
+ export {};
@@ -0,0 +1,16 @@
1
+ import { Task } from '@lit/task';
2
+ import { EFVideo } from '../../EFVideo';
3
+ import { MediaBufferConfig, MediaBufferState } from '../shared/BufferUtils';
4
+ /**
5
+ * Configuration for video buffering - extends the generic interface
6
+ */
7
+ export interface VideoBufferConfig extends MediaBufferConfig {
8
+ }
9
+ /**
10
+ * State of the video buffer - uses the generic interface
11
+ */
12
+ export interface VideoBufferState extends MediaBufferState {
13
+ }
14
+ type VideoBufferTask = Task<readonly [number], VideoBufferState>;
15
+ export declare const makeVideoBufferTask: (host: EFVideo) => VideoBufferTask;
16
+ export {};
@@ -0,0 +1,46 @@
1
+ import { EF_INTERACTIVE } from "../../../EF_INTERACTIVE.js";
2
+ import { EF_RENDERING } from "../../../EF_RENDERING.js";
3
+ import { manageMediaBuffer } from "../shared/BufferUtils.js";
4
+ import { getLatestMediaEngine, getVideoRendition } from "../tasks/makeMediaEngineTask.js";
5
+ import { Task } from "@lit/task";
6
+ const makeVideoBufferTask = (host) => {
7
+ let currentState = {
8
+ currentSeekTimeMs: 0,
9
+ activeRequests: /* @__PURE__ */ new Set(),
10
+ cachedSegments: /* @__PURE__ */ new Set(),
11
+ requestQueue: []
12
+ };
13
+ return new Task(host, {
14
+ autoRun: EF_INTERACTIVE,
15
+ args: () => [host.desiredSeekTimeMs],
16
+ onError: (error) => {
17
+ console.error("videoBufferTask error", error);
18
+ },
19
+ onComplete: (value) => {
20
+ currentState = value;
21
+ },
22
+ task: async ([seekTimeMs], { signal }) => {
23
+ const currentConfig = {
24
+ bufferDurationMs: host.videoBufferDurationMs,
25
+ maxParallelFetches: host.maxVideoBufferFetches,
26
+ enableBuffering: host.enableVideoBuffering && !EF_RENDERING
27
+ };
28
+ return manageMediaBuffer(seekTimeMs, currentConfig, currentState, host.intrinsicDurationMs || 1e4, signal, {
29
+ computeSegmentId: async (timeMs, rendition) => {
30
+ const mediaEngine = await getLatestMediaEngine(host, signal);
31
+ return mediaEngine.computeSegmentId(timeMs, rendition);
32
+ },
33
+ fetchSegment: async (segmentId, rendition) => {
34
+ const mediaEngine = await getLatestMediaEngine(host, signal);
35
+ return mediaEngine.fetchMediaSegment(segmentId, rendition);
36
+ },
37
+ getRendition: async () => {
38
+ const mediaEngine = await getLatestMediaEngine(host, signal);
39
+ return getVideoRendition(mediaEngine);
40
+ },
41
+ logError: console.error
42
+ });
43
+ }
44
+ });
45
+ };
46
+ export { makeVideoBufferTask };
@@ -0,0 +1,9 @@
1
+ import { EFVideo } from '../../EFVideo';
2
+ declare class TestMediaVideoInitSegmentFetch extends EFVideo {
3
+ }
4
+ declare global {
5
+ interface HTMLElementTagNameMap {
6
+ "test-media-video-init-segment-fetch": TestMediaVideoInitSegmentFetch;
7
+ }
8
+ }
9
+ export {};
@@ -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 makeVideoInitSegmentFetchTask: (host: EFVideo) => Task<readonly [MediaEngine | undefined], ArrayBuffer>;
@@ -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,9 @@
1
+ import { EFVideo } from '../../EFVideo';
2
+ declare class TestMediaVideoInput extends EFVideo {
3
+ }
4
+ declare global {
5
+ interface HTMLElementTagNameMap {
6
+ "test-media-video-input": TestMediaVideoInput;
7
+ }
8
+ }
9
+ export {};
@@ -0,0 +1,3 @@
1
+ import { EFVideo } from '../../EFVideo';
2
+ import { InputTask } from '../shared/MediaTaskUtils';
3
+ export declare const makeVideoInputTask: (host: EFVideo) => InputTask;
@@ -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,25 @@
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 (_) => {
12
+ await host.mediaEngineTask.taskComplete;
13
+ await host.videoSegmentIdTask.taskComplete;
14
+ await host.videoSegmentFetchTask.taskComplete;
15
+ await host.videoInitSegmentFetchTask.taskComplete;
16
+ const videoInput = await host.videoInputTask.taskComplete;
17
+ if (!videoInput) throw new Error("Video input is not available");
18
+ const videoTrack = await videoInput.getFirstVideoTrack();
19
+ if (!videoTrack) throw new Error("Video track is not available");
20
+ const sample = await videoInput.seek(videoTrack.id, host.desiredSeekTimeMs);
21
+ return sample;
22
+ }
23
+ });
24
+ };
25
+ export { makeVideoSeekTask };
@@ -0,0 +1,9 @@
1
+ import { EFVideo } from '../../EFVideo';
2
+ declare class TestMediaVideoSegmentFetch extends EFVideo {
3
+ }
4
+ declare global {
5
+ interface HTMLElementTagNameMap {
6
+ "test-media-video-segment-fetch": TestMediaVideoSegmentFetch;
7
+ }
8
+ }
9
+ export {};
@@ -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,18 @@
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) throw new Error("Segment ID is not available");
14
+ return mediaEngine.fetchMediaSegment(segmentId, mediaEngine.getVideoRendition(), signal);
15
+ }
16
+ });
17
+ };
18
+ export { makeVideoSegmentFetchTask };
@@ -0,0 +1,9 @@
1
+ import { EFVideo } from '../../EFVideo';
2
+ declare class TestMediaVideoSegment extends EFVideo {
3
+ }
4
+ declare global {
5
+ interface HTMLElementTagNameMap {
6
+ "test-media-video-segment": TestMediaVideoSegment;
7
+ }
8
+ }
9
+ export {};
@@ -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 makeVideoSegmentIdTask: (host: EFVideo) => Task<readonly [MediaEngine | undefined, number], number | undefined>;
@@ -0,0 +1,16 @@
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 (_, { signal }) => {
11
+ const mediaEngine = await getLatestMediaEngine(host, signal);
12
+ return mediaEngine.computeSegmentId(host.desiredSeekTimeMs, mediaEngine.getVideoRendition());
13
+ }
14
+ });
15
+ };
16
+ export { makeVideoSegmentIdTask };
@@ -1,5 +1,6 @@
1
1
  import { EFMedia } from './EFMedia.js';
2
2
  declare class TestMedia extends EFMedia {
3
+ static styles: import('lit').CSSResult[];
3
4
  }
4
5
  declare global {
5
6
  interface HTMLElementTagNameMap {
@@ -1,81 +1,110 @@
1
- import { Task } from '@lit/task';
2
1
  import { LitElement, PropertyValueMap } from 'lit';
3
- import { TrackFragmentIndex, TrackSegment } from '../../../assets/src/index.ts';
4
- import { VideoAsset } from '../../../assets/src/EncodedAsset.ts';
5
- import { MP4File } from '../../../assets/src/MP4File.ts';
6
- import type * as MP4Box from "mp4box";
2
+ import { AudioSpan } from '../transcoding/types/index.ts';
3
+ import { UrlGenerator } from '../transcoding/utils/UrlGenerator.ts';
4
+ declare global {
5
+ var EF_FRAMEGEN: import("../EF_FRAMEGEN.js").EFFramegen;
6
+ }
7
+ export declare class IgnorableError extends Error {
8
+ }
7
9
  export declare const deepGetMediaElements: (element: Element, medias?: EFMedia[]) => EFMedia[];
8
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;
9
11
  export declare class EFMedia extends EFMedia_base {
10
- #private;
12
+ static readonly VIDEO_SAMPLE_BUFFER_SIZE = 30;
13
+ static readonly AUDIO_SAMPLE_BUFFER_SIZE = 120;
14
+ static get observedAttributes(): string[];
15
+ private mediaSourceService;
16
+ private audioElementFactory;
11
17
  static styles: import('lit').CSSResult[];
12
18
  currentTimeMs: number;
19
+ /**
20
+ * Duration in milliseconds for audio buffering ahead of current time
21
+ * @domAttribute "audio-buffer-duration"
22
+ */
23
+ audioBufferDurationMs: number;
24
+ /**
25
+ * Maximum number of concurrent audio segment fetches for buffering
26
+ * @domAttribute "max-audio-buffer-fetches"
27
+ */
28
+ maxAudioBufferFetches: number;
29
+ /**
30
+ * Enable/disable audio buffering system
31
+ * @domAttribute "enable-audio-buffering"
32
+ */
33
+ enableAudioBuffering: boolean;
34
+ /**
35
+ * Mute/unmute the media element
36
+ * @domAttribute "mute"
37
+ */
38
+ mute: boolean;
39
+ /**
40
+ * FFT size for frequency analysis
41
+ * @domAttribute "fft-size"
42
+ */
43
+ fftSize: number;
44
+ /**
45
+ * FFT decay rate for frequency analysis
46
+ * @domAttribute "fft-decay"
47
+ */
48
+ fftDecay: number;
49
+ /**
50
+ * FFT gain for frequency analysis
51
+ * @domAttribute "fft-gain"
52
+ */
53
+ fftGain: number;
54
+ /**
55
+ * Enable/disable frequency interpolation
56
+ * @domAttribute "interpolate-frequencies"
57
+ */
58
+ interpolateFrequencies: boolean;
59
+ get FREQ_WEIGHTS(): Float32Array;
60
+ get shouldInterpolateFrequencies(): boolean;
61
+ get urlGenerator(): UrlGenerator;
62
+ mediaEngineTask: import('@lit/task').Task<readonly [string, string | null], import('../transcoding/types/index.ts').MediaEngine>;
63
+ audioSegmentIdTask: import('@lit/task').Task<readonly [import('../transcoding/types/index.ts').MediaEngine | undefined, number], number | undefined>;
64
+ audioInitSegmentFetchTask: import('@lit/task').Task<readonly [import('../transcoding/types/index.ts').MediaEngine | undefined], ArrayBuffer>;
65
+ audioSegmentFetchTask: import('@lit/task').Task<readonly [import('../transcoding/types/index.ts').MediaEngine | undefined, number | undefined], ArrayBuffer>;
66
+ audioInputTask: import('./EFMedia/shared/MediaTaskUtils.ts').InputTask;
67
+ audioSeekTask: import('@lit/task').Task<readonly [number, import('./EFMedia/BufferedSeekingInput.ts').BufferedSeekingInput | undefined], import('mediabunny').VideoSample | undefined>;
68
+ audioBufferTask: import('@lit/task').Task<readonly [number], import('./EFMedia/audioTasks/makeAudioBufferTask.ts').AudioBufferState>;
69
+ byteTimeDomainTask: import('@lit/task').Task<readonly [import('@lit/task').TaskStatus, number, number, number, number, boolean], Uint8Array | null>;
70
+ frequencyDataTask: import('@lit/task').Task<readonly [import('@lit/task').TaskStatus, number, number, number, number, boolean], Uint8Array | null>;
13
71
  /**
14
72
  * The unique identifier for the media asset.
15
73
  * This property can be set programmatically or via the "asset-id" attribute.
16
74
  * @domAttribute "asset-id"
17
75
  */
18
- set assetId(value: string | null);
19
- get assetId(): string | null;
20
- fragmentIndexPath(): string;
21
- fragmentTrackPath(trackId: string): string;
22
- trackFragmentIndexLoader: Task<readonly [string, typeof fetch], Record<number, TrackFragmentIndex> | undefined>;
23
- initSegmentsLoader: Task<readonly [Record<number, TrackFragmentIndex> | undefined, string, typeof fetch], {
24
- trackId: string;
25
- buffer: MP4Box.MP4ArrayBuffer;
26
- mp4File: MP4File;
27
- }[] | undefined>;
28
- get defaultVideoTrackId(): number | undefined;
29
- get defaultAudioTrackId(): number | undefined;
30
- seekTask: Task<readonly [number, Record<number, TrackFragmentIndex> | undefined, {
31
- trackId: string;
32
- buffer: MP4Box.MP4ArrayBuffer;
33
- mp4File: MP4File;
34
- }[] | undefined], Record<string, {
35
- segment: TrackSegment;
36
- track: MP4Box.TrackInfo;
37
- nextSegment?: TrackSegment;
38
- }> | undefined>;
39
- fetchSeekTask: Task<readonly [{
40
- trackId: string;
41
- buffer: MP4Box.MP4ArrayBuffer;
42
- mp4File: MP4File;
43
- }[] | undefined, Record<string, {
44
- segment: TrackSegment;
45
- track: MP4Box.TrackInfo;
46
- nextSegment?: TrackSegment;
47
- }> | undefined, typeof fetch], Record<string, File> | undefined>;
48
- videoAssetTask: Task<readonly [Record<string, File> | undefined], VideoAsset | undefined>;
49
- desiredSeekTimeMs: number;
50
- protected executeSeek(seekToMs: number): Promise<void>;
76
+ assetId: string | null;
77
+ get intrinsicDurationMs(): number;
51
78
  protected updated(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
52
79
  get hasOwnDuration(): boolean;
53
- get intrinsicDurationMs(): number;
54
- audioBufferTask: Task<readonly [Record<string, File> | undefined, Record<string, {
55
- segment: TrackSegment;
56
- track: MP4Box.TrackInfo;
57
- nextSegment?: TrackSegment;
58
- }> | undefined], {
59
- buffer: AudioBuffer;
60
- startOffsetMs: number;
61
- } | undefined>;
62
- fetchAudioSpanningTime(fromMs: number, toMs: number): Promise<{
63
- blob: Blob;
64
- startMs: number;
65
- endMs: number;
66
- } | undefined>;
67
- set fftSize(value: number);
68
- set fftDecay(value: number);
69
- get fftSize(): number;
70
- get fftDecay(): number;
71
- set interpolateFrequencies(value: boolean);
72
- get interpolateFrequencies(): boolean;
73
- get shouldInterpolateFrequencies(): boolean;
74
- private static readonly DECAY_WEIGHT;
75
- get FREQ_WEIGHTS(): Float32Array;
76
- byteTimeDomainTask: Task<readonly [import('@lit/task').TaskStatus, number, number, number, number, boolean], Uint8Array | null>;
77
- frequencyDataTask: Task<readonly [import('@lit/task').TaskStatus, number, number, number, number, boolean], Uint8Array | null>;
78
- set fftGain(value: number);
79
- get fftGain(): number;
80
+ private _desiredSeekTimeMs;
81
+ get desiredSeekTimeMs(): number;
82
+ set desiredSeekTimeMs(value: number);
83
+ protected executeSeek(seekToMs: number): Promise<void>;
84
+ /**
85
+ * Main integration method for EFTimegroup audio playback
86
+ * Now powered by clean, testable utility functions
87
+ */
88
+ fetchAudioSpanningTime(fromMs: number, toMs: number, signal?: AbortSignal): Promise<AudioSpan>;
89
+ /**
90
+ * Get the HTML audio element for ContextMixin integration
91
+ */
92
+ get audioElement(): HTMLAudioElement | null;
93
+ /**
94
+ * Check if an audio segment is cached in the unified buffer system
95
+ * Now uses the same caching approach as video for consistency
96
+ */
97
+ getCachedAudioSegment(segmentId: number): boolean;
98
+ /**
99
+ * Get cached audio segments from the unified buffer system
100
+ * Now uses the same caching approach as video for consistency
101
+ */
102
+ getCachedAudioSegments(segmentIds: number[]): Set<number>;
103
+ /**
104
+ * Get MediaElementAudioSourceNode for ContextMixin integration
105
+ * Uses AudioElementFactory for proper caching and lifecycle management
106
+ */
107
+ getMediaElementSource(audioContext: AudioContext): Promise<MediaElementAudioSourceNode>;
108
+ disconnectedCallback(): void;
80
109
  }
81
110
  export {};