Estoy tratando de grabar y reproducir video simultáneamente. ¿Es esto posible con avfoundation? Actualmente puedo hacerlo siempre que no grabe audio. Tan pronto como agregue la entrada de audio a AVCaptureSession y reinicie todo, recibo "AVCaptureSessionWasInterruptedNotification" y la grabación se detiene.Avfoundation - Reproducir y grabar video (junto con audio y vista previa) simultáneamente
Así es como reproduzco el video.
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:path]];
[moviePlayer.view setFrame:self.playerView.bounds];
moviePlayer.useApplicationAudioSession=NO;
self.player = moviePlayer;
[moviePlayer release];
[self.playerView addSubview:player.view];
[player play];
Y así es como grabar vídeo:
NSError *error;
AVCamCaptureManager *captureManager = [[AVCamCaptureManager alloc] init];
if ([captureManager setupSessionWithPreset:AVCaptureSessionPresetLow error:&error])
{
[self setCaptureManager:captureManager];
AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:[captureManager session]];
self.captureVideoPreviewLayer= previewLayer;
UIView *view = [self cameraView];
CALayer *viewLayer = [view layer];
[viewLayer setMasksToBounds:YES];
CGRect bounds = [view bounds];
[captureVideoPreviewLayer setFrame:bounds];
if ([captureVideoPreviewLayer isOrientationSupported])
[captureVideoPreviewLayer setOrientation:AVCaptureVideoOrientationPortrait];
[captureVideoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
[[captureManager session] startRunning];
[self setCaptureVideoPreviewLayer:captureVideoPreviewLayer];
if ([[captureManager session] isRunning])
{
[captureManager setOrientation:AVCaptureVideoOrientationPortrait];
[captureManager setDelegate:self];
[viewLayer insertSublayer:captureVideoPreviewLayer below:[[viewLayer sublayers] objectAtIndex:0]];
NSString *countString = [[NSString alloc] initWithFormat:@"%d", [[AVCaptureDevice devices] count]];
NSLog(@"Device count: %@",countString);
} else {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Failure"
message:@"Failed to start session."
delegate:nil
cancelButtonTitle:@"Okay"
otherButtonTitles:nil];
[alertView show];
[alertView release];
}
} else {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Input Device Init Failed"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"Okay"
otherButtonTitles:nil];
[alertView show];
[alertView release];
}
[captureManager release];
if (![[self captureManager] isRecording]) {
[[self captureManager] startRecording];
}
Cuando, como estoy usando "AVCamCaptureManager" de código de ejemplo AVCam manzana.
Esto es interesante, ya que contradice la respuesta aceptada aquí: http://stackoverflow.com/a/10559420/954643 que dice iniciar la sesión de audio después de la sesión de captura. – qix
En realidad, los documentos dicen esto sobre 'useApplicationAudioSession':" Un valor booleano que indica si el reproductor de películas debería usar la sesión de audio de la aplicación. (Obsoleto en iOS 6.0. No hay reemplazo para esta propiedad y se desaconseja su uso). El valor predeterminado es 'YES' ya. – qix