2011-12-06 40 views
6

Akış sesinin bir oynatma listesini yükleyen bir AVQueuePlayer (ki bu açıkça AVPlayer3'ü genişletir) sahibim. Akış tüm iyi çalışıyor, ancak kullanıcının sesinin yüklendiğini göstermek için bir etkinlik göstergesine sahip olmak isterim. Sorun şu ki, AVQueuePlayer (veya AVPlayer) 'da böyle bir Bildirimin ses tamponunun ne zaman yüklemeyi bitirdiğini/oynatmaya hazır olduğunu gösterecek şekilde göremiyorum (bir temsilci yöntemi gibi görünüyor). Düşüncesi olan var mı?AVQueuePlayer/AVPlayer yükleme bildirimi?

cevap

26

Bunu yapmak için KVO kullanmanız gerekecektir. Bu gibi sıraya ekliyoruz her öğe için

şunları yapabilirsiniz kurulum gözlemciler:

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

Şimdi gözlemci yöntemine içinde bu öğenin durumunu değerlendirebilir; Bir etkinlik göstergesi veya 'tampon' uyarı göstermek böylece

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

Ayrıca tampon oynatma sırasında boşaltır zaman eğer/algılamak için AVPlayerItem nesnelerin playbackBufferEmpty özelliğini gözlemleyebiliriz. – reddersky

+0

@virorum İyi nokta, bunu bir cevapıma ekledi - ty! – Till

+2

İsterseniz yorumumu her zaman yapabilirsiniz ;-) – reddersky