有什么方法可以通过使用
PHPickerViewController
中的 PHAsset
来检索图库中的视频是否为 H.264 或 HEVC?
以下是
H.264
和HEVC
中的图片来自详细信息。
这张图片是
H2.264
。
这张图片是
HEVC
。
无论如何要获取它或检查它是否是其中之一?
您可以使用 PHImageManager 将视频作为 AVAsset 获取,并使用 AVAssetTrack 和 CMFormatDescription 检查其编解码器信息。
import Photos
import AVFoundation
func checkVideoCodec(for asset: PHAsset, completion: @escaping (String?) -> Void) {
guard asset.mediaType == .video else {
completion(nil)
return
}
let options = PHVideoRequestOptions()
options.version = .original
options.isNetworkAccessAllowed = true
PHImageManager.default().requestAVAsset(forVideo: asset, options: options) { avAsset, _, _ in
guard let urlAsset = avAsset as? AVURLAsset else {
completion(nil)
return
}
if let track = urlAsset.tracks(withMediaType: .video).first,
let formatDescriptions = track.formatDescriptions as? [CMFormatDescription] {
for formatDescription in formatDescriptions {
let codecType = CMFormatDescriptionGetMediaSubType(formatDescription)
switch codecType {
case kCMVideoCodecType_HEVC:
completion("HEVC (H.265)")
return
case kCMVideoCodecType_H264:
completion("H.264")
return
default:
completion("Unknown Codec")
return
}
}
}
completion(nil)
}
}
当然,如果需要,您也可以创建相同功能的
async/await
版本。