AVAssetTrack的preferredTransform有时似乎是错误的如何解决?

问题描述

我正在使用AVAssetExportSession在iOS应用中导出视频。为了以正确的方向呈现视频,我使用了AVAssetTrack的{​​{1}}。对于某些源视频,此属性似乎具有错误的值,并且视频在结果中显示为偏移或完全黑色。我该如何解决

解决方法

preferredTransformpreferredTransform。属性CGAffineTransformabc是反射矩阵和旋转矩阵的串联,而属性dtx描述了翻译。在我用错误的ty观察到的所有情况下,反射/旋转部分似乎都是正确的,只有平移部分包含错误的值。一个可靠的解决方法似乎是检查preferredTransformabc(总共8个案例,每个案例对应于d中的案例),并且相应地更新UIImageOrientationtx

ty
,

我认为我最终做了一些更强大的事情,我根据它最终的位置取消了转换:

auto naturalFrame = CGRectMake(0,naturalSize.width,naturalSize.height);
auto preferredFrame = CGRectApplyAffineTransform(naturalFrame,preferredTransform);
preferredTransform.tx -= preferredFrame.origin.x;
preferredTransform.ty -= preferredFrame.origin.y;

请注意,您不能只在 (0,0) 上应用变换,因为 CGRect.origin 会考虑翻转之类的事情。