//切换摄像头方向
- (void)changeCameraPositionWithCurrentIsFront:(BOOL)isFront {
if (isFront) {
[self.session stopRunning];
[self.session removeInput:self.backCameraInput];
if ([self.session canAddInput:self.frontCameraInput]) {
[self.session addInput:self.frontCameraInput];
[self.session startRunning];
}
} else {
[self.session stopRunning];
[self.session removeInput:self.frontCameraInput];
if ([self.session canAddInput:self.backCameraInput]) {
[self.session addInput:self.backCameraInput];
[self.session startRunning];
}
}
//解决输出镜像问题
AVCaptureConnection *videoConnection = nil;
for ( AVCaptureConnection *connection in [self.videoDataOut connections] )
{
NSLog(@"%@", connection);
for ( AVCaptureInputPort *port in [connection inputPorts] )
{
NSLog(@"%@", port);
if ( [[port mediaType] isEqual:AVMediaTypeVideo] )
{
videoConnection = connection;
}
}
}
if([videoConnection isVideoOrientationSupported]) // **Here it is, its always false**
{
[videoConnection setVideoOrientation:[UIDevice currentDevice].orientation];
}
//设置前置摄像头镜像问题
[self videoMirored];
}
//摄像头输入
- (AVCaptureDeviceInput *)backCameraInput {
if (_backCameraInput == nil) {
NSError *error;
_backCameraInput = [[AVCaptureDeviceInput alloc] initWithDevice:[self cameroWithPosition:AVCaptureDevicePositionBack] error:&error];
if (error) {
NSLog(@"后置摄像头获取失败");
}
}
self.isDevicePositionFront = NO;
return _backCameraInput;
}
- (AVCaptureDeviceInput *)frontCameraInput {
if (_frontCameraInput == nil) {
NSError *error;
_frontCameraInput = [[AVCaptureDeviceInput alloc] initWithDevice:[self cameroWithPosition:AVCaptureDevicePositionFront] error:&error];
if (error) {
NSLog(@"前置摄像头获取失败");
}
}
self.isDevicePositionFront = YES;
return _frontCameraInput;
}
//获取可用的摄像头
- (AVCaptureDevice *)cameroWithPosition:(AVCaptureDevicePosition)position{
if ([[UIDevice currentDevice].systemVersion floatValue] == 10.0) {
AVCaptureDeviceDiscoverySession *dissession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInDuoCamera,AVCaptureDeviceTypeBuiltInTelephotoCamera,AVCaptureDeviceTypeBuiltInWideAngleCamera] mediaType:AVMediaTypeVideo position:position];
for (AVCaptureDevice *device in dissession.devices) {
if ([device position] == position ) {
return device;
}
}
} else {
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
for (AVCaptureDevice *device in devices) {
if ([device position] == position) {
return device;
}
}
}
return nil;
}
iOS 切换摄像头前后方向
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 最近发现项目里,切换前后摄像头几次之后,会出现录制的视频方向上下颠倒,可是明明已经在切换摄像头后,给videoco...