Fix NPE cause by demo app adding null listener to drm manager
Also added an assertion to the DRM event dispatcher to cause immediate failure when this happens. This is consistent with the assertion in the equivalent MediaSource class. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=191892735
This commit is contained in:
parent
f5b568fc7d
commit
03a36ce6ba
@ -42,7 +42,6 @@ import com.google.android.exoplayer2.PlaybackPreparer;
|
|||||||
import com.google.android.exoplayer2.Player;
|
import com.google.android.exoplayer2.Player;
|
||||||
import com.google.android.exoplayer2.SimpleExoPlayer;
|
import com.google.android.exoplayer2.SimpleExoPlayer;
|
||||||
import com.google.android.exoplayer2.drm.DefaultDrmSessionManager;
|
import com.google.android.exoplayer2.drm.DefaultDrmSessionManager;
|
||||||
import com.google.android.exoplayer2.drm.DrmSessionManager;
|
|
||||||
import com.google.android.exoplayer2.drm.FrameworkMediaCrypto;
|
import com.google.android.exoplayer2.drm.FrameworkMediaCrypto;
|
||||||
import com.google.android.exoplayer2.drm.FrameworkMediaDrm;
|
import com.google.android.exoplayer2.drm.FrameworkMediaDrm;
|
||||||
import com.google.android.exoplayer2.drm.HttpMediaDrmCallback;
|
import com.google.android.exoplayer2.drm.HttpMediaDrmCallback;
|
||||||
@ -120,7 +119,6 @@ public class PlayerActivity extends Activity
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Handler mainHandler;
|
private Handler mainHandler;
|
||||||
private EventLogger eventLogger;
|
|
||||||
private PlayerView playerView;
|
private PlayerView playerView;
|
||||||
private LinearLayout debugRootView;
|
private LinearLayout debugRootView;
|
||||||
private TextView debugTextView;
|
private TextView debugTextView;
|
||||||
@ -296,7 +294,7 @@ public class PlayerActivity extends Activity
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager = null;
|
DefaultDrmSessionManager<FrameworkMediaCrypto> drmSessionManager = null;
|
||||||
if (intent.hasExtra(DRM_SCHEME_EXTRA) || intent.hasExtra(DRM_SCHEME_UUID_EXTRA)) {
|
if (intent.hasExtra(DRM_SCHEME_EXTRA) || intent.hasExtra(DRM_SCHEME_UUID_EXTRA)) {
|
||||||
String drmLicenseUrl = intent.getStringExtra(DRM_LICENSE_URL);
|
String drmLicenseUrl = intent.getStringExtra(DRM_LICENSE_URL);
|
||||||
String[] keyRequestPropertiesArray = intent.getStringArrayExtra(DRM_KEY_REQUEST_PROPERTIES);
|
String[] keyRequestPropertiesArray = intent.getStringArrayExtra(DRM_KEY_REQUEST_PROPERTIES);
|
||||||
@ -341,17 +339,21 @@ public class PlayerActivity extends Activity
|
|||||||
trackSelector = new DefaultTrackSelector(adaptiveTrackSelectionFactory);
|
trackSelector = new DefaultTrackSelector(adaptiveTrackSelectionFactory);
|
||||||
trackSelectionHelper = new TrackSelectionHelper(trackSelector, adaptiveTrackSelectionFactory);
|
trackSelectionHelper = new TrackSelectionHelper(trackSelector, adaptiveTrackSelectionFactory);
|
||||||
lastSeenTrackGroupArray = null;
|
lastSeenTrackGroupArray = null;
|
||||||
eventLogger = new EventLogger(trackSelector);
|
|
||||||
|
|
||||||
player =
|
player =
|
||||||
ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector, drmSessionManager);
|
ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector, drmSessionManager);
|
||||||
player.addListener(new PlayerEventListener());
|
player.addListener(new PlayerEventListener());
|
||||||
|
|
||||||
|
EventLogger eventLogger = new EventLogger(trackSelector);
|
||||||
player.addListener(eventLogger);
|
player.addListener(eventLogger);
|
||||||
player.addMetadataOutput(eventLogger);
|
player.addMetadataOutput(eventLogger);
|
||||||
player.addAudioDebugListener(eventLogger);
|
player.addAudioDebugListener(eventLogger);
|
||||||
player.addVideoDebugListener(eventLogger);
|
player.addVideoDebugListener(eventLogger);
|
||||||
player.setPlayWhenReady(shouldAutoPlay);
|
if (drmSessionManager != null) {
|
||||||
|
drmSessionManager.addListener(mainHandler, eventLogger);
|
||||||
|
}
|
||||||
|
|
||||||
|
player.setPlayWhenReady(shouldAutoPlay);
|
||||||
playerView.setPlayer(player);
|
playerView.setPlayer(player);
|
||||||
playerView.setPlaybackPreparer(this);
|
playerView.setPlaybackPreparer(this);
|
||||||
debugViewHelper = new DebugTextViewHelper(player, debugTextView);
|
debugViewHelper = new DebugTextViewHelper(player, debugTextView);
|
||||||
@ -372,7 +374,8 @@ public class PlayerActivity extends Activity
|
|||||||
releaseAdsLoader();
|
releaseAdsLoader();
|
||||||
loadedAdTagUri = adTagUri;
|
loadedAdTagUri = adTagUri;
|
||||||
}
|
}
|
||||||
MediaSource adsMediaSource = createAdsMediaSource(mediaSource, Uri.parse(adTagUriString));
|
MediaSource adsMediaSource =
|
||||||
|
createAdsMediaSource(mediaSource, Uri.parse(adTagUriString), eventLogger);
|
||||||
if (adsMediaSource != null) {
|
if (adsMediaSource != null) {
|
||||||
mediaSource = adsMediaSource;
|
mediaSource = adsMediaSource;
|
||||||
} else {
|
} else {
|
||||||
@ -426,8 +429,8 @@ public class PlayerActivity extends Activity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private DrmSessionManager<FrameworkMediaCrypto> buildDrmSessionManagerV18(UUID uuid,
|
private DefaultDrmSessionManager<FrameworkMediaCrypto> buildDrmSessionManagerV18(
|
||||||
String licenseUrl, String[] keyRequestPropertiesArray, boolean multiSession)
|
UUID uuid, String licenseUrl, String[] keyRequestPropertiesArray, boolean multiSession)
|
||||||
throws UnsupportedDrmException {
|
throws UnsupportedDrmException {
|
||||||
HttpMediaDrmCallback drmCallback = new HttpMediaDrmCallback(licenseUrl,
|
HttpMediaDrmCallback drmCallback = new HttpMediaDrmCallback(licenseUrl,
|
||||||
buildHttpDataSourceFactory(false));
|
buildHttpDataSourceFactory(false));
|
||||||
@ -440,7 +443,6 @@ public class PlayerActivity extends Activity
|
|||||||
DefaultDrmSessionManager<FrameworkMediaCrypto> drmSessionManager =
|
DefaultDrmSessionManager<FrameworkMediaCrypto> drmSessionManager =
|
||||||
new DefaultDrmSessionManager<>(
|
new DefaultDrmSessionManager<>(
|
||||||
uuid, FrameworkMediaDrm.newInstance(uuid), drmCallback, null, multiSession);
|
uuid, FrameworkMediaDrm.newInstance(uuid), drmCallback, null, multiSession);
|
||||||
drmSessionManager.addListener(mainHandler, eventLogger);
|
|
||||||
return drmSessionManager;
|
return drmSessionManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -455,7 +457,6 @@ public class PlayerActivity extends Activity
|
|||||||
mediaSource = null;
|
mediaSource = null;
|
||||||
trackSelector = null;
|
trackSelector = null;
|
||||||
trackSelectionHelper = null;
|
trackSelectionHelper = null;
|
||||||
eventLogger = null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -494,7 +495,8 @@ public class PlayerActivity extends Activity
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Returns an ads media source, reusing the ads loader if one exists. */
|
/** Returns an ads media source, reusing the ads loader if one exists. */
|
||||||
private @Nullable MediaSource createAdsMediaSource(MediaSource mediaSource, Uri adTagUri) {
|
private @Nullable MediaSource createAdsMediaSource(
|
||||||
|
MediaSource mediaSource, Uri adTagUri, EventLogger eventLogger) {
|
||||||
// Load the extension source using reflection so the demo app doesn't have to depend on it.
|
// Load the extension source using reflection so the demo app doesn't have to depend on it.
|
||||||
// The ads loader is reused for multiple playbacks, so that ad playback can resume.
|
// The ads loader is reused for multiple playbacks, so that ad playback can resume.
|
||||||
try {
|
try {
|
||||||
|
@ -17,6 +17,7 @@ package com.google.android.exoplayer2.drm;
|
|||||||
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import com.google.android.exoplayer2.Player;
|
import com.google.android.exoplayer2.Player;
|
||||||
|
import com.google.android.exoplayer2.util.Assertions;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
|
||||||
/** Listener of {@link DefaultDrmSessionManager} events. */
|
/** Listener of {@link DefaultDrmSessionManager} events. */
|
||||||
@ -57,6 +58,7 @@ public interface DefaultDrmSessionEventListener {
|
|||||||
|
|
||||||
/** Adds listener to event dispatcher. */
|
/** Adds listener to event dispatcher. */
|
||||||
public void addListener(Handler handler, DefaultDrmSessionEventListener eventListener) {
|
public void addListener(Handler handler, DefaultDrmSessionEventListener eventListener) {
|
||||||
|
Assertions.checkArgument(handler != null && eventListener != null);
|
||||||
listeners.add(new HandlerAndListener(handler, eventListener));
|
listeners.add(new HandlerAndListener(handler, eventListener));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user