2015-10-11 14 views
5

Ho creato una videocamera personalizzata simile allo snapchat con AVFoundation. L'aspetto dell'immagine funziona: scatta una foto e visualizzo l'immagine. Ora sto provando a fare un video e visualizzare il video.Riproduci video con AVPlayer dopo AVCaptureMovieFileOutput

Ho catturato un file video di successo, testato e funziona con MPMoviePlayer, ma non riesco a riprodurlo su 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]; 
       } 
      }); 
     }]; 
    } 

Questa è la mia prima volta con AVFoundation & AVPlayer. È che non posso [self.player play] dopo che l'asset viene caricato correttamente? Devo aspettare che lo stato dell'articolo sia AVPlayerItemStatusReadyToPlay?


errore: "L'URL richiesto non è stato trovato su questo server" errore di dominio = Codice NSURLErrorDomain = -1100

risposta

0

Sto utilizzando AVPlayerLayer per la riproduzione di video. Ho usato il codice qui sotto e ha funzionato bene.

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]; 

Spero che questo possa aiutarti.

Problemi correlati