我正在使用播放电影文件的GPUImageMovie,此文件已录制在iOS设备上。
然而,当GPUImageMovie播放时,它的方向错误,因此视频不会旋转以便正确显示。
如何让它尊重它的方向?我试过没有运气修改OpenGL代码。
答案 0 :(得分:8)
使用GPUImageMovie播放在iOS设备中录制的视频时遇到同样的问题。我使用以下函数解决了它:
通过传递过滤器来调用此setRotationForFilter:
方法。 orientationForTrack:
将返回您当前的视频方向。
- (void)setRotationForFilter:(GPUImageOutput<GPUImageInput> *)filterRef {
UIInterfaceOrientation orientation = [self orientationForTrack:self.playerItem.asset];
if (orientation == UIInterfaceOrientationPortrait) {
[filterRef setInputRotation:kGPUImageRotateRight atIndex:0];
} else if (orientation == UIInterfaceOrientationLandscapeRight) {
[filterRef setInputRotation:kGPUImageRotate180 atIndex:0];
} else if (orientation == UIInterfaceOrientationPortraitUpsideDown) {
[filterRef setInputRotation:kGPUImageRotateLeft atIndex:0];
}
}
- (UIInterfaceOrientation)orientationForTrack:(AVAsset *)asset
{
AVAssetTrack *videoTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
CGSize size = [videoTrack naturalSize];
CGAffineTransform txf = [videoTrack preferredTransform];
if (size.width == txf.tx && size.height == txf.ty)
return UIInterfaceOrientationLandscapeRight;
else if (txf.tx == 0 && txf.ty == 0)
return UIInterfaceOrientationLandscapeLeft;
else if (txf.tx == 0 && txf.ty == size.width)
return UIInterfaceOrientationPortraitUpsideDown;
else
return UIInterfaceOrientationPortrait;
}
希望这能解决您的问题。
答案 1 :(得分:0)
添加到@Ameet Dhas: 设置旋转的一个地方是调用下一个过滤器之前的位置。
[currentTarget setInputRotation:outPutRotation atIndex:targetTextureIndex];
[currentTarget newFrameReadyAtTime:currentSampleTime atIndex:targetTextureIndex];