首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
首页标签avfoundation

#avfoundation

AVFoundation中,如何关闭快门声音?

您也可以从视频流中获取一帧来拍摄(而不是全分辨率)图像。 它在这里用于短时间间隔捕获图像: - (IBAction)startStopPictureSequence:(id)sende { if (!_capturingSequence) { if (!_captureVideoDataOutput) { _captureVideoDataOutput = [AVCaptureVideoDataOutput new]; _captureVideoDataOutput.videoSettings = @{(NSString *)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_32BGRA)}; [_captureVideoDataOutput setSampleBufferDelegate:self queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)]; if (_sequenceCaptureInterval == 0) { _sequenceCaptureInterval = 0.25; } } if ([_captureSession canAddOutput:_captureVideoDataOutput]) { [_captureSession addOutput:_captureVideoDataOutput]; _lastSequenceCaptureDate = [NSDate date]; // Skip the first image which looks to dark for some reason _sequenceCaptureOrientation = (_currentDevice.position == AVCaptureDevicePositionFront ? // Set the output orientation only once per sequence UIImageOrientationLeftMirrored : UIImageOrientationRight); _capturingSequence = YES; } else { NBULogError(@"Can't capture picture sequences here!"); return; } } else { [_captureSession removeOutput:_captureVideoDataOutput]; _capturingSequence = NO; } } - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffe fromConnection:(AVCaptureConnection *)connection { // Skip capture? if ([[NSDate date] timeIntervalSinceDate:_lastSequenceCaptureDate] < _sequenceCaptureInterval) return; _lastSequenceCaptureDate = [NSDate date]; UIImage * image = [self imageFromSampleBuffer:sampleBuffer]; NBULogInfo(@"Captured image: %@ of size: %@ orientation: %@", image, NSStringFromCGSize(image.size), @(image.imageOrientation)); // Execute capture block dispatch_async(dispatch_get_main_queue(), ^ { if (_captureResultBlock) _captureResultBlock(image, nil); }); } - (BOOL)isRecording { return _captureMovieOutput.recording; }... 展开详请
您也可以从视频流中获取一帧来拍摄(而不是全分辨率)图像。 它在这里用于短时间间隔捕获图像: - (IBAction)startStopPictureSequence:(id)sende { if (!_capturingSequence) { if (!_captureVideoDataOutput) { _captureVideoDataOutput = [AVCaptureVideoDataOutput new]; _captureVideoDataOutput.videoSettings = @{(NSString *)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_32BGRA)}; [_captureVideoDataOutput setSampleBufferDelegate:self queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)]; if (_sequenceCaptureInterval == 0) { _sequenceCaptureInterval = 0.25; } } if ([_captureSession canAddOutput:_captureVideoDataOutput]) { [_captureSession addOutput:_captureVideoDataOutput]; _lastSequenceCaptureDate = [NSDate date]; // Skip the first image which looks to dark for some reason _sequenceCaptureOrientation = (_currentDevice.position == AVCaptureDevicePositionFront ? // Set the output orientation only once per sequence UIImageOrientationLeftMirrored : UIImageOrientationRight); _capturingSequence = YES; } else { NBULogError(@"Can't capture picture sequences here!"); return; } } else { [_captureSession removeOutput:_captureVideoDataOutput]; _capturingSequence = NO; } } - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffe fromConnection:(AVCaptureConnection *)connection { // Skip capture? if ([[NSDate date] timeIntervalSinceDate:_lastSequenceCaptureDate] < _sequenceCaptureInterval) return; _lastSequenceCaptureDate = [NSDate date]; UIImage * image = [self imageFromSampleBuffer:sampleBuffer]; NBULogInfo(@"Captured image: %@ of size: %@ orientation: %@", image, NSStringFromCGSize(image.size), @(image.imageOrientation)); // Execute capture block dispatch_async(dispatch_get_main_queue(), ^ { if (_captureResultBlock) _captureResultBlock(image, nil); }); } - (BOOL)isRecording { return _captureMovieOutput.recording; }
领券