2

我正在尝试使用 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很好,尝试使用正确的数据向许可证服务器发送请求,但是在建立连接时响应代码返回 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 的概念很陌生。

任何帮助将不胜感激。

4

1 回答 1

1

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

此致。

于 2019-05-13T14:23:17.063 回答