AVFoundation视频流处理
框架
首先我们从整体对所需框架做个初步了解。
AVFoundation在相关框架栈中的的位置:

为了捕捉视频,我们需要这样几种类(与其它的子类)。
- AVCaptureDevice 代表了输入设备,例如摄像头与麦克风。 
- AVCaptureInput 代表了输入数据源 
- AVCaptureOutput 代表了输出数据源 
- AVCaptureSession 用于协调输入与输出之间的数据流 
并且还有AVCaptureVideoPreviewLayer提供摄像头的预览功能
可以用这样一幅图来概述:

例子
实际应用AVFoundation来捕捉视频流并不复杂。
Talk is Cheap,Show me the Code.
我们用代码简单地描述用AVFoundation捕捉视频的过程,其他捕捉音频,静态图像的过程也是大同小异的。
1.创建AVCaputureSession。
作为协调输入与输出的中心,我们第一步需要创建一个Session
AVCaptureSession *session = [[AVCaptureSession alloc] init];
2.创建AVCaptureDevice
创建一个AVCaptureDevice代表代表输入设备。在这里我们制定设备用于摄像。
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
3.创建AVCaptureDeviceInput,并添加到Session中
我们需要使用AVCaptureDeviceInput来让设备添加到session中,AVCaptureDeviceInput负责管理设备端口。我们可以理解它为设备的抽象。一个设备可能可以同时提供视频和音频的捕捉。我们可以分别用AVCaptureDeviceInput来代表视频输入和音频输入。
NSError *error;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
[session addInput:input];
4.创建AVCaptureOutput
为了从session中取得数据,我们需要创建一个AVCaptureOutput
AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc]init];
5.设置output delegate,将output添加至session,在代理方法中分析视频流
为了分析视频流,我们需要为output设置delegate,并且指定delegate方法在哪个线程被调用。需要主要的是,线程必须是串行的,确保视频帧按序到达。
videoDataOutputQueue = dispatch_queue_create("VideoDataOutputQueue", DISPATCH_QUEUE_SERIAL);
[videoDataOutput setSampleBufferDelegate:self queue:videoDataOutputQueue];
[session addOutput:videoDataOutput];
我们可以在delegate方法中分析视频流。
captureOutput:didOutputSampleBuffer:fromConnection:,
6.开始捕捉
[session startRunning];
通过上面的简单例子,我么可以看出使用AVFoundation来捕捉视频流并不是十分复杂。重点是使用的过程需要了解配置的细节,还有性能问题。
AVFoundation视频流处理的更多相关文章
- ios项目里扒出来的json文件
		p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ... 
- Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)
		下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableVie ... 
- iOS及Mac开源项目和学习资料【超级全面】
		UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITable ... 
- iOS:iOS开发非常全的三方库、插件等等
		iOS开发非常全的三方库.插件等等 github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自git ... 
- iOS开发--iOS及Mac开源项目和学习资料
		文/零距离仰望星空(简书作者)原文链接:http://www.jianshu.com/p/f6cdbc8192ba著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 原文出处:codecl ... 
- iOS、mac开源项目及库汇总
		原文地址:http://blog.csdn.net/qq_26359763/article/details/51076499 iOS每日一记------------之 中级完美大整理 iOS.m ... 
- iOS超全开源框架、项目和学习资料汇总--数据库、缓存处理、图像浏览、摄像照相视频音频篇
		iOS超全开源框架.项目和学习资料汇总--数据库.缓存处理.图像浏览.摄像照相视频音频篇 感谢:Ming_en_long 的分享 大神超赞的集合,http://www.jianshu.com/p/f3 ... 
- iOS开发常用第三方库
		UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ... 
- IOS常用第三方库《转》
		UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ... 
随机推荐
- Tkinter教程之Pack篇
			本文转载自:http://blog.csdn.net/jcodeer/article/details/1813077 '''Tkinter教程之Pack篇'''#Pack为一布局管理器,可将它视为一个 ... 
- [转]python起步之卡尔曼滤波
			原文地址:http://www.niwozhi.net/demo_c65_i50946.html 关于卡尔曼滤波的理论这里不打算讲了,就是那个5个基本的公式,这里直接给出公式: 公式1:X(k|k-1 ... 
- MEAN Stack:创建RESTful web service
			本文在个人博客上的地址为URL,欢迎品尝. 前段时间做了DTREE项目中的前后端数据存储功能,在原有的ngController上进行HTTP请求,后端接受到请求后再存储到mongoDB上.现将学习所得 ... 
- Hibernate关联关系之双向1—n
			•双向 1-n 与双向 n-1 是完全相同的两种情形 •双向 1-n 需要在1的一端可以访问n的一端,反之依然. 测试实例代码: 实体类: package com.elgin.hibernate.nt ... 
- Spring AOP + AspectJ in XML configuration example
			For those don't like annotation or using JDK 1.4, you can use AspectJ in XML based instead. Review l ... 
- codeforces 630D	Hexagons!
			D. Hexagons! time limit per test 0.5 seconds memory limit per test 64 megabytes input standard input ... 
- HDU 1068 Girls and Boys (二分图最大独立集)
			题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1068 有n个同学,格式ni:(m) n1 n2 n3表示同学ni有缘与n1,n2,n3成为情侣,求集合 ... 
- Simple guide to Java Message Service (JMS) using ActiveMQ
			JMS let’s you send messages containing for example a String, array of bytes or a serializable Java o ... 
- 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档
			博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档. 
- jsp界面动态时间显示
			<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ... 
