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

时间:2016-05-16 00:02:09

标签: ios swift avfoundation avplayer

我正在使用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()
}

1 个答案:

答案 0 :(得分:5)

每当您使用Gather初始化播放器时,

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

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

AVPlayerItem玩家init时,此行为相同所以我看不出任何方法可以防止此刻发生这种情况。

enter image description here