Audio Mixing in iOS using AVFoundation doesnt work -


i trying stitch bunch of videos , add music on video in ios. audio added using avmutableaudiomix. when video exported audio mix missing. here how code looks :

- (void)mergevideos:(nsarray *)videos{     avmutablecomposition *mixcomposition = [[avmutablecomposition alloc] init];     avmutablecompositiontrack *videotrack = [mixcomposition addmutabletrackwithmediatype:avmediatypevideo                                                                         preferredtrackid:kcmpersistenttrackid_invalid];     avmutablecompositiontrack *audiotrack = [mixcomposition addmutabletrackwithmediatype:avmediatypeaudio                                                                         preferredtrackid:kcmpersistenttrackid_invalid];     cmtime currenttime = kcmtimezero;     (avasset *asset in videos) {         // 2 - video track         [videotrack inserttimerange:cmtimerangemake(kcmtimezero, asset.duration)                             oftrack:[[asset trackswithmediatype:avmediatypevideo] objectatindex:0] attime:currenttime error:nil];         [audiotrack inserttimerange:cmtimerangemake(kcmtimezero, asset.duration)                             oftrack:[[asset trackswithmediatype:avmediatypeaudio] objectatindex:0] attime:currenttime error:nil];         currenttime = cmtimeadd(currenttime, asset.duration);     }         // 4 - path     nsarray *paths = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes);     nsstring *documentsdirectory = [paths objectatindex:0];     nsstring *mypathdocs =  [documentsdirectory stringbyappendingpathcomponent:                              [nsstring stringwithformat:@"mergevideo-%d.mp4",arc4random() % 1000]];     nsurl *url = [nsurl fileurlwithpath:mypathdocs];      // 5 - create exporter     nsarray *compatiblepresets = [avassetexportsession exportpresetscompatiblewithasset:mixcomposition];     nsstring *quality = avassetexportpresethighestquality;     //load audio     avmutableaudiomix *audiomix = nil;     nsurl *audiourl = [self loadaudiofile];// gives url .caf file bundle     if (audiourl) {         avurlasset *audioasset = [avurlasset assetwithurl:audiourl];         avassettrack *atrack =  (avassettrack *)[[audioasset trackswithmediatype:avmediatypeaudio] firstobject];          avmutableaudiomixinputparameters *trackmix =         [avmutableaudiomixinputparameters audiomixinputparameterswithtrack:atrack];          [trackmix setvolumerampfromstartvolume:0 toendvolume:1 timerange:          cmtimerangemake(cmtimemakewithseconds(0, 1), cmtimemakewithseconds(3, 1))];         [trackmix setvolume:1.0 attime:kcmtimezero];         avmutableaudiomix *audiomix = [avmutableaudiomix audiomix];         audiomix.inputparameters = [nsarray arraywithobject:trackmix];     }      avassetexportsession *exporter = [[avassetexportsession alloc] initwithasset:mixcomposition                                                                       presetname:quality];     if (audiomix) {         exporter.audiomix = audiomix;     }     exporter.outputurl=url;     exporter.outputfiletype = avfiletypempeg4;     exporter.shouldoptimizefornetworkuse = yes;     [exporter exportasynchronouslywithcompletionhandler:^{         dispatch_async(dispatch_get_main_queue(), ^{             [self exportdidfinish:exporter];         });     }]; } 

there no error while executing. music contained in .caf file doesnt mixed exported file. idea going on?

you haven't inserted audio .caf file avmutablecompositiontrack, audio mix associated atrack not going adjust volume .caf file. if you'd audio .caf file included in video associated audio mix, create avmutablecompositiontrack hold audio .caf file:

avmutablecompositiontrack *audiotrackcaf = [mixcomposition addmutabletrackwithmediatype:avmediatypeaudio                                                                     preferredtrackid:kcmpersistenttrackid_invalid]; 

(with time ranges set liking):

[audiotrackcaf inserttimerange:cmtimerangemake(kcmtimezero, audioasset.duration)                             oftrack:atrack attime:kcmtimezero error:nil] 

additionally, helpful pass nserror * (instead of nil) inserttimerange:oftrack:attime:error make sure had valid time ranges , media inserted.


Comments

Popular posts from this blog

plot - Remove Objects from Legend When You Have Also Used Fit, Matlab -

java - Why does my date parsing return a weird date? -

Need help in packaging app using TideSDK on Windows -