Создание собственного приемника CAF с элементом <video> - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь создать собственный приемник CAF с собственным видеоэлементом HTML5 и вспомогательной библиотекой. Поскольку я использую свой собственный элемент <video>, я настраиваю экземпляр PlayerManager следующим образом:

// My custom HTML5 video player
const player = new Player(document.querySelector('#my-video'))

const context = cast.framework.CastReceiverContext.getInstance()
const playerManager = context.getPlayerManager()
playerManager.setMediaElement(document.querySelector('#my-video'))
// Now, I need to override some of the playerManager methods such as play/pause, etc
const overrides = {
  getCurrentTimeSec () {
    return player.currentTime
  },
  getPlayerState () {
    const PlayerState = cast.framework.messages.PlayerState
    if (!player.ready || !player.source) {
      return PlayerState.IDLE
    }
    return player.paused ? PlayerState.PAUSED : PlayerState.PLAYING
  },
  getDurationSec () {
    return player.duration
  },
  pause: player.pause,
  play: player.play,
  seek: player.seek,
  load: (loadRequestData) => {
  return new Promise((resolve, reject) => {
    // Parse loadRequestData and load the media accordingly
    ...
  })
}
Object.assign(playerManager, overrides)

context.start();

Поскольку мне нужна настраиваемая обработка входящего запроса на загрузку в случаях, когда входящее видео защищено, мне нужно настроить обработчик load. Кажется, моя проблема в том, что playerManager.load никогда не вызывается.

Обратите внимание, что все это прекрасно работает для обычных незащищенных HTML5-видео, поскольку входящий loadRequestData может быть непосредственно понят и использован PlayerManager. В тех случаях, когда мне нужно выполнить дополнительную обработку, все начинает сбоить.

Я уже пытался запустить свою бизнес-логику как , описанную Google :

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD,
    request => {
      ...
})

Проблема в этом подходе заключается в том, что, хотя я могу попросить мою библиотеку Player успешно загрузить видео, перехват должен либо возвратить ноль, либо изменить request.
Когда я ничего не возвращаю, playerManager считает, что нет запроса на загрузку носителя.
Если я возвращаю «измененный запрос», то запускается логика загрузки носителя по умолчанию, в которой неизбежно происходит сбой из-за «неправильного» URL.

В любом случае экземпляр playerManager сообщает, что он не готов к приему команд воспроизведения.

Как правильно настроить CAF-приемник с пользовательским элементом <video>?

...