2017-02-22 106 views
1

我想使用本地播放器(AVPlayer)在iOS上重现实时流。但是,我无法恢复播放。当我停止播放并在几秒后恢复播放时,播放将从暂停的那一刻开始,而不是再现实时流的当前(最后一个)样本。恢复AVPlayer流播放最后示例

有没有办法获得最后一个样品,o配置AVPlayer从最后一个样品点击播放按钮时重现?

+0

是否通过URL重新创建'AVPlayerItem'实现所需的行为? –

+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它开始从最后一次现场采样回放。