2013-09-29 27 views
5

Pracuję nad modyfikacją niektórych filmów wideo za pomocą AVMutableVideoCompositionLayerInstruction w pakiecie SDK iOS7.iOS7 AVMutableVideoCompositionLayerInstruction powoduje zatrzymanie ramki wideo

Następujący kod używany do pracy na iOS 6.1.3, ale w iOS7 wideo jest zamrożone na pierwszej klatce (chociaż nadal słyszę dźwięk w porządku). Pozbyłem się wszystkich rzeczywistych transformacji, które stosowałem, aby zweryfikować, że samo dodanie kompozycji wideo powoduje problemy.

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; 

Jeśli nie ustawić atrybut exportSessionvideoComposition wówczas zapisy wideo, ok, ale nie można zastosować żadnych przekształceń. Ktoś wie, co może być przyczyną tego?

Dzięki.

+0

To samo tutaj, bez pomocy w Internecie –

Odpowiedz

0

Dobrym sposobem na zbadanie problemów z kompozycją wideo jest użycie [AVMutableVideoComposition videoCompositionWithPropertiesOfAsset:asset]. Zwrócony AVMutableVideoComposition powinien działać poprawnie. Następnie możesz porównać zawartość tablicy instructions z instrukcjami.

Aby zwiększyć poziom zamieszania, asset może być również AVComposition. Myślę, że zespół AVFoundation nie spisał się najlepiej, gdy nazywał te rzeczy ...

1

Mam również problemy z AVMutableVideoCompositionLayerInstruction i miks wideo z CALayers. Po kilku dniach próbowania na różne sposoby zdaję sobie sprawę, że czas aktywów jest dość ważny. Właściwym sposobem, aby dowiedzieć się czas każdego składnika aktywów jest użyć właściwości:

loadValuesAsynchronouslyForKeys: @ [@ "czas"]

//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. 
    }]; 

Nadzieja to pomaga każdemu z tej samej kwestii .