2011-12-06 2 views
6

나는이 AVQueuePlayer (분명히 AVPlayer를 확장하는) 스트리밍 오디오의 재생 목록을로드하는. 스트리밍은 정상적으로 작동하지만 사용자 오디오가로드되고 있음을 나타내는 활동 표시기를 원합니다. 문제는 오디오 버퍼가로드 완료/재생 준비가되었음을 나타내는 AVQueuePlayer (또는 AVPlayer)의 알림을 찾을 수없는 것입니다 (위임 메서드가없는 것으로 나타남). 이견있는 사람?AVQueuePlayer/AVPlayer로드 알림?

답변

26

이 완료 얻을 KVO를 사용해야합니다. 이 같은 대기열에 추가하는 각 항목에 대한

, 당신 수 있습니다 설치 관계자 :

item_ = [[AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://somefunkyurl"]] retain]; 
[item_ addObserver:self forKeyPath:@"status" options:0 context:nil]; 
[item_ addObserver:self forKeyPath:@"playbackBufferEmpty" options:0 context:nil]; 

은 이제 관찰자 방법 내에서 해당 항목의 상태를 평가할 수 있습니다; 당신이 활동 표시 또는 '버퍼링'경고를 표시 할 수 있도록

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    if ([object isKindOfClass:[AVPlayerItem class]]) 
    { 
     AVPlayerItem *item = (AVPlayerItem *)object; 
     //playerItem status value changed? 
     if ([keyPath isEqualToString:@"status"]) 
     { //yes->check it... 
      switch(item.status) 
      { 
       case AVPlayerItemStatusFailed: 
        NSLog(@"player item status failed"); 
       break; 
       case AVPlayerItemStatusReadyToPlay: 
        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) 
      { 
       NSLog(@"player item playback buffer is empty"); 
      } 
     } 
    } 
} 
+6

또한 버퍼가 재생되는 동안 비워 때/경우 감지 할 AVPlayerItem 개체의 playbackBufferEmpty 속성을 관찰 할 수있다. – reddersky

+0

@virorum 좋은 지적, 그 하나를 내 대답에 추가했습니다! – Till

+2

당신 수 항상 당신이 – reddersky