AVAudioPlayer с внешним URL-адресом для * .m4p - PullRequest
17 голосов
/ 22 октября 2009

Моя проблема заключается в следующем. Я получил этот код, и я предполагаю, что поврежден 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];

Есть предложения, что здесь не так?

Ошибка & показывает это:

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

Ответы [ 3 ]

37 голосов
/ 22 октября 2009

AVAudioPlayer работает только с локальными URL-адресами. Это должен быть URL файла (file: //)

См. Технические вопросы и ответы Apple QA1634

9 голосов
/ 22 октября 2009

Сначала я попробовал это, но получил ошибку 2003334207:

NSData *soundData = [NSData dataWithContentsOfURL:URL];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithData:soundData error:&error];

Кажется, что 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);
7 голосов
/ 18 ноября 2015

Вместо использования AVAudioPlayer вы можете использовать AVPlayer. AVPlayer также работает с удаленными URL-адресами

...