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

标签 ios avfoundation avassetexportsession avmutablecomposition avasset

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

另一方面,当我将肖像 Assets 添加到 AVMutableComposition 时,它会横向显示。大概这是因为 AVMutableCompositionTrack 只是有一个默认的 preferredTransformCGAffineTransformIdentity

我想要的是让我的 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/

相关文章:

ios - 如何获得与 AVCaptureVideoPreviewLayer 相同的纵横比的 AVCaptureStillImageOutput?

iphone - 使用 AVAssetExportSession 从 3gp 视频文件导出音频

ios - AVAssetExportSession 无法创建文件错误-12115

ios - objective-C iOS : Begin populating UITableView immediately from JSON Stream

c++ - 如何计算 C++ 映射中给定 VALUE(!) 的数量?

ios - 根据条件设置rootViewController

ios - 在后台启动 AVAssetExportSession

libupnp 下的 ios 多线程套接字卡在 send() 上

iphone - 有人能给我一些 AVFoundation 示例源代码吗?

ios - 什么是前置摄像头的deviceUniqueID?