swift - 从 url 下载时如何播放音频?

标签 swift audio

我需要创建音频播放器。我从 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 threadthis 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/

相关文章:

iOS Swift 2 - 失败时 Alamofire 打印响应值

ios - 如何在 Swift 的 UIAlertController 中更改 UITextField 的高度?

python - ValueError:缓冲区大小必须是元素大小的倍数

swift - 带括号的 Swift 中闭包的输入参数

ios - 如何在inputAccessoryView上面设置PKHUD

ios - 在 Swift 中检查获取的对象是图像还是视频

audio - 处理,声音重叠

c# - 无法在 UWP 上从文本到语音的音频创建 URI 文件

iphone - 有什么方法可以检查麦克风是否有输入?

python - 如何解决此错误 “pygame.error: unable to open file ' PaddleHitSound.mp 3'”?