Bonjour, je suis en train de changer mon implémentation DRM de Exoplayer 1.x en Exoplayer 2.x mais j'ai quelques exceptions et je ne peux pas lire la vidéo sous licence DRM. Mon gestionnaire de session drm:Exoplayer2 DRM exception shouldWaitForKeys
protected DrmSessionManager<FrameworkMediaCrypto> generateDrmSessionManager() {
// DRM is only supported on API 18 + in the ExoPlayer
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
return null;
}
// Widevine will capture the majority of use cases however playready is supported on all AndroidTV devices
UUID uuid = C.WIDEVINE_UUID;
final String licenseURL = "http://video.aaa";
HttpMediaDrmCallback drmCallback =
new HttpMediaDrmCallback(
licenseURL, buildHttpDataSourceFactory(false), KEY_REQUEST_PROPERTIES);
try {
return new DefaultDrmSessionManager<>(
uuid, FrameworkMediaDrm.newInstance(uuid), drmCallback, null, mainHandler, capabilitiesListener);
} catch (Exception e) {
Log.d(TAG, "Unable to create a DrmSessionManager due to an exception", e);
return null;
}
}
J'ai la drmSession et puis quand HttpMediaDrmCallback exécute
executePost(dataSourceFactory, url, request.getData(), requestProperties);
l'intérieur il y a l'appel qui provoque la onDrmSessionManagerError
(java.lang.IllegalArgumentException) lors de l'appel:
HttpDataSource dataSource = dataSourceFactory.createDataSource();
à l'adresse com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.shouldWaitForKeys (MediaCodecRenderer.java:735) at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.feedInputBuffer (MediaCodecRenderer.java:676) at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render (MediaCodecRenderer.java:511) at com.google.android .exoplayer2.ExoPlayerImplInternal.doSomeWork (ExoPlayerImplInternal.java:479) à com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage (ExoPlayerImplInternal.java:308) à android.os.Handler.dispatchMessage (Handler.java:98) à android.os.Looper.loop (Looper.java:135) à android.os.HandlerThread.run (HandlerThread.java:61) Causé par: com.googl e.android.exoplayer2.drm.DrmSession $ DrmSessionException: java.lang.IllegalArgumentException at com.google.android.exoplayer2.drm.DefaultDrmSessionManager.onError (DefaultDrmSessionManager.java:604) at com.google.android.exoplayer2.drm .DefaultDrmSessionManager.onKeysError (DefaultDrmSessionManager.java:599) à com.google.android.exoplayer2.drm.DefaultDrmSessionManager.onKeyResponse (DefaultDrmSessionManager.java:559) à 900 $ com.google.android.exoplayer2.drm.DefaultDrmSessionManager.access (DefaultDrmSessionManager.java:50) at com.google.android.exoplayer2.drm.DefaultDrmSessionManager $ PostResponseHandler.handleMessage (DefaultDrmSessionManager.java:679) à android.os.Handler.dispatchMessage (Handler.java:102) à android.os.Looper.loop (Looper.java:135) à android.os.HandlerThread.run (HandlerThread.java:61) Causé par: java.lang.IllegalArgumentException à com.google.android.exoplayer2.util.Assertions.checkNotEmpty (Assertions.java:138) à com.google.android.exoplayer2.upstream.DefaultHttpDataSource. (DefaultHttpDataSource.java:148) à com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory.createDataSourceInternal (DefaultHttpDataSourceFactory.java:81) at com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory.createDataSourc eInternal (DefaultHttpDataSourceFactory.java:22) at com.google.android.exoplayer2.upstream.HttpDataSource $ BaseFactory.createDataSource (HttpDataSource.java:176) at com.google.android.exoplayer2.drm.HttpMediaDrmCallback.executePost (HttpMediaDrmCallback. java: 139) à com.google.android.exoplayer2.drm.HttpMediaDrmCallback.executeKeyRequest (HttpMediaDrmCallback.java:134) à com.google.android.exoplayer2.drm.DefaultDrmSessionManager $ PostRequestHandler.handleMessage (DefaultDrmSessionManager.java: 702) à android.os.Handler.dispatchMessage (Handler.java:102) à android.os.Looper.loop (Looper.java:135) à android.os.HandlerThread.run (HandlerThread.java: 61)
Je ne sais pas pourquoi il se bloque, comme dans mon Exoplayer 1.x mise en œuvre fonctionnait bien.
ne semble pas être le causes..currently J'installe l'agent utilisateur correctement. – Billyjoker
@Billyjoker - si vous jetez un coup d'oeil à la Stacktrace, vous pouvez voir l'exception lancée par: java.lang.IllegalArgumentException sur com.google.android.exoplayer2.util.Assertions.checkNotEmpty (Assertions.java:138) at com .google.android.exoplayer2.upstream.DefaultHttpDataSource '. Il se peut que vous l'ayez défini mais qu'il soit réinitialisé ou annulé avant que vous l'utilisiez, ou que la mauvaise variable soit transmise par erreur. – Mick
Vous aviez raison !! Le problème était que j'ai créé DefaultHttpDataSourceFactory avec mon agent utilisateur avec une valeur vide, mais lorsque j'ai créé DefaultDataSourceFactory, l'agent utilisateur avait raison, mais il a levé l'exception shouldWaitForKeys. Donc, j'ai rempli l'agent utilisateur vide et fonctionne comme un charme !! Merci beaucoup – Billyjoker