fix: run callbacks after setting timestampOffset #480
Merged
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.
Description
Long story short, I hit a condition where non-muxed HLS wouldn't start playing sometimes. This is because it's possible to end up in a condition where one
SourceUpdater
gets both atimestampOffset
and anappendBuffer
call before the otherSourceBuffer
is added to theMediaSource
. SincetimestampOffset
queues a callback, but does not trigger anupdateend
on theSourceBuffer
, the already-queuedappendBuffer
call is never processed, and thus aSegmentLoader
ends up waiting forever.For easy reproduction of the problem, you can simply delay the creation of the audio
SourceBuffer
, like so:Specific Changes proposed
Simply call
this.runCallback_()
in the queued callback so that any other queued callbacks are run. I'm not sure if this is bad form; perhapsthis.runCallback_()
should be inside asetTimeout()
?Note: I'm adding the fix on a separate commit so you can see the change from fail -> pass.
Requirements Checklist