AVAudioPlayer 使用 audioPlayerDecodeErrorDidOccur 中断播放,使用 NSOSStatusErrorDomain -50

Posted

技术标签:

【中文标题】AVAudioPlayer 使用 audioPlayerDecodeErrorDidOccur 中断播放,使用 NSOSStatusErrorDomain -50【英文标题】:AVAudioPlayer interrupting playback with audioPlayerDecodeErrorDidOccur, with NSOSStatusErrorDomain -50 【发布时间】:2010-12-07 15:55:18 【问题描述】:

在非常具体但可重现的情况下,我收到 audioPlayerDecodeErrorDidOccur:error: 并出现以下 NSError:

Error Domain=NSOSStatusErrorDomain Code=-50 "The operation couldn’t be completed. (OSStatus error -50.)"

这发生在同样使用 OpenAL 的游戏中;我们正在使用 OpenAL 播放声音,但尝试利用硬件 AAC 解码。但是,上述情况的发生似乎与我们在 OpenAL 中所做的任何事情无关。

在我们执行场景(游戏模式)切换后大约 2-3 秒会发生这种情况,但仅限于从场景到场景的某些组合。它甚至更奇怪,因为我们没有做与这些事件相关的重要音频。我已经证实我们对 AVAudioPlayer 没有做任何事情,但似乎 OpenAL 也没有做任何重要的事情。

我已尝试通过释放AVAudioPlayer 来解决此问题,并将其替换为引用同一文件、使用相同卷并从文件中的同一时间恢复的另一个。但是,几秒钟后,该播放器也抛出了上述错误。另一方面,切换到一首新歌曲会创建一个功能齐全的播放器,没有任何问题。

我的问题是:在这种情况下,错误 -50 是什么意思,或者您将如何弄清楚它的含义?

(如果有任何意义,游戏必须至少在 ios 3.1.2 上运行)。


我们已尝试禁用 OpenAL 部分代码;它没有帮助。

音频库代码在http://libxal.svn.sf.net/svnroot/libxal/trunk/公开提供

【问题讨论】:

【参考方案1】:

我们设法在 C++ 级别上搞砸了一些东西。这可能会导致 AVAudioPlayer 中的内存损坏,而不会真正使游戏崩溃,并且在模拟器和设备上的行为相同。我们解决了这个问题,现在 AVAudioPlayer 可以工作了。

【讨论】:

以上是关于AVAudioPlayer 使用 audioPlayerDecodeErrorDidOccur 中断播放,使用 NSOSStatusErrorDomain -50的主要内容,如果未能解决你的问题,请参考以下文章

使用 AVAudioPlayer 重复音频播放

使用 AVAudioPlayer 中途开始播放 .mp3

使用 AVAudioPlayer 没有声音

使用 AVAudioPlayer 处理钢琴样本——内存管理

我如何知道 AVAudioPlayer 是不是正在使用文件

使用 AVAudioPlayer 在 iOS 中自动平移