视频相关知识总结

AVFoundation视频流的捕捉:

要捕捉视频需要这几个类:

AVCaptureDevice 代表了输入设备,例如摄像头与麦克风。

AVCaptureInput 代表了输入数据源

AVCaptureOutput 代表了输出数据源

AVCaptureSession 用于协调输入与输出之间的数据流

AVCaptureVideoPreviewLayer   提供摄像头的预览功能

具体的步骤:

1.创建AVCaputureSession。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #703daa }
span.s1 { }
span.s2 { color: #000000 }
span.s3 { color: #3d1d81 }

AVCaptureSession * session = [[AVCaptureSession alloc]init];

2.创建AVCaptureDevice:

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #703daa }
span.s1 { }
span.s2 { color: #000000 }
span.s3 { color: #3d1d81 }

AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

3.创建AVCaptureDeviceInput,并添加到Session中:

我们需要使用AVCaptureDeviceInput来让设备添加到session中, AVCaptureDeviceInput负责管理设备端口。我们可以理解它为设备的抽象。一个设备可能可以同时提供视频和音频的捕捉。我们可以分别用AVCaptureDeviceInput来代表视频输入和音频输入。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #703daa }
span.s1 { color: #703daa }
span.s2 { }
span.s3 { color: #000000 }
span.s4 { color: #3d1d81 }

NSError * error;

AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];

4.创建AVCaptureOutput:        线程必须是串行的,确保视频帧按序到达。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #703daa }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #3d1d81 }
span.s1 { }
span.s2 { color: #000000 }
span.s3 { color: #3d1d81 }
span.s4 { color: #bb2ca2 }
span.s5 { color: #272ad8 }

AVCaptureVideoDataOutput * output = [[AVCaptureVideoDataOutput alloc]init];

[session addOutput:output];

[output setSampleBufferDelegate:self queue:dispatch_get_global_queue(0, 0)];

5.开始捕捉

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #3d1d81 }
span.s1 { color: #000000 }
span.s2 { }

[session startRunning];

6.在AVCaptureVideoDataOutputSampleBufferDelegate代理方法中进行视频流的分析

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo }
span.s1 { }
span.s2 { color: #bb2ca2 }
span.s3 { color: #703daa }

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection

{

}

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #703daa }
span.s1 { }

时间: 2024-08-26 02:13:21

视频相关知识总结的相关文章

视频压缩算法的相关知识

视频压缩算法的相关知识MPEG-1MPEG 视频压缩编码后包括三种元素:I帧(I-frames).P帧(P-frames)和B帧(B-frames).在MPEG编码的过程中,部分视频帧序列压缩成为I帧:部分压缩成P帧:还有部分压缩成B帧.I帧法是帧内压缩法,也称为“关键帧”压缩法.I帧法是基于离散余弦变换DCT( Discrete Cosine Transform )的压缩技术,这样的算法与JPEG压缩算法相似.採用I帧压缩可达到1/6的压缩比而无明显的压缩痕迹. 在保证图像质量的前提下实现高压

深入浅出安卓学习相关知识,如何从零学好移动开发

原文发表自我的个人主页,欢迎大家访问 http://purplesword.info/mobile-develop 由于近几年来互联网的飞速发展,安卓和iOS平台的大量普及推广,移动开发在当前是非常热门的一个方向. 有不少同学问我如何学习安卓,要学些什么,难不难学.之前一直没有想好应该怎么回答这个问题,只是简单的说安卓自身门槛不高,并不难学.因为我觉得准确回答一个类似这样的问题往往需要灵感.现在根据我的学习体验,做个大概的总结. 1.我为什么学安卓 我从刚开始接触安卓开发到现在也有两三年的时间了

FastDFS的介绍与相关知识,以及集群搭建

FastDFS相关知识 什么是FastDFS? FastDFS是一个开源的轻量级分布式文件系统.它解决了大数据量存储和负载均衡等问题.特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务,如相册网站.视频网站等等. FastDFS的角色: Tracker server:Tracker server作为中心结点,其主要作用是负载均衡和调度.Tracker server在内存中记录分组和Storage server的状态等信息,不记录文件索引信息,占用的内存

转: 视频相关的协议族介绍(rtsp, hls, rtmp)

转自: http://www.zhihu.com/question/20621558 作者:杨华链接:http://www.zhihu.com/question/20621558/answer/15661190来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作为自己的专业知识领域,我决定更新本答案.版权保留,不得商用,转载必须在开始位置注明作者.出处.凭借印象完成,错漏地方,还请大家指正.----视频相关的协议有很多,不同的公司,甚至有自己的协议标准.本文尽量涵盖

端口相关知识学习笔记

端口相关知识学习笔记 端口相关知识学习笔记 本周主要精力是放在挂接上,所以知识矩阵的学习回归到根本上,所以这周发的学习笔记是关于计算机端口的相关介绍. 有过一些黑客攻击方面知识的读者都会知道,其实那些所谓的黑客并不是像人们想象那样从天而降,而是实实在在从您的计算机"大门"中自由出入.计算机的" 大门"就是我们平常所说的"端口",它包括计算机的物理端口,如计算机的串口.并口.输入/输出设备以及适配器接口等(这些端口都是可见的),但更多的是不可见的软

高速信号采集的相关知识

对于高速的定义,至少要100Msps以上的,这种高速采集多用在军工.航天.天文领域,通信现在用的也越来越多了(比如华为5G相关的项目,已经用到了3Gsps的ADC). 当然有一些视频相关的领域也会用到高速采集. 对于采集这块的入门,说实话挺难的,因为成本实在是太高,通常高速的ADC价格都在千刀($美元)以上,使用的FPGA通常也需要较大的规模也要几千刀,要做一块多通道的高速采集板成本十几万人民币很正常的. 其次是技术难度,高速采集这块最难的是在硬件这块,时钟链路,电源质量,各种干扰的屏蔽控制,电

python的list相关知识

关于list的相关知识 list01 = ['alex',12,65,'xiaodong',100,'chen',5] list02 = [67,7,'jinjiao_dawang','relax1949',53] #打印list01.list02 print(list01) print(list02) #列表截取.切片 print(list01[1]) print(list01[-2]) print(list01[1:3]) #列表重复 print(list01 * 3) #列表组合 prin

三层交换机相关知识

三层交换机相关知识 这次的作死之路又要开始了.这次的对象主要是交换机:还是三层的: 这是这次实验的总体用图: 现在现根据图上的标志:将所有的主机配置好:目前没有做任何vlan:所以PC1和PC3是能够互通的: 接下来:我想先去探索下三层交换机关闭portswitch会怎么样: 第一步:先关闭了再说: 因为按照图中的设计:PC1的帧如果想要到达PC2,那么就必然要经过LSW1.但是现在我关闭了g0/0/1端口的portswitch:现在pc1并不能ping通pc2: 通过百度:三层交换机的端口不仅

php学习day7--函数的相关知识

今天我们主要学了函数的相关知识,是个比较基础的知识,但也是很重要的. 一.函数 函数就类似于一个工具,我们写好函数之后可以直接进行调用,可以很大的减少代码的从用性,提高页面性能和可读性. 1.函数的定义 在php中函数的定义方式为: function  name($形参1,$形参2.....){ 要执行的代码 return  123: } 在上方的函数定义式中,name代表函数名,小括号内是形参,是用来传递参数,花括号中的就是调用时需要执行的代码. 函数的调用方式: name(实参1,实参2,.