我有纵向和横向的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。