VPAAMP-667: Live-edge ABR ramp-up bypass for buffer-deadlock recovery#1706
Open
pstroffolino wants to merge 1 commit into
Open
VPAAMP-667: Live-edge ABR ramp-up bypass for buffer-deadlock recovery#1706pstroffolino wants to merge 1 commit into
pstroffolino wants to merge 1 commit into
Conversation
Add an else-if branch in GetDesiredProfileOnSteadyState() that allows ABR ramp-up when the player is at the live point and the buffer is in the deadlock band (above mABRMinBuffer but at or below mABRMaxBuffer). Previously, after curl timeouts dropped the profile to index 0, the buffer would stabilise at ~6-9s during standard-latency live. The live edge means downloads arrive at approximately the same rate they are consumed, so the buffer could never grow above the 10s mABRMaxBuffer gate required for ramp-up. For LLDASH the same structural deadlock exists because the steady-state ramp-up path is skipped by the !lowLatencyMode guard. The new branch uses the same patience counter (mABRHighBufferCounter / mMaxBufferCountCheck) and the same CheckRampupFromSteadyState 30% headroom rule as the existing high-buffer path. VOD playback is unaffected (mIsAtLivePoint == false). Both LLDASH and standard-latency live benefit. Unit tests: 7 new test cases covering the bypass firing in the deadlock band, LLDASH deadlock band, patience counter, counter reset on ramp-down, and negative cases (not at live point, buffer below min, buffer above max). Test infrastructure: FakeABR.cpp getRampedUpProfileIndex and CheckRampupFromSteadyState now delegate to g_mockABRManager when available. MockABRManager.h gains a CheckRampupFromSteadyState mock.
pstroffolino
force-pushed
the
feature/VPAAMP-667
branch
from
July 8, 2026 20:49
8f24da2 to
03042bc
Compare
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.
Add an else-if branch in GetDesiredProfileOnSteadyState() that allows ABR ramp-up when the player is at the live point and the buffer is in the deadlock band (above mABRMinBuffer but at or below mABRMaxBuffer).
Previously, after curl timeouts dropped the profile to index 0, the buffer would stabilise at ~6-9s during standard-latency live. The live edge means downloads arrive at approximately the same rate they are consumed, so the buffer could never grow above the 10s mABRMaxBuffer gate required for ramp-up. For LLDASH the same structural deadlock exists because the steady-state ramp-up path is skipped by the !lowLatencyMode guard.
The new branch uses the same patience counter (mABRHighBufferCounter / mMaxBufferCountCheck) and the same CheckRampupFromSteadyState 30% headroom rule as the existing high-buffer path. VOD playback is unaffected (mIsAtLivePoint == false). Both LLDASH and standard-latency live benefit.
Unit tests: 7 new test cases covering the bypass firing in the deadlock band, LLDASH deadlock band, patience counter, counter reset on ramp-down, and negative cases (not at live point, buffer below min, buffer above max).
Test infrastructure: FakeABR.cpp getRampedUpProfileIndex and CheckRampupFromSteadyState now delegate to g_mockABRManager when available. MockABRManager.h gains a CheckRampupFromSteadyState mock.