我正在尝试使用 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 的概念很陌生。
任何帮助将不胜感激。