Как продлить истекшую лицензию DRM в Cast Receiver Player? - PullRequest
0 голосов
/ 04 февраля 2019

Я разрабатываю специальное приложение Cast Receiver на основе Google Cast Application Framework Приложение-получатель отвечает за воспроизведение потоковых шифрованных файлов Widevine.Наше поддерживаемое решение требует добавить DRM токен в PreAuthorization заголовок в запросе лицензии.Мне нужно выполнить пару авторизованных запросов для получения токена DRM .Я предположил, что лучшее место для получения токена DRM - это использовать Перехватчик сообщений :

this.playerManager_.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD, (loadRequestData) => {
  var media = loadRequestData.media;
  var customData = media.customData;
  var licenseUrl = customData.licenseUrl || null;
  var contentId = media.contentId;
  var cdn = customData.cdn || null;
  return this.getOriginMediaURL(contentId, cdn, PlayerApiImp)
  .then(playbackURL => {
    loadRequestData.media.contentId = playbackURL;
    loadRequestData.media.customData.contentUrl = contentId;
    return this.getDRMToken(customData);
  })
  .then(drmToken => {
    this.preAuthToken = drmToken
    this.playbackConfig_.licenseUrl = licenseUrl;
    return loadRequestData
  })
  .catch(error => {
    this.log_({'ERROR': error});
    return loadRequestData;
  });;
});

Затем CAST Player автоматически вызывает licenseRequestHandler, и я легко добавляю требуемый токен DRM в заголовкизапрос лицензии:

this.playbackConfig_.licenseRequestHandler = requestInfo => {
  if (this.preAuthToken) {
    requestInfo.headers = {};
    requestInfo.headers['PreAuthorization'] = this.preAuthToken;
  }
};

Воспроизведение работает нормально, но до тех пор, пока не истечет срок действия лицензионного ключа .На нашем бэкенде лицензия живет ~ 30мин.По истечении этого времени плеер-ресивер генерирует ошибку [cast.framework.media.ShakaPlayer] category: 6 code: 6014 и воспроизведение останавливается.Я обнаружил, что эта ошибка означает enter image description here

Итак, мои вопросы:

  1. Поддерживает ли Cast Receiver API обновление лицензии?Какие обратные вызовы в CAST API инициирует приемник для уведомления о том, что сеанс истек?Я не получаю, я получаю только ошибку :( и воспроизведение останавливается.
  2. Как я могу предоставить новую лицензию для плеера, чтобы предотвратить его сбой?

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

Прочитайте свойства лицензии и посмотрите, является ли она возобновляемой.Если для этого свойства не установлено значение true, вы не можете продлить лицензию.

0 голосов
/ 28 марта 2019

Мы достигли этого с помощью метода manifestHandler в PlaybackConfig.Он может вернуть Обещание, поэтому мы смогли определить, может ли токен быть просроченным или нет, и соответственно обновить его.

castContext
  .getPlayerManager()
  .setMediaPlaybackInfoHandler(
    (loadRequestData, playbackConfig) => {
      playbackConfig.manifestHandler = manifest =>
        retrieveUpfrontToken(loadRequestData)
          .then(token => {
            playbackConfig.licenseRequestHandler = requestInfo => {
              requestInfo.withCredentials = true;
              requestInfo.headers['x-dt-auth-token'] = token;
            };
          })
          .then(() => manifest);
    };
  );

Метод manifestHandler вызывается каждый раз, когда получатель получает манифест(после каждого объявления или каждого периода обновления для динамического манифеста).

Надеюсь, я вам помог, это довольно сложно получить помощь / ответы от Google ...

Лучший, Винсент.

...