注册 登录
主题 : iPhone摄像头设备获取(分离简化版)
级别: 新手上路
UID: 33695
精华: 0
发帖: 44
可可豆: 252 CB
威望: 252 点
在线时间: 156(时)
注册时间: 2010-10-14
最后登录: 2018-04-17
0 楼:  发表于: 2011-07-12 23:49    发自: Web Page
来源于 iPhone类代码 分类

iPhone摄像头设备获取(分离简化版)    (在iOS代码库中浏览本帖)

这次把视频捕获的彻底的分出来了。应该每个都看得懂怎么用吧。
贴上代码略说明下
需要的库
AVFoundation.framework 、CoreVideo.framework 、CoreMedia.framework
该摄像头捕抓必须编译真机的版本且要sdk4.0以上,模拟器下编译不了。

[font=]文件说明:
[font=] CameraHelp.h/.m 为主要文件即摄像头捕获
[font=] VideoController.h/.m为调用示例

//
//  CameraHelp.h
//  
//
//  Created by Zhuang Chuan Xian. on 11-6-28.
//  Copyright 2011  . All rights reserved.
//
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>


#undef PRODUCER_HAS_VIDEO_CAPTURE
#define PRODUCER_HAS_VIDEO_CAPTURE (__IPHONE_OS_VERSION_MIN_REQUIRED >= 40000 && TARGET_OS_EMBEDDED)
@protocol CameraHelpDelegate
-(void)VideoDataOutputBuffer:(char*)videoBuffer dataSize:(int)size;
@end


@interface CameraHelp : NSObject
#if PRODUCER_HAS_VIDEO_CAPTURE
<AVCaptureVideoDataOutputSampleBufferDelegate>
#endif 
{
@private
int mWidth;
int mHeight;
int mFps;
BOOL mFrontCamera;
BOOL mFirstFrame;
BOOL mStarted;
UIView* mPreview;
id<CameraHelpDelegate> outDelegate;
#if PRODUCER_HAS_VIDEO_CAPTURE
AVCaptureSession* mCaptureSession;
AVCaptureDevice *mCaptureDevice;
#endif
}
//单例模式
+ (CameraHelp*)shareCameraHelp;
+ (void)closeCamera;
//设置前置摄像头
- (BOOL)setFrontCamera;
//设置后置摄像头
- (BOOL)setBackCamera;
//开始前设置捕获参数
- (void)prepareVideoCapture:(int) width andHeight: (int)height andFps: (int) fps andFrontCamera:(BOOL) bfront andPreview:(UIView*) view;
//开始捕获
- (void)startVideoCapture;
//停止捕获
- (void)stopVideoCapture;
//设置要显示到得View
- (void)setPreview: (UIView*)preview;
//设置数据输出
- (void)setVideoDataOutputBuffer:(id<CameraHelpDelegate>)delegate;
@end


实现的自己下载例子,该例可以在编译运行,函数不懂的看这  iPhone摄像头设备获取


下面是调用说明很简单就句话
//
//  VideoController.m
//  
//
//  Created by zcx. on 11-6-28.
//  Copyright 2011  . All rights reserved.
//


#import "VideoController.h"
#import "CameraHelp.h"


@implementation VideoController
@synthesize videoView;
// 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.
self.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
self.modalPresentationStyle = UIModalPresentationFullScreen;
    }
return self;
}






// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
[self setTitle:@"Video Capture"];
//捕获很简单就下面这几句话
//设置输出的View
[[CameraHelp shareCameraHelp] setPreview:videoView];
//捕获数据输出到本地
[[CameraHelp shareCameraHelp] setVideoDataOutputBuffer:self];
//开始捕获
[[CameraHelp shareCameraHelp] startVideoCapture];
}
//如果要获取捕获的数据记得重写这个接口哦 不然蹦了,不要怪人哦。
-(void)VideoDataOutputBuffer:(char*)videoBuffer dataSize:(int)size
{
NSLog(@"Recv Data size=%d",size);
}


/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations.
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/


- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

// Release any cached data, images, etc. that aren't in use.
}


- (void)viewDidUnload {
    [super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}




- (void)dealloc {
//停止捕获
[[CameraHelp shareCameraHelp] stopVideoCapture];
//关闭输出
[[CameraHelp shareCameraHelp] setVideoDataOutputBuffer:nil];
    [super dealloc];
}


- (IBAction) onButtonEndClick: (id)sender
{
[self dismissModalViewControllerAnimated:YES];
}
@end


最后程序关闭时记得调用 
[CameraHelp closeCamera];
不然会内存泄露的
最后 觉得好的话顶下哈。。。。








[ 此帖被chuanxian396在2011-07-13 14:33重新编辑 ]

附件: TestVideoCapture.zip (27 K) 下载次数:2132
级别: 新手上路
UID: 11177
精华: 0
发帖: 5
可可豆: 50 CB
威望: 50 点
在线时间: 17(时)
注册时间: 2009-12-01
最后登录: 2015-03-24
1 楼:  发表于: 2011-07-13 01:12    发自: Web Page
ding 好帖, 楼主幸苦了
级别: 侠客
UID: 830
精华: 0
发帖: 1
可可豆: 1233 CB
威望: 1233 点
在线时间: 1739(时)
注册时间: 2008-09-23
最后登录: 2019-01-21
2 楼:  发表于: 2011-07-13 13:22    发自: Web Page
楼主辛苦
级别: 精灵王

UID: 55801
精华: 0
发帖: 536
可可豆: 4312 CB
威望: 4212 点
在线时间: 451(时)
注册时间: 2011-03-09
最后登录: 2016-06-22
3 楼:  发表于: 2011-07-14 19:03    发自: Web Page
觉得好,所以顶了!!
我的技术博客:http://imrazor.github.io
级别: 新手上路
UID: 23603
精华: 0
发帖: 32
可可豆: 320 CB
威望: 320 点
在线时间: 78(时)
注册时间: 2010-07-01
最后登录: 2012-10-18
4 楼:  发表于: 2011-07-18 18:46    发自: Web Page
谢谢楼主~~~找了很久~~~~~~~
级别: 光明使者

状态: 连续签到 - [144天]
UID: 491
精华: 6
发帖: 1766
可可豆: 112205 CB
威望: 112852 点
在线时间: 8537(时)
注册时间: 2008-08-19
最后登录: 2018-04-07
5 楼:  发表于: 2011-07-18 19:03    发自: Web Page
进来学习一下:)


 Developer
------------------------------------------------------------
Η αγάπη ποτέ δεν αποτυγχάνει.
愛是永不止息。
Love never fails.

    --《圣经.新约》哥林多前书第13章
级别: 风云使者

状态: 连续签到 - [25天]
UID: 29025
精华: 0
发帖: 2724
可可豆: 18569 CB
威望: 18611 点
在线时间: 11614(时)
注册时间: 2010-08-29
最后登录: 2019-01-22
6 楼:  发表于: 2011-07-18 21:52    发自: Web Page
学习一下
天道酬勤!
级别: 侠客
UID: 17853
精华: 0
发帖: 104
可可豆: 978 CB
威望: 978 点
在线时间: 551(时)
注册时间: 2010-04-19
最后登录: 2016-07-23
7 楼:  发表于: 2011-07-22 13:48    发自: Web Page
非常感谢。。。很强大
级别: 侠客
UID: 64460
精华: 0
发帖: 139
可可豆: 1192 CB
威望: 1192 点
在线时间: 467(时)
注册时间: 2011-04-17
最后登录: 2019-01-18
8 楼:  发表于: 2011-08-31 09:15    发自: Web Page
mark 下 研究中
级别: 新手上路
状态: 连续签到 - [1天]
UID: 51860
精华: 0
发帖: 18
可可豆: 168 CB
威望: 164 点
在线时间: 148(时)
注册时间: 2011-02-18
最后登录: 2018-10-10
9 楼:  发表于: 2011-08-31 12:56    发自: Web Page
感谢楼主的分享,太有用了

CocoaChina社区转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系社区进行修改或删除【联系方式QQ : 3442093904 邮箱:support@cocoachina.com】文章内容为作者独立观点,不代表CocoaChina社区立场。版权归原作者所有,如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任。

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部