2017-02-22 6 views
1

Я пытаюсь использовать собственный плеер (AVPlayer) для воспроизведения прямого эфира на iOS. Однако мне не удается возобновить воспроизведение. Когда я прекращаю воспроизведение и возобновляю его через несколько секунд, воспроизведение начинается с момента паузы, а не для воспроизведения текущего (последнего) образца живого потока.Возобновление воспроизведения последнего потока AVPlayer

Есть ли способ получить последний образец, o настроить AVPlayer для воспроизведения из последнего образца при нажатии на кнопку воспроизведения?

+0

Восстанавливает ли «AVPlayerItem» из URL-адреса желаемое поведение? –

+0

Наконец, единственным решением, которое я нашел, является запрос URL-адреса прямого потока каждый раз, когда мне нужно возобновить воспроизведение. – CRoig

+0

Как вы это делаете? –

ответ

0

Мое решение основано на отказе от пользователя, чтобы игрок приостановил действие. Это разрушает плеер при каждом возобновлении воспроизведения. И каждый раз, создавая новый экземпляр, воспроизведение должно возобновляться.

Согласно рекомендации 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 который начать воспроизведение с последнего живого образца.

Смежные вопросы