Reproducir video con AVPlayer después de AVCaptureMovieFileOutput

He creado una camera personalizada similar a snapchat con AVFoundation. El aspecto de la image funciona: tome una fotografía y muestre la image. Ahora estoy tratando de tomar un video y mostrar el video.

He capturado un file de video exitoso, probado y funciona con MPMoviePlayer, pero no puedo reproducirlo en AVPlayer.

- (void)takeVideoAction:(id)sender { NSString *outputPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"output.mp4"]; NSFileManager *manager = [[NSFileManager alloc] init]; if ([manager fileExistsAtPath:outputPath]){ [manager removeItemAtPath:outputPath error:nil]; } [movieFileOutput startRecordingToOutputFileURL:[NSURL fileURLWithPath:outputPath] recordingDelegate:self]; } 

 - (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error{ AVURLAsset *asset = [AVURLAsset URLAssetWithURL:outputFileURL options:nil]; [asset loadValuesAsynchronouslyForKeys:@[@"tracks"] completionHandler:^{ dispatch_async(dispatch_get_main_queue(), ^{ NSError *error = nil; if([asset statusOfValueForKey:@"tracks" error:&error] == AVKeyValueStatusFailed){ NSLog(@"error: %@", [error description]); } else{ self.playerItem = [AVPlayerItem playerItemWithAsset:asset]; self.player = [AVPlayer playerWithPlayerItem:self.playerItem]; self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player]; self.playerLayer.frame = self.view.bounds; [self.view.layer addSublayer:self.playerLayer]; [self.player play]; } }); }]; } 

Esta es la primera vez que uso AVFoundation y AVPlayer. ¿Es que no puedo [self.player play] después de que el activo se carga? Necesito esperar a que el estado del elemento sea AVPlayerItemStatusReadyToPlay ?


ERROR: Error Domain = NSURLErrorDomain Code = -1100 "La URL solicitada no se encontró en este server".

Estoy usando AVPlayerLayer para reproducir video. Utilicé el código siguiente y funcionó bien.

 AVPlayer *avPlayerq = [AVPlayer playerWithURL:NSURL]; avPlayerq.actionAtItemEnd = AVPlayerActionAtItemEndNone; AVPlayerLayer *videoLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayerq]; videoLayer.frame= self.view.bounds; videoLayer.videoGravity=AVLayerVideoGravityResizeAspectFill; [self.view.layer addSublayer:videoLayer]; [avPlayerq play]; 

Espero que esto te pueda ayudar.