CMSampleBufferRef转RGB

项目中使用GPUImage做小视频,需要接入人脸识别,因此需要对AVCaptureVideoDataOutput的代理方法

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection;

中进行特殊的处理,查看GPUImage的源码发现GPUImageVideoCamera这个类里面有一个方法,

- (void)processVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer;

这个方法即是在此代理中调用的,此方法已暴露给开发者。
因为项目中的GPUImage使用的是Framework的形式,故首先不考虑修改这个三方,因此采用了继承的方法,重写这个方法,拿到了CMSampleBufferRef,但是处理的sdk使用时需要传入图像的RGB数据,查资料,找到方法:

    // 实现预览效果不断设置Image
    CVImageBufferRef cvImageBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer);
    // 转换类型
    CVPixelBufferRef cvPixelBufferRef = cvImageBufferRef;
    // 如果想要对数据进行修改就必须对向前数据进行锁定
    CVPixelBufferLockBaseAddress(cvPixelBufferRef, kCVPixelBufferLock_ReadOnly);
    // 处理图像数据
    // 图像出来的原始数据是 R G R A 每个像素 4 个字节 32 位的数据
    // 获取宽高
    size_t width = CVPixelBufferGetWidth(cvPixelBufferRef);
    size_t height = CVPixelBufferGetHeight(cvPixelBufferRef);
    // 获取指向数据内容的指针
    unsigned char *pImageData = (unsigned char *)CVPixelBufferGetBaseAddress(cvPixelBufferRef);

这个PImageData就包含了RGB数据,但是调试的数据却不是,后阅读GPUImage源码发现了问题,


屏幕快照 2017-07-05 下午9.26.29.png
[videoOutput setVideoSettings:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey]];

需要设置videoOutPut的输出方式。之后还需要修改GPUImageVideoCamera

的captureAsYUV属性为NO,然后发现可以正常录制视频了,不过因为使用GPUImage默认是YUV,转成RGB会有点小bug,可自行修改即可。
链接GPUImage源码地址:https://github.com/BradLarson/GPUImage

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,216评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,196评论 4 61
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,052评论 6 342
  • 01 每次和我家里熊孩子在一起,我几乎都是那个不用操心而被照顾的人。 感觉当我的孩子,真的太不容易了。 可熊孩子总...
    妮妮小屋阅读 3,064评论 2 4
  • 我清理掉桌面上好久没动过的 已布满灰尘的过期杂志 撕掉写下之后再也没看过的 年度计划表 扔掉买回来却提不起兴趣翻开...
    小哧阅读 1,482评论 0 0