2013-09-29 2 views
5

Sto lavorando con la modifica di alcuni video tramite AVMutableVideoCompositionLayerInstruction nell'SDK iOS7.iOS7 AVMutableVideoCompositionLayerInstruction causa il blocco del fotogramma video

Il seguente codice utilizzato per funzionare su iOS 6.1.3, ma in iOS7 il video è congelato sul primo fotogramma (sebbene possa ancora sentire l'audio ok). Mi sono liberato di tutte le trasformazioni che stavo applicando per verificare che l'aggiunta di una composizione video da sola causasse problemi.

AVURLAsset* videoAsset = [[AVURLAsset alloc] initWithURL:inputFileURL options:NULL]; 
AVAssetTrack *videoAssetTrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 

AVMutableVideoCompositionLayerInstruction *layerInstruction = 
[AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoAssetTrack]; 

AVMutableVideoComposition *mainComposition = [AVMutableVideoComposition videoComposition]; 
AVMutableVideoCompositionInstruction *mainInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction]; 
mainInstruction.layerInstructions = [NSArray arrayWithObject:layerInstruction]; 
mainInstruction.timeRange = CMTimeRangeMake(kCMTimeZero, videoAsset.duration); 
mainComposition.instructions = [NSArray arrayWithObject:mainInstruction]; 
mainComposition.frameDuration = videoAsset.duration; 
mainComposition.renderSize = CGSizeMake(320, 320); 

... 
exportSession.videoComposition = mainComposition; 

Se non impostare l'attributo di videoCompositionexportSession poi le registrazioni video ok, ma non posso applicare le trasformazioni. Qualcuno sa che cosa potrebbe causare questo?

Grazie.

+0

Lo stesso qui, nessun aiuto su Internet –

risposta

0

Un buon modo per eseguire il debug dei problemi con la composizione video è utilizzare [AVMutableVideoComposition videoCompositionWithPropertiesOfAsset:asset]. Il AVMutableVideoComposition restituito dovrebbe funzionare correttamente. Quindi puoi confrontare il contenuto dell'array instructions con le tue istruzioni.

Per aumentare i livelli di confusione, lo asset può anche essere un AVComposition. Penso che il team AVFoundation non abbia fatto il miglior lavoro quando ha nominato queste cose ....

1

Ho anche avuto difficoltà con AVMutableVideoCompositionLayerInstruction e mixare video con CALayers. Dopo alcuni giorni provando diversi modi, quello che realizzo è che il tempo delle risorse è piuttosto importante. Il modo corretto per scoprire il tempo di ciascuna attività è utilizzare la proprietà:

loadValuesAsynchronouslyForKeys: @ [@ "durata"]

//Asset url 
    NSURL *assetUrl = [NSURL fileURLWithPath:_firstVideoFilePath]; 

    //audio/video assets 
    AVURLAsset * videoAsset = [[AVURLAsset alloc]initWithURL:assetUrl options:nil]; 

    //var to store the duration 
    CMTime __block durationTime; 

    //And here we'll be able to proper get the asset duration 
    [videoAsset loadValuesAsynchronouslyForKeys:@[@"duration"] completionHandler: ^{ 
     Float64 durationSeconds = CMTimeGetSeconds([videoAsset duration]); 
     durationTime = [videoAsset duration]; 
     //At this point you have the proper asset duration value, you can start any video processing from here. 
    }]; 

Spero che questo aiuti a chiunque con lo stesso problema .