如何使用AVAssetExportSession在AVMutableComposition上正确导出CALayer

时间:2011-07-19 14:52:59

标签: iphone core-animation avfoundation avmutablecomposition avassetexportsession

我知道之前曾问过这个问题(例如herehere),但我无法弄清楚我做错了什么。

我有AVMutableComposition用于将一些视频片段与一些CALayer组合在一起的动画片。

当我使用AVMutableComposition并将其与AVSynchronizedLayer合并以在AVPlayerLayer内播放时,一切正常。视频输出正确,一切都放在应有的位置。

我的问题是,当我尝试导出此内容时,我尝试使用AVVideoCompositionCoreAnimationTool代替AVSynchronizedLayer(这是文档中我们应该用于导出的内容)和AVAssetExportSession,但出了点问题,因为在导出的电影中,每CALayer个坐标系都反转。

因此,如果在播放期间,当我导出电影时,0,0点位于屏幕的左上角角落,0点位于左下角< / strong>角落因此我的动画疯了。

我阅读了有关此内容的任何可能的文章,我还从Apple下载了AVVideoEdit示例,但我无法看到发生了什么......

2 个答案:

答案 0 :(得分:17)

对于任何遇到同样问题的人,我终于找到了答案。在导出之前,您需要将CALayer设置为geometryFlipped的每个YES都有一个属性,一切都会正常。更多信息here

答案 1 :(得分:0)

Methods that fixing frames and points
- (CGRect) fixRect:(CGRect)rect inRect:(CGRect)container
{
    CGRect frame = rect;
    frame.origin.y = container.size.height - frame.origin.y - frame.size.height;
    return frame;
}
- (CGPoint) fixPoint:(CGPoint)point fromPoint:(CGSize)containerSize
{
    CGPoint frame = point;
    frame.y = containerSize.height - frame.y;
    return frame;
}