gpt4 book ai didi

iphone - 控制帧速率或限制 AVCaptureVideoPreviewLayer

转载 作者:可可西里 更新时间:2023-11-01 04:42:46 33 4
gpt4 key购买 nike

我正在使用 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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com