AVCaptureVideoDataOutput是一个具体子类AVCaptureOutput。您可以使用从正在捕获的视频处理未压缩的帧,或访问压缩的帧。
AVCaptureVideoDataOutput 实例产生的视屏帧数你可以使用其他的媒体api 进行处理。你也可以使用 captureOutput(_:didOutputSampleBuffer:from:)
代理方法进行访问。
配置
var videoSettings: [AnyHashable : Any]!
// 设置 output 的压缩
/*
字典中包含视屏设置的压缩设置的 key 值。定义在 CVPixelBuffer 的像素缓冲属性 的key 值
目前唯一支持的 key kCVPixelBufferPixelFormatTypeKey
获取视屏像素格式和视屏编码格式可能的值,
分别查看 availableVideoCVPixelFormatTypes 和 availableVideoCodecTypes
videoSettings 设置为 nil 的时候,使用的是 当前 session 的 sessionPreset
*/
var alwaysDiscardsLateVideoFrames: Bool
// 总是丢弃后期视频帧。 默认是 true
/*
true : 对象立即丢弃帧捕获,而调度队列处理现有帧被阻塞在captureOutput(_:didOutputSampleBuffer::)委托的方法。
false : 代理被允许更多的时间来处理旧框架之前新帧被丢弃,但应用程序的内存使用情况可能显著增加。
*/
func recommendedVideoSettingsForAssetWriter(withOutputFileType outputFileType: String!) -> [AnyHashable : Any]!
// 为资源写入的推荐的视屏设置。
/*
outputFileType : 指定要写入的文件类型的UTI。 有关支持的类型,请参阅文件格式UTI。
返回值 一个完全填充的字典的键和值与AVAssetWriter兼容。
*/
AVCaptureVideoDataOutputSampleBufferDelegate
AVCaptureVideoDataOutput的代理对象接收捕获视频样本缓冲区 和 通知的样品缓冲末下降。
管理样品缓冲行为
optional func captureOutput(_ captureOutput: AVCaptureOutput!,
didOutputSampleBuffer sampleBuffer: CMSampleBuffer!,
from connection: AVCaptureConnection!)
// 通知委托写一个新的视频帧。
/*
captureOutput: 捕获输出对象
sampleBuffer : CMSampleBuffer对象包含视频帧数据和额外的帧的信息,比如它的格式和显示时间。
connection: 连接视屏的接收者
*/
optional func captureOutput(_ captureOutput: AVCaptureOutput!,
didDrop sampleBuffer: CMSampleBuffer!,
from connection: AVCaptureConnection!)
// 通知委托一个视频帧被丢弃。