5

我使用以下代码播放音频文件。它可以很好地播放 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?”)。我通过弧扩展获得的错误代码的四个字母代码是“同步”。

4

3 回答 3

10

初始化音频播放器initWithData:error:解决了这个问题。
例如:

NSData* data = [NSData dataWithContentsOfURL:url] ;
AVAudioPlayer* audioPlayer = [[AVAudioPlayer alloc] initWithData:data error:outError];

令人失望的是,苹果基于扩展名初始化他们的音频播放器,而不是查看二进制数据并试图找出他们收到的数据类型。

于 2014-02-12T13:50:30.307 回答
6

找到了解决方案!

事实证明,如果我只是使用 AVPlayer 而不是 AVAudioPlayer 并且如果我使用 .acc 作为文件的扩展名,那么它就可以正常播放。现在我可以播放 aac 和 mp3 文件了。

于 2013-11-21T02:22:38.750 回答
1

.aac文件可以播放,试试看文件是否存在?

   NSFileManager *filemgr = [NSFileManager defaultManager];
   if ([filemgr fileExistsAtPath: backgroundMusicPath ] == YES)
   {
        NSLog(@"find file");
   }
于 2017-04-27T03:04:14.410 回答