2016-05-16 10 views
2

私は外部mp3ファイルをストリーミングするためにAVFoundationのAVPlayerを使用しています。バックエンドには、ファイルが何回ロードされたかをカウントするカウンタがあります。このサービスの唯一のクライアントは私だけであり、AVPlayerを再生するためにトリガーするたびに、カウンターが2つ増えてAVPlayerが要求を2回行うことを意味します。これには理由があるのでしょうか、それをどうやって防ぐことができますか?ここに私のコードは次のとおりです。あなたがAVPlayerItemを持つプレイヤーを初期化するたびSwiftのAVPlayerが1回の再生でplayerItemを2回ロードするのはなぜですか?

@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

あなたが行われた要求の種類を参照していますか?ヘッダーのみのリクエストでも、実際のデータに対するリクエストでもかまいませんか? – ColGraff

答えて

4

AVPlayerURLへのネットワーク要求を行っています。この呼び出しは、ファイル情報とファイルサイズだけを取得します。 (この時点で、いつか2つのリクエストを観測することができ、カウントを3に増やすことができます)

後でプレーヤを任意のビューに接続しているときに、完全なファイルを取得しようとしています。あなたはだから私は、現時点ではこれを防ぐことができどのような方法が表示されないinit(url:)を持つプレイヤーをinitすると、この動作は同じである

(あなたはFYI、ネットワークトラフィックを観察するためにCharlesを使用することができます)。

enter image description here

+1

すばらしい答え!とても説明的でありがとう、チャールズのチップに感謝してくれてありがとう。 ;) – Guney

関連する問題