恢复 AVPlayer 流播放最后一个示例
Resume AVPlayer stream playback last sample
我正在尝试使用本机播放器 (AVPlayer) 在 iOS 上重现直播流。但是,我无法恢复播放。当我停止播放并在几秒钟后恢复播放时,播放从我暂停的那一刻开始,而不是再现实时流的当前(最后)样本。
有没有办法获取最后一个样本,o 配置 AVPlayer 在点击播放按钮时从最后一个样本重现?
我的解决方案基于拒绝用户让播放器保持暂停状态。也就是说,每次恢复播放时都会销毁播放器。并且每次都创建一个新的实例,播放是为了恢复。
根据 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
即可从上一个实时样本开始播放。
我正在尝试使用本机播放器 (AVPlayer) 在 iOS 上重现直播流。但是,我无法恢复播放。当我停止播放并在几秒钟后恢复播放时,播放从我暂停的那一刻开始,而不是再现实时流的当前(最后)样本。
有没有办法获取最后一个样本,o 配置 AVPlayer 在点击播放按钮时从最后一个样本重现?
我的解决方案基于拒绝用户让播放器保持暂停状态。也就是说,每次恢复播放时都会销毁播放器。并且每次都创建一个新的实例,播放是为了恢复。
根据 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
即可从上一个实时样本开始播放。