iOS PHAsset 用于检查视频是 HEVC 还是 H.264

问题描述 投票:0回答:1

有什么方法可以通过使用

PHPickerViewController
中的
PHAsset
来检索图库中的视频是否为 H.264 或 HEVC?

以下是

H.264
HEVC
中的图片来自详细信息。

这张图片是

H2.264

enter image description here

这张图片是

HEVC

enter image description here

无论如何要获取它或检查它是否是其中之一?

ios swift codec phpickerviewcontroller
1个回答
0
投票

您可以使用 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
版本。

© www.soinside.com 2019 - 2024. All rights reserved.