私の解決策は、プレイヤーを一時停止状態に保つことを拒否したことに基づいています。これは、再生が再開されるたびにプレーヤーを破壊することです。また、毎回新しいインスタンスを作成すると、再生が再開されます。
アップルの推奨によると、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
を呼び出します。
URLから 'AVPlayerItem'を再作成すると、望ましい動作が得られますか? –
最後に、私が見つけた唯一の解決策は、再生を再開する必要があるたびにライブストリームURLを要求することです。 – CRoig
どうすればいいですか? –