addPeriodicTimeObserver最初触发两次

时间:2019-12-12 01:50:47

标签: ios swift avplayer

在一个快速的项目中,我正在使用AVPlayer通过流播放mp3文件。我希望后台进程每播放五秒钟就跟踪MP3的进度。在我的课程中,我有一个名为player的AVPlayer对象和另一个类型为Any?的名为backgroundStateObserver的对象。这是我在课堂上定义它们的方式:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>
    DJ JUMO
  </title>
  <link href="style.css" rel="stylesheet" type="text/css">
</head>

<body>
  
  <div class="row">
    <div>
      <a href="https://www.instagram.com/djjumo/" target="_blank"><img class="social" src="https://i.ibb.co/N7dFXZ4/instagram.png"></a>
    </div>
    <div>
      <a href="" target="_blank"><img class="social" src="https://i.ibb.co/s3VrxZJ/twitter.png"></a>
    </div>
    <div>
      <a href="https://www.snapchat.com/add/djjumo" target="_blank"><img class="social" src="https://i.ibb.co/prCyYw3/snapchat.png"></a>
    </div>
    <div>
      <a href="" target="_blank"><img class="social" src="https://i.ibb.co/5Y77Bcm/facebook.png"></a>
    </div>
  </div>
  <img id="header" src="https://i.ibb.co/gdHS8by/header.png" alt="logo">

</body>

</html>

当要求播放mp3时,会触发以下代码:

class MyPlayer: ObservableObject {
    private var player = AVPlayer()    
    private var backgroundStateObserver: Any?

...

}

逻辑工作正常,我看到时间戳每五秒钟打印一次。我唯一的问题是它第一次执行时会触发两次。第一次执行后,它可以按预期运行,我只看到它每5秒触发一次。如果我暂停播放器,然后再次调用play方法,我会看到相同的行为,一次执行两次,然后从那时开始一次。最初,我以为我有多个观察员在运行,这就是为什么我添加代码以检查backgroundStateObserver是否为nil的原因。我还使用了queue属性,以查看在主队列与后台队列上执行是否有所不同,但是无论队列类型如何,我都会遇到相同的行为。

0 个答案:

没有答案