如何在AVMutableComposition中组合纵向和横向资源进行预览

时间:2014-05-29 07:33:51

标签: ios avfoundation avassetexportsession avmutablecomposition avasset

我的AVAssets是纵向和横向。当我使用AVPlayer一次一个地播放它们时,它们会以正确的方向播放。因此AVPlayer正在阅读每个视频AVAssetTrack preferredTransform并进行相应调整。

另一方面,当我将纵向资产添加到AVMutableComposition时,它会向侧面显示。大概这是因为AVMutableCompositionTrack只有preferredTransform的默认CGAffineTransformIdentity

我想要的是AVMutableComposition尊重我添加的preferredTransform资产,以便一切正常显示。

第2部分

我知道我可以通过向AVMutableVideoCompositionLayerInstructions提供合成指令(AVAssetExportSession)来执行视频轮播,例如解释here。但我还不想导出视频。

AVAssetExportSession是唯一以AVMutableVideoComposition作为输入的类吗?

第3部分

我正在尝试播放我即将导出的视频的预览,而唯一的合成操作是对纵向或横向的转换。所以我认为应该有一个更轻量级的方法,每次用户更改可变组合时都不会运行AVAssetExportSession。这是正确的吗?

除了

顺便说一句,我想我不明白为什么AVMutableVideoComposition本身不是AVAsset的后代AVMutableComposition。然后你可以直接播放作曲。

2 个答案:

答案 0 :(得分:1)

   AVPlayerItem * item item = [[AVPlayerItem alloc] initWithAsset:[collageComposition mutableCopy]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:item];
item.videoComposition = [collageVideoComposition mutableCopy];
[item setSeekingWaitsForVideoCompositionRendering:NO];
item.audioMix = audioMix;
self.previewPlayer = [AVPlayer playerWithPlayerItem:item];

这就是预览所需的全部内容。如果您在animationTool AVPlayer中使用AVMutableVideoComposition,请不要支持它。使用AVSynchronizedLayer实现此目的。

答案 1 :(得分:0)

啊,AVPlayerItem有一个videoComposition属性。修改AVPlayerItem适用于预览显示。