Widevine DRM-контент на Exoplayer 2.0 - PullRequest
1 голос
/ 06 мая 2019

Я пытаюсь воспроизвести 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.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 13 мая 2019

Мы разобрались с решением.Билет, предоставленный для сервера лицензий DRM, был неверным.Это работает так, как должно быть сейчас, и контент проигрывается.На тот случай, если у кого-то возникнет та же проблема или ему нужен базовый код для воспроизведения контента Widevine, на данный момент это работает нормально.

С наилучшими пожеланиями.

...