Android 短视频采集之视频断点拍摄、回删功能的实现方法总结

       之前接到公司的一个开发任务,要求模仿秒拍、美拍等App的短视频拍摄功能。由于之前做过短视频拍摄的特效、断点拍摄等功能,所以起初觉在原来方法修改一下就能满足需求了。但是仔细考察完需求,才发现有一个问题。

下图我之前做断点拍摄的一个方案:

视频拍摄的断点功能,只要在暂停拍摄的时候记下暂停时候的时间戳,然后在继续拍摄的时候在送到复用器 Muxer 的时间戳里面减去暂停的时长,即可得到一个断点拍摄的视频。

但是,回删功能怎么做呢?我原来想的是 用MediaMuxer 向前移动视频文件的指针到上一个断点的视频帧处,但是,很抱歉,MediaMuxer 没有提供这个指针回滚方法。

所以,我转而采用了以下第二种方法。


Video Recoder 部分 即可以用 Android 系统 的 MediaRecoder 实现,也可以用 Camera API + AudioRecord + MeidaCodec 的方案实现。关键是后面的部分,如何把断点拍摄的几个视频首尾拼接成一个完整的视频呢,可以用ffmpeg concat 命令,形如 "ffmpeg -f concat -i filelist.txt -c copy output.mp4" 这样,这中命令不会将音视频解码然后再编码,而是将多个文件里面的视频和音频数据分别抽离出来,首尾相接后,写入到一个新的视频中去。这个新的视频,就是最终需要的拼接好了的视频。当然,也可以用用安卓原生的MediaExtractor 和 MediaMuxer来实现拼接的功能。经过我的测试,采用MediaExtractor 和 MediaMuxer实现的拼接方案,其速度比ffmpeg方案要快一倍以上。

      有需求的同学可以关注这个开源工程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章