首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存泄漏

内存泄漏
EN

Stack Overflow用户
提问于 2015-12-20 17:09:06
回答 1查看 924关注 0票数 1

我已经将ffmpeg整合到了一个iPad应用程序中,当我通过rtsp流时,我看到该应用程序在几个小时的流后崩溃。

当我通过仪器/泄漏调试应用程序时,我发现违规的漏洞在FFMPEG库中,而违规的函数是av_buffer_realloc。

有人知道我如何着手处理这个漏洞吗?我没有太多的工具可供使用,我甚至不知道在哪里可以解决这个问题?

谢谢你的帮助/建议。

根据请求,这是代码。但是,这与我的代码无关,因为正在发生流,FFMPEG中有一个漏洞。无论我将计时器设置为1/30秒,还是设置为1/60秒,泄漏都是一致的,正如上面所述,在一个不是我的例程中--它在ffmpeg库中。

代码语言:javascript
复制
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获取快照视频帧:

代码语言:javascript
复制
{
    if (![video stepFrame]) {
        [timer invalidate];
        [video closeAudio];
        return;
    }
    self.theImageView.image = video.currentImage;
}

下面是来自currentImage的RTSPPlayer代码:

代码语言:javascript
复制
- (UIImage *)currentImage
{
    if (!pFrame->data[0]) return nil;
    [self convertFrameToRGB];
    return [self imageFromAVPicture:picture width:outputWidth height:outputHeight];
}

以下是imageFromAVPicture:

代码语言:javascript
复制
- (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;

}

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-01-28 13:20:49

- (BOOL)stepFrame函数中添加

代码语言:javascript
复制
av_free_packet(&packet);

下面

代码语言:javascript
复制
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);

参考资料:Github问题

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34383558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档