Как одновременно записывать аудио и видео по отдельности в Swift - PullRequest
0 голосов
/ 27 мая 2020

В настоящее время я разрабатываю приложение 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. У меня вопрос, есть ли возможность записывать экран со звуком и в то же время записывать звук отдельно.

...