我正在使用AlAssetsGroup enumerateAssetsAtIndexes
列出照片(相机)应用程序中的资源。 对于给定的视频资源,我想确定它是以纵向还是横向模式拍摄的。
在以下代码中,asset是一个AlAsset
,我已经测试过它是否为视频资源[asset valueForProperty:ALAssetPropertyType]
是AlAssetTypeVideo
,然后:
int orientation = [[asset valueForProperty:ALAssetPropertyOrientation] intValue];
在这种情况下,orientation
始终为0,即ALAssetOrientationUp
。也许这是可以预见的,所有视频都是正立的,但纵向视频在MPEG-4中表示为横向视频旋转90度(即所有视频实际上都是横向的,如果不相信,请尝试在mac上使用MediaInfo应用程序)。我该在文件的哪个位置或者如何访问信息,以便告诉我它实际上是在竖直方向拍摄的? 我还尝试过这个,给出了资源的URL:AVURLAsset *avAsset = [[AVURLAsset alloc] initWithURL:url options:nil];
CGSize size = [avAsset naturalSize];
NSLog(@"size.width = %f size.height = %f", size.width, size.height);
CGAffineTransform txf = [avAsset preferredTransform];
NSLog(@"txf.a = %f txf.b = %f txf.c = %f txf.d = %f txf.tx = %f txf.ty = %f",
txf.a, txf.b, txf.c, txf.d, txf.tx, txf.ty);
对于iPhone 4而言,宽度始终大于高度,因此宽度为1280,高度为720,转换的“a”和“d”值为1.0
,其他值为0.0
,不考虑拍摄方向。
我使用Mac上的MediaInfo应用程序查看了元数据,也进行了Hexdump,到目前为止没有发现横向和纵向视频之间的任何区别。但是QuickTime知道并垂直显示竖向视频,并且如果在播放时将手机保持为横向方向,则通过旋转纵向视频来正确地显示它。
顺便说一句,我无法使用ffmpeg
(无法接受许可限制)。是否有iPhone SDK本地方法可以实现这一点?