亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS自定義相機實現拍照、錄制視頻

2020-07-26 02:20:32
字體:
來源:轉載
供稿:網友

本文實例為大家分享了iOS自定義相機實現拍照、錄制視頻的具體代碼,供大家參考,具體內容如下

使用AVFoundation框架。

這里是Demo

首先聲明以下對象:

#import "CustomeCameraViewController.h"#import <AVFoundation/AVFoundation.h>#import <AssetsLibrary/AssetsLibrary.h> @interface CustomeCameraViewController ()<AVCaptureFileOutputRecordingDelegate> {  // AVCaptureSession對象來執行輸入設備和輸出設備之間的數據傳遞  AVCaptureSession *iSession;  //當前設備  AVCaptureDevice *iDevice;  //輸入設備  AVCaptureDeviceInput *iDeviceInput;  //照片輸出流  AVCaptureStillImageOutput *iStillImageOutput;  //預覽圖層  AVCaptureVideoPreviewLayer *iPreviewLayer;  }

初始化各對象:

- (void)viewDidLoad {  [super viewDidLoad];    //點擊屏幕對焦  UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(focusTap:)];  [self.view addGestureRecognizer:tap];      iSession = [[AVCaptureSession alloc]init];    NSArray *deviceArray = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];  for (AVCaptureDevice *device in deviceArray) {        //AVCaptureDevicePositionBack 后置攝像頭    //AVCaptureDevicePositionFront 前置攝像頭    if (device.position == AVCaptureDevicePositionBack) {      iDevice = device;    }  }      iSession.sessionPreset = [self getSessionPresetForDevice:iDevice];    iDeviceInput = [[AVCaptureDeviceInput alloc]initWithDevice:iDevice error:nil];      ////輸出設置。AVVideoCodecJPEG  輸出jpeg格式圖片  iStillImageOutput = [[AVCaptureStillImageOutput alloc]init];  NSDictionary *outputDic = [NSDictionary dictionaryWithObjectsAndKeys:AVVideoCodecJPEG,AVVideoCodecKey, nil];  [iStillImageOutput setOutputSettings:outputDic];      //更改這個設備設置的時候必須先鎖定設備,修改完后再解鎖,否則崩潰  [iDevice lockForConfiguration:nil];  if ([iDevice isFlashModeSupported:AVCaptureFlashModeOff]) {    [iDevice setFlashMode:AVCaptureFlashModeOff];  }  if ([iDevice isFocusModeSupported:AVCaptureFocusModeAutoFocus]) {    [iDevice setFocusMode:AVCaptureFocusModeAutoFocus];  }  if ([iDevice isWhiteBalanceModeSupported:AVCaptureWhiteBalanceModeAutoWhiteBalance]) {    [iDevice setWhiteBalanceMode:AVCaptureWhiteBalanceModeAutoWhiteBalance];  }  [iDevice unlockForConfiguration];    if ([iSession canAddInput:iDeviceInput]) {    [iSession addInput:iDeviceInput];  }  if ([iSession canAddOutput:iStillImageOutput]) {    [iSession addOutput:iStillImageOutput];  }  if ([iSession canAddOutput:iVideoOutput]) {    [iSession addOutput:iVideoOutput];  }    //初始化預覽圖層  iPreviewLayer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:iSession];  [iPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];  iPreviewLayer.frame = CGRectMake(0, 60, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-160);  [self.iCameraView.layer addSublayer:iPreviewLayer];    [iSession startRunning];    }

點擊按鈕拍照:

//拍照-(void)takePictures{  AVCaptureConnection *connection = [iStillImageOutput connectionWithMediaType:AVMediaTypeVideo];  if (!connection) {    NSLog(@"失敗");    return;  }  //設置焦距  [connection setVideoScaleAndCropFactor:1];    [iStillImageOutput captureStillImageAsynchronouslyFromConnection:connection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {    if (imageDataSampleBuffer==NULL) {      NSLog(@"NUll");      return ;    }        NSData *data = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];    UIImage *image = [UIImage imageWithData:data];          }];}

image即為拍照所得圖片:

設置session的AVCaptureSessionPreset屬性

-(NSString *)getSessionPresetForDevice:(AVCaptureDevice *)device{  if ([device supportsAVCaptureSessionPreset:AVCaptureSessionPreset3840x2160]) {    return AVCaptureSessionPreset3840x2160;  } else if([device supportsAVCaptureSessionPreset:AVCaptureSessionPreset1920x1080]){    return AVCaptureSessionPreset1920x1080;  } else if ([device supportsAVCaptureSessionPreset:AVCaptureSessionPreset1280x720]){    return AVCaptureSessionPreset1280x720;  } else if ([device supportsAVCaptureSessionPreset:AVCaptureSessionPreset640x480]){    return AVCaptureSessionPreset640x480;  } else if ([device supportsAVCaptureSessionPreset:AVCaptureSessionPreset352x288]){    return AVCaptureSessionPreset352x288;  } else if ([device supportsAVCaptureSessionPreset:AVCaptureSessionPresetHigh]){    return AVCaptureSessionPresetHigh;  } else if ([device supportsAVCaptureSessionPreset:AVCaptureSessionPresetMedium]){    return AVCaptureSessionPresetMedium;  } else{    return AVCaptureSessionPresetLow;  }}

設置閃光燈:

- (IBAction)iFlashBtn:(id)sender {    [iDevice lockForConfiguration:nil];  if (iDevice.flashMode == AVCaptureFlashModeOff) {    if ([iDevice isFlashModeSupported:AVCaptureFlashModeOn]) {      [iDevice setFlashMode:AVCaptureFlashModeOn];            [self.iFlashBtn setBackgroundImage:[UIImage imageNamed:@"flashBtn"] forState:UIControlStateNormal];    }  } else if (iDevice.flashMode == AVCaptureFlashModeOn){    if ([iDevice isFlashModeSupported:AVCaptureFlashModeOff]) {      [iDevice setFlashMode:AVCaptureFlashModeOff];             [self.iFlashBtn setBackgroundImage:[UIImage imageNamed:@"flashOffBtn"] forState:UIControlStateNormal];    }  }  [iDevice unlockForConfiguration];  }

切換前置攝像頭與后置攝像頭:

- (IBAction)iChangeBtn:(id)sender {      NSArray *array = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];  AVCaptureDevice *newDevice = nil;  AVCaptureDeviceInput *newDeviceInput = nil;    CATransition *animation = [CATransition animation];  animation.duration = 0.5f;  animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  animation.type = @"oglFlip";    if (iDevice.position == AVCaptureDevicePositionBack) {    animation.subtype = kCATransitionFromLeft;    for (AVCaptureDevice *device in array) {      if (device.position == AVCaptureDevicePositionFront) {        newDevice = device;      }    }  } else if (iDevice.position == AVCaptureDevicePositionFront){    animation.subtype = kCATransitionFromRight;    for (AVCaptureDevice *device in array) {      if (device.position == AVCaptureDevicePositionBack) {        newDevice = device;      }    }  }    newDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:newDevice error:nil];  [iPreviewLayer addAnimation:animation forKey:nil];  if (newDeviceInput!=nil) {    [iSession beginConfiguration];    [iSession removeInput:iDeviceInput];     iSession.sessionPreset = [self getSessionPresetForDevice:newDevice];    if ([iSession canAddInput:newDeviceInput]) {      [iSession addInput:newDeviceInput];      iDeviceInput = newDeviceInput;      iDevice = newDevice;    } else {      [iSession addInput:iDeviceInput];    }    [iSession commitConfiguration];  }    }

點擊屏幕對焦:

//點擊屏幕對焦-(void)focusTap:(UIGestureRecognizer *)tap{  CGPoint tapPoint = [tap locationInView:self.view];      float Y = tapPoint.y;  if (Y<60 || Y>([UIScreen mainScreen].bounds.size.height-100)) {    return;  }    [iDevice lockForConfiguration:nil];  if ([iDevice isFocusModeSupported:AVCaptureFocusModeAutoFocus]) {    [iDevice setFocusPointOfInterest:CGPointMake(tapPoint.x/self.view.frame.origin.x, tapPoint.y/self.view.frame.origin.y)];    [iDevice setFocusMode:AVCaptureFocusModeAutoFocus];  }  [iDevice unlockForConfiguration];    self.iFocusImgView.center = tapPoint;  self.iFocusImgView.hidden = NO;  [UIView animateWithDuration:0.3 animations:^{    self.iFocusImgView.transform = CGAffineTransformMakeScale(1.25, 1.25);  }completion:^(BOOL finished) {    [UIView animateWithDuration:0.5 animations:^{      self.iFocusImgView.transform = CGAffineTransformIdentity;    } completion:^(BOOL finished) {      self.iFocusImgView.hidden = YES;    }];  }];}

關于視頻錄制可以在Demo中查看。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区私人高清影院| 国产欧美精品日韩| 在线观看欧美日韩国产| 色偷偷av一区二区三区| 亚洲新中文字幕| 亚洲久久久久久久久久| 亚洲欧美日韩精品久久| 久久精品视频免费播放| 国产精品久久久久影院日本| 黑人极品videos精品欧美裸| 国产精品女主播| 精品日本高清在线播放| 国产主播在线一区| 在线看片第一页欧美| 91免费精品国偷自产在线| 国产精品视频精品视频| 国产精品jvid在线观看蜜臀| 国产亚洲一区精品| 国产高清视频一区三区| 亚洲第一av网站| 亚洲国产精品99久久| 这里只有精品视频在线| 18一19gay欧美视频网站| 亚洲国产精品99久久| 欧美精品一二区| 这里只有精品久久| 亚洲风情亚aⅴ在线发布| 午夜精品一区二区三区在线视频| 中文字幕久久亚洲| 日韩av在线电影网| 亚洲香蕉伊综合在人在线视看| 一本大道香蕉久在线播放29| 2019中文字幕全在线观看| 久久久免费观看视频| 欧美性videos高清精品| 欧美性做爰毛片| 国产精品扒开腿爽爽爽视频| 激情亚洲一区二区三区四区| 亚洲视频在线观看| 最近2019好看的中文字幕免费| 高清欧美性猛交| 久久久免费在线观看| 欧美一级片久久久久久久| 原创国产精品91| 亚洲free嫩bbb| 久久成人精品视频| 欧美午夜激情小视频| 毛片精品免费在线观看| 国产成+人+综合+亚洲欧洲| 秋霞午夜一区二区| 久久久97精品| 国产成人久久久精品一区| 国产欧美精品一区二区三区-老狼| 日韩在线免费av| 国产精品夜间视频香蕉| 亚洲国产精品悠悠久久琪琪| 91在线免费看网站| 亚洲国产欧美在线成人app| 日韩av在线免费| 日韩久久免费视频| 亚洲电影免费观看高清完整版在线| 色综合视频一区中文字幕| 欧美一区二区三区免费视| 国产成人精品av| 亚洲国产精品电影| 中国日韩欧美久久久久久久久| 91人人爽人人爽人人精88v| 在线播放国产一区中文字幕剧情欧美| 欧洲s码亚洲m码精品一区| 欧美一级黑人aaaaaaa做受| 91精品国产91久久久久| 91探花福利精品国产自产在线| 激情久久av一区av二区av三区| 成人免费观看49www在线观看| 日韩av快播网址| 欧美高清第一页| 成人美女av在线直播| 亚洲奶大毛多的老太婆| 国外成人免费在线播放| 欧美日韩福利电影| 欧美日韩在线影院| 亚洲精品久久久久久久久| 欧美激情国产日韩精品一区18| 成人黄色免费在线观看| 亚洲精品午夜精品| 亚洲国产成人久久| 成人欧美一区二区三区黑人| 亚洲欧美中文日韩v在线观看| 日韩一区二区三区国产| 中文字幕v亚洲ⅴv天堂| 亚洲成年人在线| 成人亚洲综合色就1024| 国产一区二区三区在线观看视频| 日本道色综合久久影院| 欧美小视频在线观看| 日韩av电影在线网| 性欧美在线看片a免费观看| 精品福利在线观看| 欧美成人精品在线观看| 欧美与黑人午夜性猛交久久久| 亚洲另类激情图| 国产日本欧美一区二区三区| 亚洲尤物视频网| 欧美亚洲另类激情另类| 久久久久久网站| 一区二区欧美日韩视频| 亚洲成人av资源网| 国产精品高潮呻吟久久av黑人| 国内精品400部情侣激情| 欧美插天视频在线播放| 国产欧美一区二区三区在线| 久久久国产一区二区三区| 国产精品观看在线亚洲人成网| 欧美亚洲免费电影| 国产精品免费视频久久久| 成人性生交大片免费观看嘿嘿视频| 亚洲缚视频在线观看| 欧美精品福利视频| 在线视频欧美日韩精品| 日av在线播放中文不卡| 亚州精品天堂中文字幕| 精品动漫一区二区三区| 米奇精品一区二区三区在线观看| 日韩在线精品视频| 国产精品第三页| 成人欧美在线视频| 国产精品欧美一区二区三区奶水| 亚洲精品综合精品自拍| 欧美裸体男粗大视频在线观看| 欧美性xxxx在线播放| 亚洲欧洲日产国码av系列天堂| 欧美成人激情图片网| 日韩高清电影免费观看完整版| 中文字幕日韩高清| 91免费福利视频| 成人看片人aa| 国产精品美女免费| 2018日韩中文字幕| 91亚洲精品久久久久久久久久久久| 国产中文字幕91| 69av成年福利视频| 成人欧美在线视频| 欧美精品激情blacked18| 日韩国产精品视频| 亚洲欧美国产va在线影院| 神马国产精品影院av| 国产精品pans私拍| 琪琪第一精品导航| 国产精品久久综合av爱欲tv| 成人久久久久爱| 成人免费网站在线观看| 国产视频在线观看一区二区| 欧美猛少妇色xxxxx| 69久久夜色精品国产69乱青草| 中国china体内裑精亚洲片| 午夜精品久久久久久久男人的天堂| 97视频在线观看视频免费视频| 国内精品久久久久影院 日本资源| 日韩高清电影免费观看完整| 欧美性jizz18性欧美| 亚洲爱爱爱爱爱| 这里只有精品视频| 色妞久久福利网| 精品亚洲夜色av98在线观看|