Handle VAST_LINEAR_ASSET_MISMATCH

This error marks the current ad group as unplayable.

Issue: #3801

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185663472
This commit is contained in:
andrewlewis 2018-02-14 03:13:09 -08:00 committed by Oliver Woodman
parent 09de29d534
commit 43cfb08207
2 changed files with 13 additions and 1 deletions

View File

@ -85,6 +85,8 @@
([#3584](https://github.com/google/ExoPlayer/issues/3584)). ([#3584](https://github.com/google/ExoPlayer/issues/3584)).
* Work around loadAd not being called beore the LOADED AdEvent arrives * Work around loadAd not being called beore the LOADED AdEvent arrives
([#3552](https://github.com/google/ExoPlayer/issues/3552)). ([#3552](https://github.com/google/ExoPlayer/issues/3552)).
* Handle asset mismatch errors
([#3801](https://github.com/google/ExoPlayer/issues/3801)).
* Add support for playing non-Extractor content MediaSources in * Add support for playing non-Extractor content MediaSources in
the IMA demo app the IMA demo app
([#3676](https://github.com/google/ExoPlayer/issues/3676)). ([#3676](https://github.com/google/ExoPlayer/issues/3676)).

View File

@ -25,6 +25,8 @@ import android.view.ViewGroup;
import android.webkit.WebView; import android.webkit.WebView;
import com.google.ads.interactivemedia.v3.api.Ad; import com.google.ads.interactivemedia.v3.api.Ad;
import com.google.ads.interactivemedia.v3.api.AdDisplayContainer; import com.google.ads.interactivemedia.v3.api.AdDisplayContainer;
import com.google.ads.interactivemedia.v3.api.AdError;
import com.google.ads.interactivemedia.v3.api.AdError.AdErrorCode;
import com.google.ads.interactivemedia.v3.api.AdErrorEvent; import com.google.ads.interactivemedia.v3.api.AdErrorEvent;
import com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener; import com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener;
import com.google.ads.interactivemedia.v3.api.AdEvent; import com.google.ads.interactivemedia.v3.api.AdEvent;
@ -580,14 +582,17 @@ public final class ImaAdsLoader extends Player.DefaultEventListener implements A
@Override @Override
public void onAdError(AdErrorEvent adErrorEvent) { public void onAdError(AdErrorEvent adErrorEvent) {
AdError error = adErrorEvent.getError();
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "onAdError " + adErrorEvent); Log.d(TAG, "onAdError", error);
} }
if (adsManager == null) { if (adsManager == null) {
// No ads were loaded, so allow playback to start without any ads. // No ads were loaded, so allow playback to start without any ads.
pendingAdRequestContext = null; pendingAdRequestContext = null;
adPlaybackState = new AdPlaybackState(); adPlaybackState = new AdPlaybackState();
updateAdPlaybackState(); updateAdPlaybackState();
} else if (isAdGroupLoadError(error)) {
handleAdGroupLoadError();
} }
if (pendingAdErrorEvent == null) { if (pendingAdErrorEvent == null) {
pendingAdErrorEvent = adErrorEvent; pendingAdErrorEvent = adErrorEvent;
@ -1041,4 +1046,9 @@ public final class ImaAdsLoader extends Player.DefaultEventListener implements A
return adGroupTimesUs; return adGroupTimesUs;
} }
private static boolean isAdGroupLoadError(AdError adError) {
// TODO: Find out what other errors need to be handled (if any), and whether each one relates to
// a single ad, ad group or the whole timeline.
return adError.getErrorCode() == AdErrorCode.VAST_LINEAR_ASSET_MISMATCH;
}
} }