fix: play from the playhead, not currentTime (iOS deep-link seek)
On iOS the element doesn't load (so a deep-linked pre-seek doesn't stick) until the user's first tap, so engage-play! read currentTime=0 and played from the top. Seek to the playhead inside the play gesture and drive from there; for normal pause/resume the playhead already equals currentTime, so it's a no-op. Drops now-unused seg-at-src. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
28aa2622f6
commit
5c58af9036
1 changed files with 9 additions and 11 deletions
|
|
@ -105,16 +105,6 @@
|
|||
segs))
|
||||
(max 0 (dec (count segs)))))
|
||||
|
||||
(defn- seg-at-src
|
||||
"Index of the segment whose SOURCE range contains source frame `sf` (0 if none)."
|
||||
[segs sf]
|
||||
(or (first (keep-indexed (fn [i {[a b] :src}]
|
||||
(when (or (and (<= a sf) (< sf b))
|
||||
(< sf a))
|
||||
i))
|
||||
segs))
|
||||
(max 0 (dec (count segs)))))
|
||||
|
||||
;; The <video> element is the source of truth for play/pause. Its :on-play /
|
||||
;; :on-pause (below) engage/disengage this segment-aware tick, so the native
|
||||
;; controls and the toolbar button behave identically. `play` holds the frozen
|
||||
|
|
@ -164,7 +154,15 @@
|
|||
(rf/dispatch [::events/set-playhead ctx 0])
|
||||
(seek-video! fps s0)
|
||||
(reset! play {:ctx ctx :segs segs :fps fps :idx 0 :pending-ns s0}))
|
||||
(reset! play {:ctx ctx :segs segs :fps fps :idx (seg-at-src segs (* (.-currentTime v) fps))}))
|
||||
;; Start from the PLAYHEAD, not currentTime: on iOS a deep-linked pre-seek
|
||||
;; often hasn't stuck (the element doesn't load until this very tap), so
|
||||
;; currentTime is still 0 and playback would start from the top. Re-seek
|
||||
;; here — inside the user gesture, where it's reliable — and drive from the
|
||||
;; playhead. For ordinary pause/resume the playhead already equals
|
||||
;; currentTime, so this seeks to the same spot (a no-op).
|
||||
(let [src (scene/local->source segs ph)]
|
||||
(seek-video! fps src)
|
||||
(reset! play {:ctx ctx :segs segs :fps fps :idx (seg-at segs ph) :pending-ns src})))
|
||||
(rf/dispatch [::events/set-playing true])
|
||||
(reset! raf (js/requestAnimationFrame play-tick)))))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue