`
lizaochengwen
  • 浏览: 658206 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ios编程--AVCapture编程理解

 
阅读更多
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/
分享到:
评论

相关推荐

    iOS使用原生AVCapture系列

    iOS 使用原生 AVCapture 系列 iOS 使用原生 AVCapture 系列是指在 iOS 开发中使用原生的 AVCapture 框架来实现音频、视频、拍照、录制视频等多媒体功能。该系列主要提供了音频输出、文本输出、二维码输出、拍照输出...

    AVCapture音/视频捕捉

    AVCapture是一个基于Microsoft的DirectShow技术开发的音视频讯号捕捉ActiveX控件,支持模拟视频捕捉卡和1394/USB数字视频设备,它可以帮助那些准备开发音/视频捕捉相关软件的程序员快速获取和处理音/视频数据。...

    AVCapture使用手册

    AVCapture是苹果iOS、macOS平台上用于实时音频和视频采集的框架,它是Core Media框架的一部分,主要用于构建多媒体捕捉应用,如视频聊天、直播、录制等。这个“AVCapture使用手册”很可能包含了关于如何使用该框架的...

    AVCapture使用手册.chm

    AVCapture使用手册.chmAVCapture使用手册.chm

    AVCapture1.6.3

    AVCapture是一款专为虹光扫描仪设计的扫描软件,版本号为1.6.3。该软件的主要功能是将纸质文档转换为PDF电子文件,从而实现文档的数字化和便捷存储。在当前信息化社会中,这样的工具对于个人和企业来说都极其重要,...

    AVCapture(音/视频捕捉)

    AVCapture是一个基于Microsoft的DirectShow技术开发的音视频讯号捕捉ActiveX控件,支持模拟视频捕捉卡和1394/USB数字视频设备,它可以帮助那些准备开发音/视频捕捉相关软件的程序员快速获取和处理音/视频数据。...

    iOS7后系统自带的二维码扫描

    在iOS7及后续版本中,苹果引入了一项重要的更新,即内置了二维码(QR Code)扫描功能。这一功能使得开发者无需依赖第三方库就能轻松地在...通过深入理解和熟练运用AVCapture,你的iOS应用将能够更好地与现实世界互动。

    Avision(虹光)驱动下载地.pdf

    - AVCapture1.6(AvCapture16.zip)是虹光扫描仪的通用扫描软件,能够直接将扫描内容保存为PDF格式。 - AV210_040823.rar是专为AV210设计的税务用驱动程序,确保符合税务系统的特定要求。 - AV180Driver.rar提供...

    IOS_录制电影和拍照_AV Foundation

    在iOS平台上,开发移动应用程序时,常常需要集成拍照和视频录制功能。`AV Foundation`框架是Apple提供的核心多媒体处理框架,用于处理音频和...理解并熟练掌握`AVFoundation`,对于开发高质量的多媒体应用至关重要。

    swift-用AVFoundation自定义视频录制功能

    在iOS应用开发中,利用Apple的AVFoundation框架可以实现丰富的媒体处理功能,包括自定义视频录制。本篇文章将深入探讨如何使用AVFoundation来构建一个具备横竖屏切换、断点续录、切换前后摄像头、控制闪光灯以及手动...

    swiftAndVision:OSXSwift 学习者项目涉及 AVCapture 和稍后可能的 OpenCV

    在Swift编程语言中,`SwiftAndVision`项目旨在帮助学习者深入理解如何在macOS(OSX)平台上利用AVFoundation框架中的`AVCapture`类进行实时视频捕获,并结合计算机视觉库OpenCV处理图像数据。这是一个非常适合初学者...

    二维码扫描

    本项目是基于iOS系统,利用Apple的AVFoundation框架中的AVCapture模块实现的二维码扫描功能。同时,它还涉及到CoreData框架,用于处理扫描结果的存储和管理。 首先,我们要了解AVCapture。AVCapture是AVFoundation...

    AVCaptureManager:简单但功能强大的包装器,用于AVCapture.framework等

    AVCapture.framework等的简单但功能强大的包装器 要求:MacOS X 10.13或更高版本。 捕获设备:与AVCapture.framework兼容的任何AV设备,包括DV等A / V混合连接。 限制:不支持纯视频或纯音频录制。 依赖关系:...

    iyon-module-implicit.rar_https://www.iyon

    Winsock 控件是 Windows 下进行网络编程的重要工具,它提供了标准的套接字(Socket)接口,允许应用程序通过 TCP/IP 协议进行数据传输。 1. **Winsock 控件**:Winsock 是 Windows Socket 的简称,它是 Windows ...

    VFP中照相功能的实现方法

    本文将详细介绍如何通过AVCapture音视频捕捉控件(AVCap.ocx)抓取图像、图像剪裁控件PicClp32.ocx进行剪裁以及图像编辑控件ImgEdit.ocx进行压缩和格式转换的方法,在VFP应用程序中实现摄像头的照相功能。 #### 二、...

    DirectShow 音频采集输出PCM文件

    通过阅读和理解这些代码,你可以更好地掌握DirectShow音频采集的具体操作,并能根据自己的需求修改和扩展。 总的来说,DirectShow音频采集输出PCM文件是一项涉及多媒体编程、音频处理和COM技术的综合任务。熟练掌握...

Global site tag (gtag.js) - Google Analytics