GPVideoClipper裁剪原理

前言

对于社交类APP,只要允许用户上传视频,为了避免占用服务器资源以及减少用户上传时间,肯定少不了长视频裁剪的功能。

效果预览

image

分析

页面结构

  • 基于AVPlayer封装的播放器
  • collectionView进行缩略图展示
  • 选择框进行拖拽裁剪
  • 底部两个操作按钮

功能实现

  • 从相册中选取视频后,获得视频的URL
  • 通过URL获取视频的总长
  • 指定选中框的初始开始时间、结束时间
  • 使用AVAssetImageGenerator获取缩略图
  • 为左、右两个边框添加panGesture
  • panGesture响应的方法中,判断gesture.state
  • UIGestureRecognizerStateBegan中找到当前拖动的视图
  • UIGestureRecognizerStateChanged中处理裁剪时间
  • UIGestureRecognizerStateEnded中处理结束拖动后播放器进度
  • scrollViewDidScroll也要处理选中的时间范围
  • 范围选择完成后,使用AVAssetExportSession对视频进行裁剪
  • 最后一步,将视频写入相册保存

难点

  • 拖动进度和时间上的转换,具体可以参考GPVideoClipper源码。

最后

  • 如果您使用的还不错,不要吝啬给个start.