iPhone:AVAudioPlayer不支持的文件类型

mtmurdock

我的应用程序从我们的服务器上下载了一个mp3并将其回放给用户。该文件的速率为64 kbps(如果我理解正确的话,这在iPhone可接受的范围内)。我在数十个站点上查找了如何执行此操作,它们都建议我正是这样做的:

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://.../file.mp3"]];
NSError *e = nil;
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithData:data error&e];
[player setDelegate:self];

当我运行代码时,播放器返回null并出现以下错误:

2011-02-04 10:44:46.176 MyApp[6052:207] Error loading audio: Error Domain=NSOSStatusErrorDomain Code=1954115647 "The operation couldn’t be completed. (OSStatus error 1954115647.)"
2011-02-04 10:44:49.647 MyApp[6052:207] unsupported file type

我已经检查了文件,并且知道它可以工作。它在Windows Media Player和Mac上都可以正常播放。我还将该文件上传到了iPhone模拟器,并且可以正常播放。该文件很好,但是由于某些原因AVAudioPlayer不喜欢它。

我需要改变什么吗?NSData是否有某种设置来指定它是哪种文件?有谁有想法吗?

mtmurdock

终于,我找到了解决这个问题的方法!我没有使用NSData对象初始化音频播放器,而是将文件保存到Documents文件夹,然后使用文件URL初始化了播放器。

//download file and play from disk
NSData *audioData = [NSData dataWithContentsOfURL:someURL];
NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@.mp3", docDirPath , fileName];
[audioData writeToFile:filePath atomically:YES];

NSError *error;
NSURL *fileURL = [NSURL fileURLWithPath:filePath];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error];
if (player == nil) {
    NSLog(@"AudioPlayer did not load properly: %@", [error description]);
} else {
    [player play];
}

应用程序处理完文件后,可以将其删除。希望他的帮助不仅仅是我!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章