Ios 播放第三部电影时的AVPlayerItemOutput队列EXC_BAD_访问权限

Ios 播放第三部电影时的AVPlayerItemOutput队列EXC_BAD_访问权限,ios,avplayer,gpuimage,Ios,Avplayer,Gpuimage,我在iOS上使用这个视频控制器,这样用户就可以加载本地视频并随意播放。每次她加载第三个视频时,会生成“已接收内存警告”,并立即引发EXC_BAD_访问异常。我猜由于上面的警告,可能是一个AVPLayerItemOutput对象,正在释放某些内容 这是我用来控制播放的代码: - (void)setupVideoPlayer:(NSURL*) movieUrl completion:(void(^)(void))callback; { if (player) { [player pause

我在iOS上使用这个视频控制器,这样用户就可以加载本地视频并随意播放。每次她加载第三个视频时,会生成“已接收内存警告”,并立即引发EXC_BAD_访问异常。我猜由于上面的警告,可能是一个AVPLayerItemOutput对象,正在释放某些内容

这是我用来控制播放的代码:

- (void)setupVideoPlayer:(NSURL*) movieUrl completion:(void(^)(void))callback;
{
if (player) {
    [player pause];
    player = nil;
}

if (movieFile){
    movieFile = nil;
}

AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:movieUrl options:nil];
AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];
gen.appliesPreferredTrackTransform = YES;
NSError *err = NULL;
CGImageRef oneRef = [gen copyCGImageAtTime:CMTimeMake(1, 2) actualTime:NULL error:&err];
_size = CGSizeMake(CGImageGetWidth(oneRef), CGImageGetHeight(oneRef));

dispatch_async(dispatch_get_main_queue(), ^{

    player = [AVPlayer playerWithURL:movieUrl];
    [[player currentItem] addObserver:self forKeyPath:@"status" options:0 context:&ItemStatusAndTracksContext];
    [[player currentItem] addObserver:self forKeyPath:@"tracks" options:0 context:&ItemStatusAndTracksContext];


    player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:[player currentItem]];

    movieFile = [[GPUImageMovie alloc] initWithPlayerItem:[player currentItem]];

    movieFile.playAtActualSpeed = YES;
    movieFile.shouldRepeat = YES;

    videoInput = &*movieFile;
    callback();

    player.rate = 1.0;
    __weak typeof(self) weakSelf = self;
    [player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(1.0 / 60.0, NSEC_PER_SEC) queue:NULL usingBlock:^(CMTime time)
        {
             [weakSelf updateDelegateProgressView];
        }
     ];
    [movieFile startProcessing];
    double delayToStartRecording = 0.5;
    dispatch_time_t startTime = dispatch_time(DISPATCH_TIME_NOW, delayToStartRecording * NSEC_PER_SEC);
    dispatch_after(startTime, dispatch_get_main_queue(), ^(void){
    [player play];
            });
});
}