AVAudioplayer播放音频时报错 Error Domain=NSOSStatusErrorDomain Code=1954115647 "(null)"

AVAudioplayer播放音频时报错 

Error Domain=NSOSStatusErrorDomain Code=1954115647 "(null)"


AVAudioplayer 有两个初始化方法:

1[[AVAudioPlayer alloc] initWithData:musicData error&e];

2[[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error];

第一种是使用将音频文件的data文件初始化,但是data必须是一个完整的文件。

第二种是从url获取,但是这里的url是本地的file URL

 

 所以AVAudioplayer无法直接从网络url上获取音频文件,所以可以用:

data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://.../file.mp3"]];

将网络上音频down下来,再用initWithData初始化player但是这样down下来的文件有时是不完整的,所以出现创建失败问题,出现:

Error Domain=NSOSStatusErrorDomain Code=1954115647


解决一:data保存在本地,在通过initWithContentsOfURL,找到该文件,这样就可以成功创建了。

整个流程为:

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]; }


解决二:有个简单的办法,initWithData: fileTypeHint: error:

用这个,指定类型(比如MP3就用AVFileTypeMPEGLayer3

NSError *playerError = nil;

    _soundPlayer = [[AVAudioPlayeralloc] initWithData:dataerror:&playerError];

    if (playerError && playerError.code ==1954115647) {

        _soundPlayer = [[AVAudioPlayeralloc] initWithData:datafileTypeHint:AVFileTypeMPEGLayer3error:&playerError];

    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值