简体   繁体   English

iOS 14 AVCaptureSession 通过视频录制捕获立体声音频

[英]iOS 14 AVCaptureSession capturing stereo audio with video recording

I was wondering is there's a way to capture stereo audio using an AVCaptureSession.我想知道有没有办法使用 AVCaptureSession 捕获立体声音频。 iOS 14 adds support for stereo audio for AVAudioRecorder, but so far I have been unsuccessful is capturing stereo audio through an AVCaptureSession. iOS 14 为 AVAudioRecorder 添加了对立体声音频的支持,但到目前为止我一直没有成功通过 AVCaptureSession 捕获立体声音频。

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
[audioSession setActive:YES error:NULL];
     
NSArray *portDescriptions = audioSession.availableInputs;
AVAudioSessionPortDescription *builtInMicPort = nil;

for (AVAudioSessionPortDescription *port in portDescriptions) {
    if ([port.portType isEqualToString:AVAudioSessionPortBuiltInMic]) {
        builtInMicPort = port;
        break;
    }
} // end input iteration
     
[audioSession setPreferredInput:builtInMicPort error:nil];
     
NSArray *supportedPolarPatterns = audioSession.preferredInput.dataSources.firstObject.supportedPolarPatterns;
         
[audioSession.preferredInput.dataSources.firstObject setPreferredPolarPattern:AVAudioSessionPolarPatternStereo error:nil];


[audioSession.preferredInput setPreferredDataSource:audioSession.preferredInput.dataSources.firstObject error:nil];
[audioSession setPreferredInputOrientation:AVAudioStereoOrientationPortrait error:nil];

device = [AVCaptureDevice defaultDeviceWithDeviceType:AVCaptureDeviceTypeBuiltInWideAngleCamera mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionBack];
deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];

if([videoSession canAddInput:deviceInput]){
    [videoSession addInput:deviceInput];
}

AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
AVCaptureDeviceInput *audioDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:&error];
        
if([videoSession canAddInput:audioDeviceInput]){
    [videoSession addInput:audioDeviceInput];
}

Try this:尝试这个:

videoSession.usesApplicationAudioSession = true
videoSession.automaticallyConfiguresApplicationAudioSession = false

I was able to get stereo working in iOS 14 with this added.添加此功能后,我能够在 iOS 14 中使用立体声。

Here's the working code:这是工作代码:

//STEREO AUDIO RECORDING

 AVAudioSession *audioSession = [AVAudioSession sharedInstance];
 [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
 [audioSession setActive:YES error:NULL];
 
 // select the built-in Back mic if available
 NSArray *portDescriptions = audioSession.availableInputs;
 AVAudioSessionPortDescription *builtInMicPort = nil;

 for (AVAudioSessionPortDescription *port in portDescriptions) {
     if ([port.portType isEqualToString:AVAudioSessionPortBuiltInMic]) {
         builtInMicPort = port;
         break;
     }
 } // end input iteration
 
 [audioSession setPreferredInput:builtInMicPort error:nil];

AVAudioSessionDataSourceDescription* frontDataSource = nil;
    for (AVAudioSessionDataSourceDescription* source in builtInMicPort.dataSources)
    {
        if ([source.orientation isEqual:AVAudioSessionOrientationFront])
        {
            frontDataSource = source;
            break;
        }
    } // end data source iteration

 
 NSArray *supportedPolarPatterns = frontDataSource.supportedPolarPatterns;
 
 NSLog(@"SUPPORTED POLAR PATTERNS : %@", supportedPolarPatterns);
 
 BOOL isStereoSupported = [supportedPolarPatterns containsObject:@"Stereo"];
 
 if(isStereoSupported == YES){
     if(@available(iOS 14.0, *)) {
         [frontDataSource setPreferredPolarPattern:AVAudioSessionPolarPatternStereo error:nil];
     } else {
         // Fallback on earlier versions
     }
 }
 
 [audioSession.preferredInput setPreferredDataSource:frontDataSource error:nil];

if(@available(iOS 14.0, *)) {
    [audioSession setPreferredInputOrientation:AVAudioStereoOrientationPortrait error:nil];
}

videoSession = [[AVCaptureSession alloc] init];

//STEREO AUDIO RECORDING
videoSession.usesApplicationAudioSession = YES;
videoSession.automaticallyConfiguresApplicationAudioSession = NO;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM