iOS开发: 音频会话线路改变

线路改变

  • 在iOS设备上添加或移除音频输入、输出线路时, 会发生线路改变, 有多重原因会导致线路变化, 比如用户插入耳机或断开USB麦克风
  • 当这些事情发生时, 音频会根据情况改变输入或输出路线, 同时AVAudioSession会广播一个描述该变化的通知给所有相关的监听器
  • 线路变化时AVAudioSession会发出AVAudioSessionRouteChangeNotification通知
  • 在系统默认的情况下, 音频播放, 插上耳机后线路改变, 在耳机中播放, 当用户拔出耳机后, 音频又会在手机上播放
  • 我们可以通过监听线路改变, 控制当耳机拔出后停止音乐播放的行为

具体代码

  • 添加音频会话发出的通知
// 会话线路改变通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleRouteChange:) name:AVAudioSessionRouteChangeNotification object:nil];
  • 当线路改变时触发方法
/**
 音频会话线路变化通知
 */
- (void)handleRouteChange:(NSNotification *)notification
{
    // 通知信息
    NSDictionary *info = notification.userInfo;
    // 获取线路信息
    AVAudioSessionRouteChangeReason reason = [info[AVAudioSessionRouteChangeReasonKey] unsignedIntegerValue];
    // 当耳机拔出后触发
    if (reason == AVAudioSessionRouteChangeReasonOldDeviceUnavailable) {
        // 自定义的一个播放器, 当耳机拔出后停止播放音乐
        [self.player pause];
    }
}

你可能感兴趣的:(iOS开发: 音频会话线路改变)