ios之视频图层的旋转

最近项目中的视频播放模块有些视频是横着的,要求客户端将其视频处理下,竖着展示,于是乎,用了以下方法
尝试用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.

只是核心代码,业务逻辑就不写了。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容