From 5bd744000cde6dd6a9521f75d4824a00be046280 Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Wed, 14 Feb 2018 03:13:09 -0800 Subject: [PATCH] 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 --- RELEASENOTES.md | 2 ++ .../android/exoplayer2/ext/ima/ImaAdsLoader.java | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b4005269c41..0bec6891fe7 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -85,6 +85,8 @@ ([#3584](https://github.com/google/ExoPlayer/issues/3584)). * Work around loadAd not being called beore the LOADED AdEvent arrives ([#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 the IMA demo app ([#3676](https://github.com/google/ExoPlayer/issues/3676)). diff --git a/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java b/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java index d714eed98c5..d11bc920e18 100644 --- a/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java +++ b/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java @@ -25,6 +25,8 @@ import android.webkit.WebView; import com.google.ads.interactivemedia.v3.api.Ad; 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.AdErrorListener; import com.google.ads.interactivemedia.v3.api.AdEvent; @@ -580,14 +582,17 @@ public void onAdEvent(AdEvent adEvent) { @Override public void onAdError(AdErrorEvent adErrorEvent) { + AdError error = adErrorEvent.getError(); if (DEBUG) { - Log.d(TAG, "onAdError " + adErrorEvent); + Log.d(TAG, "onAdError", error); } if (adsManager == null) { // No ads were loaded, so allow playback to start without any ads. pendingAdRequestContext = null; adPlaybackState = new AdPlaybackState(); updateAdPlaybackState(); + } else if (isAdGroupLoadError(error)) { + handleAdGroupLoadError(); } if (pendingAdErrorEvent == null) { pendingAdErrorEvent = adErrorEvent; @@ -1041,4 +1046,9 @@ private static long[] getAdGroupTimesUs(List cuePoints) { 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; + } }