2015-10-11 10 views
5

Ich habe eine benutzerdefinierte Kamera ähnlich Snapchat mit AVFoundation erstellt. Der Bildaspekt funktioniert: Machen Sie ein Bild und ich zeige das Bild an. Jetzt versuche ich ein Video aufzunehmen und das Video zu zeigen.Video mit AVPlayer nach AVCaptureMovieFileOutput abspielen

Ich habe eine erfolgreiche Videodatei erfasst, getestet und funktioniert mit MPMoviePlayer, kann sie aber nicht auf AVPlayer wiedergeben.

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

Dies ist mein erstes Mal mit AVFoundation & AVPlayer. Kann ich [self.player play] nicht nach dem Asset laden? Ich muss warten, bis der Status des Artikels AVPlayerItemStatusReadyToPlay ist?


ERROR: "Die angeforderte URL nicht auf diesem Server nicht gefunden wurde" Fehler Domain = NSURLErrorDomain Code = -1100

Antwort

0

Ich benutze AVPlayerLayer zum Abspielen von Videos. Ich habe den folgenden Code verwendet und es hat gut funktioniert.

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

Hoffe, dass dies Ihnen helfen kann.