iOS音频AVAudioSession相关设置

1. AVAudioSession

AVAudioSession,是用来管理多个APP间对音频硬件设备(麦克风,扬声器)的资源使用。

举例一下AVAudioSession可以做这些事情

  • 设置自己的APP是否和其他APP音频同时存在,还是中断其他APP声音
  • 在手机调到静音模式下,自己的APP音频是否可以播放出声音
  • 电话或者其他APP中断自己APP的音频的事件处理
  • 指定音频输入和输出的设备(比如是听筒输出声音,还是扬声器输出声音)
  • 是否支持录音,录音同时是否支持音频播放

2. AVAudioSession Category

Category定义了七种主场景,每种Category都对应是否支持下面四种能力。

  • Interrupts non-mixable apps audio:是否打断不支持混音播放的APP
  • Silenced by the Silent switch:是否会响应手机静音键开关
  • Supports audio input:是否支持音频录制
  • Supports audio output:是否支持音频播放
Category 是否允许音频播放/录音 是否打断其他不支持混音APP 是否会被静音键或锁屏键静音
AVAudioSessionCategorySoloAmbient 只支持播放
AVAudioSessionCategoryAmbient 只支持播放
AVAudioSessionCategoryPlayback 只支持播放 默认YES,可以重写为NO
AVAudioSessionCategoryRecord 只支持录制 否(锁屏下仍可录制)
AVAudioSessionCategoryPlayAndRecord 支持播放,支持录制 默认YES,可以重写为NO
AVAudioSessionCategoryAudioProcessing 不支持播放,不支持录制
AVAudioSessionCategoryMultiRoute 支持播放,支持录制

APP启动的时候会自动帮激活AVAudioSession(默认是AVAudioSessionCategorySoloAmbient)

#import <AVFoundation/AVFoundation.h>


/*
 * APP启动后激活声道音频模式
 **/
+ (void)configAvSessionCategoryWithError:(NSError **)error {
    AVAudioSession *session = [AVAudioSession sharedInstance];
    
    //AVAudioSessionCategorySoloAmbient是系统默认的category
    [session setCategory:AVAudioSessionCategorySoloAmbient error:nil];
    
    //激活AVAudioSession
    [session setActive:YES error:nil];
}

 

3. 暂停及恢复后台音频播放示例

如果在播放自己APP中的音频时,需要暂停后台其他APP的音乐播放;

当播放完成后,再恢复之前后台其他音频的自动播放;

代码如下:

#import <AVFoundation/AVFoundation.h>

 
/*
 * 比如临时视频播放等APP,需要播放自己的音乐,暂停后台背景音乐的播放(激活当前应用的audio)
 **/
+ (void)pauseOtherAppSoundWithError:(NSError **)error {
        
    AVAudioSession *session = [AVAudioSession sharedInstance];

    [session setCategory:AVAudioSessionCategoryPlayback error:error];//仅播放时
    //[session setCategory:AVAudioSessionCategoryRecord error:nil];//需要录音时

    //Activate audio session in current app
    //Deactivate audio session in others' app
    [session setActive:YES error:error];
}


/*
 * 自己APP停止播放后,继续恢复后台其他APP背景音乐的播放(取消激活当前应用的audio session)
 **/
+ (void)resumeOtherAppSoundWithError:(NSError **)error {    
    [[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:error];
}

猜你喜欢

转载自blog.csdn.net/enuola/article/details/103200143
今日推荐