2012-05-16 15 views
6

Ho qualche problema con la riproduzione di un file .wav locale. Il mio AVPlayerStatus sta stampando 0, che presumo significhi che non è pronto per giocare. Non riesco a capirlo, ma detto questo, è la prima volta che cerco di utilizzare qualsiasi cosa con AVPlayer, quindi probabilmente è qualcosa di semplice. Apprezzerei qualsiasi aiuto. Ecco il codice:AVPlayerStatus per file locale non pronto

dovrei aggiungere che i miei suoni non stanno giocando!

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

risposta

11

Ecco alcuni trucchi importanti Apple sta sottolineando quando si utilizza il metodo AVPlayItem -initWithURL::

Considerazioni particolari

Questo metodo restituisce immediatamente la voce, ma con lo status AVPlayerItemStatusUnknown.

Se l'URL contiene dati validi che possono essere utilizzati dall'elemento giocatore, lo stato successivamente cambia in AVPlayerItemStatusReadyToPlay.

Se l'URL non contiene dati validi o non può essere utilizzato in altro modo dall'elemento giocatore , lo stato viene successivamente modificato in AVPlayerItemStatusFailed.

quello che immagino che sta accadendo è, perché si invia un messaggio -play non molto tempo dopo aver creato l'oggetto AVPlayerItem, il suo stato è ancora AVPlayerItemStatusUnknown (lo stesso vale per l'oggetto AVPlayer), in quanto non ha ricevuto abbastanza tempo caricare la risorsa e cambiare lo stato in AVPlayerItemStatusReadyToPlay.

miei sugestions:

  • Sia verificare il cambiamento di stato AVPlayerItem/AVPlayer e chiamare -play in una fase successiva;

O, ancora più semplice,

  • Caricare un AVAsset o un AVURLAsset oggetto dalla NSURL e utilizzare il metodo AVPlayerItem –initWithAsset:, che dovrebbe restituire un pronto per giocare oggetto, e quindi si chiama chiamare -play subito dopo, se così prego.
+0

Inizializzazione come set di AVA risolto! Grazie mille per il vostro aiuto! –

+0

Contento di aver potuto aiutare. Saluti! – MiguelB

1

0 è equivalente a AVPlayerStatusUnknown, presumo questo è perché il giocatore non tenta di caricare l'URL fino a quando si chiama in realtà play.

Dal documentation:

AVPlayerStatusUnknown

indica che lo stato del giocatore non è ancora noto perché non ha cercato di caricare le nuove risorse multimediali per la riproduzione.

+0

Ho cambiato il codice in modo tale che '[player play]' viene chiamato prima di 'player.status' e sta ancora emettendo' 0'. Avrei dovuto dire in grassetto da qualche parte nel mio post originale che il vero problema è che i suoni non stanno giocando! – garethdn