RPScreenRecorder startCaptureWithHandler: не возвращает звук микрофона в обработчике семплов

Я пытаюсь использовать RPScreenRecorder startCaptureWithHandler: завершение Handler: API на моем iPad с iOS 11.4 для прямого захвата аудио и видео. Он хорошо работает с экраном приложения, аудио приложения и камерой, но когда я включаю микрофон, используя микрофон Enabled = YES, я никогда не получаю никакого сэмпла для микрофона в обратном вызове.

Я добавил ключ использования конфиденциальности в микрофон в info.plist, но это не помогло.

Я не уверен, что я могу сделать дальше, чтобы попытаться решить эту проблему.

Благодарю.

1 ответ

Этот код возвращает мне аудиобуферы, содержащие реальный звук с микрофона (даже без строки использования микрофона или конфигурации аудиосеанса):

RPScreenRecorder *recorder = [RPScreenRecorder sharedRecorder];

recorder.microphoneEnabled = YES;

[recorder startCaptureWithHandler:^(CMSampleBufferRef sampleBuffer, RPSampleBufferType bufferType, NSError* error) {
    NSLog(@"Capture %@, %li, %@", sampleBuffer, (long)bufferType, error);
    if (RPSampleBufferTypeAudioMic == bufferType) {
        // Do something with mic audio
    }
} completionHandler:^(NSError* error) {
    NSLog(@"startCapture: %@", error);
}];

Существует диалоговое окно с разрешением, которое спрашивает, разрешить ли вам экран и микрофон, разрешить только экран или не разрешить. Возможно, вы нажали только на экран? NB Я не знаю, как сбросить этот диалог.

Другая возможность заключается в том, что вы устанавливаете microphoneEnabled после начала захвата? Это может не сработать. Нет, это работает и для меня.

Предыдущая догадка

Вам может понадобиться активировать запись AVAudioSession:

try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryRecord)  // or AVAudioSessionCategoryPlayAndRecord!
try! AVAudioSession.sharedInstance().setActive(true)
Другие вопросы по тегам