苹果公司宣布了对运行A10 11的iOS设备的编码支持,以及对运行iOS 11的A9设备的HEVC解码支持。
在创建这些硬件编解码器之前,如何检查当前设备是否支持该功能?
芯片是什么?A8、A9或A10没有硬编码模型。
发布于 2017-08-10 10:01:27
不要检查特定的SOC,检查实际需要的功能。您需要VideoToolbox调用VTIsHardwareDecodeSupported,传递kCMVideoCodeType_HEVC键:
VTIsHardwareDecodeSupported(kCMVideoCodeType_HEVC)然而,如果您需要的话,iOS会为HEVC提供软件解码器备份。
编辑:啊,对不起-我看错了,以为你在说解码。对于编码,您可以使用VTCopySupportedPropertyDictionaryForEncoder获取所需的内容,使用kCMVideoCodeType_HEVC并指定要编码的参数。我不知道iOS是否有一个用于HEVC的后备软件编码器,所以这可能会给出错误的结果。
发布于 2018-05-28 21:45:09
对于编码器,我无法找到一种正式的方法,但这似乎适用于我的测试:
#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;
}发布于 2018-06-22 14:43:50
坎索在斯威夫特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
}https://stackoverflow.com/questions/45610236
复制相似问题