拍攝的時候是豎屏,結果添加水印之後導出是橫屏播放了。或者還是豎屏播放但是畫面顛倒等等視頻方向不對,那該怎麼辦呢?先確認視頻角度:
+ (NSUInteger)degressFromVideoFileWithURL:(NSURL *)url {
NSUInteger degress = 0;
AVAsset *asset = [AVAsset assetWithURL:url];
NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeVideo];
if([tracks count] > 0) {
AVAssetTrack *videoTrack = [tracks objectAtIndex:0];
CGAffineTransform t = videoTrack.preferredTransform;
if(t.a == 0 && t.b == 1.0 && t.c == -1.0 && t.d == 0){
// Portrait
degress = 90;
}else if(t.a == 0 && t.b == -1.0 && t.c == 1.0 && t.d == 0){
// PortraitUpsideDown
degress = 270;
}else if(t.a == 1.0 && t.b == 0 && t.c == 0 && t.d == 1.0){
// LandscapeRight
degress = 0;
}else if(t.a == -1.0 && t.b == 0 && t.c == 0 && t.d == -1.0){
// LandscapeLeft
degress = 180;
}
}
return degress;
}
如果只是用來預覽錄製的視頻,只需要更改GPUImageView的方向。
switch (_degress) {
case 90:
[filterView setInputRotation:kGPUImageRotateRight atIndex:0];
break;
case 180:
[filterView setInputRotation:kGPUImageRotate180 atIndex:0];
break;
case 270:
[filterView setInputRotation:kGPUImageRotateLeft atIndex:0];
break;
default:
break;
}
如果需要預覽同時點擊濾鏡切換濾鏡,那麼設置濾鏡的方向即可,不用去改GPUImageView的方向。
-(void)setRotaionForFilter:(GPUImageOutput<GPUImageInput>*)filter{
if(_degress==90){
[filter setInputRotation:kGPUImageRotateRight atIndex:0];
}
else if (_degress==180){
[filter setInputRotation:kGPUImageRotate180 atIndex:0];
}
else if (_degress==270){
[filter setInputRotation:kGPUImageRotateLeft atIndex:0];
}
}
另外,如果使用GPUImageMovieWriter錄製視頻,方向可以這樣設定:
[movieWriter startRecordingInOrientation:CGAffineTransformMakeRotation(_degress/180.0*M_PI)];
其他文章請查看個人博客:http://zhangqq166.cn/