應該有很多小夥伴試過這種情況:使用自定義的照相機拍攝視頻,將獲取到的視頻上傳到服務器後,發現視頻的方向和實際拍攝的方向不一樣,其實解決方法很簡單,即使這樣也花費了我較多的時間,因爲一開始我就一直想通過視頻轉碼來改變視頻的的方向(網上有很多資料, 就是通過設置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;
}