如何从网址下载时播放音频?

时间:2016-09-10 12:30:24

标签: swift audio

我需要创建音频播放器。我从网址获取音频,我从网址下载音频然后我播放它。但我需要播放音频,而音频下载我怎么能这样做?

这是我的代码如何从url:

播放
 func URLSession(session: NSURLSession,
                downloadTask: NSURLSessionDownloadTask,
                didFinishDownloadingToURL location: NSURL){
    do {
        loadingView.hidden=true
        actInd.stopAnimating()
        UIApplication.sharedApplication().networkActivityIndicatorVisible = false
        player=try AVAudioPlayer(contentsOfURL: location)
        player?.delegate=self
        selectedAudio.status=true
        selectedAudio.isDownload=true
        player?.enableRate=true
        switch speedType_Index {
        case 0:
            appDelegate.player?.rate=Float(1)
            break
        case 1:
            appDelegate.player?.rate=Float(1.5)
            break
        case 2:
            appDelegate.player?.rate=Float(2)
            break
        case 3:
            appDelegate.player?.rate=Float(0.5)
            break
        default:
            break
        }
        switch playingType_Index {
        case 0:
            appDelegate.player?.numberOfLoops = 0
            break
        case 1:
            appDelegate.player?.numberOfLoops = -1
            break
        default:
            break
        }
        player?.volume=Float(volume)
        player?.play()
        self.tableView.reloadData()

    }catch let error as NSError{
        print(error.localizedDescription)
    }
}

func URLSession(session: NSURLSession,
                downloadTask: NSURLSessionDownloadTask,
                didWriteData bytesWritten: Int64,
                             totalBytesWritten: Int64,
                             totalBytesExpectedToWrite: Int64){
    let progress=Float(totalBytesWritten) / Float(totalBytesExpectedToWrite);
    bite.text=String(format: "%.1f%%",progress * 100)
}

1 个答案:

答案 0 :(得分:4)

AVAudioPlayer无法 - 直接 - 从远程网址流式传输内容。

正如documentation for AVAudioPlayer

中所述
  

Apple建议您使用此类进行音频播放,除非您正在播放从网络流中捕获的音频或需要非常低的I / O延迟。

例如,另请参阅this threadthis answer

如果您想从远程网址流式传输,可以使用AVPlayer代替AVAudioPlayer。可以找到文档here

要创建一个能够流式播放的播放器,您可以沿着这些方向做点什么。

var player = AVPlayer() //declared as a property on your class

if let url = NSURL(string: "https://archive.org/download/testmp3testfile/mpthreetest.mp3") {
    player = AVPlayer(URL: url)
    player.volume = 1.0
    player.play()
}

希望对你有所帮助。