美文网首页收藏ios
ios之视频图层的旋转

ios之视频图层的旋转

作者: ios111111 | 来源:发表于2018-03-14 15:13 被阅读71次

    最近项目中的视频播放模块有些视频是横着的,要求客户端将其视频处理下,竖着展示,于是乎,用了以下方法
    尝试用mpmovieplayercontroller是可以正确识别的.随即动手来尝试自己来做旋转.
    我们可以通过avasset来获得这个转置矩阵.估计因为视频是自己用avassetWriter自己写的转置矩阵,所以[avasset preferredTransform]取不到正确的转置矩阵.只能从视频轨道里获取代码如下:

            CGAffineTransform txf = [videoTrack preferredTransform];```
    不知道为什么直接把CGAffineTransform设置给AVPlayerLayer.transfrom是无效的. 
    离散数学学的不不好所以也没管这个矩阵具体是什么.不过简单看下CGAffineTransform有6个值分别是a,b,c,d,tx,ty; 
    没具体的去看文档.不过大概猜测了一下就是a,b,c,d 分别代表上,左,下,右,4个方向分别用正负1来表示是否颠倒, 
    所以我们可以根据这个来转置我们AVPlayerLayer
    ```if (txf.b == -1 && txf.c == 1) {
               videoLayer.transform = CATransform3DMakeAffineTransform(CGAffineTransformMakeRotation(-M_PI_2));
               videoLayer.frame = CGRectMake(0.0f, 0.0f, cover.frame.size.width, cover.frame.size.height);;
           }else if (txf.b == 1 && txf.c == -1){                
                videoLayer.transform = CATransform3DMakeAffineTransform(CGAffineTransformMakeRotation(M_PI_2));
                videoLayer.frame = CGRectMake(0.0f, 0.0f, cover.frame.size.width, cover.frame.size.height);
          }else if (txf.a == -1 && txf.d == -1) {
               playerBackgroundView.transform = CGAffineTransformMakeRotation(M_PI);
           }```
    注意旋转完layer需要重置layer的size.
    
    只是核心代码,业务逻辑就不写了。

    相关文章

      网友评论

        本文标题:ios之视频图层的旋转

        本文链接:https://www.haomeiwen.com/subject/uppfqftx.html