2

我有一个 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);
4

0 回答 0