Improve handling of consecutive empty ad groups
Issue: #4030 Issue: #4280 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=208055792
This commit is contained in:
parent
4d6d7903e0
commit
5a8af74b4b
@ -97,6 +97,9 @@
|
|||||||
([#4583](https://github.com/google/ExoPlayer/issues/4583)).
|
([#4583](https://github.com/google/ExoPlayer/issues/4583)).
|
||||||
* Add `DataSpec.httpMethod` and update `HttpDataSource` implementations to
|
* Add `DataSpec.httpMethod` and update `HttpDataSource` implementations to
|
||||||
support HTTP HEAD method. Previously, only GET and POST were supported.
|
support HTTP HEAD method. Previously, only GET and POST were supported.
|
||||||
|
* IMA: Improve handling of consecutive empty ad groups
|
||||||
|
([#4030](https://github.com/google/ExoPlayer/issues/4030)),
|
||||||
|
([#4280](https://github.com/google/ExoPlayer/issues/4280)).
|
||||||
|
|
||||||
### 2.8.3 ###
|
### 2.8.3 ###
|
||||||
|
|
||||||
|
@ -631,8 +631,11 @@ public final class ImaAdsLoader
|
|||||||
} else if (fakeContentProgressElapsedRealtimeMs != C.TIME_UNSET) {
|
} else if (fakeContentProgressElapsedRealtimeMs != C.TIME_UNSET) {
|
||||||
long elapsedSinceEndMs = SystemClock.elapsedRealtime() - fakeContentProgressElapsedRealtimeMs;
|
long elapsedSinceEndMs = SystemClock.elapsedRealtime() - fakeContentProgressElapsedRealtimeMs;
|
||||||
contentPositionMs = fakeContentProgressOffsetMs + elapsedSinceEndMs;
|
contentPositionMs = fakeContentProgressOffsetMs + elapsedSinceEndMs;
|
||||||
expectedAdGroupIndex =
|
int adGroupIndexForPosition =
|
||||||
adPlaybackState.getAdGroupIndexForPositionUs(C.msToUs(contentPositionMs));
|
adPlaybackState.getAdGroupIndexForPositionUs(C.msToUs(contentPositionMs));
|
||||||
|
if (adGroupIndexForPosition != C.INDEX_UNSET) {
|
||||||
|
expectedAdGroupIndex = adGroupIndexForPosition;
|
||||||
|
}
|
||||||
} else if (imaAdState == IMA_AD_STATE_NONE && !playingAd && hasContentDuration) {
|
} else if (imaAdState == IMA_AD_STATE_NONE && !playingAd && hasContentDuration) {
|
||||||
contentPositionMs = player.getCurrentPosition();
|
contentPositionMs = player.getCurrentPosition();
|
||||||
// Update the expected ad group index for the current content position. The update is delayed
|
// Update the expected ad group index for the current content position. The update is delayed
|
||||||
@ -1124,6 +1127,16 @@ public final class ImaAdsLoader
|
|||||||
if (pendingAdLoadError == null) {
|
if (pendingAdLoadError == null) {
|
||||||
pendingAdLoadError = AdLoadException.createForAdGroup(error, adGroupIndex);
|
pendingAdLoadError = AdLoadException.createForAdGroup(error, adGroupIndex);
|
||||||
}
|
}
|
||||||
|
// Discard the ad break, which makes sure we don't receive duplicate load error events.
|
||||||
|
adsManager.discardAdBreak();
|
||||||
|
// Set the next expected ad group index so we can handle multiple load errors in a row.
|
||||||
|
adGroupIndex++;
|
||||||
|
if (adGroupIndex < adPlaybackState.adGroupCount) {
|
||||||
|
expectedAdGroupIndex = adGroupIndex;
|
||||||
|
} else {
|
||||||
|
expectedAdGroupIndex = C.INDEX_UNSET;
|
||||||
|
}
|
||||||
|
pendingContentPositionMs = C.TIME_UNSET;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleAdPrepareError(int adGroupIndex, int adIndexInAdGroup, Exception exception) {
|
private void handleAdPrepareError(int adGroupIndex, int adIndexInAdGroup, Exception exception) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user