4

我尝试使用 AVAssetWriter 将 H264 视频转码为 HEVC,但在 iPhone 6s 上失败。据说,iPhone 6s 支持 HEVC 进行转码,而不是实时视频编码。相同的代码适用于 iPhone 7 及更高版本。如果 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
4

2 回答 2

1

您可以通过以下代码获取 iPhone 型号:

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

    return [NSString stringWithCString: systemInfo.machine encoding: NSUTF8StringEncoding];
}

并确定 iPhone 6S 是否禁用 H265 编码,iPhone7 以上是否启用 H265 编码。

于 2019-09-06T23:27:22.797 回答
1

我最终这样做了

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

如果您的#available应用程序的目标是 < iOS 11,则需要进行检查以使编译器满意

于 2019-01-03T11:54:58.550 回答