Reputation: 16179
Any way to retrieve if a video from gallery is H.264 or HEVC by using PHPickerViewController
from PHAsset
?
Below are the images in H.264
and HEVC
from details information.
This image is H2.264
.
This image is HEVC
.
Anyway to get it or check if it's one of them?
Upvotes: 2
Views: 46
Reputation: 337
You can use PHImageManager to fetch the video as an AVAsset and inspect its codec information using AVAssetTrack and 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)
}
}
Of course, you could also create an async/await
version of the same function if needed.
Upvotes: 2