Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix live startup failures when play happens before playlist is downloaded #700

Merged
merged 3 commits into from
Jan 10, 2020

Conversation

gesinger
Copy link
Contributor

When joining a live stream, VHS starts playback at a time of 0,
regardless of how long the stream has been playing. This means that the
playlist will start with sync info of time 0 for the first media index.

However, if the stream "played" (either via API, autoplay, etc.) before
a playlist was downloaded, then after the playlist downloaded the
loader would reset the sync info, erasing the assumed time 0 for first
media index, and the player would request segments ad infinitum, never
able to place them in the timeline and get a new sync point.

This separates the notion of played between play initiation and playback
of content (progress on the timeline), in order to ensure that the
initial sync info is maintained.

This continues the work done by @gkatsev in #496

Requirements Checklist

  • Feature implemented / Bug fixed
  • If necessary, more likely in a feature request than a bug fix
  • Reviewed by Two Core Contributors

…aded

When joining a live stream, VHS starts playback at a time of 0,
regardless of how long the stream has been playing. This means that the
playlist will start with sync info of time 0 for the first media index.

However, if the stream "played" (either via API, autoplay, etc.) before
a playlist was downloaded, then after the playlist downloaded the
loader would reset the sync info, erasing the assumed time 0 for first
media index, and the player would request segments ad infinitum, never
able to place them in the timeline and get a new sync point.

This separates the notion of played between play initiation and playback
of content (progress on the timeline), in order to ensure that the
initial sync info is maintained.
While using hasPlayedContent helped to alleviate most issues around
when to update the sync info in segment loader when updating a live
playlist, there still remained potential issues when a segment was
requested and the sync info was changed for the in-flight segment.

This change uses the segment loader's INIT state to determine if the
sync info should be updated, meaning in-flight segment requests keep
their sync info fixed.
@gkatsev gkatsev added the tested label Jan 10, 2020
@gkatsev gkatsev merged commit 92c93a7 into videojs:1.x Jan 10, 2020
@gkatsev
Copy link
Member

gkatsev commented Jan 10, 2020

@gesinger can you make a matching PR against master if it's applicable there still?

gesinger added a commit to gesinger/http-streaming that referenced this pull request Jan 10, 2020
…oaded (videojs#700 from 1.x)

When joining a live stream, VHS starts playback at a time of 0,
regardless of how long the stream has been playing. This means that the
playlist will start with sync info of time 0 for the first media index.

However, if the stream "played" (either via API, autoplay, etc.) before
a playlist was downloaded, then after the playlist downloaded the
loader would reset the sync info, erasing the assumed time 0 for first
media index, and the player would request segments ad infinitum, never
able to place them in the timeline and get a new sync point.

This separates the notion of played between play initiation and playback
of content (progress on the timeline), in order to ensure that the
initial sync info is maintained.

* Use segment loader's state to determine when to update sync info

While using hasPlayedContent helped to alleviate most issues around
when to update the sync info in segment loader when updating a live
playlist, there still remained potential issues when a segment was
requested and the sync info was changed for the in-flight segment.

This change uses the segment loader's INIT state to determine if the
sync info should be updated, meaning in-flight segment requests keep
their sync info fixed.
gesinger added a commit that referenced this pull request Jan 10, 2020
…oaded (#700 from 1.x) (#711)

When joining a live stream, VHS starts playback at a time of 0,
regardless of how long the stream has been playing. This means that the
playlist will start with sync info of time 0 for the first media index.

However, if the stream "played" (either via API, autoplay, etc.) before
a playlist was downloaded, then after the playlist downloaded the
loader would reset the sync info, erasing the assumed time 0 for first
media index, and the player would request segments ad infinitum, never
able to place them in the timeline and get a new sync point.

This separates the notion of played between play initiation and playback
of content (progress on the timeline), in order to ensure that the
initial sync info is maintained.

* Use segment loader's state to determine when to update sync info

While using hasPlayedContent helped to alleviate most issues around
when to update the sync info in segment loader when updating a live
playlist, there still remained potential issues when a segment was
requested and the sync info was changed for the in-flight segment.

This change uses the segment loader's INIT state to determine if the
sync info should be updated, meaning in-flight segment requests keep
their sync info fixed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants