CMSampleBufferRef 转换为UIImage

步骤:CMSampleBufferRef --->CVImageBufferRef--->CGImageRef--->UIImage

  • (UIImage *)convertSampleBufferToImage:(CMSampleBufferRef)sampleBuffer
    {
    //制作 CVImageBufferRef
    CVImageBufferRef buffer;
    buffer = CMSampleBufferGetImageBuffer(sampleBuffer);

    CVPixelBufferLockBaseAddress(buffer, 0);

    //从 CVImageBufferRef 取得影像的细部信息
    uint8_t *base;
    size_t width, height, bytesPerRow;
    base = CVPixelBufferGetBaseAddress(buffer);
    width = CVPixelBufferGetWidth(buffer);
    height = CVPixelBufferGetHeight(buffer);
    bytesPerRow = CVPixelBufferGetBytesPerRow(buffer);

    //利用取得影像细部信息格式化 CGContextRef
    CGColorSpaceRef colorSpace;
    CGContextRef cgContext;
    colorSpace = CGColorSpaceCreateDeviceRGB();
    cgContext = CGBitmapContextCreate(base, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
    CGColorSpaceRelease(colorSpace);

    //透过 CGImageRef 将 CGContextRef 转换成 UIImage
    CGImageRef cgImage;
    UIImage *image;
    cgImage = CGBitmapContextCreateImage(cgContext);
    image = [UIImage imageWithCGImage:cgImage];
    CGImageRelease(cgImage);
    CGContextRelease(cgContext);

    CVPixelBufferUnlockBaseAddress(buffer, 0);

    return image;
    }

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

推荐阅读更多精彩内容

  • 转自http://www.jianshu.com/p/a91502c00fb0 CMSampleBufferRef...
    沃伦盖茨阅读 2,138评论 0 0
  • 推流,就是将采集到的音频,视频数据通过流媒体协议发送到流媒体服务器。 推流前的工作:采集,处理,编码压缩 推流中做...
    木马不在转阅读 7,438评论 13 30
  • 曾经,她是W市叱咤风云的豪门一姐,强势的个性加上超高的智商让无数青年才俊在她面前自叹不如。传闻只要是她出现的场合,...
    酷听听书阅读 314评论 0 0
  • //分手快乐,祝你快乐,你可以找到更好的。 分手快乐,请你快乐,挥别错的才能和对的相逢。 王小宁一路上抱怨的我几乎...
    夢唄阅读 445评论 0 1
  • 鼓励从自己开始,每日“三赞吾身”。 今天终于完成了比赛的任务,好好好开心~昨天才正式开始写,直到今天十点...
    lanlana阅读 153评论 0 0