Fix skip buttons missing for MP4 sources with empty seekable range - #119
Merged
Conversation
Show skip buttons for sources with empty seekable range SkipButton hid itself whenever player.seekable was empty. For progressive sources such as MP4 (especially with preload 'none'/'metadata'), the seekable range stays empty even once a finite duration is known, so the forward/backward skip buttons never appeared. Mirror the SeekBar fallback: treat the media as seekable when there is a seekable range OR a finite, positive duration is known. Kept inline rather than extracted into a shared hook to keep the change minimal.
🦋 Changeset detectedLatest commit: e386fd7 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
francescopuglisi-dolby
requested review from
MattiasBuelens,
tvanlaerhoven and
wvanhaevre
July 13, 2026 10:38
MattiasBuelens
approved these changes
Jul 13, 2026
GillesMoris-Dolby
approved these changes
Jul 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Skip (forward/backward) buttons were not rendered for progressive MP4 sources, even though the content is seekable and the seek bar works. This was most visible with preload: 'none'/'metadata'.
Root cause
SkipButtongated its visibility on the player's seekable range:For progressive MP4,
player.seekablelegitimately stays empty until data is buffered (unlike HLS/DASH, where the manifest populates it immediately), even after a finite duration is known. As a result the buttons never appeared, despite the media being seekable — the same situation SeekBar already handles via a duration fallback.Fix
Treat the media as seekable when there is a seekable range or when a finite, positive duration is known — mirroring
SeekBar's existing fallback:Live/unbounded streams report duration === Infinity, so the isFinite guard keeps them correctly excluded.
Kept inline (rather than extracted into a shared hook) to keep the change minimal; centralizing the shared "effective seekability" logic with SeekBar is a possible follow-up.
Testing
Reproduced with the ticket's MP4 source (poster + sideloaded subtitles, preload: 'none', no autoplay) in the example app on iOS.
App.tsx
Before
Skip buttons absent.
Before.mov
After
Skip buttons visible and functional once duration is known.
After.mov