短视频按压拍摄自定义方案(GinCamera/GinVideoCaptureViewController)
DEMO地址
GinCamera
这里只做方案思路的讲解,具体实现,请参考DEMO
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/9e66987ff03732474defda42872bae87.jpeg)
实现的功能有点类似于微信的短视频拍摄功能
1.按下拍摄按键,开始拍摄。
2.松开拍摄按键,保存内容。
3.每一段拍摄结束可以选择放弃,或者结束拍摄。
4.提供闪光灯功能,摄像头切换功能。
逻辑部分
可以看出,主要逻辑部分都集中于拍摄过程,下面细分一下上述拍摄过程中可能出现的各种情况
按下拍摄按键
视频开始拍摄,有两种情况
- 拍摄正常,可以继续拍摄,
- 拍摄时间超过视频要求的最大时长,这时候就需要对视频做出停止操作,并且保存拍摄超长前的所有内容。拍摄时间超过视频要求的最大时长,这时候就需要对视频做出停止操作,并且保存拍摄超长前的所有内容。
松开拍摄按钮
视频拍摄结束,也有两种情况
- 拍摄时间过短,放弃这段内容,返回准备拍摄状态
- 拍摄时间符合要求,记录片段视频时长,显示视频删除与完成拍摄的两个入口,供用户选择拍摄时间符合要求,记录片段视频时长,显示视频删除与完成拍摄的两个入口,供用户选择
用户选择删除当前片段
这个方案中,短视频是由多个片段视频合成的,有一个游标来控制片段之间的顺序,当用户删除片段,则需要将游标前移一位(游标前方无元素时,则不前移),并删除片段。
用户选择完成视频拍摄
将多个片段的短视频进行合成,这里用了AVMutableComposition,将片段之间的音轨和视频进行合成,生成一个完整短视频。用AVAssetImageGenerator,抽取视频第一帧,作为视频预览图。