mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-09-26 05:18:58 +03:00
Backport 0.19 iOS HLS fixes (#24147)
CI / AMD64 Build (push) Canceled after 0s
CI / ARM Build (push) Canceled after 0s
CI / Jetson Jetpack 6 (push) Canceled after 0s
CI / AMD64 Extra Build (push) Canceled after 0s
CI / ARM Extra Build (push) Canceled after 0s
CI / Synaptics Build (push) Canceled after 0s
CI / Assemble and push default build (push) Canceled after 0s
CI / AMD64 Build (push) Canceled after 0s
CI / ARM Build (push) Canceled after 0s
CI / Jetson Jetpack 6 (push) Canceled after 0s
CI / AMD64 Extra Build (push) Canceled after 0s
CI / ARM Extra Build (push) Canceled after 0s
CI / Synaptics Build (push) Canceled after 0s
CI / Assemble and push default build (push) Canceled after 0s
This commit is contained in:
@@ -10,6 +10,10 @@ import { playWithTemporaryMuteFallback } from "@/utils/videoUtil.ts";
|
||||
|
||||
type PlayerMode = "playback" | "scrubbing";
|
||||
|
||||
// how long a seek may wait for its `seeked` event before playback starts
|
||||
// anyway; long enough that a normally completing seek always wins
|
||||
const SEEK_PLAY_FALLBACK_MS = 1000;
|
||||
|
||||
export class DynamicVideoController {
|
||||
// main state
|
||||
public camera = "";
|
||||
@@ -106,7 +110,10 @@ export class DynamicVideoController {
|
||||
|
||||
waitAndPlay() {
|
||||
return new Promise((resolve) => {
|
||||
let fallback: NodeJS.Timeout | undefined;
|
||||
|
||||
const onSeekedHandler = () => {
|
||||
clearTimeout(fallback);
|
||||
this.playerController.removeEventListener("seeked", onSeekedHandler);
|
||||
playWithTemporaryMuteFallback(this.playerController);
|
||||
resolve(undefined);
|
||||
@@ -115,6 +122,12 @@ export class DynamicVideoController {
|
||||
this.playerController.addEventListener("seeked", onSeekedHandler, {
|
||||
once: true,
|
||||
});
|
||||
|
||||
// iOS ManagedMediaSource pauses hls.js buffering, so `seeked` may
|
||||
// never fire; playing is what prompts WebKit to resume streaming
|
||||
if ("ManagedMediaSource" in window) {
|
||||
fallback = setTimeout(onSeekedHandler, SEEK_PLAY_FALLBACK_MS);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user