【问题标题】:AVAudioPlayer can't open an audio while screen off. Error: Error Domain=NSOSStatusErrorDomain Code=-54屏幕关闭时,AVAudioPlayer 无法打开音频。错误:错误域=NSOSStatusErrorDomain 代码=-54
【发布时间】:2020-01-11 21:26:34
【问题描述】:

当当前音频播放完毕后,我尝试播放下一个音频,我发现audioPlayerDidFinishPlaying。 当 iPhone 屏幕打开时,它可以正常工作。 如果我关闭屏幕,当我尝试打开AVAudioPlayer 的下一个音频时,会收到错误Error Domain=NSOSStatusErrorDomain Code=-54

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
    if flag {
        do {
            player = try AVAudioPlayer(contentsOf: url)
        } catch {
            print(error)
        }
    }
}

【问题讨论】:

  • 您无法在后台启动播放,包括锁定屏幕。您只能继续播放已经播放的内容(如果您配置为后台播放)。
  • 我看到了一种解决方案,可以在屏幕打开时制作 AVAudioPlayer 数组并在它们之间切换。好吗?
  • @matt 我查过了。它有效。

标签: ios swift iphone


【解决方案1】:

我必须使用AVAudioPlayer,因为它支持播放速率,但不支持在睡眠设备模式下创建 AVAudioPlayer 实例。 我的解决方案是在设备休眠之前创建 AVAudioPlayer 数组。 当前音频完成后,您应该从存储的数组中获取下一个实例。

您可以查看here

let players = [AVAudioPlayer]()
let index = 0

do {
    player = [
        try AVAudioPlayer(contentsOf: url1),
        try AVAudioPlayer(contentsOf: url2),
        try AVAudioPlayer(contentsOf: url3)
    ]
} catch {
    print(error)
}

players[index].play()

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
    if flag {
        index += 1
        players[index].play()
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    相关资源
    最近更新 更多