- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 AVCaptureVideoPreviewLayer 来允许用户从 iPhone 相机拍摄照片。所以我有一个 AVCaptureSession,输入为 AVCaptureDeviceInput,输出为 AVCaptureStillImageOutput。
我在视频源上也有动画和控件,但这些很慢而且不稳定,因为后面的视频以最大帧速率运行并占用 CPU/GPU。
我想限制 AVCaptureVideoPreviewLayer 的帧率。我看到 AVCaptureVideoDataOutput 上有 minFrameDuration 属性,但我在 AVCaptureVideoPreviewLayer 上找不到任何类似的东西。
最佳答案
我不认为问题与帧速率有关。因此,我会建议一些技巧来提高您的应用程序的性能:
1) AVCaptureVideoPreviewLayer 它只是 CALayer 的一个子类,它显示来自相机的输出,因此无法限制它的帧率。
2) 检查你的动画是否放置在正确的位置,这取决于你有什么样的动画,如果是 CALayer 那么动画层应该是你的主 Canvas View 层的子层(不是 AVCaptureVideoPreviewLayer!!!) ,如果它是 UIView,那么它必须是主 Canvas View 的 subview 。
3) 您可以通过设置 session 预设来提高应用的性能:
[captureSession setSessionPreset:AVCaptureSessionPresetLow];
默认设置为高,你可以设置任何你需要的,它只是视频质量,如果它是高性能不可能是理想的。
4) 我制作了自己的测试应用程序,其中随机动画覆盖了视频预览层(但它是我主视图的 subview !!!)即使在我的旧 iPod 上一切都很顺利,我可以给你一个代码捕获 session 的初始化:
// Create a capture session
self.captureSession = [AVCaptureSession new];
if([captureSession canSetSessionPreset:AVCaptureSessionPresetHigh]){
[captureSession setSessionPreset:AVCaptureSessionPresetHigh];
}
else{
// HANDLE ERROR
}
// Find a suitable capture device
AVCaptureDevice *cameraDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
// Create and add a device input
NSError *error = nil;
AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:cameraDevice error:&error];
if([captureSession canAddInput:videoInput]){
[captureSession addInput:videoInput];
}
else{
// HANDLE ERROR
}
// Create and add a device still image output
AVCaptureStillImageOutput *stillImageOutput = [AVCaptureStillImageOutput new];
[stillImageOutput addObserver:self forKeyPath:@"capturingStillImage" options:NSKeyValueObservingOptionNew context:AVCaptureStillImageIsCapturingStillImageContext];
if([captureSession canAddOutput:stillImageOutput]){
[captureSession addOutput:stillImageOutput];
}
else{
// HANDLE ERROR
}
// Setting up the preview layer for the camera
AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession];
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
previewLayer.frame = self.view.bounds;
// ADDING FINAL VIEW layer TO THE CAMERA CANVAS VIEW sublayer
[self.view.layer addSublayer:previewLayer];
// start the session
[captureSession startRunning];
5) 最后,在 iOS5 中你可以设置最小和最大视频帧率,什么也可以提高你的应用程序的性能,我想这就是你问的。检查此链接(设置最小和最大视频帧速率):
http://developer.apple.com/library/mac/#releasenotes/AudioVideo/RN-AVFoundation/_index.html
希望我的回答很清楚。
祝愿
艺术
关于iphone - 控制帧速率或限制 AVCaptureVideoPreviewLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6493823/
我有这段代码,它发出黄色警告。我不知道如何编码,所以黄色警告消失了。从 Swift-2 -> 3 -> 4 转换后尝试清理我的代码。 if let previewLayer = AVCaptureVi
如何一次在屏幕上显示多个相机预览? 如果我开始一个新的 AVCaptureSession,另一个就会停止。如果我使用与另一个 session 相同的 session 初始化一个新的 AVCapture
我正在开发一个允许用户拍照的应用程序。我已经开始使用AVCam苹果提供了,但我实际上有一个问题只是我无法将相机层放置在我想要的位置,但它会自动放置在 View 的中心 在左侧,您可以看到我实际拥有的内
我在将 AVCaptureVideoPreviewLayer 安装在其父级范围内时遇到问题。 这是上下文代码: capturePreview = AVCaptureVideoPreviewLa
当我尝试扫描条形码时,我仍然将 AVCaptureVideoPreviewLayer 添加到我的整个 View 中,如果我将条形码放在 View 中心,它会扫描。请帮我解决问题 最佳答案 AVCapt
我试图首先让我的应用程序显示广角相机的相机预览。但我所做的只是没有显示出来。 (该应用程序具有视频和音频权限,正在 iPhone 7 Plus 上进行测试) 这是我的 session 配置代码: fu
我正在使用一个库,使用相机和视频在我的 swift 应用程序上创建自定义相机 https://github.com/yonat/CameraBackground 但是我遇到了延迟,当闪光灯设置关闭时,
是否可以像裁剪图像一样裁剪视频预览层? image .clipShape(Circle()) .overlay(Circle().stroke(Color.gr
我在 AVCaptureVideoPreviewLayer 方面遇到问题。我是这样创建的: self.previewLayer = [AVCaptureVideoPreviewLayer layerW
我正在尝试从 ios 设备的摄像头获取提要以显示在屏幕上,但我不想使用 ImagePickerController,因为我想更好地控制屏幕上 View 的外观,并且我想要更多地控制相机的光圈和采样率。
当我将我的设备从横向向左旋转到横向或从横向向右旋转时,AVCaptureVideoPreviewLayer 会上下颠倒。当我将设备从纵向模式旋转到横向模式时,它工作得很好。这是我的代码 { ov
我正在设置带有预览层的自定义相机。一切正常。我设置了方向和所有内容。请问如何设置自动对焦?第二,如何启动摄像头录制视频?(因为它只是显示前置摄像头显示的内容,你看到你了)...但是我想开始录制。 我更
我正在尝试在我的应用程序中显示自定义摄像头 View 的视频预览,但目前预览非常偏离中心 - 使用前置摄像头时尤其明显。 我是这样定位的: if let previewLayer = AVCaptur
我使用 AVCaptureVideoPreviewLayer 来显示预览视频层、来自该预览的样本图像并对其进行一些处理。该处理识别图像上的一些点并将它们返回。我想(几乎)实时地在预览层上显示这些点。
我有一个 iPhone 相机应用程序,我在其中使用了 AVCaptureVideoPreviewLayer。当有人拍摄照片/静止图像时,这会显示在新的 ViewController 中。一旦这个 Vi
我有一个 AVCaptureVideoPreviewLayer,我想将它填充到我的 UIView 的边界。不过,它似乎无法正常工作。它只显示在大约 3/4 的屏幕上。 CGRect bounds=se
我有一个应用程序可以添加一些实时动画和图像以在 AV Foundation 相机中预览 View 。我可以做“硬件屏幕截图”(按住侧边按钮和提高音量按钮),没问题。但是,我需要一个制作屏幕截图的按钮。
我正在使用 AVCaptureVideoPreviewLayer 来允许用户从 iPhone 相机拍摄照片。所以我有一个 AVCaptureSession,输入为 AVCaptureDeviceInp
如何获取 AVCaptureVideoPreviewLayer 中的图像大小: self.cameraPreviewLayer.frame = self.cameraView.frame; // (0
我目前正在我的 Swift 应用程序中处理 QR 扫描 View 。我想将 VideoPreview 置于 View 中间。 View 看起来像这样: View (白色)称为 ScanView,我想让
我是一名优秀的程序员,十分优秀!