2016-05-16 9 views
2

Ich benutze AVFoundation AVPlayer zum Streamen von externen mp3-Dateien. Ich habe einen Zähler auf dem Backend, der zählt, wie oft eine Datei geladen wurde. Der einzige Client für diesen Dienst ist nur ich und wenn ich den AVPlayer trigge, erhöht der Zähler zwei, was bedeutet, dass der AVPlayer die Anfrage zweimal durchführt. Gibt es dafür einen Grund oder wie kann ich das verhindern? Hier ist mein Code:Warum lädt der AVPlayer von Swift das playerItem zweimal auf einmal?

@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() 
} 
+0

Haben Sie sehen, welche Art von Anfragen gestellt werden? Könnte man nur eine Header-Anfrage und eine andere für die eigentlichen Daten sein? – ColGraff

Antwort

4

AVPlayer macht eine Netzwerk-Anforderung an den URL, wenn Sie den Player mit AVPlayerItem initialisieren. Dieser Aufruf ruft nur die Dateiinformationen und die Dateigröße ab. (An diesem Punkt bin ich in der Lage, 2 Anfragen irgendwann zu beobachten, was Ihre Anzahl auf 3 erhöhen könnte)

Später, wenn Sie den Player an eine beliebige Ansicht anhängen, wird ein weiterer Aufruf ausgeführt, um die vollständige Datei abzurufen. (Sie können Charles benutzen, um Ihren Netzwerkverkehr zu beobachten, FYI)

Dieses Verhalten gleiche ist, wenn Sie den Player mit initinit(url:) So kann ich keine Möglichkeit sehen, dass dies geschieht im Moment verhindern könnte.

enter image description here

+1

Große Antwort! Danke, dass Sie so beschreibend sind, und danke für den Charles-Tipp. ;) – Guney