iphone - How to Add sound to created Video From Images -


this code using creating video images further need put soundtrack video..any appriciated.

- (ibaction)savemovietolibrary {     imagevideopath = [nshomedirectory() stringbyappendingpathcomponent:[nsstring stringwithformat:@"documents/movie.mp4"]];      nslog(@"<><><><>=%@",imagevideopath);       testimagearray = [[nsarray alloc] initwithobjects:                       [uiimage imagenamed:@"image1.png"],                        [uiimage imagenamed:@"image2.png"],                        [uiimage imagenamed:@"image3.png"],                       [uiimage imagenamed:@"image4.png"],                       [uiimage imagenamed:@"image5.png"],                        [uiimage imagenamed:@"image6.png"],                        [uiimage imagenamed:@"image7.png"],                       [uiimage imagenamed:@"image9.png"],                        [uiimage imagenamed:@"image10.png"],                        [uiimage imagenamed:@"image11.png"],                        [uiimage imagenamed:@"image12.png"], nil];       //  nslog(@"testimagearray/=%@",testimagearray);       [self writeimageasmovie:testimagearray topath:imagevideopath size:cgsizemake(480, 320) duration:1]; }    -(void)writeimageasmovie:(nsarray *)array topath:(nsstring*)path size:(cgsize)size duration:(int)duration  {     nserror *error = nil;     avassetwriter *videowriter = [[avassetwriter alloc] initwithurl:[nsurl fileurlwithpath:path]                                                             filetype:avfiletypempeg4                                                                error:&error];     nsparameterassert(videowriter);      nsdictionary *videosettings = [nsdictionary dictionarywithobjectsandkeys:                                    avvideocodech264, avvideocodeckey,                                    [nsnumber numberwithint:size.width], avvideowidthkey,                                    [nsnumber numberwithint:size.height], avvideoheightkey,                                    nil];       avassetwriterinput* writerinput = [[avassetwriterinput assetwriterinputwithmediatype:avmediatypevideo                                                                           outputsettings:videosettings] retain];      avassetwriterinputpixelbufferadaptor *adaptor = [avassetwriterinputpixelbufferadaptor assetwriterinputpixelbufferadaptorwithassetwriterinput:writerinput                                                                                                                     sourcepixelbufferattributes:nil];      nsparameterassert(writerinput);     nsparameterassert([videowriter canaddinput:writerinput]);      [videowriter addinput:writerinput];       //start session:     [videowriter startwriting];     [videowriter startsessionatsourcetime:kcmtimezero];      cvpixelbufferref buffer = null;     buffer = [self pixelbufferfromcgimage:[[array objectatindex:0] cgimage] size:cgsizemake(480, 320)];     cvpixelbufferpoolcreatepixelbuffer (null, adaptor.pixelbufferpool, &buffer);       [adaptor appendpixelbuffer:buffer withpresentationtime:kcmtimezero];       int = 1;     while (1)      {         if(writerinput.readyformoremediadata){              cmtime frametime = cmtimemake( 0, 12);             cmtime lasttime=cmtimemake(i, 2);             cmtime presenttime=cmtimeadd(lasttime, frametime);              if (i >= [array count])              {                 buffer = null;             }                else              {                 buffer = [self pixelbufferfromcgimage:[[array objectatindex:i] cgimage] size:cgsizemake(480, 320)];             }                         if (buffer)              {                 // append buffer                 [adaptor appendpixelbuffer:buffer withpresentationtime:presenttime];                 i++;             }              else              {                  //finish session:                 [writerinput markasfinished];                 [videowriter finishwriting];                                  cvpixelbufferpoolrelease(adaptor.pixelbufferpool);                   [videowriter release];                 [writerinput release];                 nslog (@"done");                 break;             }         }     }      audiofilepath1=[[nsbundle mainbundle]pathforresource:@"video" oftype:@"mp3"];      nslog(@"%@",audiofilepath1);     nslog(@"video file path=%@",imagevideopath);      [self addaudiotofileatpath:imagevideopath andaudiopath:audiofilepath1]; }   - (cvpixelbufferref) pixelbufferfromcgimage: (cgimageref) image size:(cgsize) size{      nsdictionary *options = [nsdictionary dictionarywithobjectsandkeys:                              [nsnumber numberwithbool:yes], kcvpixelbuffercgimagecompatibilitykey,                              [nsnumber numberwithbool:yes], kcvpixelbuffercgbitmapcontextcompatibilitykey,                              nil];     cvpixelbufferref pxbuffer = null;      cvreturn status = cvpixelbuffercreate(kcfallocatordefault, size.width,                                           size.height, kcvpixelformattype_32argb, (cfdictionaryref) options,                                            &pxbuffer);     nsparameterassert(status == kcvreturnsuccess && pxbuffer != null);      cvpixelbufferlockbaseaddress(pxbuffer, 0);     void *pxdata = cvpixelbuffergetbaseaddress(pxbuffer);     nsparameterassert(pxdata != null);      cgcolorspaceref rgbcolorspace = cgcolorspacecreatedevicergb();     cgcontextref context = cgbitmapcontextcreate(pxdata, size.width,                                                  size.height, 8, 4*size.width, rgbcolorspace,                                                   kcgimagealphanoneskipfirst);     nsparameterassert(context);     cgcontextconcatctm(context, cgaffinetransformmakerotation(0));     cgcontextdrawimage(context, cgrectmake(0, 0, cgimagegetwidth(image),                                             cgimagegetheight(image)), image);     cgcolorspacerelease(rgbcolorspace);     cgcontextrelease(context);      cvpixelbufferunlockbaseaddress(pxbuffer, 0);      return pxbuffer; } 

use code:

avurlasset* audioasset = [[avurlasset alloc]initwithurl:audiourl options:nil]; avurlasset* videoasset = [[avurlasset alloc]initwithurl:videourl options:nil];  avmutablecomposition* mixcomposition = [avmutablecomposition composition];  avmutablecompositiontrack *compositioncommentarytrack = [mixcomposition addmutabletrackwithmediatype:avmediatypeaudio                                                                               preferredtrackid:kcmpersistenttrackid_invalid]; [compositioncommentarytrack inserttimerange:cmtimerangemake(kcmtimezero, audioasset.duration)                                  oftrack:[[audioasset trackswithmediatype:avmediatypeaudio] objectatindex:0]                                   attime:kcmtimezero error:nil];  avmutablecompositiontrack *compositionvideotrack = [mixcomposition addmutabletrackwithmediatype:avmediatypevideo                                                                                  preferredtrackid:kcmpersistenttrackid_invalid]; [compositionvideotrack inserttimerange:cmtimerangemake(kcmtimezero, videoasset.duration)                             oftrack:[[videoasset trackswithmediatype:avmediatypevideo] objectatindex:0]                              attime:kcmtimezero error:nil];  avassetexportsession* _assetexport = [[avassetexportsession alloc] initwithasset:mixcomposition                                                                  presetname:avassetexportpresetpassthrough];     nsstring* videoname = @"export.mov";  nsstring *exportpath = [nstemporarydirectory() stringbyappendingpathcomponent:videoname]; nsurl    *exporturl = [nsurl fileurlwithpath:exportpath]; //url of video created image  if ([[nsfilemanager defaultmanager] fileexistsatpath:exportpath])  {    [[nsfilemanager defaultmanager] removeitematpath:exportpath error:nil]; }  _assetexport.outputfiletype = @"com.apple.quicktime-movie"; dlog(@"file type %@",_assetexport.outputfiletype); _assetexport.outputurl = exporturl; _assetexport.shouldoptimizefornetworkuse = yes;  [_assetexport exportasynchronouslywithcompletionhandler: ^(void ) {               // completion code here  }         }  ]; 

hope useful.


Comments

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -