化工集团网站建设 中企动力,抖音seo关键词优化排名,企查查公司名字,销售网络建设应该如何着手目的#xff1a;打开、关闭前置摄像头#xff0c;绘制图像#xff0c;并获取摄像头的二进制数据。 需要的库 AVFoundation.framework 、CoreVideo.framework 、CoreMedia.framework 、QuartzCore.framework 该摄像头捕抓必须编译真机的版本#xff0c;模拟器下编译不了。 函…目的打开、关闭前置摄像头绘制图像并获取摄像头的二进制数据。 需要的库 AVFoundation.framework 、CoreVideo.framework 、CoreMedia.framework 、QuartzCore.framework 该摄像头捕抓必须编译真机的版本模拟器下编译不了。 函数说明 - (void)createControl { // UI界面控件的创建 } - (AVCaptureDevice *)getFrontCamera; 获取前置摄像头设备 - (void)startVideoCapture; 打开摄像头并开始捕捉图像 其中代码 AVCaptureVideoPreviewLayer* previewLayer [AVCaptureVideoPreviewLayer layerWithSession: self-avCaptureSession]; previewLayer.frame localView.bounds; previewLayer.videoGravity AVLayerVideoGravityResizeAspectFill; [self-localView.layer addSublayer: previewLayer]; 为把图片画到UIView里面 - (void)stopVideoCapture:(id)arg 关闭摄像头停止捕抓图像 其中代码 for(UIView*viewinself-localView.subviews) { [viewremoveFromSuperview]; } 为移除摄像头图像的View 详情见代码代码拷过去可以直接使用 Over!!!! 代码 头文件 // // AVCallController.h // Pxlinstall // // Created by Lin Charlie C. on 11-3-24. // Copyright 2011 xxxx. All rights reserved. // #import UIKit/UIKit.h #import AVFoundation/AVFoundation.h interface AVCallController : UIViewController AVCaptureVideoDataOutputSampleBufferDelegate { //UI UILabel*labelState; UIButton*btnStartVideo; UIView*localView; AVCaptureSession* avCaptureSession; AVCaptureDevice *avCaptureDevice; BOOLfirstFrame; //是否为第一帧 intproducerFps; } property (nonatomic, retain) AVCaptureSession *avCaptureSession; property (nonatomic, retain) UILabel *labelState; - (void)createControl; - (AVCaptureDevice *)getFrontCamera; - (void)startVideoCapture; - (void)stopVideoCapture:(id)arg; end / / / 实现文件 // // AVCallController.m // Pxlinstall // // Created by Lin Charlie C. on 11-3-24. // Copyright 2011 高鸿移通. All rights reserved. // #import AVCallController.h implementation AVCallController synthesize avCaptureSession; synthesize labelState; // The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. /* - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization. } return self; } */ -(id)init { if(self [superinit]) { firstFrame YES; producerFps 50; } returnself; } // Implement loadView to create a view hierarchy programmatically, without using a nib. - (void)loadView { [superloadView]; [selfcreateControl]; } /* // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. - (void)viewDidLoad { [super viewDidLoad]; } */ /* // Override to allow orientati***** other than the default portrait orientation. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientati*****. return (interfaceOrientation UIInterfaceOrientationPortrait); } */ - (void)didReceiveMemoryWarning { // Releases the view if it doesnt have a superview. [superdidReceiveMemoryWarning]; // Release any cached data, images, etc. that arent in use. } - (void)viewDidUnload { [superviewDidUnload]; // Release any retained subviews of the main view. // e.g. self.myOutlet nil; } - (void)dealloc { [super dealloc]; } #pragma mark - #pragma mark createControl - (void)createControl { //UI展示 self.view.backgroundColor [UIColorgrayColor]; labelState [[UILabelalloc] initWithFrame:CGRectMake(10, 20, 220, 30)]; labelState.backgroundColor [UIColorclearColor]; [self.viewaddSubview:labelState]; [labelStaterelease]; btnStartVideo [[UIButtonalloc] initWithFrame:CGRectMake(20, 350, 80, 50)]; [btnStartVideosetTitle:StarforState:UIControlStateNormal]; [btnStartVideosetBackgroundImage:[UIImageimageNamed:Images/button.png] forState:UIControlStateNormal]; [btnStartVideoaddTarget:selfaction:selector(startVideoCapture) forControlEvents:UIControlEventTouchUpInside]; [self.viewaddSubview:btnStartVideo]; [btnStartVideorelease]; UIButton* stop [[UIButtonalloc] initWithFrame:CGRectMake(120, 350, 80, 50)]; [stop setTitle:StopforState:UIControlStateNormal]; [stop setBackgroundImage:[UIImageimageNamed:Images/button.png] forState:UIControlStateNormal]; [stop addTarget:selfaction:selector(stopVideoCapture:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:stop]; [stop release]; localView [[UIViewalloc] initWithFrame:CGRectMake(40, 50, 200, 300)]; [self.viewaddSubview:localView]; [localViewrelease]; } #pragma mark - #pragma mark VideoCapture - (AVCaptureDevice *)getFrontCamera { //获取前置摄像头设备 NSArray *cameras [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; for (AVCaptureDevice *device in cameras) { if (device.position AVCaptureDevicePositionFront) return device; } return [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; } - (void)startVideoCapture { //打开摄像设备并开始捕抓图像 [labelStatesetText:Starting Video stream]; if(self-avCaptureDevice|| self-avCaptureSession) { [labelStatesetText:Already capturing]; return; } if((self-avCaptureDevice [self getFrontCamera]) nil) { [labelStatesetText:Failed to get valide capture device]; return; } NSError *error nil; AVCaptureDeviceInput *videoInput [AVCaptureDeviceInput deviceInputWithDevice:self-avCaptureDevice error:error]; if (!videoInput) { [labelStatesetText:Failed to get video input]; self-avCaptureDevice nil; return; } self-avCaptureSession [[AVCaptureSession alloc] init]; self-avCaptureSession.sessionPreset AVCaptureSessionPresetLow; [self-avCaptureSession addInput:videoInput]; // Currently, the only supported key is kCVPixelBufferPixelFormatTypeKey. Recommended pixel format choices are // kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange or kCVPixelFormatType_32BGRA. // On iPhone 3G, the recommended pixel format choices are kCVPixelFormatType_422YpCbCr8 or kCVPixelFormatType_32BGRA. // AVCaptureVideoDataOutput *avCaptureVideoDataOutput [[AVCaptureVideoDataOutput alloc] init]; NSDictionary*settings [[NSDictionaryalloc] initWithObjectsAndKeys: //[NSNumber numberWithUnsignedInt:kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange], kCVPixelBufferPixelFormatTypeKey, [NSNumbernumberWithInt:240], (id)kCVPixelBufferWidthKey, [NSNumber numberWithInt:320], (id)kCVPixelBufferHeightKey, nil]; avCaptureVideoDataOutput.videoSettings settings; [settings release]; avCaptureVideoDataOutput.minFrameDuration CMTimeMake(1, self-producerFps); /*We create a serial queue to handle the processing of our frames*/ dispatch_queue_tqueue dispatch_queue_create(org.doubango.idoubs, NULL); [avCaptureVideoDataOutput setSampleBufferDelegate:self queue:queue]; [self-avCaptureSession addOutput:avCaptureVideoDataOutput]; [avCaptureVideoDataOutput release]; dispatch_release(queue); AVCaptureVideoPreviewLayer* previewLayer [AVCaptureVideoPreviewLayer layerWithSession: self-avCaptureSession]; previewLayer.frame localView.bounds; previewLayer.videoGravity AVLayerVideoGravityResizeAspectFill; [self-localView.layer addSublayer: previewLayer]; self-firstFrame YES; [self-avCaptureSession startRunning]; [labelStatesetText:Video capture started]; } - (void)stopVideoCapture:(id)arg { //停止摄像头捕抓 if(self-avCaptureSession){ [self-avCaptureSession stopRunning]; self-avCaptureSession nil; [labelStatesetText:Video capture stopped]; } self-avCaptureDevice nil; //移除localView里面的内容 for(UIView*viewinself-localView.subviews) { [viewremoveFromSuperview]; } } #pragma mark - #pragma mark AVCaptureVideoDataOutputSampleBufferDelegate - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { //捕捉数据输出 要怎么处理虽你便 CVPixelBufferRef pixelBuffer CMSampleBufferGetImageBuffer(sampleBuffer); /*Lock the buffer*/ if(CVPixelBufferLockBaseAddress(pixelBuffer, 0) kCVReturnSuccess) { UInt8 *bufferPtr (UInt8 *)CVPixelBufferGetBaseAddress(pixelBuffer); size_t buffeSize CVPixelBufferGetDataSize(pixelBuffer); if(self-firstFrame) { if(1) { //第一次数据要求宽高类型 int width CVPixelBufferGetWidth(pixelBuffer); int height CVPixelBufferGetHeight(pixelBuffer); int pixelFormat CVPixelBufferGetPixelFormatType(pixelBuffer); switch (pixelFormat) { casekCVPixelFormatType_420YpCbCr8BiPlanarVideoRange: //TMEDIA_PRODUCER(producer)-video.chroma tmedia_nv12; // iPhone 3GS or 4 NSLog(Capture pixel formatNV12); break; casekCVPixelFormatType_422YpCbCr8: //TMEDIA_PRODUCER(producer)-video.chroma tmedia_uyvy422; // iPhone 3 NSLog(Capture pixel formatUYUY422); break; default: //TMEDIA_PRODUCER(producer)-video.chroma tmedia_rgb32; NSLog(Capture pixel formatRGB32); break; } self-firstFrame NO; } } /*We unlock the buffer*/ CVPixelBufferUnlockBaseAddress(pixelBuffer, 0); } /*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*/ // 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 didnt use the main_queue) // we use performSelectorOnMainThread to call our CALayer and tell it to display the CGImage.*/ // [self.customLayer performSelectorOnMainThread:selector(setContents:) withObject: (id) newImage waitUntilDone:YES]; // // /*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 ...*/ // UIImage *image [UIImage imageWithCGImage:newImage scale:1.0 orientation:UIImageOrientationRight]; // // /*We relase the CGImageRef*/ // CGImageRelease(newImage); // // [self.imageView performSelectorOnMainThread:selector(setImage:) withObject:image waitUntilDone:YES]; // // /*We unlock the image buffer*/ // CVPixelBufferUnlockBaseAddress(imageBuffer,0); // // [pool drain]; } end 杨航收集技术资料分享给大家