2012-05-16 4 views
6

로컬 .wav 파일 재생에 문제가 있습니다. 내 AVPlayerStatus0을 인쇄하고 있습니다. 나는 그것이 재생 준비가되어 있지 않다는 것을 의미한다고 가정하고 있습니다. 알아낼 수는 없지만 AVPlayer와 관련이있는 것은 처음 사용하는 것이므로 간단 할 것 같습니다. 나는 어떤 도움을 주셔서 감사합니다. 코드는 다음과 같습니다.로컬 파일 용 AVPlayerStatus가 준비되지 않았습니다.

나는 소리가 재생되지 않는다고 덧붙여 야합니다!

-(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"); 
} 

답변

11

여기 AVPlayItem -initWithURL: 방법을 사용하는 경우 애플이 지적되는 몇 가지 중요한 문제점 몇 개는 다음과 같습니다

특별 고려 상태 AVPlayerItemStatusUnknown와

이 방법은 즉시 항목을 반환하지만 .

URL에 플레이어 항목에서 사용할 수있는 유효한 데이터가 포함되어 있으면 상태가 나중에 AVPlayerItemStatusReadyToPlay로 변경됩니다.

URL에 유효한 데이터가 없거나 플레이어 항목에서 사용할 수없는 경우 나중에 상태가 AVPlayerItemStatusFailed로 변경됩니다. 당신은 얼마 당신이 AVPlayerItem 객체를 생성 한 후 -play 메시지를 전송하기 때문에

내가 무슨 일이 일어나고 상상하는 것은 그 상태가 여전히 AVPlayerItemStatusUnknown입니다 충분히 시간을받지 않았기 때문에 (동일 AVPlayer를 객체에 간다)이다 리소스를로드하고 상태를 AVPlayerItemStatusReadyToPlay으로 변경하십시오.

내 sugestions :

  • 중 하나 AVPlayerItem/AVPlayer를 상태 변화를 확인하고 이후 단계에서 -play 전화;

OR, 더 간단,

  • 을로드 (load) AVAsset 또는 NSURL에서 AVURLAsset 객체와 객체를 재생할 준비를 반환 한 다음 즉시 -play 전화 호출해야 AVPlayerItem –initWithAsset: 방법을 사용 후에, 만약 네가 그렇게한다면.
+0

AVAsset으로 초기화하면 해결되었습니다! 도와 주셔서 정말 감사합니다! –

+0

기꺼이 도와 드리겠습니다. 건배! – MiguelB

1

0 나는 플레이어가 실제로 play를 호출 할 때까지 URL을로드하지 않기 때문에이 가정, AVPlayerStatusUnknown에 해당합니다. documentation에서

:

AVPlayerStatusUnknown

은 재생을위한 새로운 미디어 리소스를로드하려하지 않았기 때문에 플레이어의 상태가 아직 알려지지 않은 것을 나타냅니다.

+0

나는'player.status' 전에'[player play] '가 호출되고 여전히'0'을 출력하도록 코드를 바꾸었다. 진짜 문제는 소리가 재생되지 않는다는 것이 내 원래 게시물의 어딘가에서 굵은 글씨로 언급해야합니다! – garethdn

관련 문제