解决iOS12.1播放不了本地的音频

最近项目测试时发现一个问题,iOS12.1播放不了本地的音频,百度搜索了,有几种解决方案也是不错的,不过个人觉得有点麻烦,于是再拿手机多测试了两下,发现我启动录音后就可以播放任何一个本地音频了,总结出iOS12.1以上播放本地音频前先初始化一下录音器,便能解决iOS12.1播放不了音频的问题,好吧,直接上代码,如下:

    NSString *version = [UIDevice currentDevice].systemVersion;

    if(version.doubleValue>=12.0) {

        [self intplayforheighsys];

    }else{

 //12.0以下无须处理

    }


//ios12.1以上要先初始化录音的,才能播放

-(void)intplayforheighsys{

    //开始录音

    //录音设置

    NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init];

    //设置录音格式  AVFormatIDKey==kAudioFormatLinearPCM

    [recordSettingsetValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];

    //设置录音采样率(Hz) 如:AVSampleRateKey==8000/44100/96000(影响音频的质量), 采样率必须要设为11025才能使转化成mp3格式后不会失真

    [recordSettingsetValue:[NSNumber numberWithFloat:11025.0] forKey:AVSampleRateKey];

    //录音通道数  1 或 2 ,要转换成mp3格式必须为双通道

    [recordSettingsetValue:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey];

    //线性采样位数  8、16、24、32

    [recordSettingsetValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];

    //录音的质量

    [recordSettingsetValue:[NSNumber numberWithInt:AVAudioQualityMedium] forKey:AVEncoderAudioQualityKey];


    //存储录音文件

    recordUrl = [NSURL URLWithString:[NSTemporaryDirectory() stringByAppendingString:@"ringRecord.wav"]];


    //初始化

    audioRecorder = [[AVAudioRecorder alloc] initWithURL:recordUrl settings:recordSetting error:nil];

    //开启音量检测

    audioRecorder.meteringEnabled = YES;

    audioSession = [AVAudioSession sharedInstance];//得到AVAudioSession单例对象


    if (![audioRecorder isRecording]) {

        [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];//设置类别,表示该应用同时支持播放和录音

        [audioSession setActive:YES error:nil];//启动音频会话管理,此时会阻断后台音乐的播放.


        [audioRecorder prepareToRecord];

        [audioRecorder peakPowerForChannel:0.0];

        [audioRecorder record];

    }


    [audioRecorderstop];                          //录音停止

    [audioSession setActive:NO error:nil];

}

推荐阅读更多精彩内容