Я пытаюсь воспроизвести Widevine зашифрованный контент в приложении для Android на телевизоре с использованием Exoplayer. У меня есть мое видео URL , которое подается с CDN и получено с билетом. У меня есть 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);
}
При использовании почтальона для запроса URL-адреса запрос GET возвращает следующее тело с кодом ответа 405.
{
«Сообщение»: «Запрашиваемый ресурс не поддерживает http-метод« GET ».» }
запрос POST также возвращает код ответа 405, но возвращает пустое тело.
В обоих случаях также возвращается следующий заголовок, который, я полагаю, должен принимать запросы GET и POST.
Access-Control-Allow-Methods →GET, POST
У меня нет доступа к конфигурации DRM-сервера , и мои контакты, отвечающие за DRM-сервер, говорят мне, что запросы POST должны работать нормально, поскольку есть клиенты, которым удалось получить содержимое для воспроизведения с того же сервера DRM.
В настоящий момент я в замешательстве и думаю, что, может быть, мне не хватает какой-то конфигурации в exoplayer, поскольку я совершенно новичок в концепции DRM.
Любая помощь будет принята с благодарностью.