【问题标题】:How to handle error code -43 from NSOSStatusErrorDomain when initializing AVAudioPlayer Object?初始化 AVAudioPlayer 对象时如何处理来自 NSOSStatusErrorDomain 的错误代码 -43?
【发布时间】:2011-04-06 20:00:02
【问题描述】:

我在使用 AVAudioPlayer 时观察到了奇怪的行为

以下是代码:

AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@",fileName]] error: &error];

在此,我从服务器下载文件并存储在应用程序的缓存目录中。

我收到以下错误:

Error in playing =
Domain = NSOSStatusErrorDomain
Code = -43
Description = Error Domain=NSOSStatusErrorDomain Code=-43 "The operation couldn’t be completed. (OSStatus error -43.)"

我还验证了该文件是否存在于该位置。 每次我重新启动我的应用程序时,我都会收到相同的歌曲播放错误。 一段时间后,当我尝试运行相同的代码时,我的播放器运行良好,没有任何错误。

谁能告诉我如何处理这个错误?

另外,谁能解释一下是什么问题?

【问题讨论】:

  • 我得到了一些非常相似的东西——除了我能够播放本地音频文件,但不能使用 URL 播放远程文件。你有没有弄清楚 OSStatus -43 的含义和正确响应?
  • 该文件未存储在应用程序缓存目录的本地路径中。我只使用那条路径。不是远程路径。
  • 我没有得到任何关于“OSStatus -43”的信息。它只声明“操作无法完成。”
  • 我遇到了同样的错误,经过验证我发现iOS版的safari也有这个mp3文件的问题

标签: avaudioplayer


【解决方案1】:

AVAudioPlayer 不支持通过 HTTP 流式传输。尝试使用 AVPlayer。

【讨论】:

  • 这绝对是正确答案。 AVPlayer 的 API 稍有不同,但只是略有不同,它将通过 HTTP 播放音频。 HTTP urls 将使 AVAudioPlayer 给出错误 -43。
  • 但是用 AVPlayer 很难暂停歌曲,它会在调用 stop 时停止。虽然 xcode 需要时间将 url 转换为数据,但最好使用 AVAudioPlayer 来暂停和停止歌曲,所以向@Robin L +1 以获得适当的答案,向您 +1 以获得完美的知识
  • 在 iOS 5 中,似乎还需要 AVPlayer 从音乐库加载 URL(使用 ipod-library:// 协议)。 AVAudioPlayer 在 iOS 6 和 7 中处理得很好。
【解决方案2】:

我在这段代码中遇到了同样的错误,尽管我可以验证 songCacheURL 是有效的并且文件是可用的:

self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:songCacheURL error:&error];

我能够通过首先将文件加载到 NSData 元素中然后使用它来初始化 AVAudioPlayer 来解决此问题,如下所示:

NSData *songFile = [[NSData alloc] initWithContentsOfURL:songCacheURL options:NSDataReadingMappedIfSafe error:&error1 ];
self.audioPlayer = [[AVAudioPlayer alloc] initWithData:songFile error:&error2];

我希望这对其他人有所帮助。

罗宾

【讨论】:

  • 如果有人认为这是在 iOS 5 中加载 ipod-library:// URL 的解决方案,initWithContentsOfURL 方法将失败并返回错误代码 256。
【解决方案3】:

我遇到了类似的问题。事实证明,我只用文件名初始化 url 并省略了包资源路径。您的 url init 应该类似于:

NSURL *url= [NSBundle URLForResource: @"my_sound" withExtension:@"mp3"];

【讨论】:

    【解决方案4】:

    我遇到了同样的错误,而且 URL 似乎是 nil。 尝试检查您的 URL 对象是否为 != nil。 也许你的路径是错误的。

    【讨论】:

      【解决方案5】:

      我在使用基于本地文件的 URL 时遇到了与 AVAudioPlayer 类似的问题。正如已经确定的那样,问题在于文件名不正确,我只是没有注意到其名称中的前导空格。因此,首先请仔细检查您的网址。

      【讨论】:

        【解决方案6】:

        我有一个类似的问题,问题是我的 mp4 文件目标成员资格复选框未选中,一旦我检查它,文件播放完美。

        【讨论】:

          【解决方案7】:

          我有同样的问题,我现在解决了。问题出在 mp3 文件的名称上。在代码中是文件名“Yes.MP3”,但文件名是“Yes.mp3”。当我在模拟器中运行应用程序时一切正常,因为(我不知道为什么)模拟器不区分大小写。当您在设备上运行相同的代码时,在这种情况下会发生此错误。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-12-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-08
            • 2011-07-26
            • 1970-01-01
            相关资源
            最近更新 更多