iOS 拍攝視頻方向不正確問題

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章