我有一个内部electron
应用程序用于播放带过滤器的视频。源代码here。在大多数计算机上,代码可以完美地运行,但是在展示给一类学生的视频的展台计算机上,当应用mute
过滤器时,player.mute()
和player.unmute()
每秒快速交替多次。这只发生在某些计算机上某些电影的某些mute
滤镜上。我需要帮助来追踪问题的根源。
这个问题的相关部分(我认为)是在script.js, lines 224-258。
for (var i = 0; i < numAnnotations; i++) {
var vMuted = player.video_obj.muted
var vBlanked = player.video_obj.classList.contains('blanked')
var vBlurred = player.video_obj.classList.contains('blurred')
var a = player.annotations[i]
var aStart = a['start']
var aEnd = a['end']
var aType = a['type']
var aDetails = a['details']
switch (a['type']) {
case 'skip':
if (time >= aStart && time < aEnd) {
console.log('skipped to '+Number(aEnd).toFixed(3))
player.skip_to(aEnd)
}
break
case 'mute':
case 'mutePlugin':
if (currently.muting === -1 || currently.muting === i) { //if no annotation is currently muting or *this* current annotaiton is muting
if (time >= aStart && time < aEnd) { //if within annotation time
if (!vMuted) {
console.log('mute on')
currently.muting = i
player.mute()
}
} else {
if (vMuted) {
console.log('mute off')
currently.muting = -1
player.unmute()
}
}
}
这段代码通常可以完美运行,但有时会在非常不方便的时候失败。问题的根源是什么,或者我如何自己调试?
事实证明问题只出现在启动播放器后不是第一个加载的视频。我们能够追踪到我们正在获得多个相互争斗的eventListeners。我们刚添加了一个跟踪器,只在它们尚不存在时添加事件监听器。