ios - Making video with overlay view in AVCaptureVideoPreviewLayer -
i'm trying capture video overlay view using avcapturevideopreviewlayer, video saving without overlay view. app setting object instead of face, works fine , able take images (see link below). capturing video issue.
https://i.stack.imgur.com/j5t15.jpg
cmformatdescriptionref formatdescriptionref = cmsamplebuffergetformatdescription(samplebuffer);
const audiostreambasicdescription *audiostreambasicdescription = cmaudioformatdescriptiongetstreambasicdescription(fdesc); _samplerate = audiostreambasicdescription -> msamplerate; _audiochannel = audiostreambasicdescription -> mchannelsperframe; nsdateformatter *dateformatter = [[nsdateformatter alloc] init]; dateformatter.dateformat = @"hh:mm:ss"; nsdate *currentdate = [nsdate datewithtimeintervalsince1970:[[nsdate date] timeintervalsince1970]]; nsstring *currentdatestring = [dateformatter stringfromdate:currentdate]; nsstring *videoname = [nsstring stringwithformat:@"video_%@.mp4", currentdatestring]; _videopath = [self.cachedirectorypath stringbyappendingpathcomponent:videoname]; _resolutionwidth = 360; _resolutionheight = 640; _recordingwriter = [videorecordingwriter recordingwriterwithvideopath:_videopath resolutionwidth:_resolutionwidth resolutionheight:_resolutionheight audiochannel:_audiochannel samplerate:_samplerate]; cmtime presentationtimestamp = cmsamplebuffergetpresentationtimestamp(samplebuffer); if (_startrecordingcmtime.value == 0) { _startrecordingcmtime = presentationtimestamp; } cmtime subtract = cmtimesubtract(presentationtimestamp, _startrecordingcmtime); _currentrecordingtime = cmtimegetseconds(subtract); if (_currentrecordingtime > _maxrecordingtime) { if (_currentrecordingtime - _maxrecordingtime >= 0.1) { return; } } [_recordingwriter writewithsamplebuffer:samplebuffer isvideo:yes]; dispatch_async(dispatch_get_main_queue(), ^{ [self updaterecordingprogress:_currentrecordingtime / _maxrecordingtime]; });
func startcapturing(view: skview, background: calayer, done: @escaping((_:calayer)->())) { let device = getcamera()! { capturesession.beginconfiguration() // set inputs try capturesession.addinput(avcapturedeviceinput(device: device)) capturesession.sessionpreset = avcapturesessionpresethigh previewlayer = avcapturevideopreviewlayer(session: capturesession) if let previewlayer = previewlayer { // add background previewlayer.addsublayer(background) // init preview previewlayer.name = "camera" previewlayer.frame.size = view.bounds.size if is_debug { print("videoservice: size of previewlayer") print(previewlayer.frame.size) } previewlayer.position = cgpoint( x: view.frame.width/2, y: view.frame.height/2) view.layer.addsublayer(previewlayer) done(previewlayer) } capturesession.commitconfiguration() capturesession.startrunning() print("\n\nvideoservice: camera configured") } catch { print("error: start capturing failed") } } func getcapturesessionback() -> avcapturedevicediscoverysession { session = session ?? avcapturedevicediscoverysession( devicetypes: [devicetypebackcamera], mediatype: avmediatypevideo, position: position) return session! } func getcamera() -> avcapturedevice? { device = device ?? getcapturesessionback().devices.first return device }
Comments
Post a Comment