Capture more errors from DRM session manager
This commit is contained in:
parent
e6dd52a245
commit
b6f3652636
@ -564,6 +564,10 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (drmSessionManager == null) {
|
||||||
|
// DRM Session Manager failed to instantiate, no other work can be done - error has been handled by the instantiating method
|
||||||
|
return;
|
||||||
|
}
|
||||||
// End DRM
|
// End DRM
|
||||||
|
|
||||||
ArrayList<MediaSource> mediaSourceList = buildTextSources();
|
ArrayList<MediaSource> mediaSourceList = buildTextSources();
|
||||||
@ -608,26 +612,36 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private DrmSessionManager buildDrmSessionManager(UUID uuid,
|
private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, String[] keyRequestPropertiesArray, int retryCount) throws UnsupportedDrmException {
|
||||||
String licenseUrl, String[] keyRequestPropertiesArray) throws UnsupportedDrmException {
|
|
||||||
if (Util.SDK_INT < 18) {
|
if (Util.SDK_INT < 18) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
HttpMediaDrmCallback drmCallback = new HttpMediaDrmCallback(licenseUrl,
|
try {
|
||||||
buildHttpDataSourceFactory(false));
|
HttpMediaDrmCallback drmCallback = new HttpMediaDrmCallback(licenseUrl,
|
||||||
if (keyRequestPropertiesArray != null) {
|
buildHttpDataSourceFactory(false));
|
||||||
for (int i = 0; i < keyRequestPropertiesArray.length - 1; i += 2) {
|
if (keyRequestPropertiesArray != null) {
|
||||||
drmCallback.setKeyRequestProperty(keyRequestPropertiesArray[i],
|
for (int i = 0; i < keyRequestPropertiesArray.length - 1; i += 2) {
|
||||||
keyRequestPropertiesArray[i + 1]);
|
drmCallback.setKeyRequestProperty(keyRequestPropertiesArray[i], keyRequestPropertiesArray[i + 1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
FrameworkMediaDrm mediaDrm = FrameworkMediaDrm.newInstance(uuid);
|
||||||
|
if (hasDrmFailed) {
|
||||||
|
// When DRM fails using L1 we want to switch to L3
|
||||||
|
mediaDrm.setPropertyString("securityLevel", "L3");
|
||||||
|
}
|
||||||
|
return new DefaultDrmSessionManager(uuid, mediaDrm, drmCallback, null, false, 3);
|
||||||
|
} catch(UnsupportedDrmException e) {
|
||||||
|
// Unsupported DRM exceptions are handled by the calling method
|
||||||
|
throw e;
|
||||||
|
} catch (Exception e) {
|
||||||
|
if (retryCount < 3) {
|
||||||
|
// Attempt retry 3 times in case where the OS Media DRM Framework fails for whatever reason
|
||||||
|
return buildDrmSessionManager(uuid, licenseUrl, keyRequestPropertiesArray, ++retryCount);
|
||||||
|
}
|
||||||
|
// Handle the unknow exception and emit to JS
|
||||||
|
eventEmitter.error(ex.toString(), ex, "3006");
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
FrameworkMediaDrm mediaDrm = FrameworkMediaDrm.newInstance(uuid);
|
|
||||||
if (hasDrmFailed) {
|
|
||||||
// When DRM fails using L1 we want to switch to L3
|
|
||||||
mediaDrm.setPropertyString("securityLevel", "L3");
|
|
||||||
}
|
|
||||||
return new DefaultDrmSessionManager(uuid,
|
|
||||||
mediaDrm, drmCallback, null, false, 3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private MediaSource buildMediaSource(Uri uri, String overrideExtension, DrmSessionManager drmSessionManager) {
|
private MediaSource buildMediaSource(Uri uri, String overrideExtension, DrmSessionManager drmSessionManager) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user