2011-12-06 11 views
6

Mam AVQueuePlayer (który oczywiście rozszerza AVPlayer), który ładuje listę odtwarzania strumieniowego audio. Strumieniowanie działa dobrze, ale chciałbym mieć wskaźnik aktywności, aby pokazać, że ładuje się dźwięk użytkownika. Problem polega na tym, że nie mogę znaleźć takiego powiadomienia w AVQueuePlayer (lub AVPlayer), które wskazywałby, kiedy bufor audio skończył się ładować/jest gotowy do odtwarzania (ani nie wydaje się, że jest to metoda delegata). jakieś pomysły?Ładowanie powiadomienia AVQueuePlayer/AVPlayer?

Odpowiedz

26

Będziesz musiał użyć KVO, aby to zrobić.

Dla każdej pozycji jest dodawany do kolejki, można obserwatorzy konfiguracyjne takie jak ten:

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]; 

Teraz można ocenić stan tego elementu wewnątrz metody obserwacyjnej;

- (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

Można również obserwować właściwość playbackBufferEmpty obiektów AVPlayerItem wykryć jeśli/gdy opróżnia bufor podczas odtwarzania, dzięki czemu można wyświetlić wskaźnik aktywności lub „buforowania” ostrzeżenie. – reddersky

+0

@virorum Dobry punkt, dodałem, że jeden do mojej odpowiedzi - ty! – Till

+2

Zawsze można wyświetlić mój komentarz, jeśli ci się podobało ;-) – reddersky