2010-08-03 2 views
3

Структура AVFoundation предоставляет класс AVMutableVideoComposition (изменяемый вариант AVVideoComposition). Похоже, вы можете визуализировать CoreAnimations непосредственно экземпляру этого класса для создания видео, но я не знаю, как сохранить композицию в файле или как работать с ней вообще. Следующий код, вызываемый из UIViewController, как представляется, работает для создания композиции и анимации, но, ну, я не понимаю, как работать с композицией. Любая помощь или руководство получают большую оценку.Нужны подсказки для использования AVMutableVideoComposition iPhone SDK

static AVMutableVideoComposition *videoComposition = nil; 
- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)flag { 
//Do something with videoComposition here... how to save it to a file? 
NSLog(@"videoComposition: %@", videoComposition); 
[videoComposition release]; videoComposition = nil; 
} 

- (IBAction)createVideoComposition:(id)sender { 
AVVideoCompositionCoreAnimationTool *videoCompositionCoreAnimationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:self.view.layer inLayer:self.view.layer]; 
videoComposition = [[AVMutableVideoComposition videoComposition] retain]; 
[videoComposition setRenderSize:CGSizeMake(320.0, 480.0)]; 
[videoComposition setRenderScale:1.0]; 
[videoComposition setFrameDuration:CMTimeMake(1, 10)]; 
[videoComposition setAnimationTool:videoCompositionCoreAnimationTool]; 
//add a basic animation to shake the controller's view 
CAKeyframeAnimation *shakeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
shakeAnimation.delegate = self; 
shakeAnimation.removedOnCompletion = YES; 
shakeAnimation.duration = 0.5; 
CGMutablePathRef path = CGPathCreateMutable(); 
CGFloat midX = self.view.center.x; 
CGFloat midY = self.view.center.y; 
CGPathMoveToPoint(path, nil, midX, midY); 
CGPathAddLineToPoint(path, nil, midX + 10.0, midY); 
CGPathAddLineToPoint(path, nil, midX - 20.0, midY); 
CGPathAddLineToPoint(path, nil, midX + 15.0, midY); 
CGPathAddLineToPoint(path, nil, midX - 5.0, midY); 
CGPathAddLineToPoint(path, nil, midX, midY); 
shakeAnimation.path = path; 
CFRelease(path); 
[self.view.layer addAnimation:shakeAnimation forKey:@"shakeAnimation"]; 
} 

Спасибо, Jon

ответ

2

Не уверен, если это помогает.

AVAssetExportSession *session = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetHighestQuality]; 
    session.videoComposition = videoComposition; 
    session.outputURL = outputURL; 
    session.outputFileType = AVFileTypeQuickTimeMovie; 
    [session exportAsynchronouslyWithCompletionHandler: 
     ^(void) 
{ 
     NSLog(@"TADA!") 
    }]; 
+0

спасибо. Это приближает меня, но все еще не совсем там. Что такое «состав» актива? Если я использую: 'AVMutableComposition * composition = [Композиция AVMutableComposition];' , то компилятор жалуется, что videoComposition не содержит никаких инструкций. Я не знаю, какие инструкции добавить. Жаль, что ты толстый – Jon

+1

Вы проверили проект AVEditDemo от WWDC 2010? Вы можете найти его на странице разработчика apple или загрузить здесь: http://rghost.net/2649255 В этом проекте вы можете найти пример использования AVVideoCompositionCoreAnimationTool с функцией экспорта. Надеюсь, поможет. – Steve