【问题标题】:iOS 14 AVCaptureSession capturing stereo audio with video recordingiOS 14 AVCaptureSession 通过视频录制捕获立体声音频
【发布时间】:2020-10-11 01:39:23
【问题描述】:

我想知道有没有一种方法可以使用 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];
}

【问题讨论】:

    标签: avfoundation avcapturesession avaudiorecorder ios14 avcapturedevice


    【解决方案1】:

    试试这个:

    videoSession.usesApplicationAudioSession = true
    videoSession.automaticallyConfiguresApplicationAudioSession = false
    

    添加此功能后,我能够在 iOS 14 中使用立体声。

    【讨论】:

      【解决方案2】:

      这是工作代码:

      //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;
      

      【讨论】:

        猜你喜欢
        • 2016-08-01
        • 2012-05-08
        • 2021-01-15
        • 2023-03-05
        • 1970-01-01
        • 2012-02-28
        • 2022-01-22
        • 2018-09-10
        • 1970-01-01
        相关资源
        最近更新 更多