2014-07-22 1 views
0

Je développe une application destinée à lire des contenus protégés par Widevine. J'essaie d'exécuter l'application sur l'appareil Android virtuel Genymotion. Mais quand je fais l'application ne parvient pas à acquérir des informations DRM. Ainsi, le code suivant renvoie null et l'application n'ira pas plus loin. Je me demande si le périphérique virtuel genymotion est la cause du problème. Si oui, est-il possible de configurer genymotion de telle sorte qu'il fonctionne avec DRM? Toute aide serait très appréciée.DRMManagerClient acquireDrmInfo échoue

+0

Avez-vous réussi à résoudre votre problème? Avez-vous également fourni l'URI du serveur et de l'actif pour le DrmInfoRequest? par exemple. 'request.put (" WVDRMServerKey ", serverKey)' et 'request.put (" WVAssetURIKey ", assetUri);' –

Répondre

0

Vous pouvez registrer auditeurs d'erreur sur le gestionnaire pour obtenir un indice de ce qui se passe:

manager.setOnErrorListener(new DrmManagerClient.OnErrorListener() { 
    public void onError(DrmManagerClient drmManagerClient, DrmErrorEvent event) { 
     Log.i(TAG, "Error Type : " + event.getType()); 
    } 
}); 
1
private final static long DEVICE_IS_PROVISIONED = 0; 
    private final static long DEVICE_IS_NOT_PROVISIONED = 1; 
    private final static long DEVICE_IS_PROVISIONED_SD_ONLY = 2; 
    private final static String WIDEVINE_MIME_TYPE = "video/wvm"; 



      public static boolean isDeviceWidevineDRMProvisioned(Context context) 
      { 
       boolean isDrmAvailable = true; 
       int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
       if (currentapiVersion < android.os.Build.VERSION_CODES.KITKAT) 
       { 
        //As Media DRM Package is available only after KITKAT(API Level 19) 
        isDrmAvailable = false; 
       } else 
       { 
        DrmManagerClient drmManagerClient = new DrmManagerClient(context); 
        DrmInfoRequest drmInfoRequest = new DrmInfoRequest(DrmInfoRequest.TYPE_REGISTRATION_INFO, WIDEVINE_MIME_TYPE); 
        drmInfoRequest.put("WVPortalKey", "key provided for drm in widevine portal"); 
        DrmInfo drmInfo = drmManagerClient.acquireDrmInfo(drmInfoRequest); 
        if (drmInfo != null) 
        { 
         String kWVDrmInfoRequestStatusKey = (String) drmInfo.get("WVDrmInfoRequestStatusKey"); 
         String drmPath = (String) drmInfo.get("drm_path"); 
         if ((kWVDrmInfoRequestStatusKey != null && Integer.parseInt(kWVDrmInfoRequestStatusKey) == DEVICE_IS_NOT_PROVISIONED) || (drmPath != null && drmPath.length() == 0)) 
         { 
          //not supported 
          isDrmAvailable = false; 
         } 
        } 
       } 
       return isDrmAvailable; 
      } 
+0

Seulement cela fonctionne pour moi. Peut-être pourriez-vous ajouter pourquoi vérifiez-vous drmPath et à quoi sert-il? Merci beaucoup! –

+1

@AlexeyO. Je l'avais vu quelque part dans google, peut-être pour vérifier si le chemin drm existait (c'est le chemin du fichier drm quand drm plugin s'initialise dans le device), s'il n'est pas là dans le device, 'ie pas disponible. Toutes les conditions doivent se rencontrer pour vérifier drm disponible. – DeepakPanwar

1

DRM est une fonctionnalité matérielle. Il ne peut pas être obtenu dans les émulateurs.

0

La méthode ci-dessus ne fonctionne pas pour moi, acquireDrmInfo (request) retourne toujours null. Après étude Exo-joueur DashTestRunner. J'utilise la méthode suivante pour obtenir les informations DRM Widevine.

private static final UUID WIDEVINE_UUID = new UUID(0xEDEF8BA979D64ACEL, 0xA3C827DCD51D21EDL); 

@TargetApi (Build.VERSION_CODES.JELLY_BEAN_MR2) 
@SuppressWarnings("ResourceType") 
private void getWVDrmInfo() { 
MediaDrm mediaDrm = null; 
try { 
    mediaDrm = new MediaDrm(WIDEVINE_UUID); 

    String vendor = mediaDrm.getPropertyString(MediaDrm.PROPERTY_VENDOR); 
    String version = mediaDrm.getPropertyString(MediaDrm.PROPERTY_VERSION); 
    String description = mediaDrm.getPropertyString(MediaDrm.PROPERTY_DESCRIPTION); 
    String algorithms = mediaDrm.getPropertyString(MediaDrm.PROPERTY_ALGORITHMS); 
    String securityLevel = mediaDrm.getPropertyString("securityLevel"); 
    String systemId = mediaDrm.getPropertyString("systemId"); 
    String hdcpLevel = mediaDrm.getPropertyString("hdcpLevel"); 
    String maxHdcpLevel = mediaDrm.getPropertyString("maxHdcpLevel"); 
    String usageReportingSupport = mediaDrm.getPropertyString("usageReportingSupport"); 
    String maxNumberOfSessions = mediaDrm.getPropertyString("maxNumberOfSessions"); 
    String numberOfOpenSessions = mediaDrm.getPropertyString("numberOfOpenSessions"); 

    mediaDrm.release(); 
} catch (UnsupportedSchemeException e) { 
    e.printStackTrace(); 
} 
}