错误域= NSOSStatusErrorDomain代码= 1954115647“(null)”

时间:2017-02-01 13:53:14

标签: ios swift

所以我有一个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)
    }
}

3 个答案:

答案 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中播放:

enter image description here

如果你有这个图片的完全缺席,而不是这张图片:

enter image description here

可能你应该修复你的音频文件。我检查了一下,我发现当你使用版本操作系统时会发生这种情况,例如 GIT (git合并,从其他系统中拉出来)或当你将文件复制到另一个系统时。 但是你应该记住,High Sierra可以从FINDER预览而不是Sierra播放FLAC的音频,所以你的问题可能只与你当前的操作系统有关。

解决方案:删除并恢复原始音频文件/文件版本。如果你试图在运行到塞拉利昂的模拟器中使用它,你可以继续遇到这个问题,试试High Sierra,看看发生了什么。

答案 2 :(得分:0)

对我来说,我的应用程序在我的应用程序中有权利“NSFileProtectionComplete”。这导致音频停止播放

有了这个设置,如果你的app导入了音频文件(而不是和app捆绑在一起),那么你需要写文件让他们有后台播放的权限,否则文件默认都会有“completeFileProtection” " 并且 AVAudioPlayer 在进入后台后不久将无法解码您的文件。

try data.write(to: fileURL, options: .completeFileProtectionUnlessOpen)

来自: https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/encrypting_your_app_s_files