我在使用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.)"
我还验证了该位置存在该文件。 每次我重新启动我的应用程序时,我都会收到相同的歌曲播放错误。 一段时间后,当我尝试运行相同的代码时,我的播放器工作正常,没有任何错误。
有谁能告诉我如何处理这个错误?
此外,任何人都可以解释我的问题是什么?
答案 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”。当我在模拟器中运行应用程序时一切正常,因为(我不知道为什么)模拟器不区分大小写。当您在设备上运行相同的代码时,在这种情况下会发生此错误。