我的设置非常简单。我有一个带有视频和音轨的作文。视频以左或右横向方向捕获。使用AVCaptureVideoDataOutput对象捕获视频帧缓冲区,并使用AVAssetWriter / AVAssetWriterInput对象写入。然后,这些视频将显示在AVPlayerLayer中。
我根据设备方向设置编写器输入的变换。
if UIDevice.currentDevice.orientation == UIDeviceOrientation.LandscapeRight {
videoWriterVideoInput.transform = CGAffineTransformMakeRotation(CGFloat(M_PI))
}
接下来,此视频显示在AVPlayerLayer中:
使用AVAssetExportSession导出AVMutableComposition也会导致视频翻转180度。
我无法在合成的视频轨道上设置preferredTransform,因为视频将以横向左或右方向录制。
答案 0 :(得分:2)
我相信您需要设置连接的方向,以便您对EXIF数据有正确的方向。如果是责备EXIF(元数据),那就可以解释为什么它在QuickTime中正确显示而在iOS中没有显示。
这样的事情:
self.captureConnection.setVideoOrientation(UIDevice.currentDevice.orientation)
答案 1 :(得分:1)
您缺少一些细节,但我会引导您完成一个对我有用的基本过程:
在我开始视频捕获之前,我调用了一个委托方法来设置AVAssetWriter
和其他一些东西。在这个方法中我:
AVCaptureConnection *videoConnection = [_myCaptureVideoDataOutput connectionWithMediaType:AVMediaTypeVideo];
// you can use the devices orientation or force one here with a switch statement or something
[videoConnection setVideoOrientation:UIDevice.currentDevice.orientation];
此代码(显然包含所有设置)并简单地调用_assetWriterVideoInput.transform = CGAffineTransformIdentity;
代替我完全正常。有很多地方可能会出错,如果没有更多信息很难说,但希望这会有所帮助。我担心你在自动使用输出样本缓冲区的AVVideoConnection
集时会应用额外的变换。