ios - 剪辑视频时如何检测视频方向?

标签 ios objective-c video avassetexportsession

当我以横向模式录制视频时,我第二次遇到错误的视频方向。对于第一次录制,我在 didFinishMediaWithInfo 中获得正确的视频方向

现在。我正在使用以下代码来检测视频方向。

 AVAsset *firstAsset = [AVAsset assetWithURL:videoUrl];
    AVAssetTrack *FirstAssetTrack = [[firstAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];

        UIImageOrientation FirstAssetOrientation_  = UIImageOrientationUp;

        BOOL  isFirstAssetPortrait_  = NO;

        CGAffineTransform firstTransform = [FirstAssetTrack preferredTransform];

        if(firstTransform.a == 0 && firstTransform.b == 1.0 && firstTransform.c == -1.0 && firstTransform.d == 0)
        {
            FirstAssetOrientation_= UIImageOrientationRight; isFirstAssetPortrait_ = YES;
        }
        if(firstTransform.a == 0 && firstTransform.b == -1.0 && firstTransform.c == 1.0 && firstTransform.d == 0)
        {
            FirstAssetOrientation_ =  UIImageOrientationLeft; isFirstAssetPortrait_ = YES;
        }
        if(firstTransform.a == 1.0 && firstTransform.b == 0 && firstTransform.c == 0 && firstTransform.d == 1.0)
        {
            FirstAssetOrientation_ =  UIImageOrientationUp;
        }
        if(firstTransform.a == -1.0 && firstTransform.b == 0 && firstTransform.c == 0 && firstTransform.d == -1.0)
        {
            FirstAssetOrientation_ = UIImageOrientationDown;
        }

 if(isFirstAssetPortrait_)
    {
        NSLog(@"Portrait mode");
     }
else{
        NSLog(@"Landscape mode");

}

上面的代码给出了正确的方向,如果首先记录肖像模式。然后记录横向模式。如果用户再次以横向模式录制视频。那么它给出了错误的视频方向并使纵向 BOOL 是。

如果视频以横向模式录制并使用 AVAssetExportSession 进行修剪。然后修剪后的视频在 MPMoviePlayer 中以错误的方向播放。如何解决这个问题?

请指导我。

最佳答案

AVURLAsset* movieAsset = [AVURLAsset URLAssetWithURL: movieFileURL options: nil];
NSArray *tracks = [movieAsset tracksWithMediaType:AVMediaTypeVideo];

CGSize videoSize = CGSizeZero;
if ([tracks count] != 0)
{
    AVAssetTrack *videoTrack = [tracks objectAtIndex:0];
    videoSize = videoTrack.naturalSize;

    CGRect videoRect = CGRectMake(0.0, 0.0, videoSize.width, videoSize.height);
    videoRect = CGRectApplyAffineTransform(videoRect, videoTrack.preferredTransform);

    if (videoRect.size.height > videoRect.size.width)
    {
        NSLog(@"Portrait mode");
    }
    else if (videoRect.size.height < videoRect.size.width)
    {
        NSLog(@"Landscape mode");
    }
    else
    {
        NSLog(@"Square mode");
    }
}

关于ios - 剪辑视频时如何检测视频方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24632630/

相关文章:

jquery - 将背景视频切换为背景颜色

ios - xcassets 通用 x1、x2、x3 的像素大小是多少?

ios - 将 phoneGap 与 native iOS 应用集成

url - 我们可以使用 Opencv 通过互联网获取实时视频流吗?怎么做?

jquery - 悬停时自动暂停或播放 HTML5 视频

iphone - 为什么 UIImagePickerControllerSourceTypePhotoLibrary 不让用户选择相册?

ios - 添加将包含输入的 UIView

ios - 将参数传递给容器 View 的 View Controller

ios - 获取 NSString 在字符串中的位置 - iOS

c++ - 从 C++ 方法调用 Objective-C 方法