为什么 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。我们刚刚添加了一个跟踪器,以便仅在事件侦听器尚不存在时才添加它们。