В моем приложении для iOS я запускаю видео YouTube в виде цикла с помощью помощника YouTube для iOS. библиотека. Но я не даю возможность воспроизвести видео на всю длину, но через 20 секунд я снова ставлю в очередь то же видео, как показано ниже.
- (void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state{
if (state == kYTPlayerStateQueued) {
startedTimer = NO;
[self.playerView playVideo];
} else if (state == kYTPlayerStatePlaying) {
if (!startedTimer) {
startedTimer = YES;
vidReplayTimer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(restartVideo) userInfo:nil repeats:NO];
}
}
}
а также
- (void)restartVideo {
[self.playerView cueVideoById:selectedYTVideoId startSeconds:0.1 suggestedQuality:kYTPlaybackQualityMedium];
}
Это работает отлично, как я хотел.
Затем я хотел воспроизвести файл mp4, прежде чем YouTube каждый раз будет воспроизводить видео. Для этого я использовал AVPlayer. . Затем код изменился, как показано ниже.
- (void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state{
if (state == kYTPlayerStatePlaying) {
if (self.avPlayer != nil) {
avPlayerLayer.hidden = YES;
self.avPlayer = nil;
}
if (!startedTimer) {
startedTimer = YES;
vidReplayTimer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(restartVideo) userInfo:nil repeats:NO];
}
}
}
а также
- (void)restartVideo {
self.avPlayer = [AVPlayer playerWithURL:introVideoFileURL];
avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:self.avPlayer];
self.avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;
avPlayerLayer.frame = CGRectMake(0, 0, 320, 330);
[self.view.layer addSublayer: avPlayerLayer];
[self.avPlayer play];
[self.playerView cueVideoById:selectedYTVideoId startSeconds:0.1 suggestedQuality:kYTPlaybackQualityMedium];
}
После вышеуказанных изменений приложение работает, как я и ожидал, но почти через четыре минуты работы оно дает всплывающее окно «Прекращено из-за нехватки памяти» в моем Xcode, и приложение вылетает. Я проверил память с помощью инструмента разработчика Instruments, и к моменту сбоя приложение использует почти 35 МБ памяти. К тому времени, когда приложение начало работать, оно использует более 45 МБ памяти и работает без сбоев.
Как видите, я создаю AVPlayer только тогда, когда он мне нужен, и устанавливаю его на ноль сразу после завершения работы. Что может быть причиной этой проблемы и как я могу это решить?
MPMoviePlayerController
вместоAVPlayer
. - person AnujAroshA   schedule 14.08.2014viewDidDisapear
, а не внутриdidReceiveMemoryWarning
. Ваш способ тоже попробую. Большое спасибо за совет. - person AnujAroshA   schedule 21.08.2014