2011-05-31 8 views
6

HI Estoy usando AVPlayer para reproducir el video lentamente cuadro por cuadro. Usé esta codificación para eso. No pude reproducir el video. Por favor, nota mi problema.AVPlayer no está reproduciendo el archivo de video

UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 440)]; 
newView.backgroundColor = [UIColor yellowColor]; 

NSString *videoName = [fileNameArray objectAtIndex:indexPath.section]; 
NSString *url = [Utilities documentsPath:[NSString stringWithFormat:@"OSC/%@/%@.mov",videoName,videoName]]; 

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:url]]; 
//AVPlayer *avPlayer = [[AVPlayer playerWithURL:[NSURL URLWithString:url]] retain]; 
AVPlayer *avPlayer = [[AVPlayer playerWithPlayerItem:playerItem] retain]; 
AVPlayerLayer *avPlayerLayer = [[AVPlayerLayer playerLayerWithPlayer:avPlayer] retain]; 

avPlayerLayer.frame = self.view.frame; 
[newView.layer addSublayer:avPlayerLayer]; 
[self.view addSubview:newView]; 
[avPlayer play]; 

avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone; 

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(playerItemDidReachEnd:) 
              name:AVPlayerItemDidPlayToEndTimeNotification 
              object:[avPlayer currentItem]]; 
+0

Claro, por favor dar alguna sugerencia sobre mi problema por favor .... – Ganesh

Respuesta

4

No sé acerca de la lentitud fotograma a fotograma, pero usted está haciendo algunas cosas que no necesita hacer. En la documentación de iPhone, los chicos de Apple se metieron por completo en la administración de la memoria, haciéndola mucho más compleja de lo que debería ser, así que te diré las cosas clave que la hacen funcionar:

Primero, retenga el reproductor, no la capa. Si no sabe por qué, lea un libro o el Manual de vistas. (Que está lleno de errores tipográficos de estilo homónimo, pero es más fácil que comprar un libro grueso).

En segundo lugar, no ha lanzado la capa y usa setPlayer :, la línea exacta está dentro de la documentación de Apple. Tienes que convertir self.layer usando un tipocast.

+1

se olvidó de señalar, la referencia de clase AVPlayer tiene algunos errores tipográficos interesantes también, como una lista de las constantes aspectRatio luego decir el valor por defecto es "jugador", que no tiene nada que ver con la documentación. No les estoy informando porque son unos idiotas por esas cosas, pero aún pueden resolverlo – fightingshadow

+0

Gracias e hice mi proceso con un código de muestra. – Ganesh

11

Como utiliza el archivo local, es mejor usar [NSURL fileURLWithPath:url] para convertir NSString en NSURL. Así que cambiar el código para:

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:url]]; 
+1

Esto debe votarse muchas veces más. El uso de URLWithString dará como resultado errores silenciosos - error == nil, player.status == AVPlayerStatusUnknown. Al cambiar a fileURLWithPath, se resuelve inmediatamente el problema de no reproducción. – mahboudz

+1

@mahboudz estuvo de acuerdo! Esto resolvió mi problema también. ¡Gracias! – unicornherder

+0

Estaba usando '[NSURL urlWithString:]', gracias! – Mike

Cuestiones relacionadas