AVMutableComposition 内存泄漏

3

我的应用程序将视频序列合并,并根据情况在最终序列中添加音乐。添加音乐后,应用程序会检查用户是否选择了开场视频,然后将其与最终视频合并。

运行分析器时,我发现第二次和第三次执行此操作时存在内存泄漏:

AVMutableComposition *composition = [AVMutableComposition composition];

enter image description here

当合并初始视频序列时,不会显示内存泄漏。但是如果应用程序添加音乐和介绍,则会发生内存泄漏。

在添加音乐时,我创建了一个新的组合,在添加介绍时也创建了一个新的组合。它们不会发生在代码的同一部分。

这是问题吗?我不能创建超过一个AVMutableComposition吗?如何摆脱这些内存泄露?

2个回答

0

我也遇到了这个问题,但我只对我的组合变量执行单个赋值,就像这样:

    AVMutableComposition* tSilencingComposition = [AVMutableComposition composition];

我不会再重复使用组合指针,而是将其分配为nil,并在应用程序过程中让ARC自行处理 - 但每次遇到这条命令时,都会报告泄漏。似乎是在AVMutableComposition中的某些内容。

Instruments报告称,我在此赋值中泄漏了6个字节,进一步深入调查会出现相同的FigXPC *调用报告..


谢谢你的回答。我也没有找到解决方案。但是通过使用单例模式,我将泄漏减少到了一个。请看我的回答。 - fcberg

0

我没有找到完美的解决方案,但通过使用单例模式,在应用程序运行过程中将泄漏减少到了一个。

@property (strong, nonatomic) AVMutableComposition *composition;

static FBVideoEditor *instance = nil;

+ (FBVideoEditor*) shared {
    if (instance == nil) {
        instance = [[FBVideoEditor alloc] init];
    }
    return instance;
}

- (AVMutableComposition*) getComposition {
    if (_composition == nil) {
        _composition = [AVMutableComposition composition];
    }
    for (AVMutableCompositionTrack *track in [_composition tracks]) {
        [_composition removeTrack:track];
    }
    return _composition;
}

通过这样做,AVMutableComposition 只会在第一次泄漏。然后,我的应用程序可以多次重复使用它,而不会有更多的内存泄漏。

我基本上在做同样的事情,但内存泄漏会导致我的调试流程中其他问题(无法释放带有内存泄漏的版本)- 我目前的调查结果表明这是AVFoundation框架中的泄漏,我们将不得不等待苹果来解决它 - 顺便说一下,这是在iOS 11.2.5上,不确定今天的发布是否修复了它.. - ibisum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接