我正在使用以下方法设置自iOS 4以来的焦点:
- (void) focusAtPoint:(CGPoint)point
{
AVCaptureDevice *device = [[self captureInput] device];
NSError *error;
if ([device isFocusModeSupported:AVCaptureFocusModeAutoFocus] &&
[device isFocusPointOfInterestSupported])
{
if ([device lockForConfiguration:&error]) {
[device setFocusPointOfInterest:point];
[device setFocusMode:AVCaptureFocusModeAutoFocus];
[device unlockForConfiguration];
} else {
NSLog(@"Error: %@", error);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在iOS 4设备上,这没有任何问题.但是在iOS 5上,实时摄像头会冻结并在几秒钟后完全变黑.没有异常或错误抛出.
如果我注释掉setFocusPointOfInterest或setFocusMode,则不会发生错误.因此,它们的组合都会导致这种行为.
我使用下面的代码来聚焦iphone相机.但它没有用.我从Apple的AVCam示例代码中获取此代码.我做错了吗?是否有任何方法可以检测到iPhone是否真正关注?
-(void) focusAtPoint:(CGPoint)point
{
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];;
if (device != nil) {
if ([device isFocusPointOfInterestSupported] && [device isFocusModeSupported:AVCaptureFocusModeAutoFocus]) {
NSError *error;
if ([device lockForConfiguration:&error]) {
[device setFocusPointOfInterest:point];
[device setFocusMode:AVCaptureFocusModeAutoFocus];
[device unlockForConfiguration];
} else {
NSLog(@"Error in Focus Mode");
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我使用AVCaptureSession拍照并将照片存储到相册.当我点击按钮时,它会拍摄快照并存储到相册.但是当我使用横向模式时,然后单击它存储横向模式的按钮会导致倒置静止图像.

码:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self setCaptureSession:[[AVCaptureSession alloc] init]];
[self addVideoInputFrontCamera:NO]; // set to YES for Front Camera, No for Back camera
[self addStillImageOutput];
[self setPreviewLayer:[[AVCaptureVideoPreviewLayer alloc] initWithSession:[self captureSession]] ];
[[self previewLayer] setVideoGravity:AVLayerVideoGravityResizeAspectFill];
CGRect layerRect = [[[self view] layer] bounds];
[[self previewLayer]setBounds:layerRect];
[[self previewLayer] setPosition:CGPointMake(CGRectGetMidX(layerRect),CGRectGetMidY(layerRect))];
[[[self view] layer] addSublayer:[self previewLayer]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveImageToPhotoAlbum) name:kImageCapturedSuccessfully object:nil];
[[self captureSession] startRunning];
camera=[UIButton buttonWithType:UIButtonTypeCustom];
[camera setImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal];
[camera setFrame:CGRectMake(150, 10, 40, …Run Code Online (Sandbox Code Playgroud) 我一直致力于应用程序,允许使用AVCaptureDevice使用设备相机.它之前的ios版本<9非常适用,但现在ios 9从应用程序访问相机时,它只显示黑屏.我甚至无法从应用程序访问用户照片.
主要部分是我的应用程序我在设置中找不到相机选项隐私设置.即使我没有获得苹果默认权限访问弹出选项.
你能帮帮我吗?
我正在尝试构建一个应用程序,它将从相机捕获帧并使用OpenCV处理它们,然后将这些文件保存到设备,但是以特定的帧速率.
我现在坚持的是这个事实AVCaptureVideoDataOutputSampleBufferDelegate似乎并不尊重AVCaptureDevice.activeVideoMinFrameDuration或AVCaptureDevice.activeVideoMaxFrameDuration设置.
captureOutput 如上面的设置所示,运行速度远远超过每秒2帧.
你是否碰巧知道无论是否有代表,人们都能做到这一点?
视图控制器:
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
setupCaptureSession()
}
func setupCaptureSession() {
let session : AVCaptureSession = AVCaptureSession()
session.sessionPreset = AVCaptureSessionPreset1280x720
let videoDevices : [AVCaptureDevice] = AVCaptureDevice.devices() as! [AVCaptureDevice]
for device in videoDevices {
if device.position == AVCaptureDevicePosition.Back {
let captureDevice : AVCaptureDevice = device
do {
try captureDevice.lockForConfiguration()
captureDevice.activeVideoMinFrameDuration = CMTimeMake(1, 2)
captureDevice.activeVideoMaxFrameDuration = CMTimeMake(1, 2)
captureDevice.unlockForConfiguration()
let input : AVCaptureDeviceInput = try …Run Code Online (Sandbox Code Playgroud) 我正在实施水龙头以集中精力,并为如何使用不同而感到困惑AVCaptureFocusModes。这样做:
[device setFocusPointOfInterest:focusPoint];
[device setFocusMode:AVCaptureFocusModeAutoFocus];
Run Code Online (Sandbox Code Playgroud)
可以成功对焦,但是由于锁定焦距,移动相机将永远失去对焦。相反,如果我这样做:
[device setFocusPointOfInterest:focusPoint];
[device setFocusMode:AVCaptureFocusModeContinousAutoFocus];
Run Code Online (Sandbox Code Playgroud)
自动对焦引擎似乎消除了我的兴趣,只专注于看起来最好的东西。相机应用程序成功聚焦在您的兴趣点上,同时在移动相机时也保持连续自动对焦,这是怎么做的?
到目前为止,这是我的完整代码:
- (void)setFocusPointOfInterest:(CGPoint)point
{
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
if (captureDeviceClass != nil) {
AVCaptureDevice *device = [captureDeviceClass defaultDeviceWithMediaType:AVMediaTypeVideo];
if([device isFocusPointOfInterestSupported] &&
[device isFocusModeSupported:AVCaptureFocusModeAutoFocus]) {
CGRect screenRect = [[UIScreen mainScreen] bounds];
double screenWidth = screenRect.size.width;
double screenHeight = screenRect.size.height;
double focus_x = point.x/screenWidth;
double focus_y = point.y/screenHeight;
CGPoint focusPoint = CGPointMake(focus_x,focus_y);
if([device lockForConfiguration:nil]) {
[device setFocusPointOfInterest:focusPoint];
[device setFocusMode:AVCaptureFocusModeAutoFocus];
[device setExposurePointOfInterest:focusPoint];
if ([device isExposureModeSupported:AVCaptureExposureModeAutoExpose]){
[device setExposureMode:AVCaptureExposureModeAutoExpose];
}
[device unlockForConfiguration]; …Run Code Online (Sandbox Code Playgroud) 我正在玩swift和iPhone 7 Plus.我正在使用builtInWideAngleCamera和builtInTelephotoCamera.即使我无法同时获得2张图像,这也很棒.
我在Apple文档中看到AVCaptureDeviceType包含一个builtInDualCamera条目.这个设备在avfoundation中的目的是什么,因为我们不能用apple API做任何事情(缩放,深度效果)?
换句话说,在使用AVCaptureDeviceType,avcapturesession和stuff时,我看不出builtInDualCamera和builtInWideAngleCamera之间的区别
谢谢
我的代码中的行
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
Run Code Online (Sandbox Code Playgroud)
对于 AVMediaTypeVideo xcode 告诉我...使用未声明的标识符“AVMediaTypeVideo”;您的意思是“kCMMediaType_Video”吗?
附注,我的标题中确实有 #import AVFoundation/AVCaptureDevice.h
我正在尝试在应用程序中制作“手电筒”效果,根据 Xcode 的说法,这是唯一有问题的代码行......
我已经实现了下面链接的帖子中的代码。但是,由于 AVCaptureDevice.devices() 现已弃用,因此它不会更新。
除非打开 Quicktime,否则 AVCaptureDevice.devices() 不会列出 iOS 设备
有人有这个的最新实施吗?
谢谢你!
来自 Android 操作系统,我试图了解 AVCaptureDevice API 并找到 IOS 和 Android 的不同参数之间的匹配。我正在使用自动连续曝光模式。我在使用上面的曝光参数时遇到了问题:据我所知:
avcapturedevice ×10
iphone ×6
ios ×4
swift ×3
objective-c ×2
avcam ×1
avcapture ×1
core-media ×1
ios-camera ×1
ios5 ×1
ios6 ×1
ios9 ×1
macos ×1
xcode7 ×1