使用setActiveVideoMinFrameDuration设置帧率为60fps时应用Crash
程序员文章站
2024-03-26 11:41:53
...
用如下方式设置帧率为60fps时,app 会crash
// 会崩溃
AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
[captureDevice lockForConfiguration:NULL];
[captureDevice setActiveVideoMinFrameDuration:CMTimeMake(1, frameRate)];
[captureDevice unlockForConfiguration];
故更改设置fps的写法
AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
for(AVCaptureDeviceFormat *vFormat in [videoDevice formats] ) {
CMFormatDescriptionRef description= vFormat.formatDescription;
float maxRate = ((AVFrameRateRange*) [vFormat.videoSupportedFrameRateRanges objectAtIndex:0]).maxFrameRate;
if (maxRate > frameRate - 1 &&
CMFormatDescriptionGetMediaSubType(description)==kCVPixelFormatType_420YpCbCr8BiPlanarFullRange) {
if ([videoDevice lockForConfiguration:nil]) {
videoDevice.activeFormat = vFormat;
[videoDevice setActiveVideoMinFrameDuration:CMTimeMake(10, frameRate * 10)];
[videoDevice setActiveVideoMaxFrameDuration:CMTimeMake(10, frameRate * 10)];
[videoDevice unlockForConfiguration];
break;
}
}
}