AVURLAsset getting video size
Resolution in Swift 3:
func resolutionSizeForLocalVideo(url:NSURL) -> CGSize? {
guard let track = AVAsset(URL: url).tracksWithMediaType(AVMediaTypeVideo).first else { return nil }
let size = CGSizeApplyAffineTransform(track.naturalSize, track.preferredTransform)
return CGSize(width: fabs(size.width), height: fabs(size.height))
}
For Swift 4:
func resolutionSizeForLocalVideo(url:NSURL) -> CGSize? {
guard let track = AVAsset(url: url as URL).tracks(withMediaType: AVMediaType.video).first else { return nil }
let size = track.naturalSize.applying(track.preferredTransform)
return CGSize(width: fabs(size.width), height: fabs(size.height))
}
Solutions without preferredTransform
do not return correct values for some videos on the latest devices!
I just checked the documentation online, and the naturalSize
method is deprecated for the AVAsset object. However, there should always be an AVAssetTrack which refers to the AVAsset, and the AVAssetTrack has a naturalSize
method that you can call.
naturalSize
The natural dimensions of the media data referenced by the track. (read-only)
@property(nonatomic, readonly) CGSize naturalSize
Availability
Available in iOS 4.0 and later. Declared In AVAssetTrack.h
Via: AVAssetTrack Reference for iOS