当前位置: 首页 > 知识库问答 >
问题:

DRMManagerClient获取DrmInfo失败

贺飞星
2023-03-14

我正在开发一个应用程序,用于播放受Widevine保护的内容。我正在尝试在Genymotion虚拟Android设备上运行应用程序。但当我这样做时,应用程序无法获取DRM信息。所以下面的代码返回null,应用程序将无法继续。

    DrmInfoRequest request = new DrmInfoRequest(DrmInfoRequest.TYPE_REGISTRATION_INFO,
    Settings.WIDEVINE_MIME_TYPE);
    request.put("WVPortalKey", portal);
    DrmInfo response = mDrmManager.acquireDrmInfo(request);

我想知道genymops虚拟设备是否是问题的原因。如果是这样,是否可以配置genymops使其与DRM一起工作?任何帮助都将不胜感激。

共有3个答案

西门嘉澍
2023-03-14

您可以在管理器上注册错误侦听器,以了解发生的情况:

manager.setOnErrorListener(new DrmManagerClient.OnErrorListener() {
    public void onError(DrmManagerClient drmManagerClient, DrmErrorEvent event) {
        Log.i(TAG, "Error Type : " + event.getType());
    }
});
洪研
2023-03-14
    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;
            }
盖诚
2023-03-14

上述方法不适用于我,acquireDrmInfo(请求)总是返回null。学习Exo玩家DashTestRunner之后。我使用以下方法来获取Widevine DRM信息。

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();
}
}
 类似资料:
  • 问题内容: 我是詹金斯的新手。我只是在Windows 2016服务器上设置了詹金斯。我正在创建将git用于scm的新作业。当我去建立工作时,它会创建文件夹和git。它卡在git fetch上。它超时。我已经将詹金斯设置为服务。我使用本地管理员帐户登录服务器,以尝试消除权限问题。从git fetch日志中显示的错误是GitException,然后返回状态代码-1073741510。我搜索了,找不到任

  • 问题内容: 有谁知道如何检查以确保在AngularJS中无法提取资源? 例如: 有任何想法吗? 问题答案: 当出现错误时,您的第一个回调函数之后的另一个回调函数应触发。取自文档和论坛帖子: HTTP GET“类”操作:Resource.action([参数],[成功],[错误]) 非GET“类”操作:Resource.action([参数],postData,[成功],[错误]) 非GET实例操作

  • 我得到以下exeption连接到Mssql服务器。 我在属性中使用相同的配置连接到JDBC,但在尝试连接到R2DBC时出现问题。在Rest时发生,而不是在启动应用程序时发生。

  • 我最近升级了我的项目。 我的项目生成失败并出现错误: 任务:检查样式主失败 . gradle\daemon\4.10.2\etc\check style\checkstyle-suppressions.xml(系统找不到指定路径) 这是我的gradle构建文件:

  • 我试图建立一个基本的网页,允许用户在数据库的mysql表中添加一行,以便打开LED灯和使用arduino。然而,当我尝试提交表单时,页面返回500状态,mysql查询没有执行。我在我的电脑上运行linux-apache-mysql-php服务器。为什么会这样?

  • 我们正在构建一个android项目,当我们试图构建该项目时,我们得到了android资源构建失败 由于奇怪的原因,它指向一个不是我们项目的一部分的文件,该文件位于 C:\location.gradle\caches\transforms-2\files-2.1\87cdecd973dcf2cf22fdc9f513d1a506\roundkornerlayouts-0.4.0\res\values\