2014-09-02 670 views
3

我的應用程序播放流視頻,但是當它緩衝時,播放器進入暫停模式,我必須手動將它設置爲播放模式,我在我的AVPlayer類中有以下代碼爲了處理這種情況,但它不起作用。AVPlayer播放,暫停和緩衝問題

在viewDidLoad方法

[playerItem addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil]; 
[playerItem addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:nil]; 

,然後,使用下列方法

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
        change:(NSDictionary *)change context:(void *)context { 
if (!player) 
{ 
    return; 
} 

else if (object == playerItem && [keyPath isEqualToString:@"playbackBufferEmpty"]) 
{ 
    if (playerItem.playbackBufferEmpty) { 
     //Your code here 
    } 
} 

else if (object == playerItem && [keyPath isEqualToString:@"playbackLikelyToKeepUp"]) 
{ 
    if (playerItem.playbackLikelyToKeepUp) 
    { 
     //Your code here 
    } 
} 

}

有在爲了獲得一個另一個針對此問題的解決方案處理觀察員玩家繼續玩模式?

+0

任何人都想幫助我? – Yrol 2014-09-03 05:54:37

+0

你得到了這個答案嗎? – Skywalker 2016-03-14 12:35:04

+0

在iOS 9中,您不需要使用此附加代碼與KVO。系統無需處理它。我不知道如何解決iOS 8的這個問題。我正在爲此尋找答案 – Skywalker 2016-03-14 14:05:07

回答

1

這可能幫助,

想這是你的AVPlayer對象
PLAYER1 = [AVPlayer playerWithURL:streamURL]。

當您的視頻緩衝模式去,那麼你可以暫停它,當它完成再喜歡玩: 在觀測方法,

if ([object isKindOfClass:[AVPlayerItem class]]) 
{ 
    AVPlayerItem *item = (AVPlayerItem *)object; 
    //playerItem status value changed? 
    if ([keyPath isEqualToString:@"status"]) 
    { //yes->check it... 

     NSLog(@"STATUS = %d",item.status); 
     switch(item.status) 
     { 
      case AVPlayerItemStatusFailed: 
       NSLog(@"player item status failed"); 
       break; 
      case AVPlayerItemStatusReadyToPlay: 

       [playButton setTitle:@"Pause" forState:UIControlStateNormal]; 
       [player1 play]; 

       NSLog(@"player item status is ready to play"); 
       break; 
      case AVPlayerItemStatusUnknown: 
       NSLog(@"player item status is unknown"); 
       break; 
     } 
    } 
    else if ([keyPath isEqualToString:@"playbackBufferEmpty"]) 
    { 
     if (item.playbackBufferEmpty) 
     { 
      [playButton setTitle:@"Play" forState:UIControlStateNormal]; 
      [player1 pause]; 
      NSLog(@"player item playback buffer is empty"); 
     } 
    } 
} 

或者可以保持在按鈕的單擊事件。 在屏幕上放置一個按鈕以保持播放和暫停,並使用OnClick事件將其添加到該按鈕。