如何将FFMpeg获取的AVFrame转化为UIImage
以下方法可以用AVPicture来转,但是现在AVPicture已经弃用
- (UIImage*)imageFromAVFrame:(AVFrame *)avFrame
{
float width = avFrame->width;
float height = avFrame->height;
avpicture_free(&avPicture);
avpicture_alloc(&avPicture, AV_PIX_FMT_RGB24, width, height); struct SwsContext * imgConvertCtx = sws_getContext(avFrame->width,
if(imgConvertCtx == nil) return nil; sws_scale(imgConvertCtx,avFrame->height, PIX_FMT_YUV420P, width, height, AV_PIX_FMT_RGB24, SWS_FAST_BILINEAR, NULL, NULL, NULL);
sws_freeContext(imgConvertCtx); CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;avFrame->data, avFrame->linesize, 0, avFrame->height, avPicture.data, avPicture.linesize);
CFDataRef data = CFDataCreate(kCFAllocatorDefault,
CGDataProviderRef provider = CGDataProviderCreateWithCFData(data);avPicture.data[0], avPicture.linesize[0] * height);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGImageRef cgImage = CGImageCreate(width,
UIImage *image = [UIImage imageWithCGImage:cgImage];height, 8, 24, avPicture.linesize[0], colorSpace, bitmapInfo, provider, NULL, NO, kCGRenderingIntentDefault);
CGImageRelease(cgImage);
CGColorSpaceRelease(colorSpace);
CGDataProviderRelease(provider);
CFRelease(data); return image;
}