【问题标题】:Widevine DRM Content on Exoplayer 2.0Exoplayer 2.0 上的 Widevine DRM 内容
【发布时间】:2019-09-24 07:05:12
【问题描述】:

我正在尝试使用 Exoplayer 在 Android TV 应用程序上播放 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 很好,尝试使用正确的数据POST 向许可证服务器发出请求,但是在发出响应码返回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 中缺少某种配置,因为我对 DRM 的概念还很陌生。

任何帮助将不胜感激。

【问题讨论】:

  • 您尝试获取的内容是什么视频类型?
  • 您好本杰明,我正在尝试获取 DASH 视频。虽然我是从 CDN 获取的,但如果这有什么不同,则 URL 不会以 mpd 结尾。
  • 您可能想考虑使用DashMediaSource 而不是DefaultHttpDataSource。您的其余代码看起来是正确的。
  • HttpMediaDrmCallback 构造函数不支持那些 MediaSources(我的意思是 SS、HLS 和 DASH 的媒体源),我在其他地方准备了 MediaSource 并将其传递给播放器。并且是按照视频格式准备的。
  • 我误会了,以为您正在向播放器发送 DefaultHttpDataSource。那就别管了。

标签: android-tv exoplayer2.x widevine


【解决方案1】:

我们找到了解决方案。为 DRM 许可证服务器提供的票证错误。这可以正常工作,并且正在播放内容。以防万一有人遇到同样的问题或需要基本的 Widevine 内容播放代码,目前可以正常工作。

最好的问候。

【讨论】:

    猜你喜欢
    • 2017-11-15
    • 2015-07-19
    • 1970-01-01
    • 2018-05-17
    • 2014-10-21
    • 1970-01-01
    • 2018-07-11
    • 2021-07-05
    • 2015-12-28
    相关资源
    最近更新 更多