Chromecast 使用<;创建自定义CAF接收器;视频>;要素

Chromecast 使用<;创建自定义CAF接收器;视频>;要素,chromecast,google-cast,Chromecast,Google Cast,我正试图用我自己的HTML5视频元素和支持库创建一个定制的CAF接收器。由于我正在使用自己的元素,因此我将按照如下方式设置playermanger实例: // My custom HTML5 video player const player = new Player(document.querySelector('#my-video')) const context = cast.framework.CastReceiverContext.getInstance() const player

我正试图用我自己的HTML5视频元素和支持库创建一个定制的CAF接收器。由于我正在使用自己的
元素,因此我将按照如下方式设置
playermanger
实例:

// 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
直接理解和使用。就是在我需要做一些额外处理的情况下,事情才开始失败

我已经尝试以以下方式运行我的业务逻辑:

这种方法的问题是,即使我能够要求我的
播放器
库成功加载视频,截取也需要返回null或修改的
请求

当我不返回任何内容时,
playerManager
认为没有加载媒体的请求。
如果我确实返回了一个“修改的请求”,那么默认的媒体加载逻辑就会启动,这不可避免地会因为URL“格式错误”而失败

在这两种情况下,
playerManager
实例都报告没有准备好接收播放命令


使用自定义
元素设置CAF接收器的正确方法是什么?

目前,CAF接收器尚不支持自定义播放器。那么我是否应恢复到v2接收器?
cast.receiver.media.Player
似乎有很多相同的功能。你知道我是否可以在这个类中使用自定义的
元素吗?V2确实支持自定义媒体播放器,但V2已被弃用。自定义媒体播放器仍然不受支持吗?
playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD,
    request => {
      ...
})