i working camera recoding app. want record video using front , camera both. camera video working fine front camera final video mute (without audio).
code:
- (id)initwithpreviewview:(uiview *)previewview { self = [super init]; if (self) { nserror *error; self.capturesession = [[avcapturesession alloc] init]; self.capturesession.sessionpreset = avcapturesessionpresethigh; //avcapturesessionpresethigh avcapturesessionpresetphoto // avcapturedevice *videodevice = [avcapturedevice defaultdevicewithmediatype:avmediatypevideo]; //avcapturedevice *videodevice = [avcapturedevice defaultdevicewithmediatype:avmediatypevideo]; avcapturedevice *videodevice; // if (isneededtosave) // { // //for front cam // videodevice = [self frontcamera]; // // } // else // { // //for cam videodevice = [avcapturedevice defaultdevicewithmediatype:avmediatypevideo]; // } avcapturedeviceinput *videoin = [avcapturedeviceinput deviceinputwithdevice:videodevice error:&error]; if (error) { nslog(@"video input creation failed"); return nil; } if (![self.capturesession canaddinput:videoin]) { nslog(@"video input add-to-session failed"); return nil; } [self.capturesession addinput:videoin]; /*take photo*/ self.isusingfrontfacingcamera = 0; // make still image output stillimageoutput = [avcapturestillimageoutput new]; [stillimageoutput addobserver:self forkeypath:@"capturingstillimage" options:nskeyvalueobservingoptionnew context:(__bridge void *)(avcapturestillimageiscapturingstillimagecontext)]; if ( [self.capturesession canaddoutput:stillimageoutput] ) [self.capturesession addoutput:stillimageoutput]; // make video data output videodataoutput = [avcapturevideodataoutput new]; // want bgra, both coregraphics , opengl work 'bgra' nsdictionary *rgboutputsettings = [nsdictionary dictionarywithobject: [nsnumber numberwithint:kcmpixelformat_32bgra] forkey:(id)kcvpixelbufferpixelformattypekey]; [videodataoutput setvideosettings:rgboutputsettings]; [videodataoutput setalwaysdiscardslatevideoframes:yes]; // discard if data output queue blocked (as process still image) // create serial dispatch queue used sample buffer delegate when still image captured // serial dispatch queue must used guarantee video frames delivered in order // see header doc setsamplebufferdelegate:queue: more information videodataoutputqueue = dispatch_queue_create("videodataoutputqueue", dispatch_queue_serial); [videodataoutput setsamplebufferdelegate:self queue:videodataoutputqueue]; if ( [self.capturesession canaddoutput:videodataoutput] ) [self.capturesession addoutput:videodataoutput]; [[videodataoutput connectionwithmediatype:avmediatypevideo] setenabled:no]; /*take photo*/ // save default format self.defaultformat = videodevice.activeformat; defaultvideomaxframeduration = videodevice.activevideomaxframeduration; avcapturedevice *audiodevice= [avcapturedevice defaultdevicewithmediatype:avmediatypeaudio]; avcapturedeviceinput *audioin = [avcapturedeviceinput deviceinputwithdevice:audiodevice error:&error]; [self.capturesession addinput:audioin]; self.fileoutput = [[avcapturemoviefileoutput alloc] init]; [self.capturesession addoutput:self.fileoutput]; self.previewlayer = [[avcapturevideopreviewlayer alloc] initwithsession:self.capturesession]; self.previewlayer.frame = previewview.bounds; self.previewlayer.contentsgravity = kcagravityresizeaspectfill; self.previewlayer.videogravity = avlayervideogravityresizeaspectfill; [previewview.layer insertsublayer:self.previewlayer atindex:0]; [self.capturesession startrunning]; } return self; } - (void)switchcameras { // [self frontcamera]; // avcapturedeviceposition desiredposition; // desiredposition = avcapturedevicepositionfront; avcapturedeviceposition desiredposition; nsinteger isfront = [[nsuserdefaults standarduserdefaults] integerforkey:@"isusingfrontfacingcamera"]; if (isfront) desiredposition = avcapturedevicepositionback; else desiredposition = avcapturedevicepositionfront; (avcapturedevice *d in [avcapturedevice deviceswithmediatype:avmediatypevideo]) { if ([d position] == desiredposition) { [[self.previewlayer session] beginconfiguration]; avcapturedeviceinput *input = [avcapturedeviceinput deviceinputwithdevice:d error:nil]; (avcaptureinput *oldinput in [[self.previewlayer session] inputs]) { [[self.previewlayer session] removeinput:oldinput]; } [[self.previewlayer session] addinput:input]; [[self.previewlayer session] commitconfiguration]; break; } } if (isfront==0) { [[nsuserdefaults standarduserdefaults] setinteger:1 forkey:@"isusingfrontfacingcamera"]; } else { [[nsuserdefaults standarduserdefaults] setinteger:0 forkey:@"isusingfrontfacingcamera"]; } [[nsuserdefaults standarduserdefaults] synchronize]; //nsinteger isfront1= [[nsuserdefaults standarduserdefaults] integerforkey:@"isusingfrontfacingcamera"]; }
Comments
Post a Comment