iOS 拍摄视频方向不正确问题
2017-10-25 11:32
585 查看
应该有很多小伙伴试过这种情况:使用自定义的照相机拍摄视频,将获取到的视频上传到服务器后,发现视频的方向和实际拍摄的方向不一样,其实解决方法很简单,即使这样也花费了我较多的时间,因为一开始我就一直想通过视频转码来改变视频的的方向(网上有很多资料, 就是通过设置AVAssetExportSession的属性videoComposition来旋转视频,这里就不展开讲了), 但都发现改变不了视频的方向(不知是不是和我项目只支持竖屏有关),所以只好放弃了,所以就重新整理思路,然后想苹果应该解决了这个问题吧,所以就从API入手,果然发现AVCaptureConnection有两个属性isVideoOrientationSupported和videoOrientation(只怪自己没仔细看文档),这两个属性是配合用的,使用方法就是:在点击拍摄按钮拍摄的这一刻,根据当前设备的方向来设置录像的方向,具体代码如下:
AVCaptureConnection *captureConnection = [_captureMovieFileOutput connectionWithMediaType:AVMediaTypeVideo];
if ([captureConnection isVideoOrientationSupported]) {
captureConnection.videoOrientation = [self getCaptureVideoOrientation];
}其中_captureMovieFileOutput是AVCaptureMovieFileOutput的一个实例。方法getCaptureVideoOrientation的实现如下:
- (AVCaptureVideoOrientation)getCaptureVideoOrientation {
AVCaptureVideoOrientation result;
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
switch (deviceOrientation) {
case UIDeviceOrientationPortrait:
case UIDeviceOrientationFaceUp:
case UIDeviceOrientationFaceDown:
result = AVCaptureVideoOrientationPortrait;
break;
case UIDeviceOrientationPortraitUpsideDown:
//如果这里设置成AVCaptureVideoOrientationPortraitUpsideDown,则视频方向和拍摄时的方向是相反的。
result = AVCaptureVideoOrientationPortrait;
break;
case UIDeviceOrientationLandscapeLeft:
result = AVCaptureVideoOrientationLandscapeRight;
break;
case UIDeviceOrientationLandscapeRight:
result = AVCaptureVideoOrientationLandscapeLeft;
break;
default:
result = AVCaptureVideoOrientationPortrait;
break;
}
return result;
}
AVCaptureConnection *captureConnection = [_captureMovieFileOutput connectionWithMediaType:AVMediaTypeVideo];
if ([captureConnection isVideoOrientationSupported]) {
captureConnection.videoOrientation = [self getCaptureVideoOrientation];
}其中_captureMovieFileOutput是AVCaptureMovieFileOutput的一个实例。方法getCaptureVideoOrientation的实现如下:
- (AVCaptureVideoOrientation)getCaptureVideoOrientation {
AVCaptureVideoOrientation result;
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
switch (deviceOrientation) {
case UIDeviceOrientationPortrait:
case UIDeviceOrientationFaceUp:
case UIDeviceOrientationFaceDown:
result = AVCaptureVideoOrientationPortrait;
break;
case UIDeviceOrientationPortraitUpsideDown:
//如果这里设置成AVCaptureVideoOrientationPortraitUpsideDown,则视频方向和拍摄时的方向是相反的。
result = AVCaptureVideoOrientationPortrait;
break;
case UIDeviceOrientationLandscapeLeft:
result = AVCaptureVideoOrientationLandscapeRight;
break;
case UIDeviceOrientationLandscapeRight:
result = AVCaptureVideoOrientationLandscapeLeft;
break;
default:
result = AVCaptureVideoOrientationPortrait;
break;
}
return result;
}
相关文章推荐
- [iOS]关于视频方向的若干问题
- [iOS]关于视频方向的若干问题
- [iOS]关于视频方向的若干问题
- ios开发过程中屏幕方向判断的问题
- iOS中collectionViewCell显示不正确的问题
- ionic ios发布图标启动也不能正确加载问题
- IOS正确解决隐藏nabber后push、pop闪黑问题
- 处理iOS中照片的方向的问题
- 安卓4.0后新控件TextureView解决SurfaceView在修改默认屏幕方向后视频方向无法翻转的问题
- 关于iOS app的设备方向支持的问题
- iOS 百度地图当前位置方向问题解决方案
- iOS 提示文字 类似微信拍摄小视频“手指不要放开”
- 记录一次坑爹的找BUG经历(Android拍摄的视频无法在IOS播放)
- 安卓与IOS移动段浏览器视频与音频的问题与总结
- GPUImage拍摄视频第一帧黑屏问题
- UIDevice的orientation方法,获取ios设备方向不准确问题
- iOS GPUImage研究五:短视频拍摄(滤镜、文件写入)
- videoJS cordova IOS 播放视频双进度条问题
- [iOS]从相册获取以及用相机拍摄视频并缓存到沙盒
- Android IOS WebRTC 音视频开发总结(二一)-- 黑屏问题