2017-02-22 13 views
1

iOS上でライブストリームを再生するためにネイティブプレーヤー(AVPlayer)を使用しようとしています。しかし、私は再生を再開するのに問題があります。再生を停止して数秒後にレジュームすると、ライブストリームの現在の(最後の)サンプルを再生するのではなく、一時停止した瞬間から再生が開始されます。AVPlayerストリームの再生を再開する最後のサンプル

最後のサンプルを取得する方法はありますか?再生ボタンをタップすると、最後のサンプルから再生するようにAVPlayerを構成しますか?

+0

URLから 'AVPlayerItem'を再作成すると、望ましい動作が得られますか? –

+0

最後に、私が見つけた唯一の解決策は、再生を再開する必要があるたびにライブストリームURLを要求することです。 – CRoig

+0

どうすればいいですか? –

答えて

0

私の解決策は、プレイヤーを一時停止状態に保つことを拒否したことに基づいています。これは、再生が再開されるたびにプレーヤーを破壊することです。また、毎回新しいインスタンスを作成すると、再生が再開されます。

アップルの推奨によると、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を呼び出します。

関連する問題