为什么javascript`for`循环快速静音/取消静音视频

问题描述 投票:1回答:1

我有一个内部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()
                  }
                }
              }

这段代码通常可以完美运行,但有时会在非常不方便的时候失败。问题的根源是什么,或者我如何自己调试?

javascript loops electron html5-video
1个回答
0
投票

事实证明问题只出现在启动播放器后不是第一个加载的视频。我们能够追踪到我们正在获得多个相互争斗的eventListeners。我们刚添加了一个跟踪器,只在它们尚不存在时添加事件监听器。

© www.soinside.com 2019 - 2024. All rights reserved.