我使用以下代码播放音频文件。它适用于MP3文件,但当我尝试播放AAC文件时,[[AVAudioPlayer alloc] initWithContentsOfURL:]
返回nil
,我收到以下错误:
Error Domain=NSOSStatusErrorDomain Code=1937337955 "The operation couldn’t be completed. (OSStatus error 1937337955.)"
音频文件在Mac和iPhone上播放正常(当我通过电子邮件发送给自己时)并且在这里:https://dl.dropboxusercontent.com/u/2667666/song.aac
NSError *setCategoryError = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:&setCategoryError];
// Create audio player with background music
NSString *backgroundMusicPath = [[NSBundle mainBundle] pathForResource:@"song" ofType:@"aac"];
NSURL *backgroundMusicURL = [NSURL fileURLWithPath:backgroundMusicPath];
NSError *error;
_backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error];
if (!_backgroundMusicPlayer) {
NSLog(@"_backgroundMusicPlayer pointer is null!!");
}
[_backgroundMusicPlayer setDelegate:self]; // We need this so we can restart after interruptions
[_backgroundMusicPlayer prepareToPlay];
[_backgroundMusicPlayer play];
更新:如果我将文件的扩展名从aac更改为m4a,则错误代码更改为1954115647(其四个字母代码为“tip?”)。我通过arc扩展获得的错误代码的四字母代码是“sync”。
答案 0 :(得分:8)
使用initWithData:error:
初始化音频播放器解决了这个问题
例如:
NSData* data = [NSData dataWithContentsOfURL:url] ;
AVAudioPlayer* audioPlayer = [[AVAudioPlayer alloc] initWithData:data error:outError];
令人失望的是,苹果根据扩展程序初始化他们的音频播放器,而不是查看二进制数据并试图找出他们收到的数据类型。
答案 1 :(得分:5)
找到了解决方案!
事实证明,如果我只使用AVPlayer而不是AVAudioPlayer,并且如果我使用.acc作为文件的扩展名,那么它就可以正常播放。现在我可以播放aac和mp3文件。
答案 2 :(得分:1)
.aac文件可以播放,尝试检查文件是否存在?
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath: backgroundMusicPath ] == YES)
{
NSLog(@"find file");
}