所以我有一个AVAudioPlayer,有时效果很好,但有时它会输出错误“Error Domain = NSOSStatusErrorDomain Code = 1954115647”(null)“”。这是代码:
override func viewDidLoad() {
super.viewDidLoad()
downloadFileFromURL(url: URL(string: mainPreviewURL)!)
}
func downloadFileFromURL(url: URL) {
var downloadTask = URLSessionDownloadTask()
downloadTask = URLSession.shared.downloadTask(with: url, completionHandler: {
customURL, response, error in
self.play(url: customURL!)
})
downloadTask.resume()
}
func play(url: URL) {
do {
player = try AVAudioPlayer(contentsOf: url)
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
player!.prepareToPlay()
player!.play()
} catch {
print(error)
}
}
答案 0 :(得分:0)
使do语句中的代码如下所示:
let songData = try NSData(contentsOfURL: songURL!, options: NSDataReadingOptions.mappedIfSafe)
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
player = try AVAudioPlayer(data: songData!, fileTypeHint: AVFileTypeMpegLayer3)
player!.prepareToPlay()
player!.play()
答案 1 :(得分:0)
如果您有这种错误代码,通常您的音频文件无法被Xcode / OS识别或损坏。要验证此步骤,您可以选择一个音频文件并尝试在Xcode中播放:
如果你有这个图片的完全缺席,而不是这张图片:
可能你应该修复你的音频文件。我检查了一下,我发现当你使用版本操作系统时会发生这种情况,例如 GIT (git合并,从其他系统中拉出来)或当你将文件复制到另一个系统时。 但是你应该记住,High Sierra可以从FINDER预览而不是Sierra播放FLAC的音频,所以你的问题可能只与你当前的操作系统有关。
解决方案:删除并恢复原始音频文件/文件版本。如果你试图在运行到塞拉利昂的模拟器中使用它,你可以继续遇到这个问题,试试High Sierra,看看发生了什么。
答案 2 :(得分:0)
对我来说,我的应用程序在我的应用程序中有权利“NSFileProtectionComplete”。这导致音频停止播放
有了这个设置,如果你的app导入了音频文件(而不是和app捆绑在一起),那么你需要写文件让他们有后台播放的权限,否则文件默认都会有“completeFileProtection” " 并且 AVAudioPlayer 在进入后台后不久将无法解码您的文件。
try data.write(to: fileURL, options: .completeFileProtectionUnlessOpen)