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
Répondre
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());
}
});
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;
}
Seulement cela fonctionne pour moi. Peut-être pourriez-vous ajouter pourquoi vérifiez-vous drmPath et à quoi sert-il? Merci beaucoup! –
@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
DRM est une fonctionnalité matérielle. Il ne peut pas être obtenu dans les émulateurs.
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();
}
}
- 1. MySqlCommand.ExecuteNonQuery échoue
- 2. file_get_contents échoue
- 3. PHPMailer échoue
- 4. Landscaporientation échoue
- 5. stringByReplacingOccurenceOfString échoue
- 6. FindResource échoue
- 7. assertHeader échoue
- 8. document.createEvent échoue
- 9. Ajax.ActionLink échoue
- 10. Multipolygon.intersection échoue
- 11. CFSocketSetAddress échoue
- 12. Dispatcher.CheckAccess() échoue
- 13. SPListItem.Update échoue
- 14. dynamic_cast échoue
- 15. require_once échoue
- 16. MPI_Waitall échoue
- 17. move_uploaded_file échoue
- 18. MotionEvent.Action_UP échoue
- 19. VSJitDebugger échoue
- 20. include_once échoue!
- 21. Publishing échoue
- 22. json_decode échoue
- 23. stream_socket_client échoue
- 24. JFileChooser échoue
- 25. CreateWindowEx échoue
- 26. désérialisation échoue
- 27. urllib.urlretrieve échoue
- 28. AFHTTPRequestOperation échoue
- 29. ActionMailer échoue
- 30. entityNew échoue
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);' –