CMSampleBufferRef转yuv数据

- (uint8_t *)convertVideoSmapleBufferToYuvData:(CMSampleBufferRef) videoSample{

// 获取yuv数据

// 通过CMSampleBufferGetImageBuffer方法,获得CVImageBufferRef。

// 这里面就包含了yuv420(NV12)数据的指针

CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(videoSample);

//表示开始操作数据

CVPixelBufferLockBaseAddress(pixelBuffer, 0);

//图像宽度(像素)

size_t pixelWidth = CVPixelBufferGetWidth(pixelBuffer);

//图像高度(像素)

size_t pixelHeight = CVPixelBufferGetHeight(pixelBuffer);

//yuv中的y所占字节数

size_t y_size = pixelWidth * pixelHeight;

//yuv中的uv所占的字节数

size_t uv_size = y_size / 2;

//    uint8_t *yuv_frame = malloc(uv_size + y_size);

//获取CVImageBufferRef中的y数据

uint8_t *y_frame = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0);

memcpy(yuv_frame, y_frame, y_size);

//获取CMVImageBufferRef中的uv数据

uint8_t *uv_frame = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 1);

memcpy(yuv_frame + y_size, uv_frame, uv_size);

CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);

return yuv_frame;

//返回数据

//    return [NSData dataWithBytesNoCopy:yuv_frame length:y_size + uv_size];

}

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

推荐阅读更多精彩内容

  • 一:推流需要的三方库和一些常用格式和协议介绍 1.rtmp协议 :实时消息传输协议,Adobe Systems公司...
    子夏的不语阅读 6,423评论 6 1
  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 4,831评论 0 3
  • 由于H.264等压缩算法都是在YUV的颜色空间上进行的,所有在进行压缩前,首先要进行颜色空间的转换。如果摄像头采集...
    眷卿三世阅读 13,703评论 2 6
  • [TOC] 音视频&流媒体 是什么促使我要写这一篇音视频入门文章?那是因为和一妹子打赌码率的概念,结果输了;对一个...
    AllenWu阅读 4,960评论 1 24
  • 最近比较多愁善感,有很多的负面情绪无处发泄,想通过写一些东西来排解一下。 首先我觉得自己活了这么多年比较失败,或许...
    苗青_三月阅读 347评论 3 3