初始化AVAudioPlayer对象时如何处理来自NSOSStatusErrorDomain的错误代码-43?

时间:2010-09-01 13:50:16

标签: avaudioplayer

我在使用AVAudioPlayer时发现了奇怪的行为

以下是代码:

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

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

我收到以下错误:

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

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

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

此外,任何人都可以解释我的问题是什么?

7 个答案:

答案 0 :(得分:27)

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

答案 1 :(得分:23)

我对此代码有同样的错误,即使我可以验证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];

我希望能帮到别人。

罗宾

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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