gl_readPixels を使用して openGL レイヤー (irrlicht エンジン) をキャプチャし、ビデオ .mp4 ファイルを出力するビデオ レンダラーを使用しています。これは 2 つの段階で行われます。最初の段階ではビデオをキャプチャして保存し (AVAssetWriter)、2 番目の段階では保存したビデオを取得してオーディオ トラックと結合します (AVMutableCompositionTrack および AVAssetExportSession)。
ただし、このビデオを再生すると (非クイックタイム)、反転しようとしても逆さまに表示されます。
私は第2段階で使用してみました:
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);
また、Appleデバイスではビデオを正しく反転しますが、PC、YouTube、Facebookでは反転しません。PC で回転を定義するために不足している設定またはフラグはありますか?
編集:デバイス(シミュレーターまたはiPad)を右回転モードでも使用しています(元々は左を使用していました)。ビデオを録画するとき、ホームボタンは右側にあります。ただし、どちらの回転を使用したビデオ出力でも、ビデオの回転には影響しません。
編集 2: 上記の両方の変更と同じ影響を与えるビューを反転しようとしました。
captureView.transform = CGAffineTransformMakeRotation(180.0f * M_PI / 180.0f)