joe*_*ick 5 iphone cocoa-touch ios
我正在使用AVCaptureVideoPreviewLayer来允许用户从iPhone相机拍摄一张照片.所以我有一个AVCaptureSession,其输入为AVCaptureDeviceInput,输出为AVCaptureStillImageOutput.
我还在视频输入的顶部有动画和控件,但这些都很慢而且生涩,因为背后的视频以最大帧速率运行并且占用了CPU/GPU.
我想限制AVCaptureVideoPreviewLayer的帧速率.我看到AVCaptureVideoDataOutput上有minFrameDuration属性,但我在AVCaptureVideoPreviewLayer上找不到类似的东西.
我不认为问题与帧速率有关。因此,我将建议一些提高应用程序性能的技巧:
1) AVCaptureVideoPreviewLayer 它只是 CALayer 的子类,用于显示相机的输出,因此不可能限制其帧速率。
2)检查你的动画是否放置在正确的位置,这取决于你有什么样的动画,如果是CALayer那么动画层应该是你的主画布视图层的子层(不是AVCaptureVideoPreviewLayer!!!),如果是是 UIView,那么它必须是主画布视图的子视图。
3) 您可以通过设置会话预设来提高应用程序的性能:
[captureSession setSessionPreset:AVCaptureSessionPresetLow];
Run Code Online (Sandbox Code Playgroud)
默认情况下它设置为高,您可以根据需要设置它,这只是视频质量,如果是高性能可能不太理想。
4)我制作了自己的测试应用程序,其中随机动画覆盖视频预览层(但它是我的主视图的子视图!!!),即使在我的旧iPod上一切都很顺利,我可以给你一个捕获初始化的代码会议:
// 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];
Run Code Online (Sandbox Code Playgroud)
5)最后,在iOS5中,您可以设置最小和最大视频帧速率,这也可以提高您的应用程序的性能,我想这就是您所要求的。检查此链接(设置最小和最大视频帧速率):
http://developer.apple.com/library/mac/#releasenotes/AudioVideo/RN-AVFoundation/_index.html
希望我的回答是清楚的。
最好的祝愿,
阿尔乔姆
| 归档时间: |
|
| 查看次数: |
1861 次 |
| 最近记录: |