2011-12-26 45 views
7

AVAssetReader kullanarak video dosyasından tek tek kare tampon alıyorum ve çerçeve üzerinde bir işlem yaptıktan sonra AVAssetWritter kullanarak yeni kareyi temp dosyasına kaydediyorum. Artık tüm yeni çerçevenin kaydedildiği geçici dosya yoluna sahibim tek tek Zaman çerçeveleri sürekli olarak geçici dosyaya eklerken video oynatmanın herhangi bir yolu var mı? BuradaAVPlayer kullanarak video oynatma

asla çalışır bloğunun içinde (çerçeveler sürekli ekliyor olduğu) geçici yolundan

- (void)loadAssetFromFile { 

    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:[(mMediaReader.mCameraRecorder) tempVideoFilePath ]] options:nil]; 
    NSString *tracksKey = @"tracks"; 

    [asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:tracksKey] completionHandler: 
    ^{ 

     // Completion handler block. 
     dispatch_async(dispatch_get_main_queue(), 
         ^{ 
          NSError *error = nil; 
          AVKeyValueStatus status = [asset statusOfValueForKey:tracksKey error:&error]; 

          if (status == AVKeyValueStatusLoaded) { 
           self.mPlayerItem = [AVPlayerItem playerItemWithAsset:asset]; 
           [mPlayerItem addObserver:self forKeyPath:@"status" 
               options:0 context:&ItemStatusContext]; 
           [[NSNotificationCenter defaultCenter] addObserver:self 
                     selector:@selector(playerItemDidReachEnd:) 
                      name:AVPlayerItemDidPlayToEndTimeNotification 
                      object:mPlayerItem]; 
           self.mPlayer = [AVPlayer playerWithPlayerItem:mPlayerItem]; 
           [mPlayerView setPlayer:mPlayer]; 
           [self play:nil]; 
          } 
          else { 
           // You should deal with the error appropriately. 
           NSLog(@"The asset's tracks were not loaded:\n%@", [error localizedDescription]); 
          } 
         }); 
    }]; 
} 

- (IBAction)play:sender { 
    [mPlayer play]; 
} 

video oynatmak için kod Ve kodudur.

+0

Önerinizi mi arıyorsunuz? Bu – iOSPawan

+0

hala bu – iOSPawan

+0

için çözüm arıyor Bu loadValuesAsynchronouslyForKeys: completionHandler: '' AVMetaDataItem', 'AVURLAsset' veya' AVAsset''de bir yöntem gibi görünüyor. 'NSURL' nesnesinin 'nil' olmadığını doğrulayabilir misiniz? – sho

cevap

4

Videoyu birden çok alt videoya bölmek benim için çalıştı.

Tam bir videoda tek bir geçici yolla kaydetmek yerine ne yaptım. Bu videoyu birden çok alt videoya böldüm ve ardından AVPlayer'un AVPlayerItem özelliğini değiştirdim.

Artık işlevsellik video akışıyla aynı şekilde çalışıyor. :)

+0

çok iyi bir çözüm gibi görünüyor – Magnus

1

Ayrıca, AVAssetReader'ın bir CGImage'a ve ardından bir UIImage'a döndüğü CMSampleBuffer'ı dönüştürebilir ve bunu, orijinal video dosyasından çekildikçe çerçeveleri oluşturmak için bir UIImageView'da görüntüleyebilirsiniz.

AVFoundation Programming Guide'un içinde bu dönüşümü nasıl yapacağınızı gösteren örnek bir kod vardır.

İlgili konular