ios - AVAssetWriter occasionally writes 0 bytes or corrupted movie files -


i have been adding video capturing capability unity arkit interface , experiencing unstable behaviour. working on ios beta 5 xcode beta 5.

recording kcvpixelformattype_420ypcbcr8biplanarfullrange type video new file in documents directory results in file of 0 bytes or corrupted file. on main thread. appears if device has not been used while, recording succeed, second recording succeed also, subsequenty when debugging application chance of failure grows. allocating new avassetwriter on each write, , changing filename every time. pixelbuffer additions writer being done on main thread.

anything specific doing wrong, or ios 11 beta issue?

the setup code using follows:

nserror *error = nil; videowriter = [avassetwriter               assetwriterwithurl:[nsurl fileurlwithpath:videopath]               filetype:avfiletypequicktimemovie               error:&error]; if (error != nil) {     nslog(@"error allocating video writer - %@", [error localizeddescription]); } nsparameterassert(videowriter); nsdictionary *videosettings = [nsdictionary dictionarywithobjectsandkeys:                                avvideocodectypeh264, avvideocodeckey,                                [nsnumber numberwithint:size.width], avvideowidthkey,                                [nsnumber numberwithint:size.height], avvideoheightkey,                                nil]; nsparameterassert([videowriter canapplyoutputsettings:videosettings formediatype:avmediatypevideo]); writerinput = [avassetwriterinput                assetwriterinputwithmediatype:avmediatypevideo                outputsettings:videosettings]; writerinput.expectsmediadatainrealtime = yes;  adaptor = [avassetwriterinputpixelbufferadaptor            assetwriterinputpixelbufferadaptorwithassetwriterinput:writerinput            sourcepixelbufferattributes:[nsdictionary dictionarywithobjectsandkeys:                                         [nsnumber numberwithint:kcvpixelformattype_420ypcbcr8biplanarfullrange], kcvpixelbufferpixelformattypekey,                                         nil]]; nsparameterassert(writerinput); nsparameterassert([videowriter canaddinput:writerinput]); [videowriter addinput:writerinput]; 

and adding pixel buffers done this:

- (void)appendvideoframetowriter:(cvpixelbufferref)pixelbuffer time:          (double)time {     if([writerinput isreadyformoremediadata])     {         cmtime frametime = cmtimemake(time*60, 60);         nslog (@"appending pixel buffer @ seconds %f", cmtimegetseconds(frametime));         [adaptor appendpixelbuffer:pixelbuffer withpresentationtime:frametime];         lastwrittenframetime = frametime;     } } 

adding cvpixelbufferlockbaseaddress() calls around adaptor append had no effect on results


Comments

Popular posts from this blog

Is there a better way to structure post methods in Class Based Views -

performance - Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures? -

jquery - Responsive Navbar with Sub Navbar -