From 6b9fb456a123ddda9e02a6899f6fb10a88af9fdc Mon Sep 17 00:00:00 2001 From: nickchavez Date: Wed, 27 Jun 2018 09:50:31 -0700 Subject: [PATCH] Roll forward of CL 201223315 with ExoPlayer IMA extension fix Original change by nickchavez@nickchavez:andcsvol:3257:citc on 2018/06/19 12:41:18. Add VolumeProvider interface to VideoAdPlayer and VideoStreamPlayer. - Send volume on videoDisplay.start so that it can be sent to OMID. - Add unit tests for AdPlayerCalback and ExoPlayerVideoAdPlayerImpl. - Add functional tests for client side and DAI volume updates. Add onVolumeChanged() to VideoAdPlayerCallback and VideoStreamPlayerCallback. - Implement volume updates for SDK owned video player. - Remove mute/unmute events, which are handled in JS instead (like iOS). - Collect volume changes from client side and DAI video players. External: Publisher players will now have to implement getVolume() and onVolumeChanged() for custom video players. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=202324636 --- .../exoplayer2/ext/ima/ImaAdsLoader.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) 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 afb8a31c37..dd4210493a 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 @@ -53,6 +53,7 @@ import com.google.android.exoplayer2.source.ads.AdPlaybackState; import com.google.android.exoplayer2.source.ads.AdPlaybackState.AdState; import com.google.android.exoplayer2.source.ads.AdsLoader; import com.google.android.exoplayer2.source.ads.AdsMediaSource.AdLoadException; +import com.google.android.exoplayer2.trackselection.TrackSelectionArray; import com.google.android.exoplayer2.upstream.DataSpec; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.MimeTypes; @@ -269,6 +270,7 @@ public final class ImaAdsLoader private ViewGroup adUiViewGroup; private VideoProgressUpdate lastContentProgress; private VideoProgressUpdate lastAdProgress; + private int lastVolumePercentage; private AdsManager adsManager; private AdLoadException pendingAdLoadError; @@ -473,6 +475,7 @@ public final class ImaAdsLoader this.player = player; this.eventListener = eventListener; this.adUiViewGroup = adUiViewGroup; + lastVolumePercentage = 0; lastAdProgress = null; lastContentProgress = null; adDisplayContainer.setAdContainer(adUiViewGroup); @@ -501,6 +504,7 @@ public final class ImaAdsLoader playingAd ? C.msToUs(player.getCurrentPosition()) : 0); adsManager.pause(); } + lastVolumePercentage = getVolume(); lastAdProgress = getAdProgress(); lastContentProgress = getContentProgress(); player.removeListener(this); @@ -663,6 +667,27 @@ public final class ImaAdsLoader } } + @Override + public int getVolume() { + if (player == null) { + return lastVolumePercentage; + } + + Player.AudioComponent audioComponent = player.getAudioComponent(); + if (audioComponent != null) { + return (int) (audioComponent.getVolume() * 100); + } + + // Check for a selected track using an audio renderer. + TrackSelectionArray trackSelections = player.getCurrentTrackSelections(); + for (int i = 0; i < player.getRendererCount() && i < trackSelections.length; i++) { + if (player.getRendererType(i) == C.TRACK_TYPE_AUDIO && trackSelections.get(i) != null) { + return 100; + } + } + return 0; + } + @Override public void loadAd(String adUriString) { try {