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

Exoplayer 2.0上的Widevine DRM内容

夹谷衡
2023-03-14

我正在尝试使用Exoplayer在Android电视应用程序上播放Widevine加密内容。我有我的视频URL,它是从CDN提供的,并且是通过票证获得的。我有我的widevine许可证URL、许可证服务器的票证和身份验证令牌。

我正在创建一个drmSessionManager,将许可证服务器所需的必要标头放入其中,如下所示:

UUID drmSchemeUuid = C.WIDEVINE_UUID;
mediaDrm = FrameworkMediaDrm.newInstance(drmSchemeUuid);
static final String USER_AGENT = "user-agent";
    HttpMediaDrmCallback drmCallback = new HttpMediaDrmCallback("my-license-server", new DefaultHttpDataSourceFactory(USER_AGENT));
keyRequestProperties.put("ticket-header", ticket);
keyRequestProperties.put("token-header", token);
drmCallback.setKeyRequestProperty("ticket-header", ticket);
drmCallback.setKeyRequestProperty("token-header", token);

new DefaultDrmSessionManager(drmSchemeUuid, mediaDrm, drmCallback, keyRequestProperties)

在这个Exoplayer处理了大部分内容之后,将命中以下断点。

response = callback.executeKeyRequest(uuid, (KeyRequest) request);
in class DefaultDrmSession
return executePost(dataSourceFactory, url, request.getData(), requestProperties) in HttpMediaDrmCallback

我可以观察到,在这一点之前,一切都很好,URL是正确的,标题设置很好。

在下面的代码中,我可以观察到dataSpec很好,尝试使用正确的数据向许可证服务器发布请求,但在建立连接时,响应代码返回405。

类中:DefaultHttpDataSource

在方法中:public long open(DataSpec dataSpec)

 this.dataSpec = dataSpec;
 this.bytesRead = 0;
 this.bytesSkipped = 0;
 transferInitializing(dataSpec);
try {
      connection = makeConnection(dataSpec);
    } catch (IOException e) {
      throw new HttpDataSourceException("Unable to connect to " + dataSpec.uri.toString(), e,
          dataSpec, HttpDataSourceException.TYPE_OPEN);
    }
try {
      responseCode = connection.getResponseCode();
      responseMessage = connection.getResponseMessage();
    } catch (IOException e) {
      closeConnectionQuietly();
      throw new HttpDataSourceException("Unable to connect to " + dataSpec.uri.toString(), e,
          dataSpec, HttpDataSourceException.TYPE_OPEN);
    }

使用postman向URL发出请求时,GET请求返回以下主体,响应代码为405。

{“Message”:“请求的资源不支持http方法“GET”。”}

POST请求还返回响应代码405,但返回空正文。

在这两种情况下,还会返回以下标头,我认为请求必须接受GET和POST请求。

Access-Control-Allow-Methods →GET, POST

我无权访问DRM服务器的配置,负责DRM服务器的联系人告诉我,POST请求必须正常工作,因为有些客户端已成功从同一DRM服务器获取播放内容。

我现在很困惑,我想也许我在exoplayer中缺少了某种配置,因为我对DRMs的概念很陌生。

任何帮助都将不胜感激。


共有1个答案

陆寒
2023-03-14

我们找到了解决办法。为DRM许可证服务器提供的票证错误。现在,它按预期工作,内容正在播放。如果有人遇到了同样的问题,或者需要一个基本的Widevine内容播放代码,那么现在就可以了。

最好的问候。

 类似资料:
  • 我去了src目录,查看了zlib文件夹,然后看到…。它是空的... 现在,当我转到https://github.com/wxwidgets/wxwidgets/tree/master/src并浏览到zlib文件夹时,它不是空的。但是,在上面的链接中,zlib文件夹被标记了类似“@5888671”的东西。在expat、jpeg、png和tiff文件夹上也有类似的标记。当我克隆存储库时,所有提到的文件

  • 出现此错误,JSP页面变为空白(白色): Jan9, 2013 7:30:39PMorg.apache.catalina.loader.WebappClassLoader clearThreadLocalMap SEVERE:Web应用程序[/MyWebApp]创建了一个ThreadLocal,其中键的类型为[net.sourceforge.jtds.jdbc.DateTime1美元](值[net

  • 问题内容: python的内存有限制吗?我一直在使用python脚本从最小150mb大的文件中计算平均值。 根据文件的大小,我有时会遇到一个。 可以为python分配更多的内存,这样我就不会遇到错误吗? 编辑:下面的代码 注意:文件大小可能相差很大(最大20GB),文件的最小大小为150mb 问题答案: (这是我的第三个答案,因为我误解了您的代码在原始代码中所做的事情,然后在第二个错误中犯了一个小

  • 在主轴上,作为或看起来很直观。 对于以下元素, 在横轴上设置样式, 下面是两个的输出 在上述输出中, 周围的空间是什么

  • 我正在建立一个简单的可编辑组合框与自动完成。我想根据内部TextField的内容筛选组合框的内容。 我设法使其工作,但当从TextField中删除字符时,我面临一个重新应用自动完成逻辑的问题。 从我所看到的情况来看,在按下键的事件上,文本字段的内容还不包含添加的字符。 所以我只是做了一个简单的逻辑来添加KeyEvent的字符串版本来模拟TextField的内容。我制作了这个灯塔,我需要有全文来应用

  • 问题内容: 我的问题很简单: 为什么在Firefox中,内联元素的边距顶部被忽略? 有人知道吗? 问题答案: 这不仅限于Firefox,而且在CSS 2.1规范中进行了定义: ### 8.3边距属性:“ margin-top”,“ margin-right”,“ margin-bottom”,“ margin-left”和“margin” 边距属性指定框的边距区域的宽度。’margin’速记属性设