我正在使用一个视频渲染器,它使用 gl_readPixels 捕获一个 openGL 层(irrlicht 引擎)并输出一个视频 .mp4 文件。这发生在两个阶段,第一个阶段捕获视频并保存(AVAssetWriter),第二个阶段获取保存的视频并将其与音轨组合(AVMutableCompositionTrack 和 AVAssetExportSession)。
然而,当这个视频被播放(非快速时间)时,它看起来是颠倒的,尽管我试图翻转它。
我尝试在第二阶段使用:
AVMutableCompositionTrack *a_compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
[a_compositionVideoTrack insertTimeRange:video_timeRange ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:nextClipStartTime error:nil];
// Flip
CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, self.frame.size.height);
a_compositionVideoTrack.preferredTransform = flipVertical;
这可以在 iPad 上翻转视频(正确播放),但是当复制到另一台设备时,视频仍然出现颠倒。
我还尝试使用以下方法翻转 AVAssetWriterInput:
videoInput.expectsMediaDataInRealTime = YES;
videoInput.transform = CGAffineTransformMakeScale(1, -1);
这也可以在苹果设备上正确翻转视频,但不能在 pc、youtube、facebook 上正确翻转。是否有我缺少的设置或标志来定义 PC 上的旋转?
编辑:我也在以右旋转模式使用设备(模拟器或 iPad)(我最初使用左)。录制视频时,主页按钮位于右侧。但是,对于我的视频输出,使用任一旋转都不会影响视频旋转。
编辑 2:我现在也尝试翻转与上述两个更改具有相同影响的视图。
captureView.transform = CGAffineTransformMakeRotation(180.0f * M_PI / 180.0f)