在创建这些硬件编解码器之前,如何检查当前设备是否支持该功能?
什么是芯片? A8,A9或A10没有硬编码模型。
答案 0 :(得分:3)
不要检查特定的SOC,检查您真正想要的功能。您需要传递视频工具箱VTIsHardwareDecodeSupported
,并传递kCMVideoCodeType_HEVC
密钥:
VTIsHardwareDecodeSupported(kCMVideoCodeType_HEVC)
但是,如果您需要,iOS会为HEVC提供软件解码器后备功能。
编辑:啊,对不起 - 我误读了,以为你在谈论解码。对于编码,您可以使用kCMVideoCodeType_HEVC
并使用setSupportActionBar(toolbar);
并指定要编码的参数来获得所需的VTCopySupportedPropertyDictionaryForEncoder
。我不知道iOS是否有针对HEVC的回退软件编码器,因此可能会给出误报。
答案 1 :(得分:2)
对于编码器,我找不到正式方法,但这似乎适用于我的测试:
#import <AVFoundation/AVFoundation.h>
#import <VideoToolbox/VideoToolbox.h>
- (BOOL)videoCodecTypeHevcIsSuppored {
if (@available(iOS 11, *)) {
CFMutableDictionaryRef encoderSpecification = CFDictionaryCreateMutable( NULL,0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(encoderSpecification, kVTCompressionPropertyKey_ProfileLevel, kVTProfileLevel_HEVC_Main_AutoLevel);
CFDictionarySetValue(encoderSpecification, kVTCompressionPropertyKey_RealTime, kCFBooleanTrue);
OSStatus status = VTCopySupportedPropertyDictionaryForEncoder(3840, 2160, kCMVideoCodecType_HEVC, encoderSpecification, nil, nil);
if (status == kVTCouldNotFindVideoEncoderErr) {
return NO;
}
return YES;
}
return NO;
}
答案 2 :(得分:0)
kanso在Swift 4中的绝佳答案。
假设我们仅定位iOS11或更高版本,并添加了额外的支票:
import AVFoundation
import VideoToolbox
@available (iOS 11, *)
func isHEVCHardwareEncodingSupported() -> Bool {
let encoderSpecDict : [String : Any] =
[kVTCompressionPropertyKey_ProfileLevel as String : kVTProfileLevel_HEVC_Main_AutoLevel,
kVTCompressionPropertyKey_RealTime as String : true]
let status = VTCopySupportedPropertyDictionaryForEncoder(3840, 2160,
kCMVideoCodecType_HEVC,
encoderSpecDict as CFDictionary,
nil, nil)
if status == kVTCouldNotFindVideoEncoderErr {
return false
}
if status != noErr {
return false
}
return true
}