我有一个 ios 应用程序,它使用 ffmpeg 库通过网络流式传输 rtsp 视频。在随机时间我有一个没有错误消息的崩溃,控制台中唯一的消息是“内存警告”。使用仪器我检测到一些内存泄漏,此链接有关错误的屏幕截图:http: //vincentvega.it/iphone/video.png,我认为问题出在我让 uiimage 显示在屏幕上的代码点上:
- (void)convertFrameToRGB
{
sws_scale(img_convert_ctx,
pFrame->data,
pFrame->linesize,
0,
pCodecCtx->height,
picture.data,
picture.linesize);
}
- (UIImage *)imageFromAVPicture:(AVPicture)pict width:(int)width height:(int)height
{
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
CFDataRef data = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, pict.data[0], pict.linesize[0]*height,kCFAllocatorNull);
CGDataProviderRef provider = CGDataProviderCreateWithCFData(data);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGImageRef cgImage = CGImageCreate(width,
height,
8,
24,
pict.linesize[0],
colorSpace,
bitmapInfo,
provider,
NULL,
NO,
kCGRenderingIntentDefault);
CGColorSpaceRelease(colorSpace);
UIImage *image = [[UIImage alloc] initWithCGImage:cgImage];
return [image autorelease];
}
如何检测导致内存问题的功能?
解决了!我只需要在“imagefromavcapture”中添加以下代码:
CGImageRelease(cgImage);
CGDataProviderRelease(provider);
CFRelease(data);