NSString *songNameEscaped = [songName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *songURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", @"http://somerootpath/Music/", songNameEscaped]];
NSLog(@"songURL = %@", songURL);
NSError *avPlayerError = nil;
AVAudioPlayer *avPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:songURL error:&avPlayerError];
if (avPlayerError)
{
NSLog(@"Error: %@", [avPlayerError description]);
}
else
{
[avPlayer play];
}
如果我从NSLog(@"songURL = %@", songURL);
复制NSLog输出并将其粘贴到safari中,Quicktime插件播放文件没问题,所以我知道这些URL是有效的。我尝试使用.m4a
和.mp3
文件并试图从songName
中删除空格,但不管我总是得到什么错误:
错误域= NSOSStatusErrorDomain代码= -43“无法完成操作。(OSStatus错误-43。)”。
但它们只是在iTunes中创建的标准.m4a
/ .mp3
个文件。
答案 0 :(得分:4)
显然AVAudioPlayer不支持流式传输。 Apple建议使用AVPlayer,尽管它不像查找当前时间和持续时间那样方便。
答案 1 :(得分:1)
错误-43表示无法找到数据。这可能是因为网址实际上格式不正确,或者因为服务器不支持流式传输。您应该尝试使用NSData对象预加载歌曲数据。
NSString *songNameEscaped = [songName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *songURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", @"http://somerootpath/Music/", songNameEscaped]];
NSLog(@"songURL = %@", songURL);
NSError *avPlayerError = nil;
NSData* songData = [NSData dataWithContentsOfURL:songURL error:&avPlayerError];
if (songData)
{
AVAudioPlayer *avPlayer = [[AVAudioPlayer alloc] initWithData error:&avPlayerError];
if (avPlayer)
{
[avPlayer prepareToPlay];
[avPlayer play];
}
else
{
NSLog(@"Error initializing data for AVAudioPlayer. Possibly an Unsupported Format");
NSLog(@"Error: %@", [avPlayerError description]);
}
}
else
{
NSLog(@"Error initializing data for AVAudioPlayer. Possibly Malformed URL");
NSLog(@"Error: %@", [avPlayerError description]);
}
答案 2 :(得分:0)
昨天我遇到了同样的问题。结果我的网址错了。 我在这里有类似的东西:
NSURL *songURLID = [NSURL URLWithString:[NSString stringWithFormat:@"%@%d", @"http://somerootpath/Music/", songNameEscaped]];
NSLog(@"songURL = **%d**", songURL**ID**);
但是,我的songURL是NSString类型。我的NSLog正确地写了它,但是当我把%d放在url中时,结果是错误的。我建议你再试一次检查你的AVAudioPlayer网址。
尝试使用描述here之类的内容来查看玩家网址。
答案 3 :(得分:0)
您可能想尝试检查音频文件中的目标。我有一个类似的问题并通过确保我的mp4文件目标成员资格复选框被选中来修复它。我最初导入文件时一定不能检查它。
答案 4 :(得分:-1)
AVAudioPlayer类的一个实例,称为音频播放器, 提供文件或内存中音频数据的播放。
Apple建议您使用此课程进行音频播放,除非您 正在播放从网络流捕获的音频或需要非常低的音频 I / O延迟。