使用<video>元素创建自定义CAF接收器

时间:2018-06-24 14:38:16

标签: chromecast google-cast

我正在尝试使用自己的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接收器的正确方法是什么?

0 个答案:

没有答案