Chimeejs / chimee

a video player framework aims to bring wonderful experience on browser
http://chimee.pyzy.net/
MIT License
2.4k stars 201 forks source link

play和volumechange等事件不触发的一些诡异问题 #133

Closed bravelincy closed 6 years ago

bravelincy commented 6 years ago

在实例上监听play和volumechange等事件,对播放器执行相关操作后,不触发事件

Expected Behavior【期望行为】

只要在实例上监听了事件,在播放器收到某个操作后,都应该触发该事件

Current Behavior【实际表现】

事件不触发,可以看到控制条上的播放按钮还是“待播放”状态,音量条还是有音量。

Steps to Reproduce【复现方法】

https://codesandbox.io/s/p70orjnnr0

import chimee from "chimee";
import controlbar from "chimee-plugin-controlbar";

const plugin = {
  name: 'plugin',
  events: {
    play () {
      console.log('plugin play')
    }
  }
}

chimee.install(plugin)

const player = new chimee({
  wrapper: "#app",
  autoplay: false,
  controls: true,
  src: "http://cdn.toxicjohann.com/lostStar.mp4",
  plugin: [plugin.name]
});

player.on('play', e => {
  console.log('play1')
})

player.$video.addEventListener('play', e => {
  console.log('play2')
})

player.play()
bravelincy commented 6 years ago

可能会触发chrome的自动播放限制,但在实际情况中可能用户MEI比较高https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#mei 还是可以自动播放,所以在查看问题复现时请把“自动播放播放策略”关掉。

bravelincy commented 6 years ago

另外,我发现在点播时加上box: 'native'设置项可以触发,但是我在实际开发中测试直播时,box: 'hls'又不触发,暂时没有找到问题出现的本质原因是什么。

bravelincy commented 6 years ago

可以看下是不是因为绑定事件时和操作播放器时的video不是同一个node节点引起的。

toxic-johann commented 6 years ago

主动 play 并没有触发 play 事件

toxic-johann commented 6 years ago

已定位问题,第一次 load 触发 switchKernel 。同时进行 play 的话会造成事件传递缺失。

toxic-johann commented 6 years ago

0.10.2 中修复