博客> AVFoundation框架下相机和多媒体捕获
AVFoundation框架下相机和多媒体捕获
2019-04-18 14:58 评论:0 阅读:63 Wensidun
AVFoundation Camera

AVFoundation 捕获子系统提供了用于视频、图片和音频捕获的通用且高级的结构体系。 通过它你可以做如下事情: 创建自定义相机用于拍照和视频录制 给用户更直接地控制图片和视频捕获,例如聚焦、曝光和稳定性选项 生成不用于系统相机的结果,例如原生的图片格式、深度图或者与视频相关的自定义的元数据 直接从设备中链接像素和音频数据流

捕获结构的主要部分是sessions、inputs 和 outputs:  4ecf0924-ea2b-4faa-aea8-7bfc0b3fe419.png

First Steps: 请求用户授权:在plist文件中添加 NSCameraUsageDescription, 如果有音频输入,添加
NSMicrophoneUsageDescription.

            建立任务会话:CaptureSession

Capture Devices:

            AVCaptureDevice: 提供视频和音频输入的设备
            AVCaptureDeviceInput:  把设备输入的媒体提供给任务会话

Video Capture:

            AVCaptureVideoDataOutput:视频数据输出

Session Start: 开启任务会话,代理方法开始捕获视频源数据

简单的代码实例

_session = [[AVCaptureSession alloc] init];

[_session beginConfiguration];

if ([_session canSetSessionPreset:AVCaptureSessionPresetMedium]) {
    [_session setSessionPreset:AVCaptureSessionPresetMedium];
}

AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *input = [[AVCaptureDeviceInput alloc] initWithDevice:videoDevice error:nil];

if ([_session canAddInput:input]) {
    [_session addInput:input];
}

dispatch_queue_t queue = dispatch_queue_create("queuelabel", NULL);
AVCaptureVideoDataOutput *output = [AVCaptureVideoDataOutput new];
[output setSampleBufferDelegate:self queue:queue];
output.videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                        [NSNumber numberWithInt:kCVPixelFormatType_32BGRA], kCVPixelBufferPixelFormatTypeKey,
                        [NSNumber numberWithInt: 640], (id)kCVPixelBufferWidthKey,
                        [NSNumber numberWithInt: 480], (id)kCVPixelBufferHeightKey,
                        nil];

if ([_session canAddOutput:output]) {
    [_session addOutput:output];
}

[_session commitConfiguration];

[_session startRunning];

有关相机的其它使用,官方链接:https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture?language=objc

收藏
0
sina weixin mail 回到顶部