我需要创建音频播放器。我从 url 获取音频,然后从 url 下载音频然后播放。但是我需要在下载音频时播放音频,我该怎么做?
这是我的代码,如何从 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)
}
最佳答案
AVAudioPlayer
无法直接从远程 URL 流式传输内容。
正如 documentation for AVAudioPlayer 中所说的那样
Apple recommends that you use this class for audio playback unless you are playing audio captured from a network stream or require very low I/O latency.
例如,另请参阅 this thread 或 this answer。
如果您想从远程 URL 进行流式传输,您可以使用 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()
}
希望对你有帮助。
关于swift - 从 url 下载时如何播放音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39426099/