确定iOS设备是否可以支持HEVC编码

时间:2018-06-20 19:54:59

标签: swift encode codec hevc h.265

我的问题是我想使用AVVideoCodecHEVC。我知道它仅在iOS 11中可用,但没有A10芯片的设备不支持它。

因此,使用 if #available(iOS 11.0, *) { let self.codec = AVVideoCodecHEVC } 如果使用不带A10芯片的iPhone 6这样的设备,将抛出Cannot Encode错误。有没有人能够弄清楚运行iOS 11的设备是否可以支持HEVC?

3 个答案:

答案 0 :(得分:9)

您可以使用VideoToolbox检查iOS设备或Mac是否具有硬件编码支持:

/// Whether or not the current device has an HEVC hardware encoder.
public static let hasHEVCHardwareEncoder: Bool = {
    let spec: [CFString: Any]
    #if os(macOS)
        spec = [ kVTVideoEncoderSpecification_RequireHardwareAcceleratedVideoEncoder: true ]
    #else
        spec = [:]
    #endif
    var outID: CFString?
    var properties: CFDictionary?
    let result = VTCopySupportedPropertyDictionaryForEncoder(width: 1920, height: 1080, codecType: kCMVideoCodecType_HEVC, encoderSpecification: spec as CFDictionary, encoderIDOut: &outID, supportedPropertiesOut: &properties)
    if result == kVTCouldNotFindVideoEncoderErr {
        return false // no hardware HEVC encoder
    }
    return result == noErr
}()

一种更高级别的检查方法是查看AVAssetExportSession是否支持HEVC预设之一:

AVAssetExportSession.allExportPresets().contains(AVAssetExportPresetHEVCHighestQuality)

有关更多信息,请参见“Working with HEIF and HEVC” from WWDC 2017

答案 1 :(得分:0)

HEVC media on Apple devices

使用iOS 11或更高版本时,这些设备可以捕获HEIF或HEVC格式的媒体:

iPhone 7 or iPhone 7 Plus or later
iPad (6th generation)
iPad Pro (10.5 inch)
iPad Pro 12.9-inch (2nd generation)

答案 2 :(得分:0)

使用AVFoundation:

let isHEVC = AVOutputSettingsAssistant.availableOutputSettingsPresets().contains(.hevc3840x2160)

...或 AVOutputSettingsPreset 枚举

中的其他预设