GPUImage的基础在详细解析1~4。 这次的介绍是录制视频,添加滤镜,保存到手机。
通过GPUImageVideoCamera采集视频和音频的信息,音频信息直接发送给GPUImageMovieWriter;视频信息传入响应链作为源头,渲染后的视频信息再写入GPUImageMovieWriter,同时通过GPUImageView显示在屏幕上。
AVCaptureSession *_captureSession; 协调AV输入设备到AVoutput的数据流
AVCaptureDevice *_inputCamera; 摄像头设备
AVCaptureDevice *_microphone; 麦克风设备
AVCaptureDeviceInput *videoInput; 摄像头输入
AVCaptureVideoDataOutput *videoOutput; 摄像头输出
AVCaptureDeviceInput *audioInput; 麦克风输入
AVCaptureAudioDataOutput *audioOutput; 麦克风输出
AVAssetWriter *assetWriter; 把多媒体数据写入文件的类
AVAssetWriterInput *assetWriterAudioInput; 音频输入
AVAssetWriterInput *assetWriterVideoInput; 视频输入
AVAssetWriterInputPixelBufferAdaptor sh*assetWriterPixelBufferInput; 视频输入适配器
1、找到物理设备摄像头_inputCamera、麦克风_microphone,创建摄像头输入videoInput和麦克风输入audioInput; 2、设置videoInput和audioInput为_captureSession的输入,同时设置videoOutput和audioOutput为_captureSession的输出,并且设置videoOutput和audioOutput的输出delegate; 3、_captureSession调用startRunning,开始捕获信号; 4、音频数据到达,把数据转发给之前设置的audioEncodingTarget,并通过调用assetWriterAudioInput的appendSampleBuffer方法写入音频数据; 5、视频数据到达,视频数据传入响应链,经过处理后通过assetWriterPixelBufferInput的appendSampleBuffer方法写入视频数据; 6、选择保存后,文件通过ALAssertLibrary写入手机照片库。
// 摄像头
_videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
_videoCamera.outputImageOrientation = [UIApplication sharedApplication].statusBarOrientation;
// 滤镜
_filter = [[GPUImageSepiaFilter alloc] init];
_filterView = [[GPUImageView alloc] initWithFrame:self.view.frame];
self.view = _filterView;
// 响应链
[_videoCamera addTarget:_filter];
[_filter addTarget:_filterView];
[_videoCamera startCameraCapture];
unlink([pathToMovie UTF8String]); // 如果已经存在文件,AVAssetWriter会有异常,删除旧文件
_movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)];
_movieWriter.encodingLiveVideo = YES;
[_filter addTarget:_movieWriter];
_videoCamera.audioEncodingTarget = _movieWriter;
[_movieWriter startRecording];
[_filter removeTarget:_movieWriter];
_videoCamera.audioEncodingTarget = nil;
[_movieWriter finishRecording];
录制后的视频如下:
系统手机库中的视频:
1、在流程图的环节中,哪一步给视频信息添加了滤镜? 2、为何视频的写入类比音频写入类多了一个类?
核心类是GPUImageMovieWriter,协调音频和视频信息的写入。
1、GPUImageVideoCamera把摄像头采集的YUV视频帧,转换为RGB视频帧,同时作为响应链的起始点;GPUImageMovieWriter实现了GPUImageInput协议,可作为响应链的终点,接受滤镜处理过的视频信息。 2、AVAssetWriterInputPixelBufferAdaptor类提供了CVPixelBufferPool用来更快的分配缓存。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有