我已经将ffmpeg整合到了一个iPad应用程序中,当我通过rtsp流时,我看到该应用程序在几个小时的流后崩溃。
当我通过仪器/泄漏调试应用程序时,我发现违规的漏洞在FFMPEG库中,而违规的函数是av_buffer_realloc。
有人知道我如何着手处理这个漏洞吗?我没有太多的工具可供使用,我甚至不知道在哪里可以解决这个问题?
谢谢你的帮助/建议。
根据请求,这是代码。但是,这与我的代码无关,因为正在发生流,FFMPEG中有一个漏洞。无论我将计时器设置为1/30秒,还是设置为1/60秒,泄漏都是一致的,正如上面所述,在一个不是我的例程中--它在ffmpeg库中。
video = [[RTSPPlayer alloc] initWithVideo:szURL usesTcp:NO];
lastFrameTime = -1;
// seek to 0.0 seconds
[video seekTime:0.0];
[_nextFrameTimer invalidate];
self.nextFrameTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/30 target:self selector:@selector(displayNextFrame:) userInfo:nil repeats:YES];这是displayNextFrame。它调用RSTPPlayer获取快照视频帧:
{
if (![video stepFrame]) {
[timer invalidate];
[video closeAudio];
return;
}
self.theImageView.image = video.currentImage;
}下面是来自currentImage的RTSPPlayer代码:
- (UIImage *)currentImage
{
if (!pFrame->data[0]) return nil;
[self convertFrameToRGB];
return [self imageFromAVPicture:picture width:outputWidth height:outputHeight];
}以下是imageFromAVPicture:
- (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 imageWithCGImage:cgImage];
CGImageRelease(cgImage);
CGDataProviderRelease(provider);
CFRelease(data);
return image;}
谢谢你的帮助。
发布于 2016-01-28 13:20:49
在- (BOOL)stepFrame函数中添加
av_free_packet(&packet);下面
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);参考资料:Github问题
https://stackoverflow.com/questions/34383558
复制相似问题