Ios AVAssetWriter编解码器类型hevc

Ios AVAssetWriter编解码器类型hevc,ios,avfoundation,avassetwriter,hevc,avassetwriterinput,Ios,Avfoundation,Avassetwriter,Hevc,Avassetwriterinput,我试图使用AVAssetWriter将H264视频转码到HEVC,但在iPhone 6s上失败了。据推测,iPhone6S支持HEVC进行转码,而不是实时视频编码。同样的代码也适用于iPhone7及以上版本。如果iPhone 6s不支持HEVC编解码器,我们如何在运行时以编程方式确定支持的编解码器 let bitrate = trackBitrate / 5 let trackDimensions = trackSize let compressionSettings: [String: An

我试图使用AVAssetWriter将H264视频转码到HEVC,但在iPhone 6s上失败了。据推测,iPhone6S支持HEVC进行转码,而不是实时视频编码。同样的代码也适用于iPhone7及以上版本。如果iPhone 6s不支持HEVC编解码器,我们如何在运行时以编程方式确定支持的编解码器

let bitrate = trackBitrate / 5 
let trackDimensions = trackSize
let compressionSettings: [String: Any] = [
    AVVideoAverageBitRateKey: bitrate,
    AVVideoMaxKeyFrameIntervalKey: 30,
    AVVideoProfileLevelKey: kVTProfileLevel_HEVC_Main_AutoLevel
]
var videoSettings: [String : Any] = [
    AVVideoWidthKey: trackDimensions.width,
    AVVideoHeightKey: trackDimensions.height,
    AVVideoCompressionPropertiesKey: compressionSettings
]

videoSettings[AVVideoCodecKey] =  AVVideoCodecType.hevc

我最后就是这样做的

if #available(iOS 11.0, *),  AVCaptureVideoDataOutput().availableVideoCodecTypes.contains(.hevc) {
    // use .hevc settings here
} else {
    // use .h264 settings here
}

如果您的应用程序针对的是,则需要进行
#available
检查,以使编译器满意。您可以通过以下代码获得iPhone型号:

+ (NSString *) deviceModel {
    struct utsname systemInfo;
    uname(&systemInfo);

    return [NSString stringWithCString: systemInfo.machine encoding: NSUTF8StringEncoding];
}
并确定iPhone 6S是否禁用H265编码,以及上面的iPhone 7是否启用H265编码