iphone ios4 视频捕捉
来源:互联网 发布:lofter独立域名 编辑:程序博客网 时间:2024/05/01 13:28
要注意:初始化摄像头的时候,设置采集格式是rgb的,
numberWithInt:kCVPixelFormatType_32BGRA
所以,输出的时候可以用以下方法生成NSImage
见http://stackoverflow.com/questions/3152259/how-to-convert-a-cvimagebufferref-to-uiimage
第一步:初始化AVCaptureSession,添加输入,输出源
#import <AVFoundation/AVFoundation.h> // Create and configure a capture session and start it running - (void)setupCaptureSession { NSError *error = nil; // Create the session AVCaptureSession *session = [[AVCaptureSession alloc] init]; // Configure the session to produce lower resolution video frames, if your // processing algorithm can cope. We'll specify medium quality for the // chosen device. session.sessionPreset = AVCaptureSessionPresetMedium; // Find a suitable AVCaptureDevice AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; // Create a device input with the device and add it to the session. AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; if (!input) { // Handling the error appropriately. } [session addInput:input]; // Create a VideoDataOutput and add it to the session AVCaptureVideoDataOutput *output = [[[AVCaptureVideoDataOutput alloc] init] autorelease]; [session addOutput:output]; // Configure your output. dispatch_queue_t queue = dispatch_queue_create("myQueue", NULL); [output setSampleBufferDelegate:self queue:queue]; dispatch_release(queue); // Specify the pixel format output.videoSettings = [NSDictionary dictionaryWithObject: [NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey]; // If you wish to cap the frame rate to a known value, such as 15 fps, set // minFrameDuration. output.minFrameDuration = CMTimeMake(1, 15); // Start the session running to start the flow of data [session startRunning]; // Assign session to an ivar. [self setSession:session]; }第二步:实现AVCaptureVideoDataOutputSampleBufferDelegate协议方法
// Delegate routine that is called when a sample buffer was written - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { // Create a UIImage from the sample buffer data UIImage *image = [self imageFromSampleBuffer:sampleBuffer]; < Add your code here that uses the image > } // Create a UIImage from sample buffer data - (UIImage *) imageFromSampleBuffer:(CMSampleBufferRef) sampleBuffer { CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); // Lock the base address of the pixel buffer CVPixelBufferLockBaseAddress(imageBuffer,0); // Get the number of bytes per row for the pixel buffer size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); // Get the pixel buffer width and height size_t width = CVPixelBufferGetWidth(imageBuffer); size_t height = CVPixelBufferGetHeight(imageBuffer); // Create a device-dependent RGB color space CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); if (!colorSpace) { NSLog(@"CGColorSpaceCreateDeviceRGB failure"); return nil; } // Get the base address of the pixel buffer void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer); // Get the data size for contiguous planes of the pixel buffer. size_t bufferSize = CVPixelBufferGetDataSize(imageBuffer); // Create a Quartz direct-access data provider that uses data we supply CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, baseAddress, bufferSize, NULL); // Create a bitmap image from data supplied by our data provider CGImageRef cgImage = CGImageCreate(width, height, 8, 32, bytesPerRow, colorSpace, kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Little, provider, NULL, true, kCGRenderingIntentDefault); CGDataProviderRelease(provider); CGColorSpaceRelease(colorSpace); // Create and return an image object representing the specified Quartz image UIImage *image = [UIImage imageWithCGImage:cgImage]; CGImageRelease(cgImage); CVPixelBufferUnlockBaseAddress(imageBuffer, 0); return image; }好了,现在就可以自由的显示和分析获取的UIImage了,再也不用使用私有API了
- iphone ios4 视频捕捉
- [IPhone] iOS4 Multitasking
- 视频捕捉
- iOS4.3导致iPhone续航能力下降
- ios4 怎么获取视频的总时长
- 视频捕捉解决方案
- Directshow中的视频捕捉
- Directshow中的视频捕捉
- Directshow中的视频捕捉
- 视频捕捉程序
- VC++ 捕捉摄像头视频!
- 视频捕捉应用
- Directshow中的视频捕捉
- Directshow中的视频捕捉
- vfw视频捕捉
- 用directshow捕捉视频
- VFW实现视频捕捉
- Directshow的视频捕捉
- 如何利用Qt Creator打包Meego程序
- 查找指定目录下的.exe文件 并且将.exe文件按全路径保存
- 留言板
- How to create a simple 2D graphics program?
- ac自动机+矩阵 poj 2778
- iphone ios4 视频捕捉
- Linux主要目录说明
- 关注C++细节——你能直接写出多少个C++关键字?
- Dsound声音播放
- 好朋友的爬虫共享资料,真佩服
- js定时刷新网页
- 如何将动态编译改成静态编译?
- 类C语言学习
- easyui treegrid