我有纵向和横向的 AVAssets
。当我使用 AVPlayer
一次播放它们时,它们会以正确的方向播放。所以 AVPlayer
正在读取每个视频的 AVAssetTrack
preferredTransform
并进行相应调整。
另一方面,当我将肖像 Assets 添加到 AVMutableComposition
时,它会横向显示。大概这是因为 AVMutableCompositionTrack
只是有一个默认的 preferredTransform
为 CGAffineTransformIdentity
。
我想要的是让我的 AVMutableComposition
尊重我添加到其中的 Assets 的 preferredTransform
,以便一切都正确显示。
第 2 部分
我知道我可以通过向 AVAssetExportSession
提供合成指令 (AVMutableVideoCompositionLayerInstructions
) 来执行视频旋转,例如 here .但我还不想导出视频。
AVAssetExportSession
是唯一一个将 AVMutableVideoComposition
作为输入的类吗?
第 3 部分
我正在尝试播放即将导出的视频的预览,唯一的合成操作是转换为纵向或横向。所以我认为应该有一种更轻量级的方法来做到这一点,而不是每次用户更改可变组合时都运行 AVAssetExportSession
。这是正确的吗?
放在一边
顺便说一句,我想我不明白为什么 AVMutableVideoComposition
本身不像 AVMutableComposition
那样是 AVAsset
的后代。然后你就可以直接演奏作曲了。
最佳答案
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];
这就是您预览所需的全部内容。如果您在 AVMutableVideoComposition
中使用 animationTool
AVPlayer 不支持它。为此目的使用 AVSynchronizedLayer。
关于ios - 如何在 AVMutableComposition 中组合纵向和横向资源进行预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23928149/