Skip to content

audiosession

pengbin edited this page Jul 24, 2017 · 9 revisions

如何正确处理AVAudioSession?

推流音频操作

当每次点击预览时,金山KSYLive会设置AVAudioSession category:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
                                 error:nil];

在整个采集推流过程中,KSYLive并不会调用以下接口进行active或者deactive操作。

[[AVAudioSession sharedInstance] setActive:YES error:nil];

当调用pip画中画功能时,将进入ksyplayer音频操作逻辑。

音频输出

当在推流时,使用AVAudioPlayer播放音频,此时声音默认从听筒中输出。如果希望从扬声器中输出,需要对AVAudioSession做如下操作:

    AVAudioSession *session = [AVAudioSession sharedInstance];
    AVAudioSessionCategoryOptions opts = [session categoryOptions];
    opts |= AVAudioSessionCategoryOptionDefaultToSpeaker;
    [session setCategory:session.category
             withOptions:opts
                   error:nil];

或者在KSYAVAudioSession中设置

_bDefaultToSpeaker = YES;
_bAllowBluetooth = YES;

第三方音乐播放APP

使用第三方音乐时,会发现声音从听筒发出。

当启动推流APP后,需要在推流初始化时,bInterruptOtherAudio需要置为NO,同时监听UIApplicationDidBecomeActiveNotification通知。

当前APP切后台启动其他音乐播放APP播放音乐后,切回推流APP需要异步overrideOutputAudioPort为外置音乐播放器,才能保证第三方APP音乐声音从speaker输出,不然会从听筒输出。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(becameActive)
                                             name:UIApplicationDidBecomeActiveNotification
                                           object:nil];
- (void)enableAudioToSpeaker{
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
    });
}
- (void)becameActive{
    [self enableAudioToSpeaker];
}

或者在KSYAVAudioSession中设置

_bDefaultToSpeaker = YES;
_bAllowBluetooth = YES;

AVAudioSession属性

是否打断属性

@property (nonatomic, assign) BOOL  bInterruptOtherAudio;

说明:是否打断其他后台的音乐播放,将该属性设为NO,可以与其他后台播放共存,相互之间不会被打断;将该属性设为YES,开始采集时,会打断其他的后台播放音乐。

是否扬声器播放属性

@property (nonatomic, assign) BOOL bDefaultToSpeaker;

说明:启动采集后,是否从扬声器播放声音,将该属性设为YES,则为默认从扬声器播放;将该属性设为NO,则为默认从听筒播放。

是否启用蓝牙设备属性

@property (nonatomic, assign) BOOL bAllowBluetooth;

说明:将该属性设为YES,启用蓝牙设备;将该属性设为NO,则为不启用蓝牙设备。

AVAudioSession对外接口函数

设置AVAudioSession参数

- (void) setAVAudioSessionOption;

说明:按照属性的设置值刷新AVAudioSession的配置,设置声音采集需要的AVAudioSession的参数。

蓝牙麦克风可用性

+ (BOOL)isBluetoothInputAvaible;

选择是否使用蓝牙麦克风

- (BOOL)switchBluetoothInput:(BOOL)onOrOff;

耳机麦克风可用性

+ (BOOL)isHeadsetInputAvaible;

查询当前是否有耳机(包括蓝牙耳机)

+ (BOOL) isHeadsetPluggedIn;

1. 推流环节说明

2. 特色功能说明

2.1 采集

2.2 音频处理

2.3 视频处理

2.4 编码

2.5 推流

2.6 输入多样化

2.7 集成

3. 第三方功能

4. 技术专栏

5. 已知问题

8. FAQ

金山云计算

Clone this wiki locally