关于使用GPUImageMovie视频方向的问题

  • 最近播放手机本地拍摄的视频出现了一个很奇怪的问题,我明明是拿着手机竖拍的,结果播放的时候视频却旋转了90度,这让我想不明白。于是网上找寻了资料,看到一篇文章说到了这个视频方向。在相册里播放的时候看到的视频方向与视频本身真正的方向很有可能是不一样的。我们平时拿着手机横拍的视频,在相册里播放的时候它会自动帮你调整方向,让你有一个正常视觉。根据那篇文章,再根据我使用的播放器(GPUImageMovie),我查询得到视频角度后对视图(GPUImageView)进行旋转,从而解决了视频方向的问题。但这里只是解决了一个表面问题,假如你的视频需要上传,那么你肯定要对这个视频本身去做旋转了。
AVAsset *ass  = [AVAsset assetWithURL:path];
    self.inputAsset = ass;
    NSArray *tracks = [ass 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;
        }
    }
 //创建摄像头视图
    GPUImageView *filterView = [[GPUImageView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)];
    
    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;
    }
     ```
    - 其实视频方向只有4个角度:0,90,180,270.我拿手机测试了,再根据这些角度去旋转。
    - 关于调整视频本身角度问题,我还没有完全解决,我从相册里拿到视频后假如有方向不对的,我可以调整角度再次保存到相册,这个是没有问题的,但是奇怪的是假如我在我的程序中拍摄视频,然后调整方向保存到本地时没有视频画面,但是音轨在,播放的时候能听到声音,画面是一片黑的。

转载于:https://my.oschina.net/NycoWang/blog/904105

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值