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

另一方面,当我将肖像资产添加到AVMutableComposition时,它会横向显示。大概是因为AVMutableCompositionTrack仅具有默认的preferredTransform CGAffineTransformIdentity

我想要的是让自己的AVMutableComposition兑现我添加到资产中的资产的preferredTransform,以便所有内容都能正确显示。

第2部分

我知道我可以通过向AVMutableVideoCompositionLayerInstructions提供合成指令(AVAssetExportSession)来执行视频旋转,例如here所述。但是我还不想导出视频。
AVAssetExportSession是唯一将AVMutableVideoComposition作为输入的类吗?

第三部分

我正在尝试播放将要导出的视频的预览,唯一的合成操作是对肖像或风景的转换。因此,我认为应该有一种更轻量的方法来执行此操作,而不必在用户每次更改可变成分时都运行AVAssetExportSession。这是正确的吗?

在旁边

顺便说一句,我想我不明白为什么AVMutableVideoComposition本身不是AVAsset的后代,而不是AVMutableComposition的后代。然后,您可以直接演奏该乐曲。

最佳答案

   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。

07-27 21:46