AVAudioPlayer,外部URL为*.m4p

tom*_*mmy 17 iphone audio url avaudioplayer

我的问题如下.我得到了这个代码,我猜一个腐败的NSURL,因为初始化后AVAudioPlayer是零:

NSString *dummyURLString = @"http://a825.phobos.apple.com/us/r2000/005/Music/d8/a8/d2/mzi.jelhjoev.aac.p.m4p";
NSError *error;
NSURL *url = [NSURL URLWithString:dummyURLString]; 
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
[player play];
Run Code Online (Sandbox Code Playgroud)

有什么建议这里有什么问题吗?

&错误显示:

Error Domain=NSOSStatusErrorDomain Code=-43 "Operation could not be completed. (OSStatus error -43.)"
Run Code Online (Sandbox Code Playgroud)

Nie*_*tle 37

AVAudioPlayer仅适用于本地URL.它必须是文件URL(file://)

请参阅Apple的技术问答QA1634


mah*_*udz 9

我先试了这个,但得到了错误2003334207:

NSData *soundData = [NSData dataWithContentsOfURL:URL];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithData:soundData error:&error];
Run Code Online (Sandbox Code Playgroud)

似乎AVAudioPlayer真的想要一个文件.所以我先把数据放到一个文件中:

NSURL *url = [NSURL URLWithString:@"http://a825.phobos.apple.com/us/r2000/005/Music/d8/a8/d2/mzi.jelhjoev.aac.p.m4p"]; 
NSData *soundData = [NSData dataWithContentsOfURL:url];
NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                        NSUserDomainMask, YES) objectAtIndex:0] 
                        stringByAppendingPathComponent:@"sound.caf"];
[soundData writeToFile:filePath atomically:YES];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL
                fileURLWithPath:filePath] error:NULL];  
NSLog(@"error %@", error);
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以使用AVPlayer,而不是使用AVAudioPlayer.AVPlayer也可以与远程URL一起使用