2011-12-26 20 views
7

Ricevo il frame buffer uno per uno dal file video utilizzando AVAssetReader e facendo qualche operazione sul frame e quindi salvando il nuovo frame nel file temporaneo utilizzando AVAssetWritter. Ora ho il percorso file temporaneo in cui tutto il nuovo frame sta salvando uno per uno. C'è un modo per riprodurre video al momento in cui i frame vengono aggiunti continuamente al file temporaneo ??Riprodurre video utilizzando AVPlayer

qui è il codice per riprodurre video da percorso temp (dove fotogrammi è continuamente aggiungendo)

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

E il codice all'interno del blocco non viene eseguito.

+0

cercando il tuo suggerimento ?? – iOSPawan

+0

ancora in cerca di una soluzione per questo – iOSPawan

+0

Assomiglia a 'loadValuesAsynchronouslyForKeys: completionHandler:' è un metodo su 'AVMetaDataItem', non 'AVURLAsset' o' AVAsset'. Puoi confermare che l'oggetto 'NSURL' non è' nil'? Correzione – sho

risposta

4

La divisione del video in più video secondari ha funzionato per me.

Cosa ho fatto invece di salvare il video completo in un percorso temporaneo. Ho diviso il video in più video secondari, quindi ho sostituito la proprietà AVPlayerItem di AVPlayer di conseguenza.

Così ora la funzionalità funziona come lo streaming video. :)

+0

sembra un'ottima soluzione – Magnus

1

È inoltre possibile convertire il CMSampleBuffer restituito da AVAssetReader in un CGImage e quindi in una UIImage e visualizzarlo in un UIImageView, per eseguire il rendering dei fotogrammi non appena vengono estratti dal file video originale.

C'è un codice di esempio all'interno dello AVFoundation Programming Guide che mostra come eseguire questa conversione.

Problemi correlati