基本思路就是:利用AVFoundation获取摄像头采集到的当前图像UIImage图像,然后用GPUImage处理。Shader之类的比较好搞。
图像采集大体按文档做即可,不过有几个需要注意的地方。
1. 在设置AVCaptureDevice的一些参数时,务必要先检测该参数是否可用。比如有无闪光灯,有无前置摄像头。
2. 凡是AVCaptureSession或者其元素(如AVCaptureDeviceInput, AVCaptureVideoDataOutput)发生了参数变化,都要在
AVCaptureSession的beginConfiguration和commitConfiguration之间进行。否则就要先stopRunning。
3. 不要忘了设置完毕后startRunning。
4. CMSampleBuffer的delegate的方法调用由于是发生在子线程中,所以在更新UI时,务必在主线程中进行。可以使用GCD的dispatch_sync(dispatch_get_main_queue(), someBlock); 也要注意用connection设置orientation。
另,GPUImage对图像的处理也要在主线程进行。