美文网首页
iOS音视频开发-视频会话捕捉

iOS音视频开发-视频会话捕捉

作者: ibabyblue | 来源:发表于2018-01-30 18:00 被阅读110次

好久没写东西了,iOS音视频开发抽出时间整理一下,权当备忘吧。iOS音视频开发原理文章在网上有很多了,就不记录了。后面会记录每步骤的实现。


音视频开发首先需要捕捉视频会话,这里只是捕获了视频会话,音频会话后续会记录。废话少说,贴代码:

#import <UIKit/UIKit.h>

@interface BBVideoCapture : NSObject

/**
 开始捕获视频

 @param preview 捕获视频显示的父控件
 */
- (void)startCapture:(UIView *)preview;

/**
 结束捕获视频
 */
- (void)stopCapture;

@end
#import <AVFoundation/AVFoundation.h>
#import "BBVideoCapture.h"

@interface BBVideoCapture () <AVCaptureVideoDataOutputSampleBufferDelegate>

/** 捕捉画面执行的线程队列 */
@property (nonatomic, strong) dispatch_queue_t captureQueue;

/** 捕捉会话*/
@property (nonatomic, weak) AVCaptureSession *captureSession;

/** 预览图层 */
@property (nonatomic, weak) AVCaptureVideoPreviewLayer *previewLayer;

@end

@implementation BBVideoCapture

- (void)startCapture:(UIView *)preview
{
    
    // 1.创建捕捉会话
    AVCaptureSession *session = [[AVCaptureSession alloc] init];
    session.sessionPreset = AVCaptureSessionPresetHigh;
    self.captureSession = session;
    
    // 2.设置输入设备
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    // 2.1自动变焦
    if([device isFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus]){
        if([device lockForConfiguration:nil]){
            device.focusMode = AVCaptureFocusModeContinuousAutoFocus;
        }
    }
    NSError *error = nil;
    AVCaptureDeviceInput *input = [[AVCaptureDeviceInput alloc] initWithDevice:device error:&error];
    if ([session canAddInput:input]) {
        [session addInput:input];
    }
    
    // 3.添加输出设备
    AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
    self.captureQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    [output setSampleBufferDelegate:self queue:self.captureQueue];
    // 3.1kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange 表示原始数据的格式为YUV420
    // 这里YUV420为后续编码设置,暂时可忽略,后续会写。
    NSDictionary *settings = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange], kCVPixelBufferPixelFormatTypeKey, nil];
    output.videoSettings = settings;
    output.alwaysDiscardsLateVideoFrames = YES;
    if ([session canAddOutput:output]) {
        [session addOutput:output];
    }
    
    // 4.设置录制视频的方向
    AVCaptureConnection *connection = [output connectionWithMediaType:AVMediaTypeVideo];
    [connection setVideoOrientation:AVCaptureVideoOrientationPortrait];
    
    // 5.添加预览图层
    AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
    previewLayer.frame = preview.bounds;
    [preview.layer insertSublayer:previewLayer atIndex:0];
    self.previewLayer = previewLayer;
    
    // 6.开始捕捉
    [self.captureSession startRunning];
}

- (void)stopCapture {
    [self.captureSession stopRunning];
    [self.previewLayer removeFromSuperlayer];
    
}

#pragma mark - 获取视频数据代理
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
    /**这里就是捕获到视频数据的地方,后续再这里实现视频编码*/
}

@end

视频捕获会话相对较简单,代码中注释很详细,入门时参考了很多资料,感谢分享者,此代码很多参考coderWhy的分享,存在较小改动,再次感谢!

相关文章

  • 视频采集篇

    相关框架iOS中关于音视频的类都在AVFoundation,做音视频,首先导入这个框架 开发步骤 1创建捕捉会话(...

  • iOS音视频开发-视频会话捕捉

    好久没写东西了,iOS音视频开发抽出时间整理一下,权当备忘吧。iOS音视频开发原理文章在网上有很多了,就不记录了。...

  • iOS音视频

    iOS 音视频开发(一)常用音视频框架介绍iOS 音视频开发(二)AVAudioRecorder录音、AVAudi...

  • iOS 音视频开发(一)常用音视频框架介绍

    文章规划iOS 音视频开发(一)常用音视频框架介绍(本篇)iOS 音视频开发(二)AVAudioRecorder实...

  • iOS-17 音视频

    链接:iOS 音视频开发-常用音频、视频框架介绍(一) - 简书 iOS 音视频开发-AVAudioRecorde...

  • iOS音视频三: AVCaptureSession视频捕捉会话

    一 、AVCaptureSession 基础配置: 二 、AVCaptureSession 启动与停止: 三 、A...

  • 直播APP流程

    音视频采集 *iOS采集音视频数据,导入AVFoundation框架,从CaptureSession会话的回调中获...

  • IOS音视频(四十三)AVFoundation 之 Audio

    @[TOC](IOS音视频(四十三)AVFoundation 之 Audio Session) 1.音频会话概述 ...

  • AVFoundation

    照片/视频捕捉功能小视频/直播 AVFoundation 捕捉会话: AVCaptrueSession 捕捉设备:...

  • 音视频内容

    音视频 目的 数据来源及去向 具体执行过程 参考其他简书内容 iOS音视频开发闲谈(理论步骤)iOS音频播放(一)...

网友评论

      本文标题:iOS音视频开发-视频会话捕捉

      本文链接:https://www.haomeiwen.com/subject/fqgczxtx.html