iOS- 获取本地视频宽度高度分辨的问题(普通百度的答案有问题)
2018-12-11 本文已影响14人
我是何先生
最近在搞视频上传,通过七牛云可以获取视频的缩略图,但是需要手动设置宽度和高度,这样就不能够按照视频本身的比例动态设置缩略图片的宽高了.(有知道的记得告诉我)所以解决方案是上传的时候就把视频的分辨率也上传。百度了一下,网上的答案大部分都是复制粘贴,而且都是有点问题。
百度普遍的答案
AVAsset *asset = [AVAsset assetWithURL:url];
NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeVideo];
if([tracks count] > 0) {
AVAssetTrack *videoTrack = [tracks objectAtIndex:0];
CGAffineTransform t = videoTrack.preferredTransform;//这里的矩阵有旋转角度,转换一下即可
NSLog(@"=====hello width:%f===height:%f",videoTrack.naturalSize.width,videoTrack.naturalSize.height);//宽高
这个是百度的答案,本身是没有问题的,size导出后,宽度和高度被对调了,估计是由于默认的旋转的角度有问题
新的方法
AVAsset *asset = [AVAsset assetWithURL:url];
NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeVideo];
AVAssetTrack *videoTrack = tracks[0];
CGSize videoSize = CGSizeApplyAffineTransform(videoTrack.naturalSize, videoTrack.preferredTransform);
videoSize = CGSizeMake(fabs(videoSize.width), fabs(videoSize.height));
这里配合旋转的方向出来的宽度和高度是正确的,但是你会发现是被转换出来的size是负数,所以这里取绝对值。