最近做了一个视频的需求,使用的是AVFoundation。
页面切换的无缝连接
主要需要解决的技术点在于,如何在视频的全屏化过程中无缝链接,不会出现视频断裂或者停顿的问题。
view的伪装切换
使用view来伪装页面的切换,视频的全屏仅仅是view的transform。
这样做的优点是比较灵活,不需要依赖与苹果的框架,转场动画等都比较好控制。
缺点也比较明显,因为在同一个controller中,代码偶尔度会增加,这个controller的功能也会更加复杂,而且transform并不能控制系统的屏幕方向,所以一些系统的提示不是正确的方向,比如音量,push等。
present方式
使用present方式,展示一个新的controller,这样业务也会分离的比较清楚,唯一需要考虑的是如何让两个页面间的视频播放更加平滑。
一开始的考虑是,是否可以把AVPlayer传递给下一级,视图层由各个负责,因为视频的播放位置和缓存信息都以及保存在了AVPlayer。实际发现,把同一个AVPlayer给不同CAPlayerLayer的时候,视频播放停止了,所以传递的时候要把这两者一起传过去。
另外,需要考虑的是转场动画,这里就不详细描述了。
这里查看了其他一些视频app
- bilibili 在视频切换的时候有明显卡顿
- 斗鱼、爱奇艺 在视频切换时,转场动画或多或少有些小问题
- 乐视 没有转场动画
- 腾讯视频、优酷 表现最好