ios - exportAsynchronouslyWithCompletionHandler calls once -


i tried asking before, got no responses. i'll try again. i'm trying lay images on top of video (like doodle, or border). call "addanimation" method 3 times, , runs, exportasynchronouslywithcompletionhandler gets called on first try. ideas?

 - (void)addanimation:(uiimage *)background for:(nsstring *)socialsite {  // 1 - load asset avurlasset* videoasset = [avurlasset urlassetwithurl:self.videourl options:nil];  // 2 - create avmutablecomposition object avmutablecomposition* mixcomposition = [avmutablecomposition composition];  // 2.1 - videotrack avmutablecompositiontrack *compositionvideotrack = [mixcomposition addmutabletrackwithmediatype:avmediatypevideo preferredtrackid:kcmpersistenttrackid_invalid]; // 2.2 - audiotrack avmutablecompositiontrack *compositionaudiotrack = [mixcomposition addmutabletrackwithmediatype:avmediatypeaudio preferredtrackid:kcmpersistenttrackid_invalid];   //if either of them nil, alloc if( (self.clipvideotrack == nil) || (self.clipaudiotrack == nil)){      self.clipvideotrack = [[videoasset trackswithmediatype:avmediatypevideo] objectatindex:0];     self.clipaudiotrack = [[videoasset trackswithmediatype:avmediatypeaudio] objectatindex:0]; }   [compositionvideotrack inserttimerange:cmtimerangemake(kcmtimezero, videoasset.duration) oftrack:self.clipvideotrack attime:kcmtimezero error:nil]; [compositionaudiotrack inserttimerange:cmtimerangemake(kcmtimezero, videoasset.duration) oftrack:self.clipaudiotrack attime:kcmtimezero error:nil]; cgsize videosize = [self.clipvideotrack naturalsize];  // 3 - background layer uiimage *myimage = background; calayer *alayer = [calayer layer];  if(socialsite == nil) {     alayer.contents = (id)myimage.cgimage;     if(__iphone_4_inch)         alayer.frame = cgrectmake(0, 0, 640, 640);     else         alayer.frame = cgrectmake(0, 0, 320, 320); } else{     alayer.contents = (id)myimage.cgimage;     alayer.frame = cgrectmake(0, 0, myimage.size.width, myimage.size.height); }  // 3.1 - video layer calayer *parentlayer = [calayer layer]; calayer *videolayer = [calayer layer]; parentlayer.frame = cgrectmake(0, 0, myimage.size.width, myimage.size.height); if(socialsite == nil){     videolayer.frame = cgrectmake(0, 0, videosize.width, videosize.height); } else{     videolayer.frame = cgrectmake(0, 110, videosize.width, videosize.height);  } [parentlayer addsublayer:videolayer]; [parentlayer addsublayer:alayer];   // 3.2 - add instructions avmutablevideocomposition* videocomp = [avmutablevideocomposition videocomposition]; videocomp.rendersize = videosize; videocomp.frameduration = cmtimemake(1, 30); videocomp.animationtool = [avvideocompositioncoreanimationtool videocompositioncoreanimationtoolwithpostprocessingasvideolayer:videolayer inlayer:parentlayer];  avmutablevideocompositioninstruction *instruction = [avmutablevideocompositioninstruction videocompositioninstruction]; instruction.timerange = cmtimerangemake(kcmtimezero, [mixcomposition duration]); avassettrack *videotrack = [[mixcomposition trackswithmediatype:avmediatypevideo] objectatindex:0];   avmutablevideocompositionlayerinstruction* layerinstruction = [avmutablevideocompositionlayerinstruction videocompositionlayerinstructionwithassettrack:videotrack]; instruction.layerinstructions = [nsarray arraywithobject:layerinstruction]; videocomp.instructions = [nsarray arraywithobject: instruction];  avassetexportsession *assetexport = [[avassetexportsession alloc] initwithasset:mixcomposition presetname:avassetexportpresethighestquality];//avassetexportpresetpassthrough assetexport.videocomposition = videocomp;   // 4 - path nsarray *paths = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes); nsstring *documentsdirectory = [paths objectatindex:0]; nsstring *mypathdocs =  [documentsdirectory stringbyappendingpathcomponent:                          [nsstring stringwithformat:@"finalvideo-%d.mov",arc4random() % 1000]]; nsurl *url = [nsurl fileurlwithpath:mypathdocs];  mypathdocs = [mypathdocs stringbyaddingpercentescapesusingencoding:nsutf8stringencoding];   // 5 - create exporter avassetexportsession *exporter = [[avassetexportsession alloc] initwithasset:mixcomposition                                                                   presetname:avassetexportpresethighestquality];  exporter.outputurl=url; exporter.outputfiletype = avfiletypequicktimemovie; exporter.shouldoptimizefornetworkuse = yes; exporter.videocomposition = videocomp;  [exporter exportasynchronouslywithcompletionhandler:^ {         nsdata *video;          /*********************************** instagram *********************************************/         if([socialsite isequaltostring:@"instagram"]){             video = [nsdata datawithcontentsofurl:exporter.outputurl];             [mpocreatempmanager sharedmanager].createdmarcopolo.instagramvideo = video;             nslog(@"ig size (in createviewcontroller): %lu",(unsigned long)[mpocreatempmanager sharedmanager].createdmarcopolo.instagramvideo.length);         }          /*********************************** fb/twitter *********************************************/         else if ([socialsite isequaltostring:@"facebook"]){             video = [nsdata datawithcontentsofurl:exporter.outputurl];             [mpocreatempmanager sharedmanager].createdmarcopolo.fbtwittervideo = video;             nslog(@"fb size (in createviewcontroller): %lu",(unsigned long)[mpocreatempmanager sharedmanager].createdmarcopolo.fbtwittervideo.length);         }          /***********************************   doodle   *********************************************/         else if (socialsite == nil){             video = [nsdata datawithcontentsofurl:exporter.outputurl];             [mpocreatempmanager sharedmanager].createdmarcopolo.video = video;             [mpocreatempmanager sharedmanager].createdmarcopolo.image = [self loadimage:exporter.outputurl];             nslog(@"*******************************doodle done*************************************");         } }]; }  


Comments

Popular posts from this blog

javascript - RequestAnimationFrame not working when exiting fullscreen switching space on Safari -

c# - How do I get the Nth largest element from a list with duplicates, using LINQ? -

jsp - "Sending a redirect is forbidden after the response has been committed" in sendRedirect -