2015-10-11 32 views
5

'dan sonra AVPlayer ile video oynatın AVFoundation ile snapchat benzeri özel bir kamera oluşturdum. Resim yönü çalışır: fotoğraf çeker ve resmi gösteririm. Şimdi bir video çekmeye ve videoyu görüntülemeye çalışıyorum.AVCaptureMovieFileOutput

Başarılı bir video dosyasını yakaladım, test ettim ve MPMoviePlayer ile çalışıyorum, ancak AVPlayer'da çalamıyorum.

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

Bu benim ilk kez AVFoundation & AVPlayer kullanıyor. Varlık yüklendikten sonra [self.player play] yapamam mı? Öğenin durumunu AVPlayerItemStatusReadyToPlay olmak için beklemem gerekiyor mu?


HATA: "İstenen URL bu sunucuda bulunamadı" Hata Alan = NSURLErrorDomain Kodu = -1100

cevap

0

Video oynatmak için AVPlayerLayer kullanıyorum. Aşağıdaki kodu kullandım ve iyi çalıştı.

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

Bu yardımcı olabilir umarım.