首页 > 代码库 > 视频相关知识总结
视频相关知识总结
AVFoundation视频流的捕捉:
要捕捉视频需要这几个类:
AVCaptureDevice 代表了输入设备,例如摄像头与麦克风。
AVCaptureInput 代表了输入数据源
AVCaptureOutput 代表了输出数据源
AVCaptureSession 用于协调输入与输出之间的数据流
AVCaptureVideoPreviewLayer 提供摄像头的预览功能
具体的步骤:
1.创建AVCaputureSession。
<style>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 }</style>AVCaptureSession * session = [[AVCaptureSession alloc]init];
2.创建AVCaptureDevice:
<style>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 }</style>AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
3.创建AVCaptureDeviceInput,并添加到Session中:
我们需要使用AVCaptureDeviceInput来让设备添加到session中, AVCaptureDeviceInput负责管理设备端口。我们可以理解它为设备的抽象。一个设备可能可以同时提供视频和音频的捕捉。我们可以分别用AVCaptureDeviceInput来代表视频输入和音频输入。
<style>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 }</style>
NSError * error;
AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
4.创建AVCaptureOutput: 线程必须是串行的,确保视频帧按序到达。
<style>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 }</style>AVCaptureVideoDataOutput * output = [[AVCaptureVideoDataOutput alloc]init];
[session addOutput:output];
[output setSampleBufferDelegate:self queue:dispatch_get_global_queue(0, 0)];
5.开始捕捉
<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #3d1d81 } span.s1 { color: #000000 } span.s2 { }</style>[session startRunning];
6.在AVCaptureVideoDataOutputSampleBufferDelegate代理方法中进行视频流的分析
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
}
视频相关知识总结