【问题标题】:iOS - AudioKit Crashes when receiving a phone calliOS - 接听电话时 AudioKit 崩溃
【发布时间】:2020-01-24 15:51:05
【问题描述】:

AudioKit 4.9.3 iOS 11+

我正在做一个项目,用户正在使用麦克风在设备上录制,并且即使应用程序在后台,它也会继续录制。这工作正常,但是当接到电话时,我收到 AudioKit 错误。我认为这与手机接管麦克风或其他东西有关。这是错误:

[avae] AVAEInternal.h:109
[AVAudioEngineGraph.mm:1544:Start: (err = PerformCommand(*ioNode, kAUStartIO,NULL,0)):错误 561017449 AudioKit+StartStop.swift:restartEngineAfterRouteChange(_:):198:error 更改路线后重新启动引擎

基本上我在此之前记录的所有内容都会丢失。

这是我设置的 AudioKit 代码:

func configureAudioKit() {
        AKSettings.audioInputEnabled = true
        AKSettings.defaultToSpeaker = true
        do {
            try try audioSession.setCategory((AVAudioSession.Category.playAndRecord), options: AVAudioSession.CategoryOptions.mixWithOthers)
            try audioSession.setActive(true)
            audioSession.requestRecordPermission({ allowed in
                DispatchQueue.main.async {
                    if allowed {
                        print("Audio recording session allowed")
                        self.configureAudioKitSession()
                    } else {
                        print("Audio recoding session not allowed")
                    }
                }
            })
        } catch let error{
            print("Audio recoding session not allowed: \(error.localizedDescription)")
        }
    }


func configureAudioKitSession() {
        isMicPresent = AVAudioSession.sharedInstance().isInputAvailable
        if !isMicPresent {
            return
        }
        print("mic present and configuring audio session")
        mic = AKMicrophone()
        do{
        let _ = try AKNodeRecorder(node: mic)
        let recorderGain = AKBooster(mic, gain: 0)
        AudioKit.output = recorderGain
        //try AudioKit.start()
        }
        catch let error{
            print("configure audioKit error: ", error)
        }
}

当点击录制按钮代码时:

    do {
         audioRecorder = try AVAudioRecorder(url: actualRecordingPath, settings: audioSettings)
         audioRecorder?.record()
         //print("Recording: \(isRecording)")
         do{
           try AudioKit.start()
          }
          catch let error{
            print("Cannot start AudioKit", error.localizedDescription)
          }
}

当前音频设置:

private let audioSettings = [
        AVFormatIDKey : Int(kAudioFormatMPEG4AAC),
        AVSampleRateKey : 44100,
        AVNumberOfChannelsKey : 2,
        AVEncoderAudioQualityKey : AVAudioQuality.medium.rawValue
    ]

如何确保即使在接到电话时也能获得正确的录音?一旦您接到电话,错误就会发生 - 无论您选择接听还是拒绝。

有什么想法吗?

【问题讨论】:

  • 只是好奇:如果您在 audioSession 的 setCategory 调用中添加 .mixWithOthers 作为选项,还会发生崩溃吗?
  • @WongWray 是的,确实如此-我也尝试过,尽管我现在将其保留在 mixwithothers(上面更新了代码)。我目前正在尝试了解如何处理中断。

标签: ios swift avaudiosession audiokit avaudiorecorder


【解决方案1】:

我已经完成了这方面的工作,恐怕您在通话或 VOIP 通话过程中无法使用麦克风。

这是 iOS 出于不言而喻的原因强制执行的一项基本隐私措施。

【讨论】:

    【解决方案2】:

    AudioKit 仅处理音频播放应用的基本路由更改处理。我们发现,当应用程序变得足够复杂时,框架无法在发生中断时有效地预先确定适当的操作过程。因此,我建议关闭 AudioKit 的路由更改处理并自己响应通知。

    另外,我会将 AudioKit 激活码放在一个按钮中。

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 2015-10-12
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多