为什么 Swift 的 AVPlayer 在一次播放中加载 playerItem 两次?

Why does Swift's AVPlayer loads the playerItem for twice on one play?

我正在使用 AVFoundation 的 AVPlayer 播放外部 mp3 文件。我在后端有一个计数器,用于计算文件加载的次数。此服务的唯一客户端只有我,每当我触发播放 AVPlayer 时,计数器都会增加两个,这意味着 AVPlayer 发出两次请求。这是有原因的吗,或者我怎样才能防止这种情况发生?这是我的代码:

@IBAction func listen(sender: UIButton) {
    let urlstring = "http://api.server.com/endpoint-to-mp3"
    let url = NSURL(string: urlstring)

    let playerItem = AVPlayerItem(URL: url!)

    let player = AVPlayer(playerItem: playerItem)

    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.frame = CGRectMake(0, 0, 300, 50)
    self.view.layer.addSublayer(playerLayer)

    player.volume = 1.0
    player.play()
}
每当您使用 AVPlayerItem 初始化播放器时,

AVPlayer 都会向 URL 发出网络请求。此调用仅获取文件信息和文件大小。 (此时我有时可以观察到 2 个请求,这可能会将您的计数增加到 3)

稍后当您将播放器附加到任何视图时,会发生另一个调用以获取完整文件。 (你可以用Charles观察你的网络流量,仅供参考)

当你 init 玩家 init(url:) 时,这种行为是相同的,所以我目前看不出有什么方法可以防止这种情况发生。