From 14cce7f9d103e5524c1a9a24d71ae2a2d9a4e9bb Mon Sep 17 00:00:00 2001 From: Reshma-JO07 Date: Fri, 10 Jul 2026 08:55:29 +0000 Subject: [PATCH] VPAAMP-602: LLD video freeze Reason for change: Rampdown when curl 56 occurs Test Procedure: updated in ticket Risks: Medium Signed-off-by: Reshma-JO07 --- MediaStreamContext.cpp | 9 ++++++++- priv_aamp.cpp | 23 ++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/MediaStreamContext.cpp b/MediaStreamContext.cpp index 476920dcbe..ee0b2a7e6e 100644 --- a/MediaStreamContext.cpp +++ b/MediaStreamContext.cpp @@ -985,7 +985,14 @@ void MediaStreamContext::OnFragmentDownloadFailed(DownloadInfoPtr dlInfo) } else { - AAMPLOG_WARN("%s StreamAbstractionAAMP_MPD::Already at the lowest profile, skipping segment at pos:%lf dur:%lf disc:%d", name, dlInfo->pts, dlInfo->fragmentDurationSec, dlInfo->isDiscontinuity); + if (context->IsCurrentProfileLowest()) + { + AAMPLOG_WARN("%s StreamAbstractionAAMP_MPD::Already at the lowest profile, skipping segment at pos:%lf dur:%lf disc:%d", name, dlInfo->pts, dlInfo->fragmentDurationSec, dlInfo->isDiscontinuity); + } + else + { + AAMPLOG_WARN("%s StreamAbstractionAAMP_MPD::Rampdown not applied for error:%d; skipping segment at pos:%lf dur:%lf disc:%d", name, httpErrorCode, dlInfo->pts, dlInfo->fragmentDurationSec, dlInfo->isDiscontinuity); + } if (!dlInfo->isInitSegment) updateSkipPoint((dlInfo->pts + dlInfo->fragmentDurationSec), dlInfo->fragmentDurationSec); auto timeBasedBufferManager = GetTimeBasedBufferManager(); diff --git a/priv_aamp.cpp b/priv_aamp.cpp index 2e986f39c1..2e0ee897d7 100644 --- a/priv_aamp.cpp +++ b/priv_aamp.cpp @@ -4805,6 +4805,7 @@ bool PrivateInstanceAAMP::GetFile( std::string remoteUrl, AampMediaType mediaTyp downloadTimeMS = (int)(tEndTime - tStartTime); bool loopAgain = false; + bool isSingleRetryCurlError = false; if (res == CURLE_OK) { // all data collected if( memcmp(remoteUrl.c_str(), "file:", 5) == 0 ) @@ -4990,10 +4991,17 @@ bool PrivateInstanceAAMP::GetFile( std::string remoteUrl, AampMediaType mediaTyp print_headerResponse(context.allResponseHeaders, mediaType); } + isSingleRetryCurlError = + (res == CURLE_COULDNT_RESOLVE_HOST) || + (res == CURLE_RECV_ERROR) || + (res == CURLE_PARTIAL_FILE) || + (res == CURLE_OPERATION_TIMEDOUT); + if (res == CURLE_COULDNT_CONNECT || IsCurlTimeoutFailure(res) || (isDownloadStalled && (eCURL_ABORT_REASON_LOW_BANDWIDTH_TIMEDOUT != abortReason)) || - res == CURLE_SEND_ERROR) + res == CURLE_SEND_ERROR || + isSingleRetryCurlError) { if(mpStreamAbstractionAAMP) @@ -5057,6 +5065,11 @@ bool PrivateInstanceAAMP::GetFile( std::string remoteUrl, AampMediaType mediaTyp break; } } + if (isSingleRetryCurlError && downloadAttempt >= 2) + { + loopAgain = false; + } + AAMPLOG_WARN("Download failed due to curl error %d or isDownloadStalled:%d Retrying:%d Attempt:%d abortReason:%d", res, isDownloadStalled, loopAgain && (downloadAttempt < maxDownloadAttempt), downloadAttempt, abortReason); } @@ -5204,6 +5217,14 @@ bool PrivateInstanceAAMP::GetFile( std::string remoteUrl, AampMediaType mediaTyp } } + if (loopAgain && (downloadAttempt < maxDownloadAttempt)) + { + if (isSingleRetryCurlError) + { + interruptibleMsSleep(200); + } + } + if(!loopAgain) break; }