Я пытаюсь создать собственный приемник 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>
?