如何在Swift中同时录制音频和视频

时间:2020-05-27 13:16:37

标签: ios swift avfoundation avaudiorecorder replaykit

当前,我正在开发一个iOS应用,该应用使用Replaykit记录屏幕,同时在给定时间内记录来自前置摄像头的用户。我从屏幕录制中接收到音频,并且前置摄像头的音频已禁用。我想在屏幕和前置摄像头录制期间检查该人的语音水平。我相信我已经在使用麦克风通道和进行屏幕录制了。当我开始屏幕录制时,我还启动了音频电平检查器,但看不到任何值,它始终显示-160。我不知道该更改录音机设置字典还是AVAudioSession类别模式。我的录音机设置如下:

settings = [
        AVFormatIDKey : NSNumber(value: kAudioFormatLinearPCM),
        AVSampleRateKey : 44100.0,
        AVNumberOfChannelsKey : 2,
        AVLinearPCMBitDepthKey : 16,
        AVLinearPCMIsBigEndianKey : false,
        AVLinearPCMIsFloatKey : false,
    ]

和我的会议

let session = AVAudioSession.sharedInstance()
    do {
        try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
        try session.setMode(AVAudioSessionModeVideoRecording)
        try session.setActive(true)
        try session.overrideOutputAudioPort(.speaker)

    }catch{
        print("unable to set session")
        return
    }

还在计时器回调中更新参数功能

@objc private func checkAudioLevels() {
    recorder.updateMeters()
    print("Peak power0:\(recorder.peakPower(forChannel: 0))")
    print("Average power0:\(recorder.averagePower(forChannel: 0))")
    print("Peak power1:\(recorder.peakPower(forChannel: 1))")
    print("Average power1:\(recorder.averagePower(forChannel: 1))")
    print("Peak power2:\(recorder.peakPower(forChannel: 2))")
    print("Average power2:\(recorder.averagePower(forChannel: 2))")
    if recorder.peakPower(forChannel: 2) < -150{
        levelCounter += 1 // timer fires every one second and if the user's audio is less than -150 it adds levelCounter 1 and if it reaches 10 which means no voice for 10 seconds it sends the warning to delegate.
    }else{
        levelCounter = 0
    }

    if levelCounter > 10{
        self.delegate?.shouldShowWarning(true)
    }
}

问题在于所有通道的所有峰值功率和平均功率,我只收到-160。因此,我认为我应该在设置字典或AVAudioSession中进行更改。我的问题是,是否可以在屏幕上录制音频并同时录制音频。

1 个答案:

答案 0 :(得分:0)

在设置类别时,您还可以设置选项[.mixWithOthers, .defaultToSpeaker, etc.]

.defaultToSpeaker 确保您的音频电平保持不变。