2012-05-16 15 views
6

Tengo problemas con la reproducción de un archivo local .wav. Mi AVPlayerStatus está imprimiendo 0, lo que supongo significa que no está listo para jugar. Parece que no puedo entenderlo, pero una vez dicho esto, esta es la primera vez que intento usar algo que tenga que ver con AVPlayer, así que probablemente sea algo simple. Agradecería cualquier ayuda. Aquí está el código:AVPlayerStatus para el archivo local no está listo

¡Debo añadir que mis sonidos no se están reproduciendo!

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

Respuesta

11

He aquí algunos aspectos críticos importantes Apple está señalando al utilizar AVPlayItem -initWithURL: método:

Consideraciones especiales

Este método devuelve inmediatamente el artículo, pero con la condición AVPlayerItemStatusUnknown.

Si la URL contiene datos válidos que pueden ser utilizados por el elemento de jugador, el estado cambia más tarde a AVPlayerItemStatusReadyToPlay.

Si la URL no contiene datos válidos o no puede ser utilizada por el elemento de jugador , el estado cambiará posteriormente a AVPlayerItemStatusFailed.

lo que me imagino que está sucediendo es porque le está enviando un mensaje -play no mucho después de crear el objeto AVPlayerItem, su estado sigue siendo AVPlayerItemStatusUnknown (mismo pasa con el objeto AVPlayer) ya que no recibió suficiente tiempo para cargar el recurso y cambiar el estado a AVPlayerItemStatusReadyToPlay.

Mis sugerencias:

  • Cualquiera de comprobar si el cambio de estado AVPlayerItem/AVPlayer y llame -play en una etapa posterior;

O, aún más simple,

  • Cargar un AVAsset o un objeto AVURLAsset del NSURL y utilizar el método AVPlayerItem –initWithAsset:, que debe devolver una lista para jugar objeto, y luego llamar a llamar -play inmediatamente después, si así lo deseas.
+0

Inicializando como un AVAsset lo arregló! ¡Muchas gracias por tu ayuda! –

+0

Me alegro de poder ayudar. ¡Aclamaciones! – MiguelB

1

0 es equivalente a AVPlayerStatusUnknown, supongo que esto se debe a que el jugador no intenta cargar la URL hasta que realmente llama play.

Desde el documentation:

AVPlayerStatusUnknown

Indica que el estado del reproductor no se conoce todavía, ya que no ha intentado cargar nuevos recursos multimedia para la reproducción.

+0

Cambié el código para que '[player play]' se llame antes que 'player.status' y todavía esté saliendo' 0'. Debería haber mencionado en negrita en algún lugar de mi publicación original que el verdadero problema es que los sonidos no se están reproduciendo. – garethdn

Cuestiones relacionadas