在一个快速的项目中,我正在使用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属性,以查看在主队列与后台队列上执行是否有所不同,但是无论队列类型如何,我都会遇到相同的行为。