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

我正在使用AVFoundation的AVPlayer来stream式传输外部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初始化播放器, AVPlayerItem都会向URL发出networking请求。 这个调用只能获取文件信息和文件大小。 (此时我可以观察到2个请求,这可能会使你的计数增加到3)

稍后,当您将播放器连接到任何视图时,就会发生另一个调用以获取完整文件。 (您可以使用Charles来观察您的networkingstream量,fyi)

当你用init(url:) init播放器时,这种行为是相同的。所以我没有看到任何可以防止这种情况发生的方式。

在这里输入图像说明