- 浏览: 643865 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
lizaochengwen:
网络请求碰到的中文乱码使用encodeURL吧- (NSStr ...
iPhone开发/iPad开发 中文乱码问题 -
hhb19900618:
还是没弄懂怎么解决了中文乱码? 正确代码能重写贴出吗
iPhone开发/iPad开发 中文乱码问题 -
zhengjj_2009:
我的理解是讲ipa文件解压缩之后再重新打包,已经破坏了签名,所 ...
xcodebuild和xcrun实现自动打包iOS应用程序 -
zhengjj_2009:
我参考你的“ 从ipa格式的母包生成其它渠道包的shell脚本 ...
xcodebuild和xcrun实现自动打包iOS应用程序 -
同一片天空:
问题果然解决了
iOS 搭建 XMPP实现环境
ios编程--AVCapture编程理解
- 博客分类:
- iphone
0、媒体采集的几个东西。这里所需要明白的是,在这个流程中,这里会存在几个对象:
a、AVCaptureDevice。这里代表抽象的硬件设备。
b、AVCaptureInput。这里代表输入设备(可以是它的子类),它配置抽象硬件设备的ports。
c、AVCaptureOutput。它代表输出数据,管理着输出到一个movie或者图像。
d、AVCaptureSession。它是input和output的桥梁。它协调着intput到output的数据传输。
1、这些东东的关系。
高层面关系:
有很多Device的input,也有很多数据类型的Output,都通过一个Capture Session来控制进行传输。也即:CaptureDevice适配AVCaptureInput,通过Session来输入到AVCaptureOutput中。这样也就达到了从设备到文件等持久化传输的目的(如从相机设备采集图像到UIImage中)。
特别注意,这里的关系是可以通过唯一一个Capture Session来同时控制设备的输入和输出。
那么存在一个问题了:视频输入(input)就对应视频的输出(output),而音频输入就应对应音频的输出,因而需要建立对应的Connections,来各自连接它们。而这样的连接对象,是由AVCaptureSession来持有的,这个对象叫AVCaptureConnection。
在一个ACCaptureConnection中,这里维持着对应的数据传输输入到数据输出的过程(detail过程)。这里,AVCaptureInput或其子类对象包含着各种input port,通过各种input port,我们的AVCaptureOutput可以获取到相应的数据。
一个ACCaptureConnection可以控制input到output的数据传输。
2、Session及其使用模式
You use an instance to coordinate the flow of data from AV input devices to outputs. You add the capture devices and outputs you want to the session, then start data flow by sending the session a startRunning message, and stop recording by sending a stopRunning message.
AVCaptureSession *session = [[AVCaptureSession alloc] init];
//Add inputs and outputs.
[session startRunning];
这里表明了,需要create一个session,然后发running消息给它,它会自动跑起来,把输入设备的东西,提交到输出设备中。
若想在一个已经使用上的session中(已经startRunning了)做更换新的device、删除旧的device等一系列操作,那么就需要使用如下方法:
[session beginConfiguration];
// Remove an existing capture device.
// Add a new capture device.
// Reset the preset.
[session commitConfiguration];
来进行处理。
当然,如果session的时候发生了异常,那么我们可以通过notification去observe相关的事件(可以在AVCaptureSession Class Reference中的Nofications中找到相应的情况),而session如果出现相应问题时,它会post出来,此时我们就可以处理了。
3、谈谈AVCaptureDevice
InputDevice即是对硬件的抽象,一对一的。一个AVCaptureDevice对象,对应一个实际的硬件设备。
那么显然,我们可以通过AVCaptureDevice的类方法devices或devicesWithMediaType去获取全部或局部设备列表。(当然也可以检测相应的设备是否可以使用,这里注意有设备抢占问题,当前是否可用)
相机设备可以用下面的方法判断设备是否支持相关属性(property),比如对焦方式或者对焦状态Focus modes。
if([currentDeviceisFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus])
此外,设置对焦点CGPoint时,需要注意位置:
a CGPoint where {0,0} represents the top left of the picture area, and {1,1} represents the bottom right in landscape mode with the home button on the right。
当我们需要对一个设备的属性进行观察,我们可以使用KVO来处理。(为啥观察,比如我们需要知道设备此时是否正在对焦or已经停止了对焦)
对于一个device的属性更改,我们的做法通常是:
lockàsetàunlock
if([deviceisFocusModeSupported:AVCaptureFocusModeLocked])
//do configuring
[device unlockForConfiguration];
}
else{//Respond to the failure as appropriate.
4、CaptureInput的构建和添加到Session中的方法
/*创建并配置输入设备*/
AVCaptureDevice *device =
[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error = nil;
AVCaptureDeviceInput *input =
[AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
//添加input到session的模式是(检查可否添加到session,然后根据情况添加或者不添加):
AVCaptureSession *captureSession = <#Get a capture session#>;
if ([captureSession canAddInput:input]) {
[captureSession addInput:captureDeviceInput];
}
else{//handle the failure.}
5、output的分类和使用
在ios中,分为MovieFile、VideoData、AudioData和StillImage几种output,使用方式类似,只是范围不同。另外,它们都继承于AVCaptureOutput。
第一个是输出成movie文件,第二个适用于逐个Frame的处理,第三个适用于声音采集,第四个是still image(静态图像<拍照>)相关。
他们的添加方式都是使用session的addOutput方法。
6、最后提一下值得一看的Demo:AVCam。可以在xcode中找到。
欢迎转载,请表明出处。http://blog.163.com/chester_lp/blog/static/139794082012119112834437/
a、AVCaptureDevice。这里代表抽象的硬件设备。
b、AVCaptureInput。这里代表输入设备(可以是它的子类),它配置抽象硬件设备的ports。
c、AVCaptureOutput。它代表输出数据,管理着输出到一个movie或者图像。
d、AVCaptureSession。它是input和output的桥梁。它协调着intput到output的数据传输。
1、这些东东的关系。
高层面关系:
有很多Device的input,也有很多数据类型的Output,都通过一个Capture Session来控制进行传输。也即:CaptureDevice适配AVCaptureInput,通过Session来输入到AVCaptureOutput中。这样也就达到了从设备到文件等持久化传输的目的(如从相机设备采集图像到UIImage中)。
特别注意,这里的关系是可以通过唯一一个Capture Session来同时控制设备的输入和输出。
那么存在一个问题了:视频输入(input)就对应视频的输出(output),而音频输入就应对应音频的输出,因而需要建立对应的Connections,来各自连接它们。而这样的连接对象,是由AVCaptureSession来持有的,这个对象叫AVCaptureConnection。
在一个ACCaptureConnection中,这里维持着对应的数据传输输入到数据输出的过程(detail过程)。这里,AVCaptureInput或其子类对象包含着各种input port,通过各种input port,我们的AVCaptureOutput可以获取到相应的数据。
一个ACCaptureConnection可以控制input到output的数据传输。
2、Session及其使用模式
You use an instance to coordinate the flow of data from AV input devices to outputs. You add the capture devices and outputs you want to the session, then start data flow by sending the session a startRunning message, and stop recording by sending a stopRunning message.
AVCaptureSession *session = [[AVCaptureSession alloc] init];
//Add inputs and outputs.
[session startRunning];
这里表明了,需要create一个session,然后发running消息给它,它会自动跑起来,把输入设备的东西,提交到输出设备中。
若想在一个已经使用上的session中(已经startRunning了)做更换新的device、删除旧的device等一系列操作,那么就需要使用如下方法:
[session beginConfiguration];
// Remove an existing capture device.
// Add a new capture device.
// Reset the preset.
[session commitConfiguration];
来进行处理。
当然,如果session的时候发生了异常,那么我们可以通过notification去observe相关的事件(可以在AVCaptureSession Class Reference中的Nofications中找到相应的情况),而session如果出现相应问题时,它会post出来,此时我们就可以处理了。
3、谈谈AVCaptureDevice
InputDevice即是对硬件的抽象,一对一的。一个AVCaptureDevice对象,对应一个实际的硬件设备。
那么显然,我们可以通过AVCaptureDevice的类方法devices或devicesWithMediaType去获取全部或局部设备列表。(当然也可以检测相应的设备是否可以使用,这里注意有设备抢占问题,当前是否可用)
相机设备可以用下面的方法判断设备是否支持相关属性(property),比如对焦方式或者对焦状态Focus modes。
if([currentDeviceisFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus])
此外,设置对焦点CGPoint时,需要注意位置:
a CGPoint where {0,0} represents the top left of the picture area, and {1,1} represents the bottom right in landscape mode with the home button on the right。
当我们需要对一个设备的属性进行观察,我们可以使用KVO来处理。(为啥观察,比如我们需要知道设备此时是否正在对焦or已经停止了对焦)
对于一个device的属性更改,我们的做法通常是:
lockàsetàunlock
if([deviceisFocusModeSupported:AVCaptureFocusModeLocked])
//do configuring
[device unlockForConfiguration];
}
else{//Respond to the failure as appropriate.
4、CaptureInput的构建和添加到Session中的方法
/*创建并配置输入设备*/
AVCaptureDevice *device =
[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error = nil;
AVCaptureDeviceInput *input =
[AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
//添加input到session的模式是(检查可否添加到session,然后根据情况添加或者不添加):
AVCaptureSession *captureSession = <#Get a capture session#>;
if ([captureSession canAddInput:input]) {
[captureSession addInput:captureDeviceInput];
}
else{//handle the failure.}
5、output的分类和使用
在ios中,分为MovieFile、VideoData、AudioData和StillImage几种output,使用方式类似,只是范围不同。另外,它们都继承于AVCaptureOutput。
第一个是输出成movie文件,第二个适用于逐个Frame的处理,第三个适用于声音采集,第四个是still image(静态图像<拍照>)相关。
他们的添加方式都是使用session的addOutput方法。
6、最后提一下值得一看的Demo:AVCam。可以在xcode中找到。
欢迎转载,请表明出处。http://blog.163.com/chester_lp/blog/static/139794082012119112834437/
发表评论
-
SOCK_STREAM和SOCK_DGRAM
2015-07-23 20:08 1566sock_stream 是有保障的(即能保证数据正确传送到 ... -
SOCKET bind INADDR_LOOPBACK和INADDR_ANY的区别
2015-07-23 19:49 2003今天写程序时候,服务器端启动了,然后客户端总是连接不上,con ... -
htons()
2015-07-23 19:26 532在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺 ... -
使用symbolicatecrash分析crash文件
2015-03-10 11:32 1118原文 http://www.cnblogs.com/ning ... -
程序设计中的计算复用(Computational Reuse)
2015-02-10 10:18 607从斐波那契数列说起 ... -
didReceiveMemoryWarning
2015-02-09 16:11 487IPhone下每个app可用的内存是被限制的,如果一个app使 ... -
iOS开发中怎么响应内存警告
2015-02-09 16:08 605好的应用应该在系统内存警告情况下释放一些可以重新创建的资源。在 ... -
ASIHTTPRequest多次重复请求的问题
2014-12-17 14:34 591在一个车票订购的项目中,点击一次订购,却生成了2次订单,通过抓 ... -
从 CloudKit 看 BaaS 服务的趋势
2014-09-26 11:51 690从 6 月份 WWDC 苹果发布 ... -
NSURLProtocol
2014-09-25 10:42 7591、http://nshipster.com/nsurlpro ... -
关于iOS8的extension插件
2014-09-25 10:41 1217关于iOS8的extension插件,有兴趣的同学可以参考一下 ... -
【转】ios app在itunesConnect里面的几种状态
2014-08-05 10:34 1090Waiting for Upload (Yellow) Ap ... -
[转]iOS Dev (45) iOS图标与切片处理工具Prepo
2014-02-07 17:02 987iOS Dev (45) iOS图标与切片处理工具Prepo ... -
phoneGap开发IOS,JS调用IOS方法/phoneGap插件开发
2014-01-13 17:49 1207前沿 废话不说phoneGap是什么不多介绍,官方网站: h ... -
如何在IOS平台下搭建PhoneGap开发环境(PhoneGap2.5)
2014-01-13 15:23 699由于在下最近在做基于HTML5的跨平台移植,搭建环境的时候着实 ... -
xcode 4 制作静态库详解
2013-12-20 18:27 483最近在做Apple的IOS开发,有开发静态库的需求,本身IOS ... -
【翻译】ios教程-创建静态库
2013-12-20 18:19 3010作者:shede333 主页:htt ... -
封装自己的控件库:iPhone静态库的应用
2013-12-20 17:03 510由于iPhone 控件的极度匮乏和自定义组件在重用上的限制,在 ... -
iphone:使用NSFileManager取得目录下所有文件(遍历所有文件)
2013-11-18 17:56 824From:http://note.sdo.com/u/xiao ... -
ios7-录音权限访问-AVAudioSession
2013-11-15 19:39 11764///新增api,获取录音权限. 返回值,YES为无拒绝,NO ...
相关推荐
主要为大家详细介绍了iOS使用原生AVCapture系列的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
AVCapture使用手册.chmAVCapture使用手册.chm
AVCapture是一个基于Microsoft的DirectShow技术开发的音视频讯号捕捉ActiveX控件,支持模拟视频捕捉卡和1394/USB数字视频设备,它可以帮助那些准备开发音/视频捕捉相关软件的程序员快速获取和处理音/视频数据。...
虹光扫描仪扫描软件。可直接扫为pdf文言档。简单易操作。
AVCapture使用手册,需要的请下载
AVCapture是一个基于Microsoft的DirectShow技术开发的音视频讯号捕捉ActiveX控件,支持模拟视频捕捉卡和1394/USB数字视频设备,它可以帮助那些准备开发音/视频捕捉相关软件的程序员快速获取和处理音/视频数据。...
自iOS7以后,苹果系统自带了二维码的扫描功能,调用简单
AVCapture.framework等的简单但功能强大的包装器 要求:MacOS X 10.13或更高版本。 捕获设备:与AVCapture.framework兼容的任何AV设备,包括DV等A / V混合连接。 限制:不支持纯视频或纯音频录制。 依赖关系:...
迅捷视觉稍后涉及 AVCapture 和可能的 OpenCV 的 OSX/Swift 学习者项目
AVCapture 自定义相机,手机改变聚集点,可生成mp4格式视频,并可自定义输出尺寸,iOS9可用
利用系统自带的AVCapture实现的二维码扫描,里面使用到了CoreData的增删等基本功能
虹光的驱动,再配AVCAPTURE就可以用啦
内容索引:VB源码,多媒体技术,播放器,多媒体 收集了几个与多媒体相关的程序,Mp3play.ocx编写的mp3播放器、vcd播放器、利用API的CD播放器、利用Windows API 播放AVI文件、简易录音程序、基于swflash.ocx的袖珍Flash ...
捕获设备:与AVCapture.framework兼容的任何AV设备,包括DV等A / V混合连接。 框架AVCaptureManager.framework。 (嵌入式) 限制:不支持纯视频或纯音频录制。 架构:通用二进制(x86_64 + arm64) 基本特征 ...
VFP中照相功能的实现方法:通过AVCapture 音视频捕捉控件(AVCap.ocx)抓图、图像剪裁控件PicClp32.ocx 剪裁、图像编辑控件ImgEdit. ocx 压缩并转换的方法,在VFP 应用程序中实现摄像头照相功能。