iOS 8 AVFoundation-如何在功能强大的设备上实现视频稳定

iOS 8 AVFoundation-如何在功能强大的设备上实现视频稳定,ios,objective-c,swift,avfoundation,Ios,Objective C,Swift,Avfoundation,听到我正在做的一些新iPhone视频应用上的视频稳定功能,我很兴奋,但是你如何在一个功能强大的设备上为录制会话启用它呢? 查看API文档,只有一种方法可以检查它是否受支持,iOS 8中不推荐使用打开/关闭它的方法。是自动的还是什么的 您需要设置视频AVCaptureConnection的preferredVideoStabilizationMode属性,其默认值为AVCaptureVideoStabilizationModeOff,因此不会自动设置 self.videoConnection =

听到我正在做的一些新iPhone视频应用上的视频稳定功能,我很兴奋,但是你如何在一个功能强大的设备上为录制会话启用它呢? 查看API文档,只有一种方法可以检查它是否受支持,iOS 8中不推荐使用打开/关闭它的方法。是自动的还是什么的


您需要设置视频AVCaptureConnection的preferredVideoStabilizationMode属性,其默认值为AVCaptureVideoStabilizationModeOff,因此不会自动设置

self.videoConnection = [self.videoOut connectionWithMediaType:AVMediaTypeVideo];
if (self.videoConnection.supportsVideoStabilization) {
        self.videoConnection.preferredVideoStabilizationMode = AVCaptureVideoStabilizationModeAuto;
}
要获取连接的当前AVCaptureVideoStabilizationMode,请读取其activeVideoStabilizationMode属性

从苹果的文档中:

@属性首选视频稳定模式

此属性仅适用于涉及视频的AVCaptureConnection实例。 在支持视频稳定功能的设备上,只有可用源的子集 格式可用于稳定。通过设置PreferredVideoStabilization模式 属性设置为AVCaptureVideoStabilizationModeOff以外的值,则通过接收器的视频流将稳定 当模式可用时。启用视频稳定将为视频捕获管道和 可能会消耗更多的系统内存,具体取决于稳定模式和格式。如果首选稳定模式不可用, activeVideoStabilizationMode将设置为AVCaptureVideoStabilizationModeOff。客户可能会遵守关键价值观 activeVideoStabilizationMode属性以了解哪个稳定模式正在使用或何时关闭。默认值 是AVCaptureVideoStabilizationModeOff(视频稳定模式关闭)。将此属性设置为AVCaptureVideoStabilizationModeAuto时,将使用适当的 将根据格式和帧速率选择稳定模式。对于iOS 6.0之前链接的应用程序,默认值为 是连接到AVCaptureMovieFileOutput实例的视频连接的AVCaptureVideoStabilization标准。 对于在iOS 6.0上或之后链接的应用程序,默认值始终为AVCaptureVideoStabilizationModeOff。设置视频稳定 使用此属性的模式可能会在可用时更改EnablesVideoStabilization的值


这个问题是关于iOS8的视频稳定;我只是想添加一些代码,以防人们试图在相机代码中支持早于iOS8的版本

    AVCaptureConnection *videoConnection = [self.captureVideoDataOutput connectionWithMediaType:AVMediaTypeVideo];

    if ([videoConnection isVideoStabilizationSupported]) {
        if ([videoConnection respondsToSelector:@selector(setPreferredVideoStabilizationMode:)]) { // for iOS8+
            [videoConnection setPreferredVideoStabilizationMode:AVCaptureVideoStabilizationModeAuto];
        } else { // otherwise default to pre iOS8 way of doing it
            [videoConnection setEnablesVideoStabilizationWhenAvailable:YES];
        }
    }
请注意,编译器将在iOS8之前的方法调用中引入一个弃用警告。如果您对警告也有强迫症,您可以通过使用#pragma包围对折旧方法的调用来抑制它,如下所示:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[videoConnection setEnablesVideoStabilizationWhenAvailable:YES];
#pragma clang diagnostic pop
如果有人感兴趣,请从以下网站获取更多信息:

iOS 6在iPhone 4s上引入了对视频稳定的API支持。iPhone 6和6 Plus上的背面摄像头支持一种更具攻击性、戏剧性和流畅的算法,称为“电影视频稳定”。与标准视频稳定相比,这种稳定方法减少了摄像机的视野,与标准视频稳定相比,在视频捕获管道中引入了更多的延迟,并且消耗了更多的系统内存。由于这些原因,它在默认情况下不启用,必须在中选择才能使用

使用电影视频稳定时,建议您使用窄或相同的最小和最大帧持续时间,以保持延迟的一致性和可管理性。iphone6和6plus还支持早期产品中使用的标准(较低延迟,不太引人注目)视频稳定算法。以前,AVCaptureConnection允许您通过调用AVCaptureConnection setEnablesVideoStabilizationWhenAvailable:方法选择视频稳定。AV基金会现在支持多种类型的视频稳定,因此该方法已被弃用(连同AvCopSuthCopyVoDealSudioActuabase::)有利于一种新的方法,AvCopStCueldTestRead视频稳定模式:./P> 您可以将首选视频稳定模式设置为4个常量之一:AVCaptureVideoStabilizationModeOff、AVCaptureVideoStabilizationModesModeStandard、AVCaptureVideoStabilizationModeCinematic或AVCaptureVideoStabilizationModeAuto。您可以通过调用AVCaptureDeviceFormat isVideoStabilizationModeSupported:,查询AVCaptureDevice activeFormat属性以确定其支持的稳定模式。将首选稳定模式设置为AVCaptureVideoStabilizationModeOff之外的常数不会强制视频稳定打开。某些设备格式和AVCaptureOutput不支持稳定。要确定实际使用的是哪种视频稳定模式,您可以通过观察AVCaptureConnection activeVideoStabilizationMode属性来设置关键值。当您将首选稳定模式设置为AVCaptureVideoStabilizationModeAuto时,将根据使用的格式和帧速率选择适当的稳定模式。目前,只有1080p30和1080p60视频格式支持电影稳定。preferredVideoStabilizationMode的默认值为AVCaptureVideoStabilizationModeOff。与早期产品一样,只有16:9视频格式支持稳定