这是相当令人沮丧的。我正在尝试获取AVURLasset的大小,但尽量避免使用naturalSize,因为Xcode告诉我,在iOS5中这是不推荐使用的。
但是:替代方案是什么?
我找不到任何关于如何获得视频尺寸的线索,而不使用«naturalsize»...
发布于 2012-05-04 00:17:37
我刚刚在线查看了文档,AVAsset对象不推荐使用naturalSize方法。但是,应该始终有一个引用AVAsset的AVAssetTrack,并且AVAssetTrack有一个您可以调用的naturalSize方法。
naturalSize
轨道引用的媒体数据的自然维度。(只读)
@property(非原子,只读) CGSize naturalSize
Availability
在iOS 4.0及更高版本中可用。在AVAssetTrack.h中声明
途径:AVAssetTrack Reference for iOS
发布于 2015-12-19 06:36:01
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))
}对于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))
}没有preferredTransform的解决方案不会为最新设备上的某些视频返回正确的值!
发布于 2013-08-20 08:16:01
deprecation warning on the official documentation建议,“在适当的情况下,使用资产视频轨道的naturalSize和preferredTransform (请参阅tracksWithMediaType:)。”
我将我的代码从:
CGSize size = [movieAsset naturalSize];至
CGSize size = [[[movieAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] naturalSize];它现在不那么漂亮了,也不太安全了,但当他们放弃这个方法时,它不会崩溃。
https://stackoverflow.com/questions/10433774
复制相似问题