2

AVPlayerセル内にあるコレクションビューがあり、ループでAVPlayer再生を開始するとAVPlayerItem

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

呼ばれます。これはうまくいきますが、問題はAVPlayer、アイテムを数回再生した後、ビデオが表示されなくなりますが、音は聞こえることです。@"playbackBufferFull"また、そのように再生される各アイテムの値のオブザーバーも追加します。

[item addObserver:self forKeyPath:@"playbackBufferFull" options:NSKeyValueObservingOptionNew context:nil];

ビデオが停止すると、値のオブザーバーメソッドが呼び出されることに気付きました@"playbackBufferFull"。まず、バッファがいっぱいになる原因を知りたいと思います.2番目で最も重要なのはAVPlayer、ビデオが停止したときにどのように再開できるかです; 私は呼び出し[cell.videoPlayer play];て、アイテムを新しいアイテムに置き換えようとしましたが、うまくいきませんでした.オブザーバーメソッド:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
                                    change:(NSDictionary *)change context:(void *)context {


                if ([object isKindOfClass:[AVPlayerItem class]] && [keyPath isEqualToString:@"playbackBufferFull"])
                {
                  //this method is get called when the video stop showing but i can still hear it
                 //how can i resume the video?
                }

            }
4

1 に答える 1

1

私の解決策は次のとおりです。

AVPlayerItemPlaybackStalledNotification最初に、 inviewDidLoadまたは ...の監視を追加します。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(playerItemDidReachEnd:)
                                             name:AVPlayerItemPlaybackStalledNotification
                                           object:self.avPlayer.currentItem];

-(void)playerItemDidReachEnd:(NSNotification*)noti

{
//thisisn't good way but i can't find the best way for detect best place for resume again.
NSLog(@"\n\n give Error while Streaminggggg");
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [self.avPlayer play];
 });
}

しかし、再開のためにplay メソッドを再度呼び出す最良の方法を見つけることができるかもしれません! AVPlayerStatusReadyToPlayキーパッチを取得しているか確認してください。を取得した場合は、playそこでメソッドを呼び出すことができます。結果をお知らせください

于 2016-01-18T07:09:19.537 に答える