AVPlayerItemOutput queue EXC_BAD_ACCESS при воспроизведении третьего фильма

Я использую этот VideoController на iOS, чтобы пользователь мог загружать локальные видео и воспроизводить их по своему усмотрению. Каждый раз, когда она загружает третье видео, появляется сообщение «Полученное предупреждение о памяти» и вызывается исключение EXC_BAD_ACCESS. Я думаю, что что-то освобождается из-за вышеупомянутого предупреждения, возможно, объекта 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]; }); }); } 

Interesting Posts

Скрыть панель поиска UITableView по умолчанию

Путь изображения не конвертируется в url в swift3

Как я могу прослушивать все уведомления, отправленные в центр по умолчанию iOS NSNotificationCenter?

GPUImage: нормализовать размер размытия GPUImageGaussianSelectiveBlurFilter для нескольких изображений

iOS MapKit перетащил аннотации (MKAnnotationView) больше не панорамируется с картой

UILabel внутри вложенных UIStackViews внутри UITableViewCell иногда усекает

Можно ли «повторно очистить» IOS Date Picker?

SFTP с использованием NSURLSession не работает

Объединить 2 PHFetchResults вместе

Различное поведение для segue с использованием UISearchController

Как указать startTime для анимации с помощью CFTimeInterval?

Как я могу использовать NSDateFormatter для получения строки «Вчера»?

Делегирование протокола Objective-C на Swift

Захват фотографий с определенным разрешением с помощью UIImagePickerController

Alamofire.request vs. manager.request – менеджер не работает

PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.