मैं अपने चित्र अनुक्रम को एक क्विकटाइम वीडियो में निर्यात करने का सही तरीका ढूंढ रहा हूं।कोरएनीमेशन, AVFoundation और वीडियो निर्यात करने की क्षमता
मुझे पता है कि एवी फाउंडेशन में वीडियो विलय करने या पुन: संयोजित करने की क्षमता है और ऑडियो ट्रैक को एक वीडियो एसेट बनाने की क्षमता भी है।
अब ... मेरा लक्ष्य थोड़ा अलग है। मैं खरोंच से एक वीडियो बनाना चाहता हूँ। मेरे पास UIImage का एक सेट है और मुझे उन सभी को एक ही वीडियो में प्रस्तुत करने की आवश्यकता है। मैंने एवी फाउंडेशन के बारे में सभी ऐप्पल दस्तावेज़ीकरण को पढ़ा और मुझे AVVideoCompositionCoreAnimationTool क्लास मिला जिसमें कोरएनीमेशन लेने और इसे वीडियो के रूप में पुनः नामित करने की क्षमता है। मैंने ऐप्पल द्वारा प्रदान की गई AVEditDemo प्रोजेक्ट की भी जांच की लेकिन कुछ ऐसा प्रोजेक्ट पर काम नहीं कर रहा है।
यहाँ मेरी कदम:
1) मैं CoreAnimation लेयर
CALayer *animationLayer = [CALayer layer];
[animationLayer setFrame:CGRectMake(0, 0, 1024, 768)];
CALayer *backgroundLayer = [CALayer layer];
[backgroundLayer setFrame:animationLayer.frame];
[backgroundLayer setBackgroundColor:[UIColor blackColor].CGColor];
CALayer *anImageLayer = [CALayer layer];
[anImageLayer setFrame:animationLayer.frame];
CAKeyframeAnimation *changeImageAnimation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];
[changeImageAnimation setDelegate:self];
changeImageAnimation.duration = [[albumSettings transitionTime] floatValue] * [uiImagesArray count];
changeImageAnimation.repeatCount = 1;
changeImageAnimation.values = [NSArray arrayWithArray:uiImagesArray];
changeImageAnimation.removedOnCompletion = YES;
[anImageLayer addAnimation:changeImageAnimation forKey:nil];
[animationLayer addSublayer:anImageLayer];
2) से मैं AVComposition
AVMutableComposition *composition = [AVMutableComposition composition];
composition.naturalSize = CGSizeMake(1024, 768);
CALayer *wrapLayer = [CALayer layer];
wrapLayer.frame = CGRectMake(0, 0, 1024, 768);
CALayer *videoLayer = [CALayer layer];
videoLayer.frame = CGRectMake(0, 0, 1024, 768);
[wrapLayer addSublayer:animationLayer];
[wrapLayer addSublayer:videoLayer];
AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoComposition];
AVMutableVideoCompositionInstruction *videoCompositionInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
videoCompositionInstruction.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMake([imagesFilePath count] * [[albumSettings transitionTime] intValue] * 25, 25));
AVMutableVideoCompositionLayerInstruction *layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstruction];
videoCompositionInstruction.layerInstructions = [NSArray arrayWithObject:layerInstruction];
videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:wrapLayer];
videoComposition.frameDuration = CMTimeMake(1, 25); // 25 fps
videoComposition.renderSize = CGSizeMake(1024, 768);
videoComposition.instructions = [NSArray arrayWithObject:videoCompositionInstruction];
3) का दृष्टांत मैं पथ
दस्तावेज़ के लिए वीडियो निर्यात बनानेAVAssetExportSession *session = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetLowQuality];
session.videoComposition = videoComposition;
NSString *filePath = nil;
filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
filePath = [filePath stringByAppendingPathComponent:@"Output.mov"];
session.outputURL = [NSURL fileURLWithPath:filePath];
session.outputFileType = AVFileTypeQuickTimeMovie;
[session exportAsynchronouslyWithCompletionHandler:^
{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Export Finished: %@", session.error);
if (session.error) {
[[NSFileManager defaultManager] removeItemAtPath:filePath error:NULL];
}
});
}];
पर और एक यह त्रुटि प्राप्त निर्यात की:
निर्यात समाप्त: त्रुटि डोमेन = AVFoundationErrorDomain कोड = -11,822 "खोलें नहीं कर सकते" UserInfo = 0x49a97c0 {। NSLocalizedFailureReason = यह मीडिया प्रारूप समर्थित नहीं है, NSLocalizedDescription = खोलें नहीं कर सकते} AVErrorInvalidSourceMedia = -11,822,
AVErrorInvalidSourceMedia आपरेशन क्योंकि कुछ स्रोत मीडिया पढ़ा नहीं जा सका पूरी नहीं हो सकी:
मैं इसे अंदर प्रलेखन पाया।
मुझे पूरी तरह से यकीन है कि मेरे द्वारा निर्मित कोरएनीमेशन सही है क्योंकि मैंने इसे टेस्ट लेयर में प्रस्तुत किया है और मैं एनीमेशन प्रगति को सही ढंग से देख सकता हूं।
कोई भी मेरी समझ में मदद कर सकता है कि मेरी त्रुटि कहां है?
कोशिश पोस्टिंग, या एक फाइल एक CALayer जोड़ने के लिए पूरी तरह से काले फ्रेम में शामिल है कि जरूरत है ऐप्पल के साथ बग रिपोर्ट। वे आपको बता सकते हैं कि आप क्या गलत कर रहे हैं। –