iOS-音视频采集 by GPUImage

iOS 调用相机采集视频有两种常见方式:

  • 使用系统自带的 AVFoundation 框架
  • 使用第三方 GPUImage 框架

如果想通过原生框架 AVFoundation 采集视频,请查看:

iOS-音视频采集 by AVFoundation


GPUImage 是基于 OpenGL ES 的封装,主要用于 iOS 图像处理,相比OpenGL ES 用起来更加简洁

GPUImage的四大基础输入类
  • GPUImageVideoCamera —– 摄像头-视频流
  • GPUImageStillCamera ——– 摄像头-照相
  • GPUImagePicture ————– 图片
  • GPUImageMovie ————— 视频

GPUImage 使用前的准备:

使用 cocoaPods 集成

target 'ProjectName' do

use_frameworks!

pod "GPUImage"

end

打开相机和麦克风隐私权限

  • Privacy - Camera Usage Description -> true
  • Privacy - Microphone Usage Description -> true

通过 GPUImageVideoCamera 采集视频

添加文件全局属性
/// 初始化相机
fileprivate lazy var videoCamera: GPUImageVideoCamera = GPUImageVideoCamera(sessionPreset: AVCaptureSessionPreset1280x720, cameraPosition: .front)
/// 设置图片预览视图
fileprivate var gpuImageView: GPUImageView?
/// 懒加载高亮滤镜
fileprivate lazy var filter = GPUImageBrightnessFilter()
配置相机相关属性
// 设置视频才采集的画面样式 - 竖屏
videoCamera.outputImageOrientation = .portrait

// 添加滤镜(如果不添加滤镜,无法看到图像)
videoCamera.addTarget(filter)

// 设置代理,监听采集到的视频
videoCamera.delegate = self

// 设置并添加用于实时显示画面的GPUImageView
gpuImageView = GPUImageView(frame: view.bounds)
if let gpuImageView = gpuImageView {
    // 添加到最底层
    view.insertSubview(gpuImageView, at: 0)
    // 给显示画面添加滤镜
    filter.addTarget(gpuImageView)
}
开始采集视频
// 开始采集
videoCamera.startCapture()
旋转摄像头
// 切换摄像头,不需要判断当前位于前置或者后置
videoCamera.rotateCamera()
暂停视频采集
// 暂停视频采集
videoCamera.pauseCapture()
恢复视频采集
// 恢复上一次暂停的视频采集
videoCamera.resumeCameraCapture()
停止视频采集
// 停止视频采集
videoCamera.stopCapture()
移除视频采集
// 停止视频采集
videoCamera.stopCapture()
// 移除输入输出源
videoCamera.removeInputsAndOutputs()
// 移除 预览视图
gpuImageView?.removeFromSuperview()
接收采集到的视频 buffer
// MARK: - GPUImageVideoCameraDelegate
extension ViewController: GPUImageVideoCameraDelegate {
    // output video sampleBuffer,audio, CMSampleBuffer contain video, muxed, etc
    func willOutputSampleBuffer(_ sampleBuffer: CMSampleBuffer!) {
        print("采集到画面") // sampleBuffer 包含音频和视频资源
    }
}

你可能感兴趣的:(Swift,流媒体)