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

Low latency improvements #2813

Conversation

epiclabsDASH
Copy link
Contributor

@epiclabsDASH epiclabsDASH commented Oct 15, 2018

Set of improvements for low latency mode:

  • Implemented a new rate control mechanism similar to what was described in Enable synchronization through tighter rate control #2693. This enables playback synchronization across different clients.
  • Rate control adaptations to overcome Safari limitations. Due to the way playbackRate works in Safari (stalls when playbackRate changes and the stream has an audio track), our rate control mechanism take this into account and when using Safari it increases the minimum acceptable playbackRate change.
  • A new control mechanism has been added to dash.js to better recover from rebuffering situations when in low latency mode.
  • Three new config methods added to control the new rate control mechanism:
    • setCatchupPlaybackRate - Sets the maximum playback rate variation (from 0-0.5 and with respect to playback rate 1.0) allowed to reach target latency. 0 means catchup mechanism will be deactivated.
    • setLowLatencyMinDrift - Sets the minimum latency deviation allowed before activating catch-up mechanism.
    • setLowLatencyMaxDriftBeforeSeeking - Sets the maximum latency deviation allowed before dash.js does a seeking to live position.
  • Fixed compatibility issues with Safari and Firefox (Live low latency stream not playing correctly on Safari or Firefox #2796). There are some differences in the way timing is reported in Chrome vs Firefox/Safari which caused playback stall problems when working with low latency streams.
  • Take into consideration client/server time differences for calculating latency.
  • Fixed buffer/latency stability issues.

I also changed the way the graph of dash.js reference player is plotted. For time variable now it uses time since start of the playback instead of using the playback time reported by the player, which caused weird curves mainly when there were seeking operations.

Still I am testing this PR exhaustively but wanted to create it to make it available to anyone interested on testing low latency stuff.

Any feedback is more than welcome!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants