feat(ABR): Add BufferBasedAbrManager for low-latency live streams#9896
feat(ABR): Add BufferBasedAbrManager for low-latency live streams#9896erikherz wants to merge 5 commits into
Conversation
More types of messages are now supported than before. SubscribeError handling has been improved. A new error has been added when no catalog.
A buffer-based ABR manager designed for low-latency live streams
(MoQ/MSF) where bandwidth estimation is unreliable due to small
segment sizes and push-based delivery via WebTransport.
Instead of estimating bandwidth from segment downloads, this manager
monitors buffer health relative to the stream's target latency:
- Down-switch: immediate when buffer < 30% of target latency or
when dropped frames exceed threshold
- Up-switch: requires 5s of sustained buffer > 150% of target latency
- Quality ladder built from variants sorted by resolution
Usage:
player.configure({
abrFactory: () => new shaka.abr.BufferBasedAbrManager(),
});
Related to shaka-project#9872
|
Thank you,@erikherz! Glad to see some activity around LL ABR. Shall we mark this as a draft for the sake of reference? I'm not entirely sure we'd want to ship a secondary ABR impl for the sake of LL, but EWMA is definitely lacking. I also suspect buffer health is a useful metric unrelated to MSF or even LL but that's an unproven theory. Hope to hear some opinions, @joeyparrish @avelad @tykus160? |
|
I haven't reviewed the implementation yet, but I would be in favor of including this as an option. (Assuming it's not a large change to the size of Shaka Player.) @erikherz, you have a linter failure preventing other CI workflows from running, including the size analysis. |
|
|
I think it would be good if this were only included in the experimental build. |
|
Closing due to inactivity. If the author would like to continue this PR, they can reopen it (preferred) or start a new one (if needed). |
Summary
A buffer-based ABR manager for low-latency live streams (MoQ/MSF) where bandwidth estimation is unreliable due to small segment sizes and push-based delivery via WebTransport.
Instead of estimating bandwidth from segment downloads, this manager monitors buffer health relative to the stream's target latency.
How it works
Usage
Files
lib/abr/buffer_based_abr_manager.jsshaka.extern.AbrManagerbuild/types/coreTest plan
Related to #9872
Author: erik@vivoh.com