首页 > 代码库 > 视频相关知识总结

视频相关知识总结

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代理方法中进行视频流的分析

 

<style>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 }</style>

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

{

 

}

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

视频相关知识总结