- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以在我的应用程序中,我正在录制视频。我想将录制视频的 fps 限制为 15 fps,因为如果速度更快,我在处理每一帧时都会遇到问题。该应用程序针对 iOS 5.0+,因此我不必担心比这更旧的 iOS 版本。
我知道要设置最大 fps,我可以使用 AVCaptureConnection 的 setVideoMinFrameDuration。我也知道要让它真正起作用,我还必须设置 VideoMaxFrameDuration。然而,在我的 iPad 上,AVCaptureConnection 的 isVideoMinFrameDurationSupported 似乎总是返回 false,因此我从未设置 videoMinFrameDuration,最终不得不回退到设置 AVCAPtureVideoDataOutput 的 minFrameDuration(这是一个已弃用的调用,并导致警告等。谁能解释为什么我不能设置 videoMinFrameDuration?
代码:
AVCaptureVideoDataOutput *videoDataOut = [[AVCaptureVideoDataOutput alloc] init];
NSDictionary *settings = [[NSDictionary alloc]
initWithObjectsAndKeys:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_420YpCbCr8BiPlanarFullRange],
(id)kCVPixelBufferPixelFormatTypeKey, nil];
videoDataOut.videoSettings = settings;
captureQueue = dispatch_queue_create("videoCaptureQueue", NULL);
[videoDataOut setSampleBufferDelegate:self queue:captureQueue];
videoDataOut.alwaysDiscardsLateVideoFrames = YES;
AVCaptureConnection *conn = [videoDataOut connectionWithMediaType:AVMediaTypeVideo];
// This if block is failing for some reason even though I'm running iOS 5.0+
if ([conn isVideoMinFrameDurationSupported] && [conn isVideoMaxFrameDurationSupported]){
[conn setVideoMinFrameDuration:CMTimeMake(1, pParams->fps)];
[conn setVideoMaxFrameDuration:CMTimeMake(1, pParams->fps)];
}
else {
videoDataOut.minFrameDuration = CMTimeMake(1, pParams->fps);
}
[captureSession addOutput:videoDataOut];
dispatch_release(captureQueue);
最佳答案
我解决了我的问题。您必须在尝试设置 minFrameDuration(或者就此而言,拉出 AVCaptureConnection)之前将输出添加到捕获 session 。
因此,新代码如下所示:
AVCaptureVideoDataOutput *videoDataOut = [[AVCaptureVideoDataOutput alloc] init];
NSDictionary *settings = [[NSDictionary alloc]
initWithObjectsAndKeys:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_420YpCbCr8BiPlanarFullRange],
(id)kCVPixelBufferPixelFormatTypeKey, nil];
videoDataOut.videoSettings = settings;
captureQueue = dispatch_queue_create("videoCaptureQueue", NULL);
[videoDataOut setSampleBufferDelegate:self queue:captureQueue];
videoDataOut.alwaysDiscardsLateVideoFrames = YES;
[captureSession addOutput:videoDataOut];
AVCaptureConnection *conn = [videoDataOut connectionWithMediaType:AVMediaTypeVideo];
if ([conn isVideoMinFrameDurationSupported] && [conn isVideoMaxFrameDurationSupported]){
[conn setVideoMinFrameDuration:CMTimeMake(1, pParams->fps)];
[conn setVideoMaxFrameDuration:CMTimeMake(1, pParams->fps)];
}
dispatch_release(captureQueue);
关于ios - AVCaptureConnection isVideoMinFrameDurationSupported 是假的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17089860/
我正在使用 AVCaptureMetadataOutput 检测 iOS 上的人脸,我正在尝试在用户旋转设备后设置视频的方向。但是,我似乎无法执行此操作,因为每次我在我的 AVCaptureMetad
所以在我的应用程序中,我正在录制视频。我想将录制视频的 fps 限制为 15 fps,因为如果速度更快,我在处理每一帧时都会遇到问题。该应用程序针对 iOS 5.0+,因此我不必担心比这更旧的 iOS
我在录制过程中遇到视频方向问题。 我正在使用 AVCaptureMovieFileOutput 使用 AVFoundation 录制视频。在开始录制之前,我可以使用 AVCaptureConnecti
根据 this document与视频帧最大和最小持续时间相关的属性和方法: 支持VideoMaxFrameDuration 支持VideoMinFrameDuration videoMaxFrame
我有一个问题,我有一个 UIPinchGestureRecognizer,我用它来缩放我的相机预览和相应的 AVCaptureConnection 进出。第一次放大和缩小没有问题,直到完成捏合缩放后松
我正在尝试在 AVCaptureConnection 上设置像素格式类型,但它会终止所有 RGB 设置,但适用于 kCVPixelFormatType_32BGRA。 Terminating app
我正在使用 PBJVision实现点击录制视频功能。该库尚不支持方向,因此我正在尝试对其进行设计。据我所知,有三种旋转视频的方法-我需要帮助来确定最佳前进方式以及如何实现它.请注意,旋转可能发生在点击
我是一名优秀的程序员,十分优秀!