这是今天遇到的一个问题 一直被忽略了 但是真正要遇到了还是蛮坑的 项目里面有录音播放功能 录音时候还需要播放声音片段 项目中使用的AudioQueue 来读取声音缓冲数据 可想而知 这就涉及到对AudioSession的设置了 先上几句代码
+(void)setAudioSessionToNormal{//正常状态 可以播放的并且可以听见
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
NSError *error1 = nil;
[audioSession setActive:YES error:&error1];
}
这句代码是通用的 只需要设置一次 不论录音结束 还是刚开始录音 表示可以在录音状态下调用扬声器
那么接下来就入坑了 如果将这几句代码在刚刚开始录音处设置 可能没有问题 但如果此时你调用播放器 就可能会出现如上图的错误打印结果 并且本次录音启动失败 无录音数据可被读取 几经检查发现 在播放器播放过程中是不能设置AudioSession的 本人的情况就是AudioSession 还没有设置完成的情况下就 调用播放器播放 导致Session设置失败 从而导致录音失败 再比如说到一些复杂的场景中 在多个线程中去做相关的操作 一定要避免Session 设置被干扰 还有个现象也能验证Session 设置失败 就是我在Session 没有设置完成的情况下 调用播放器 前段时间是没有声音的 后面才恢复
好吧 对于这个问题能说的就这么多 欢迎大家指正!