Я установил App Plays Audio для обязательных фоновых режимов в моем приложении info.plist, чтобы mpmovieplayerviewcontroller не закрывался после перехода в фоновый режим. Это проделало большую работу. Однако Apple недавно отклонила обновление моего приложения, поскольку я установил этот атрибут.
Затем я продолжаю находить решения для выполнения той же работы, но терплю неудачу. Чтобы справиться с этим, я сохраняю текущее время воспроизведения, когда контроллер представления получает UIApplicationDidEnterBackgroundNotification
-(void)willEnterBackground {
NSLog(@"willEnterBackground");
if (self.mp) {
playbackTime = self.mp.moviePlayer.currentPlaybackTime;
[self.mp dismissModalViewControllerAnimated:YES];
}
}
И установите currentPlayBackTime после того, как он получит UIApplicationWillEnterForegroundNotification:
- (void)willEnterForeground {
NSLog(@"willEnterForeground");
if (!self.mp)
return;
if(self.mp.moviePlayer.playbackState == MPMoviePlaybackStateInterrupted || self.mp.moviePlayer.playbackState == MPMoviePlaybackStateStopped || self.mp.moviePlayer.playbackState == MPMoviePlaybackStatePaused)
{
[self continuePlayback];
}
}
- (void)continuePlayback {
NSLog(@"%f", self.mp.moviePlayer.duration);
NSLog(@"%f", playbackTime);
[self.mp.moviePlayer stop];
self.mp = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:[self.videos objectForKey:@"medium"]]] ;
[self.mp.moviePlayer setInitialPlaybackTime:playbackTime];
[self.mp.moviePlayer play];
[self presentModalViewController:self.mp animated:YES];
}
Это работает, но с некоторым компромиссом: когда я повторно запускаю его, он теряет часть потокового видео. Пользователям нужно снова дождаться потоковой передачи.
А вот и мои вопросы:
- Есть ли способ продолжать потоковое видео с Youtube, когда приложение находится в фоновом режиме?
- или как сохранить потоковую часть?
Видео будет воспроизводиться с начала, если я пропущу строку:
self.mp = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:[self.videos objectForKey:@"medium"]]] ;
в методе continuePlayBack или я устанавливаюCurrentPlayBackTime вместо setInitPlayBackTime.