rFlex / SCRecorder

iOS camera engine with Vine-like tap to record, animatable filters, slow motion, segments editing
Apache License 2.0
3.06k stars 583 forks source link

Getting error "Failed to initialize audio in record session:" If i am trying to manage audio session manually. #342

Open TwinkleMali opened 7 years ago

TwinkleMali commented 7 years ago

I m facing this error while managing audio session manually.

[LyfCameraPicker recorder:didInitializeAudioInSession:error:]:2355 - Failed to initialize audio in record session: *\ -[AVAssetWriterInput initWithMediaType:outputSettings:sourceFormatHint:] 3 is not a valid channel count for Format ID 'aac '. Use kAudioFormatProperty_AvailableEncodeNumberChannels (<AudioToolbox/AudioFormat.h>) to enumerate available channel counts for a given format.

**

Following is my code.

**

Added Code in App Delegate : `

Added code in CameraPickerViewController.m file

  • (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated];

// this is added because, after video captured, app will navigate to SCVideoPlayerViewController.m file. Where i m calling [self stopBackGroundMusic] method to stop back music and to play captured video's audio sound. And is user come back to camera screen it will resume background music.

**[_recorder.session deinitialize];
 [self resumeBackgroundMusic];**

    [self initializeView];
    [self prepareCamera];
    [self updateTimeRecordedLabel];

}

-(void)resumeBackgroundMusic { NSError *activationError = nil; [[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&activationError]; }

-(void)stopBackGroundMusic { NSError *activationError = nil; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionAllowBluetooth error:nil];

[[AVAudioSession sharedInstance] setActive:YES error:&activationError];

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

}`

I am initializing SCRecorder in following method.

`-(void)initCoreCam { _recorder = [SCRecorder recorder]; _recorder.initializeSessionLazily = NO; _recorder.automaticallyConfiguresApplicationAudioSession = NO;

UIView *previewView = self.previewView;
_recorder.previewView = previewView;
 CGRect finalFrame =(CGRectMake(0, 0, CGRectGetWidth([UIScreen mainScreen].bounds), CGRectGetHeight([UIScreen mainScreen].bounds)));
self.view.frame = finalFrame;

[_btnsend addGestureRecognizer:longpress];
[_btnsend addGestureRecognizer:tap];

self.focusView = [[SCRecorderToolsView alloc] initWithFrame:previewView.bounds];

self.focusView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth;

self.focusView.recorder = _recorder;
[self.focusView.recorder.previewView setUserInteractionEnabled:YES];

[previewView addSubview:self.focusView];

self.focusView.outsideFocusTargetImage = [UIImage imageNamed:@"img_focus"];

_recorder.captureSessionPreset = kVideoPreset;
_recorder.device = AVCaptureDevicePositionBack;

// _recorder.audioEnabled = YES; _recorder.delegate = self; _recorder.autoSetVideoOrientation = YES; _recorder.audioConfiguration.enabled = YES;

// On iOS 8 and iPhone 5S, enabling this seems to be slow
_recorder.maxRecordDuration = CMTimeMakeWithSeconds(10, 10000);//CMTimeMake(10, 1);

NSError *error;

if (![_recorder prepare:&error]) {
    NSLog(@"Prepare error: %@", error.localizedDescription);
}

[self prepareCamera];
[self setCurrentShootMode:FullScreenCam];

}

` //===================

`- (void) prepareCamera { if (_recorder.session == nil) {

    SCRecordSession *session = [SCRecordSession recordSession];
    //session.suggestedMaxRecordDuration = CMTimeMakeWithSeconds(10, 10000);
    _recorder.session = session;
   [self recorderDidEndFocus:_recorder];
}

} `

After this, i am calling pause and stopRunning method in viewWillDisaper methiod.

`- (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated];

self.navigationController.navigationBarHidden = NO;

if(!_isVideoSent){

   // [self deinitializeRecordSession];
    [_recorder pause];
    [_recorder stopRunning];
   // [_recorder unprepare];
    [self removeAllViews];
}

} `

Then i am dismiss camera and again open camera at that i am facing above mentioned error.