iOS直播(二)GPUImage音视频采集

上文中介绍了用AVFoundation实现音视频采集(https://blog.csdn.net/dolacmeng/article/details/81268622) ,开源的基于GPU的第三方图像处理库GPUImage对AVFoundation进行了进一步的封装,打开GPUImgeVideoCamera.m查看代码,其步骤和我们用AVFoundation实现采集的方式如出一辙。GPUImage还可以对图像进行美化、添加各种滤镜等。
下面是视频采集并添加增亮滤镜的例子:

1.用cocoapods集成。
(1)用Xcode新建项目LiveGPUImageDemo,控制台cd到项目路径,用pod init初始化:

pod init

(2)此时打开项目根目录的Podfile文件,添加内容:

platform :ios, '9.0'
use_frameworks!

target 'LiveGPUImageDemo' do

	pod 'GPUImage'

end

(3)控制台执行下载集成命令:

pod install

(4)打开LiveGPUImageDemo.xcworkspace工作空间

2、完整代码:

import UIKit
import GPUImage

class ViewController: UIViewController {
    //注:为了可以进行拍照,这里用子类GPUImageStillCamera代替GPUImgeVideoCamera
    fileprivate lazy var camera : GPUImageStillCamera = GPUImageStillCamera(sessionPreset: AVCaptureSession.Preset.high.rawValue, cameraPosition: .back)
    fileprivate lazy var filter = GPUImageBrightnessFilter()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //设置摄像头方向为垂直
        camera.outputImageOrientation = .portrait
        
        //1.添加滤镜
        camera.addTarget(filter)
        camera.delegate = self
        
        //2.添加一个用于实时显示画面的GPUImageView
        let showView = GPUImageView(frame: view.bounds)
        view.addSubview(showView)
        filter.addTarget(showView)
        
        //3.开始采集画面
        camera.startCapture()
    }

}

//采集回调
extension ViewController : GPUImageVideoCameraDelegate{
    func willOutputSampleBuffer(_ sampleBuffer: CMSampleBuffer!) {
        print("采集到画面")
    }
}

可以添加一个拍照按钮,点击后进行拍照并保存到本地相册

@IBAction func takePhoto(_ sender: Any) {
        camera.capturePhotoAsImageProcessedUp(toFilter: filter, withCompletionHandler: { (image, error) in
            UIImageWriteToSavedPhotosAlbum(image!, nil, nil, nil)
        })
    }

运行效果如下:
iOS直播(二)GPUImage音视频采集_第1张图片

Demo代码下载:https://github.com/dolacmeng/LiveGPUImageDemo

你可能感兴趣的:(iOS)