2010-09-01 41 views
22

我看到奇怪的行为与AVAudioPlayer如何在初始化AVAudioPlayer对象时从NSOSStatusErrorDomain处理错误代码-43?

随后进行同时代码:

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.)" 

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

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

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

+0

我得到了一些*非常相似的东西 - 除了我能够获得本地音频文件播放,而不是使用URL的远程文件。你有没有想过对OSStatus -43的意义和正确的回应? – bradheintz 2010-09-30 15:18:35

+0

该文件未存储在应用程序缓存目录的本地路径中。而我只使用那条路径。不是远程路径。 – Tanu 2010-10-04 06:13:48

+0

我没有收到有关“OSStatus -43”的任何信息。它只是说“操作不能完成”。 – Tanu 2010-10-04 06:13:48

回答

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

如果有人将此视为在iOS 5中加载ipod-library:// URL的解决方案,则initWithContentsOfURL方法将失败,并显示错误代码256。 – arlomedia 2013-12-16 01:41:24

0

我有同样的错误,它似乎是URL为零。 尝试检查您的URL对象是否为!= nil。 也许你的路是错误的。

27

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

+1

这绝对是正确的答案。 AVPlayer的API略有不同,但略有不同,它会通过HTTP播放音频。 HTTP网址会使AVAudioPlayer给出错误-43。 – 2012-07-13 00:52:56

+0

,但用AVPlayer暂停歌曲很困难,它在停止调用时停止。尽管xcode需要时间将url转换为数据,但最好使用AVAudioPlayer用于暂停和停止歌曲,所以+1 to @Robin L for适当的答案&+1向您提供完美的知识 – 2013-01-17 10:00:34

+0

在iOS 5中,似乎AVPlayer还需要从音乐库(使用ipod-library://协议)加载URL。 AVAudioPlayer在iOS 6和7中处理得很好。 – arlomedia 2013-12-16 01:39:15

0

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

0

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

0

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

2

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