确定 iOS 设备是否可以支持 HEVC 编码
Determine if iOS device can support HEVC encoding
我的问题是我想使用 AVVideoCodecHEVC
。我知道它仅在 iOS 11 中可用,但没有 A10 芯片的设备不支持它。
所以,使用
if #available(iOS 11.0, *) { let self.codec = AVVideoCodecHEVC }
如果使用没有 A10 芯片的 iPhone 6 之类的设备,将抛出 Cannot Encode
错误。有没有人能弄清楚设备 运行 iOS 11 是否可以支持 HEVC?
您可以使用 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。
使用 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)
使用 AVFoundation:
let isHEVC = AVOutputSettingsAssistant.availableOutputSettingsPresets().contains(.hevc3840x2160)
...或 AVOutputSettingsPreset 枚举中的其他预设
我的问题是我想使用 AVVideoCodecHEVC
。我知道它仅在 iOS 11 中可用,但没有 A10 芯片的设备不支持它。
所以,使用
if #available(iOS 11.0, *) { let self.codec = AVVideoCodecHEVC }
如果使用没有 A10 芯片的 iPhone 6 之类的设备,将抛出 Cannot Encode
错误。有没有人能弄清楚设备 运行 iOS 11 是否可以支持 HEVC?
您可以使用 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。
使用 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)
使用 AVFoundation:
let isHEVC = AVOutputSettingsAssistant.availableOutputSettingsPresets().contains(.hevc3840x2160)
...或 AVOutputSettingsPreset 枚举中的其他预设