¿Cómo puedo silenciar el sonido de captura en AVFoundation?

Quiero tomar la image usando AVfoundation sin ningún sonido … (sí … he tenido en count … la elección del usuario implementará esta function)

2 preguntas sobre el desbordamiento de stack que dieron la mayor cantidad de info .:

AVFoundation, cómo apagar el sonido del obturador cuando captureStillImageAsynchronouslyFromConnection?

Muting el sonido del obturador AVCapture en el iPhone

En la primera pregunta … no se aceptó ninguna respuesta y se confirmó …

en el segundoAVCaptureVideoDataOutput se refiere.

Ambas respuestas se refieren a capturar un marco de video … lo cual creo que es correcto … el problema es que la biblioteca de AVfoundation no es realmente fácil de dominar y realmente no puedo entenderlo … (capturar imágenes usando AVCaptureStillImageOutput fue difícil para mí) … así que alguien puede ayudarme a apuntarme o proporcionarme una buena fuente para capturar imágenes sin sonido.

Muy apreciado.

Encontré el código para hacerlo aquí …

http://www.benjaminloulier.com/articles/ios4-and-direct-access-to-the-camera

Partes importantes esbozadas ..

Configurar su session de esta manera

 -(void)initialize_and_Start_Session_without_CaptureSound { /*We setup the input*/ AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput deviceInputWithDevice:[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] error:nil]; /*We setupt the output*/ AVCaptureVideoDataOutput *captureOutput = [[AVCaptureVideoDataOutput alloc] init]; /*While a frame is processes in -captureOutput:didOutputSampleBuffer:fromConnection: delegate methods no other frames are added in the queue. If you don't want this behaviour set the property to NO */ captureOutput.alwaysDiscardsLateVideoFrames = YES; /*We specify a minimum duration for each frame (play with this settings to avoid having too many frames waiting in the queue because it can cause memory issues). It is similar to the inverse of the maximum framerate. In this example we set a min frame duration of 1/10 seconds so a maximum framerate of 10fps. We say that we are not able to process more than 10 frames per second.*/ //captureOutput.minFrameDuration = CMTimeMake(1, 10); /*We create a serial queue to handle the processing of our frames*/ dispatch_queue_t queue; queue = dispatch_queue_create("cameraQueue", NULL); [captureOutput setSampleBufferDelegate:self queue:queue]; dispatch_release(queue); // Set the video output to store frame in BGRA (It is supposed to be faster) NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey; NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; [captureOutput setVideoSettings:videoSettings]; /*And we create a capture session*/ self.session = [[AVCaptureSession alloc] init]; /*We add input and output*/ [self.session addInput:captureInput]; [self.session addOutput:captureOutput]; /*We start the capture*/ [self.session startRunning]; } 

Obtendrá la salida de la camera en el siguiente método .. Hago una image y la agrego a mi padre Ver .. Puedes cambiarlo a tu necesidad

 #pragma mark AVCaptureSession delegate - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { /*We create an autorelease pool because as we are not in the main_queue our code is not executed in the main thread. So we have to create an autorelease pool for the thread we are in*/ if (captureImageNow) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); /*Lock the image buffer*/ CVPixelBufferLockBaseAddress(imageBuffer,0); /*Get information about the image*/ uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer); size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); size_t width = CVPixelBufferGetWidth(imageBuffer); size_t height = CVPixelBufferGetHeight(imageBuffer); /*Create a CGImageRef from the CVImageBufferRef*/ CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef newContext = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); CGImageRef newImage = CGBitmapContextCreateImage(newContext); /*We release some components*/ CGContextRelease(newContext); CGColorSpaceRelease(colorSpace); /*We display the result on the custom layer. All the display stuff must be done in the main thread because UIKit is no thread safe, and as we are not in the main thread (remember we didn't use the main_queue) we use performSelectorOnMainThread to call our CALayer and tell it to display the CGImage.*/ /*We display the result on the image view (We need to change the orientation of the image so that the video is displayed correctly). Same thing as for the CALayer we are not in the main thread so ...*/ self.captureImage = [UIImage imageWithCGImage:newImage scale:1.0 orientation:UIImageOrientationRight]; /*We relase the CGImageRef*/ CGImageRelease(newImage); [self performSelectorOnMainThread:@selector(AddImageToParentView) withObject:nil waitUntilDone:YES]; /*We unlock the image buffer*/ CVPixelBufferUnlockBaseAddress(imageBuffer,0); [pool drain]; captureImageNow = NO; } }