从 url 下载时如何播放音频?
Posted
技术标签:
【中文标题】从 url 下载时如何播放音频?【英文标题】:How play audio while downloading from url? 【发布时间】:2016-09-10 12:30:24 【问题描述】:我需要创建音频播放器。我从 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)
【问题讨论】:
【参考方案1】:AVAudioPlayer
不能 - 立即 - 从远程 URL 流式传输内容。
正如documentation for AVAudioPlayer 中所说的
Apple 建议您将此类用于音频播放除非您正在播放从网络流中捕获的音频或需要非常低的 I/O 延迟。
例如,另请参阅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()
希望对你有所帮助。
【讨论】:
我如何处理流式处理,例如在滑块流式中显示 抱歉,我没有任何经验,但也许您可以查看AVPlayerViewController
(developer.apple.com/library/ios/documentation/AVFoundation/…),它会为您提供控件,包括进度滑块。否则我确定其他人也遇到过这个问题,所以你应该能够找到解决方案。例如,尝试使用谷歌搜索 AVPlayer audio streaming controls
。
简单实现player.play()
时,是不是需要先下载整个文件再播放?或者它会自动做正确的工作?以上是关于从 url 下载时如何播放音频?的主要内容,如果未能解决你的问题,请参考以下文章