为什么 javascript `for` 会快速循环 mute/unmute video
why does javascript `for` loop rapidly mute/unmute video
我有一个内部 electron
应用程序可以播放带滤镜的视频。源代码 here。在大多数计算机上,代码可以完美运行,但在向 class 名学生展示视频的展位计算机上,当应用 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()
}
}
}
此代码通常可以完美运行,但有时会在非常不方便的时候失败。问题的根源是什么,或者我该如何自己调试?
事实证明,问题仅出在播放器启动后加载的第一个视频以外的视频上。我们能够追踪到我们得到了多个相互争斗的 eventListener。我们刚刚添加了一个跟踪器,以便仅在事件侦听器尚不存在时才添加它们。
我有一个内部 electron
应用程序可以播放带滤镜的视频。源代码 here。在大多数计算机上,代码可以完美运行,但在向 class 名学生展示视频的展位计算机上,当应用 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()
}
}
}
此代码通常可以完美运行,但有时会在非常不方便的时候失败。问题的根源是什么,或者我该如何自己调试?
事实证明,问题仅出在播放器启动后加载的第一个视频以外的视频上。我们能够追踪到我们得到了多个相互争斗的 eventListener。我们刚刚添加了一个跟踪器,以便仅在事件侦听器尚不存在时才添加它们。