diff --git a/web/src/components/player/dynamic/DynamicVideoController.ts b/web/src/components/player/dynamic/DynamicVideoController.ts index c6771a11c..d30976447 100644 --- a/web/src/components/player/dynamic/DynamicVideoController.ts +++ b/web/src/components/player/dynamic/DynamicVideoController.ts @@ -81,14 +81,27 @@ export class DynamicVideoController { this.playerController.currentTime = seekSeconds; if (play) { - // use timeout to avoid race condition with other data loading - setTimeout(() => this.playerController.play()), 1; + this.waitAndPlay(); } else { this.playerController.pause(); } } } + waitAndPlay() { + return new Promise((resolve) => { + const onSeekedHandler = () => { + this.playerController.removeEventListener("seeked", onSeekedHandler); + this.playerController.play(); + resolve(undefined); + }; + + this.playerController.addEventListener("seeked", onSeekedHandler, { + once: true, + }); + }); + } + seekToTimelineItem(timeline: Timeline) { this.playerController.pause(); this.seekToTimestamp(timeline.timestamp + this.annotationOffset);