Проигрывание звука с удаленного URL занимает около 10 секунд - PullRequest
0 голосов
/ 05 мая 2019

Я могу воспроизвести звук с одного URL.Но для воспроизведения звука требуется около 10 секунд.

@IBAction func playBtnTap(_ sender: Any) {
    let url = URL(string: muscUrl!)!
    let playerItem = AVPlayerItem(url: url)
    self.player = AVPlayer(playerItem: playerItem)
    self.player!.play()
}

Я новичок в iOS.Я не уверен, как я могу скачать URL аудио и затем воспроизвести этот звук?Я не хочу, чтобы эта 10-секундная задержка воспроизводила звук.

Обновление, я пытался:

override func viewDidLoad() {
    super.viewDidLoad()
    let urlstring = "http://radio.spainmedia.es/wp-content/uploads/2015/12/tailtoddle_lo4.mp3"
    let url = NSURL(string: urlstring)
    print("the url = \(url!)")
    downloadFileFromURL(url: url!)
}

func downloadFileFromURL(url:NSURL){
    var downloadTask:URLSessionDownloadTask
    var request = URLRequest(url:url as URL)
    downloadTask = URLSession.shared.downloadTask(with: request, completionHandler: { (URL, response, error) -> Void in
        self.play(url: URL as! NSURL)
    })

    downloadTask.resume()
}

func play(url:NSURL) {
    print("Playing \(url)")

    do {
        self.player = try AVAudioPlayer(contentsOf: url as URL)
        player!.prepareToPlay()
        player!.volume = 1.0
        player!.play()
    } catch let error as NSError {
        //self.player = nil
        print(error.localizedDescription)
    } catch {
        print("AVAudioPlayer init failed")
    }
}

получить ошибку в консоли:

Операция не можетне будет завершено.(OSStatus error 1954115647.)

в строке self.player = try AVAudioPlayer(contentsOf: url as URL)

1 Ответ

0 голосов
/ 05 мая 2019

Ваш первый код правильный. Я не испытываю каких-либо значительных задержек при запуске его на моем устройстве. Естественно, при медленном интернет-соединении может потребоваться некоторое время для заполнения буфера, прежде чем может начаться воспроизведение; но ваш второй код, загружающий и затем воспроизводящий, будет поэтому медленнее.

Если вы хотите знать, что происходит с буфером AVPlayer, используйте KVO для отслеживания изменений в его timeControlStatus.

...