2011-12-06 40 views
6

Tôi có một số AVQueuePlayer (rõ ràng là mở rộng AVPlayer) sẽ tải danh sách phát phát trực tuyến âm thanh. Phát trực tuyến đều hoạt động tốt nhưng tôi muốn có chỉ báo hoạt động để hiển thị âm thanh của người dùng đang tải. Rắc rối là, tôi dường như không thể tìm thấy bất kỳ Thông báo nào như vậy trong AVQueuePlayer (hoặc AVPlayer) sẽ cho biết khi bộ đệm âm thanh đã tải xong/đã sẵn sàng phát (cũng không có vẻ là phương thức đại biểu). Có suy nghĩ gì không?AVQueuePlayer/AVPlayer tải thông báo?

Trả lời

26

Bạn sẽ phải sử dụng KVO để thực hiện việc này.

Đối với mỗi mục bạn đang thêm vào hàng đợi, bạn có thể quan sát thiết lập như thế này:

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

Bây giờ bạn có thể đánh giá tình trạng của mục đó trong phương pháp quan sát;

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

Bạn cũng có thể quan sát thuộc tính playbackBufferEmpty của đối tượng AVPlayerItem để phát hiện nếu/khi bộ đệm của bạn trống trong khi phát lại để bạn có thể hiển thị cảnh báo hoạt động hoặc cảnh báo 'đệm'. – reddersky

+0

@virorum Điểm tốt, thêm rằng một trong những câu trả lời của tôi - ty! – Till

+2

Bạn luôn có thể đưa ra bình luận của tôi nếu bạn thích nó ;-) – reddersky

Các vấn đề liên quan