Мое решение основано на отказе от пользователя, чтобы игрок приостановил действие. Это разрушает плеер при каждом возобновлении воспроизведения. И каждый раз, создавая новый экземпляр, воспроизведение должно возобновляться.
Согласно рекомендации Apple, единственным решением узнать, был ли AVPlayer остановлен, является добавление KVO. Это:
- (void)setupPlayer {
AVPlayer *player = [AVPlayer playerWithURL:streamURL];
AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init];
playerViewController.player = player;
self.playerViewController = playerViewController;
[self configureConstraintsForView:self.playerViewController.view]; //Add Player to View
[self setupObservers];
[player play];
}
- (void)setupObservers {
[self.playerViewController.player addObserver:self
forKeyPath:@"rate"
options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
context:NULL];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey, id> *)change context:(void *)context
if ([keyPath isEqualToString:@"rate"] && self.playerViewController.player.rate == CGPointZero.x) {
[self.playerViewController.view removeFromSuperview];
[self.playerViewController.player removeObserver:self forKeyPath:@"rate"];
[self.playerViewController.player pause];
self.playerViewController = nil;
}
}
Затем, когда пользователь хочет повторно привлечь игрока, просто вызовите -(void)setupPlayer
который начать воспроизведение с последнего живого образца.
Восстанавливает ли «AVPlayerItem» из URL-адреса желаемое поведение? –
Наконец, единственным решением, которое я нашел, является запрос URL-адреса прямого потока каждый раз, когда мне нужно возобновить воспроизведение. – CRoig
Как вы это делаете? –