iphone - AVAssetExportSession Error -11820 -


i'm writing application works video using avfoundation.

the behaviour of application simple: take video camera roll, create avmutablecomposition audio tracks. mix composition initialize avassetexportsession stores video file in documents directory of app.

until point it's ok: video stored , i'm able play in controller. if take video have stored in documents folder make editing (in same way of first time avmutablecomposition, avassetexportsession) it's ok again.

but third time process editing video avassetexportsession status becomes "fail" , error:

"domain=avfoundationerrordomain code=-11820 "cannot complete export" userinfo=0x1a9260 {nslocalizedrecoverysuggestion=try exporting again., nslocalizeddescription=cannot complete export}"

i have read general error session couldn't exported. sense of this? why third time made editing process? memory management mistake? bug?. code of avassetexportsession:

 _assetexport = [[avassetexportsession alloc] initwithasset:mixcomposition presetname:avassetexportpresethighestquality];    _assetexport.shouldoptimizefornetworkuse = yes;  ///data odierna nsdateformatter *format = [[nsdateformatter alloc] init]; [format setdateformat:@"ddmmyyyyhhmmss"];  nsdate *now = [[nsdate alloc] init];  nsstring *datestring = [format stringfromdate:now]; [now release]; [format release]; nsstring* ext = @".mov"; nsstring* videoname=[nsstring stringwithformat:@"%@%@", datestring, ext];  ///data odierna nsstring *exportpath = [[nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) lastobject] stringbyappendingpathcomponent:videoname];  if ([[nsfilemanager defaultmanager] fileexistsatpath:exportpath])  {     [[nsfilemanager defaultmanager] removeitematpath:exportpath error:nil]; }   _assetexport.outputfiletype = avfiletypequicktimemovie;  [_assetexport settimerange:cmtimerangemake(kcmtimezero, videoasset.duration)]; nsurl    *exporturl = [nsurl fileurlwithpath:exportpath] ;  _assetexport.outputurl = exporturl ;  [_assetexport exportasynchronouslywithcompletionhandler:^ {     switch (_assetexport.status)      {         case avassetexportsessionstatusfailed:         {             nslog (@"fail %@",_assetexport.error);             if ([[nsfilemanager defaultmanager] fileexistsatpath:[_assetexport.outputurl path]])              {                 [[nsfilemanager defaultmanager] removeitematpath:[_assetexport.outputurl path] error:nil];             }              [self performselectoronmainthread:@selector (ritenta)                                    withobject:nil                                 waituntildone:no];             break;         }         case avassetexportsessionstatuscompleted:          {             nslog (@"success");              [self performselectoronmainthread:@selector (savevideotoalbum:)                                    withobject:exportpath                                 waituntildone:no];             break;         }         case avassetexportsessionstatuscancelled:          {             nslog (@"canceled");              break;         }     }; }]; 

i have done many searches on web, people have had problem in outputurl of session, have tried , seems ok in code. assign unique name file use nsdate. debugging purposes have tried restore standard string name problem remains. ideas? can suggest me alternative method export documents folder asset assetwriter insted avassetexportsession?

the problem _assetexport.outputfiletype have set type avfiletypequicktimemovie. not supported type.

try find out output file types supported _assetexport using following code , use suitable one.

nslog (@"created exporter. supportedfiletypes: %@", exporter.supportedfiletypes); 

or
change

_assetexport.outputfiletype = avfiletypequicktimemovie; 

to

exporter.outputfiletype = @"com.apple.m4a-audio"; 

also dont forget change extension

nsstring* ext = @".mov";  @".m4a"  

this should work. worked me.


Comments

Popular posts from this blog

php - What is the difference between $_SERVER['PATH_INFO'] and $_SERVER['ORIG_PATH_INFO']? -

fortran - Function return type mismatch -

queue - mq_receive: message too long -