我的应用程序从我们的服务器下载 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 上的 Quicktime 上正常播放。我还将文件上传到 iPhone 模拟器,运行没有任何问题。该文件很好,但由于某种原因 AVAudioPlayer 不喜欢它。
我需要改变什么吗? NSData 是否有某种设置来指定它是什么类型的文件?有人有什么主意吗?
终于我找到了解决这个问题的方法!我没有使用 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];
}
当应用程序处理完该文件后,可以将其删除。希望他的帮助不仅仅是我!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)