我正在尝试使用自己的HTML5视频元素和支持库来创建自定义CAF接收器。由于我使用自己的<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
。如果我需要做一些额外的处理,事情就会开始失败。
我已经尝试过以described by Google的身份运行业务逻辑:
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
request => {
...
})
此方法的问题在于,即使我能够要求我的Player
库成功加载视频,截距也需要返回null或修改后的request
。
当我什么也不返回时,playerManager
认为没有加载媒体的请求。
如果我确实返回了“修改后的请求”,则默认的媒体加载逻辑将启动,由于URL格式错误,不可避免地失败。
在任何一种情况下,playerManager
实例报告尚未准备好接收播放命令。
使用自定义<video>
元素设置CAF接收器的正确方法是什么?