ios - 来自远程 URL 的音频开始播放需要将近 10 秒
问题描述
我可以从一个 URL 播放声音。但播放音频需要将近 10 秒。
@IBAction func playBtnTap(_ sender: Any) {
let url = URL(string: muscUrl!)!
let playerItem = AVPlayerItem(url: url)
self.player = AVPlayer(playerItem: playerItem)
self.player!.play()
}
我是 iOS 新手。我不确定,如何下载 URL 音频然后播放该音频?我不希望 10 秒的延迟来播放音频。
更新,我试过了:
override func viewDidLoad() {
super.viewDidLoad()
let urlstring = "http://radio.spainmedia.es/wp-content/uploads/2015/12/tailtoddle_lo4.mp3"
let url = NSURL(string: urlstring)
print("the url = \(url!)")
downloadFileFromURL(url: url!)
}
func downloadFileFromURL(url:NSURL){
var downloadTask:URLSessionDownloadTask
var request = URLRequest(url:url as URL)
downloadTask = URLSession.shared.downloadTask(with: request, completionHandler: { (URL, response, error) -> Void in
self.play(url: URL as! NSURL)
})
downloadTask.resume()
}
func play(url:NSURL) {
print("Playing \(url)")
do {
self.player = try AVAudioPlayer(contentsOf: url as URL)
player!.prepareToPlay()
player!.volume = 1.0
player!.play()
} catch let error as NSError {
//self.player = nil
print(error.localizedDescription)
} catch {
print("AVAudioPlayer init failed")
}
}
在控制台中出现错误:
操作无法完成。(OSStatus 错误 1954115647。)
排队self.player = try AVAudioPlayer(contentsOf: url as URL)
解决方案
您的第一个代码是正确的。当我在我的设备上运行它时,我没有遇到任何明显的延迟。自然,在缓慢的 Internet 连接上,在开始播放之前可能需要一些时间来填充缓冲区;但是您的第二个代码,下载然后播放,因此会更慢。
如果您想知道 AVPlayer 的缓冲区发生了什么,请使用 KVO 跟踪其timeControlStatus
.
推荐阅读
- git - Sourcetree:如何在一系列提交中查看所有修改/添加/删除的文件?
- python-3.x - 如何在终端打印方块?
- css - 如何改变材质卡的形状(Angular 6)?
- amazon-web-services - 内存和 cpu 的 AWS ECS RunTask 覆盖不起作用
- java - 如何在 Windows 上更改 java -version 以显示 Java 1.9
- asp.net-mvc - http://localhost:52951/app/app/app.module.js 404(未找到)布局中的脚本不起作用
- javascript - 仅 IE 中的错误 Dojo 小部件“已使用该 ID 注册”
- html - 上下箭头,如何优化 CSS?
- .net - 在 PowerShell 类中使用外部代码
- mysql - 使用 SELECT - JOIN 从同一个表中获取两个值