Аудиопроигрыватель требует времени для загрузки - PullRequest
0 голосов
/ 11 июля 2020

У меня есть следующий код

         var downloadTask = URLSessionDownloadTask()
        downloadTask = URLSession.shared.downloadTask(with: url, completionHandler: { (url, response, error) in
            self.play(url: url!)
        })
        downloadTask.resume()


 func play (url: URL) {
        do {
            audioPlayer = try AVAudioPlayer(contentsOf: url as URL)
            audioPlayer.prepareToPlay()
            audioPlayer.volume = 1.0
            audioPlayer.enableRate = true
            
            updateCC()
            isReadyToPlay = true
            
            DispatchQueue.main.sync {
                self.remainingTimeLabel.text = self.stringFromTimeInterval(interval: audioPlayer.duration)
                
                self.slider.minimumValue = 0.0
                self.slider.maximumValue = Float(audioPlayer.duration)
                self.slider.setValue(0.0, animated: true)
                
                self.titleLabel.text = self.book.title
                self.artistLabel.text = self.book.author
                self.imageView.sd_setImage(with: URL(string: self.book.image as! String), placeholderImage: nil)
                self.imageView.layer.shadowColor = UIColor.gray.cgColor
                self.imageView.layer.shadowOpacity = 0.3
                self.imageView.layer.shadowOffset = CGSize(width: 4, height: 4)
                self.imageView.layer.shadowRadius = 5
                self.imageView.layer.masksToBounds = false
                
                NetworkActivityIndicatorManager.networkOperationFinished()
                LoadingIndicatorView.hide()
            }
            
        } catch let error as NSError {
            let params = [
                "Error Message": "Audio: \(error.localizedDescription)",
                "Method": "Audio",
                "UserId": MUser.sharedInstance.userId
            ];
            Flurry.logEvent("Error", withParameters: params);
            
        } catch {
            let params = [
                "Error Message": "AVAudio init failed",
                "Method": "Audio",
                "UserId": MUser.sharedInstance.userId
            ];
            Flurry.logEvent("Error", withParameters: params);
        }
    }

Когда я перехожу на экран, где загружается аудиоплеер, требуется некоторое время для загрузки / воспроизведения звука. Есть ли способ транслировать аудио? или ускорить загрузку.

1 Ответ

0 голосов
/ 11 июля 2020

Возможно, вы захотите выполнить AVAudioPlayer(contentsOf:) в фоновой очереди. Вот как это сделать:

func play (url: URL) {
       do {
        URLSession.shared.dataTask(with: url) { (data, _, _) in
            self.audioPlayer = try AVAudioPlayer(data: data)
            self.audioPlayer.prepareToPlay()
            //...
        }.resume()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...