2012-05-16 26 views
6

Tôi gặp sự cố khi phát lại tệp .wav cục bộ. My AVPlayerStatus đang in 0, mà tôi giả định có nghĩa là nó chưa sẵn sàng để chơi. Tôi không thể hình dung ra nhưng đã nói rằng, đây là lần đầu tiên tôi cố gắng sử dụng bất cứ điều gì để làm với AVPlayer vì vậy nó có thể là một cái gì đó đơn giản. Tôi đánh giá cao sự giúp đỡ nào. Đây là mã:AVPlayerStatus cho tệp cục bộ chưa sẵn sàng

tôi nên thêm âm thanh của mình không phát!

-(void) playWordSound:(UILabel *)label 
{ 
    NSString *path; 
    switch (label.tag) 
    { 
     case 1: 
      path = [[NSBundle mainBundle] pathForResource:@"humpty" ofType:@"wav"]; 
      break; 
     case 2: 
      path = [[NSBundle mainBundle] pathForResource:@"dumpty" ofType:@"wav"]; 
      break; 
     case 3: 
      path = [[NSBundle mainBundle] pathForResource:@"saty" ofType:@"wav"]; 
      break; 
     case 4: 
      path = [[NSBundle mainBundle] pathForResource:@"on 2" ofType:@"wav"]; 
      break; 
     case 5: 
      path = [[NSBundle mainBundle] pathForResource:@"a 3" ofType:@"wav"]; 
      break; 
     case 6: 
      path = [[NSBundle mainBundle] pathForResource:@"wall" ofType:@"wav"]; 
      break; 
    } 
    NSURL *url = [NSURL fileURLWithPath:path]; 
    AVQueuePlayer *player; 
    static const NSString *ItemStatusContext; 
    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url]; 
    [playerItem addObserver:self forKeyPath:@"status" options:0 context:&ItemStatusContext]; 
    player = [AVPlayer playerWithPlayerItem:playerItem]; 

    NSLog(@"%d",player.status); 
    [player play]; 
} 

- (void)playerItemDidReachEnd:(NSNotification *)notification { 
    NSLog(@"Sound finished"); 
} 

Trả lời

11

Dưới đây là một số gotchas quan trọng của Apple được chỉ ra khi sử dụng AVPlayItem -initWithURL: phương pháp:

cân nhắc đặc biệt

Phương pháp này ngay lập tức trở lại mặt hàng đó, nhưng với tình trạng AVPlayerItemStatusUnknown.

Nếu URL chứa dữ liệu hợp lệ có thể được sử dụng bởi mục trình phát, trạng thái sau đó sẽ thay đổi thành AVPlayerItemStatusReadyToPlay.

Nếu URL không chứa dữ liệu hợp lệ hoặc không thể sử dụng cho mục trình phát , trạng thái sau đó sẽ thay đổi thành AVPlayerItemStatusFailed.

Những gì tôi tưởng tượng đang xảy ra là, bởi vì bạn đang gửi một thông điệp -play không lâu sau khi bạn tạo đối tượng AVPlayerItem, tình trạng của nó vẫn còn là AVPlayerItemStatusUnknown (cũng áp dụng cho các đối tượng AVPlayer) vì nó không nhận được đủ thời gian để tải tài nguyên và thay đổi trạng thái thành AVPlayerItemStatusReadyToPlay.

sugestions của tôi:

  • Hoặc kiểm tra sự thay đổi trạng thái AVPlayerItem/AVPlayer và gọi -play ở giai đoạn sau;

OR, thậm chí đơn giản hơn,

  • tải một AVAsset hoặc một AVURLAsset đối tượng từ NSURL và sử dụng phương pháp AVPlayerItem –initWithAsset:, mà phải trả lại một sẵn sàng để chơi đối tượng, và sau đó bạn gọi gọi -play ngay lập tức sau đó, nếu bạn vui lòng.
+0

Khởi tạo như một AVAsset đã sửa nó! Cảm ơn rất nhiều vì sự giúp đỡ của bạn! –

+0

Vui vì tôi có thể giúp. Chúc mừng! – MiguelB

1

0 tương đương với AVPlayerStatusUnknown, tôi giả sử điều này là do các cầu thủ không cố gắng tải URL cho đến khi bạn thực sự gọi play.

Từ documentation:

AVPlayerStatusUnknown

Chỉ ra rằng tình trạng của các cầu thủ vẫn chưa được biết bởi vì nó đã không cố gắng để tải các tài nguyên truyền thông mới để phát lại.

+0

Tôi đã chuyển mã xung quanh để '[trình phát] được gọi trước' player.status' và nó vẫn xuất ra '0'. Tôi nên đề cập đến ở một nơi nào đó trong bài viết gốc của tôi rằng vấn đề thực sự là âm thanh không được chơi! – garethdn

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