ios - 音频播放器需要一段时间才能加载
问题描述
我有以下代码
var downloadTask = URLSessionDownloadTask()
downloadTask = URLSession.shared.downloadTask(with: url, completionHandler: { (url, response, error) in
self.play(url: url!)
})
downloadTask.resume()
func play (url: URL) {
do {
audioPlayer = try AVAudioPlayer(contentsOf: url as URL)
audioPlayer.prepareToPlay()
audioPlayer.volume = 1.0
audioPlayer.enableRate = true
updateCC()
isReadyToPlay = true
DispatchQueue.main.sync {
self.remainingTimeLabel.text = self.stringFromTimeInterval(interval: audioPlayer.duration)
self.slider.minimumValue = 0.0
self.slider.maximumValue = Float(audioPlayer.duration)
self.slider.setValue(0.0, animated: true)
self.titleLabel.text = self.book.title
self.artistLabel.text = self.book.author
self.imageView.sd_setImage(with: URL(string: self.book.image as! String), placeholderImage: nil)
self.imageView.layer.shadowColor = UIColor.gray.cgColor
self.imageView.layer.shadowOpacity = 0.3
self.imageView.layer.shadowOffset = CGSize(width: 4, height: 4)
self.imageView.layer.shadowRadius = 5
self.imageView.layer.masksToBounds = false
NetworkActivityIndicatorManager.networkOperationFinished()
LoadingIndicatorView.hide()
}
} catch let error as NSError {
let params = [
"Error Message": "Audio: \(error.localizedDescription)",
"Method": "Audio",
"UserId": MUser.sharedInstance.userId
];
Flurry.logEvent("Error", withParameters: params);
} catch {
let params = [
"Error Message": "AVAudio init failed",
"Method": "Audio",
"UserId": MUser.sharedInstance.userId
];
Flurry.logEvent("Error", withParameters: params);
}
}
当我转换到加载音频播放器的屏幕时,加载/播放音频需要一段时间。有没有办法流式传输音频?或使其加载更快。
解决方案
您可能想AVAudioPlayer(contentsOf:)
在后台队列中执行。在这里你如何做到这一点:
func play (url: URL) {
do {
URLSession.shared.dataTask(with: url) { (data, _, _) in
self.audioPlayer = try AVAudioPlayer(data: data)
self.audioPlayer.prepareToPlay()
//...
}.resume()
}
}
推荐阅读
- c - 为什么 MATLAB 停止运行?
- github-api - 是否可以通过 Github API 压缩提交?
- ruby-on-rails - Rails:编辑表单发送到发布路线而不是补丁
- java-8 - Anypoint Studio 6.4 在 OS X BigSur 11.3.1 上变得无响应
- java - Neo4j 数据加载性能:驱动程序与自定义程序
- python - 为 reddit 抓取代码放入 break 循环
- c# - 在 Xamarin Android 中询问权限 CaptureAudioOutput 的问题
- c# - Unity 2d某种输入滞后,还是别的什么?
- serialization - 如何将具有 C++ 样式的十六进制浮点数 (%a) 的字符串解析为 f64?
- assembly - 加载字/存储字中的字节序混淆 (MIPS/QtSpim)