ffmpeg ライブラリを使用してネットワーク経由で rtsp ビデオをストリーミングする ios アプリケーションがあります。ランダムな時間に、エラー メッセージのないクラッシュが発生します。コンソールの唯一のメッセージは「メモリ警告」です。インストゥルメントを使用してメモリリークを検出しました。このリンクはエラーに関するスクリーンショットです: 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);