【问题标题】:AVFoundation custom video recorder audio issuesAVFoundation 自定义录像机音频问题
【发布时间】:2017-05-19 18:41:17
【问题描述】:

我尝试学习如何创建自定义录像机,一切正常,除非音频有很多嘈杂的声音。我在系统相机、instagram 或任何其他相机应用程序中尝试它们的音频质量非常好,并且没有某种低级声音。此外,与其他相机应用程序相比,视频的录制量也显着降低。我在 stackoverflow 上找不到任何答案,其中大多数人对 AVAudioSession 有答案,但在 AVCaptureSession 上没有。

这是我如何实现记录器的代码

_session =  [[AVCaptureSession alloc]init];

NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio];
AVCaptureDeviceInput *audioInput = [[AVCaptureDeviceInput alloc] initWithDevice:[devices objectAtIndex:0] error:nil];
if ([_session canAddInput:audioInput])
    [_session addInput:audioInput];

AVCaptureDevice *inputDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:inputDevice error:nil];
if ( [_session canAddInput:deviceInput] )
    [_session addInput:deviceInput];

_videoOutput = [[AVCaptureVideoDataOutput alloc] init];
_videoOutput.alwaysDiscardsLateVideoFrames = NO;

if ( [_session canAddOutput:_videoOutput] )
    [_session addOutput:_videoOutput];

_audioOutput = [[AVCaptureAudioDataOutput alloc] init];

if ( [_session canAddOutput:_audioOutput] )
    [_session addOutput:_audioOutput];

AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_session];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];

CALayer *rootLayer = [[self view] layer];
[rootLayer setMasksToBounds:YES];
[previewLayer setFrame:CGRectMake(0, 0, rootLayer.bounds.size.width, rootLayer.bounds.size.height)];
[rootLayer insertSublayer:previewLayer atIndex:0];

[_session setSessionPreset:AVCaptureSessionPresetHigh];

dispatch_queue_t queue = dispatch_queue_create("MyQueue", NULL);
[_videoOutput setSampleBufferDelegate:self queue:queue];
[_audioOutput setSampleBufferDelegate:self queue:queue];


AVCaptureConnection *videoConnection = [_videoOutput connectionWithMediaType:AVMediaTypeVideo];
[videoConnection setVideoOrientation:AVCaptureVideoOrientationPortrait];

[_session startRunning];

视频质量很好,代码工作正常,只是音频部分有问题。所以

  1. 如何在录制视频时提高音频质量?
  2. 如何提高视频的录制音量?

我知道如何在使用下面的代码纯录制音频时增加它,但在录制视频时不知道。

 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:(AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionAllowBluetooth) error:&sessionCategoryError];

【问题讨论】:

    标签: ios objective-c audio avfoundation


    【解决方案1】:

    好吧,我终于弄明白了。创建AVCaptureSession 后,执行以下代码。

     AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:(AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionAllowBluetooth) error:nil];
    [audioSession setActive:YES error:nil];
    
    _session =  [[AVCaptureSession alloc]init];
    
    //the 2 line below is very important. 
    _session.usesApplicationAudioSession = YES;
    _session.automaticallyConfiguresApplicationAudioSession = NO;
    

    现在视频的输出音频比系统还好

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-10
      • 2018-02-03
      • 2019-12-30
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      相关资源
      最近更新 更多